Linux Journal - August 2017
Linux Journal - August 2017
Disaster-Planning Tips
for Server Owners
AUGUST 2017 | ISSUE 280
Since 1994: The Original Magazine of the Linux Community http://www.linuxjournal.com
Filesystem Events
with inotify
+
EMACS FOR
SCIENCE
PREPARE FOR
VACATION
LIKE A
SYSADMIN
EOF: THE
ACTUALLY
DISTRIBUTED
Create an WEB
Internet WATCH:
Radio Station ISSUE
OVERVIEW
GEEK GUIDES
http://geekguide.linuxjournal.com
DevOps for An
the Rest of Us Architect’s
Author:
Guide:
John S. Tonello Linux for
Sponsor: Enterprise IT
Puppet
Author:
Sol Lederman
Sponsor:
SUSE
COLUMNS
34 Reuven M. Lerner’s
At the Forge
Avoiding Disaster
42 Dave Taylor’s
Work the Shell
Let’s Play Bunco!
50 Kyle Rankin’s
Hack and /
Preparing for Vacation 22
56 Shawn Powers’
The Open-Source
Classroom
Ansible: the Automation
Framework That Thinks Like
a Sysadmin
IN EVERY ISSUE
8 Current_Issue.tar.gz ON THE COVER
Contributing Editors
)BRAHIM (ADDAD s 2OBERT ,OVE s :ACK "ROWN s $AVE 0HILLIPS s -ARCO &IORETTI s ,UDOVIC -ARCOTTE
0AUL "ARRY s 0AUL -C+ENNEY s $AVE 4AYLOR s $IRK %LMENDORF s *USTIN 2YAN s !DAM -ONSEN
Advertising
%
-!),: [email protected]
52,: www.linuxjournal.com/advertising
0(/.%
EXT
Subscriptions
%
-!),: [email protected]
52,: www.linuxjournal.com/subscribe
-!), 0/ "OX (OUSTON 48 53!
keep up
SUSE Enterprise Storage, the leading
open source storage solution, is highly
scalable and resilient, enabling high-end
with data
functionality at a fraction of
the cost.
explosion.
suse.com/storage
Data
The Wacky
World of Linux SHAWN
O
NE OF THE NIFTY THINGS ABOUT BEING A POWERS
,INUX USER IS HOW BIZARRE LIFE CAN GET /NE
Shawn Powers is the
MOMENT YOU CAN BE WRITING CUTTING
EDGE
Associate Editor for
code, and the next you can get stuck in a nostalgia Linux Journal. He’s
RABBIT HOLE INSTALLING !FTERSTEP BECAUSE YOU USED also the Gadget Guy
for LinuxJournal.com,
.E843TEP MACHINES IN COLLEGE GUILTY 4HIS MONTH
and he has an
MY LIFE GOT A LITTLE CRAZY BECAUSE ) HAD TO INSTALL interesting collection
-ICROSOFT /FFICE FOR MY DAUGHTER 4HE COMPUTER ) of vintage Garfield
coffee mugs. Don’t
had to install it on? Linux. Yet, in this wacky world
let his silly hairdo
WE LIVE IN IT ENDED UP WORKING PERFECTLYSORT OF fool you, he’s a
4HERE SEEMS TO BE SOMETHING NEW EVERY DAY IN THE pretty ordinary guy
and can be reached
,INUX WORLD AND THIS MONTH THERE ARE LOTS OF NEW
via email at
things to talk about. [email protected].
2EUVEN - ,ERNER STARTS OFF THIS ISSUE WITH SOME Or, swing by the
#linuxjournal IRC
TIPS ON DISASTER PLANNINGNOT hEVIL GENIUSv SORT OF
channel on
PLANNING BUT RATHER PLANNING FOR WHAT TO DO WHEN Freenode.net.
disaster inevitably happens. Yes, the obvious answer
IS hHAVE A BACKUPv BUT ITS A BIT MORE COMPLICATED
than that, and Reuven provides sound advice.
V
WHILE YOU KNOW THAT HES BEEN IN THE AWKWARD SITUATION OF FIXING
REMOTE SERVERS FROM ATOP A SKI LIFT BEFORE SO HIS PREPARATORY SKILLS ARE
worth reading.
) START A NEW SERIES THIS ISSUE ON !NSIBLE )M A BIG FAN OF $EV/PS
TOOLS BUT SO MANY OF THEM HAVE SUCH A STEEP LEARNING CURVE IT MAKES
THEM DIFFICULT TO INTEGRATE INTO YOUR SYSTEM !NSIBLE IS ONE OF MY
FAVORITE CONFIGURATION MANAGEMENT PLATFORMS BECAUSE IT USES STANDARD
33( FOR CONNECTING TO CLIENT COMPUTERS 4HIS MAKES IT EASY TO START
SMALL AND ADD MORE CLIENTS AS YOU LEARN TO TAKE ADVANTAGE OF HOW
POWERFUL IT CAN BE
3TREAMING MUSIC IS THE METHOD MOST PEOPLE USE FOR LISTENING
NOWADAYS WHETHER ITS FROM 0ANDORA 3POTIFY OR ANY OF DOZENS OF OTHER
services. Bill Dengler shows how to create your own streaming radio
STATION USING OPEN
SOURCE TOOLS )F YOUVE EVER WANTED TO STREAM A LIVE
EVENT WITHOUT GOING THROUGH THE HASSLE OF VIDEO ITS AN ARTICLE YOU
WONT WANT TO MISS
#HARLES &ISHER FINISHES OFF THE ISSUE WITH INSTRUCTIONS ON USING INOTIFY
TO FIRE OFF EVENTS ON A ,INUX SYSTEM )M GUILTY OF RESORTING TO TIMED
CRON JOBS FOR MOST THINGS RELATING TO FILESYSTEM CHANGES BUT WITH
INOTIFY ITS POSSIBLE TO HAVE A FILESYSTEM CHANGE LAUNCH A PROCESS )TS
A PROACTIVE WAY OF ACCOMPLISHING A TASK AND FAR FAR MORE EFFICIENT
#HARLES WALKS THROUGH THE PROCESS AND HELPS YOU AVOID SOME PITFALLS
along the way.
!S WITH EVERY ISSUE OF Linux Journal THIS ONE IS FULL OF TECH TIPS
PRODUCT ANNOUNCEMENTS USEFUL APPLICATIONS AND REVIEWS 7HETHER
YOU NEED TO INSTALL -ICROSOFT /FFICE ON YOUR ,INUX LAPTOP OR WANT
TO PREP YOUR DATA CENTER FOR YOUR TRIP TO (AWAII THIS ISSUE HAS YOU
COVERED 4HE WORLD OF ,INUX CAN BE A CRAZY ONE AND WERE HAPPY TO
BE A PART OF THE CRAZY Q
RETURN TO CONTENTS
PREVIOUS NEXT
V
V
Current_Issue.tar.gz UpFront
Another Way
2EGARDING $AVE 4AYLORS h7ATERMARKING )MAGESFROM THE #OMMAND
,INEv IN THE !PRIL ISSUE AS USUAL THERE IS MORE THAN ONE WAY TO
IMPLEMENT A SOLUTION )NSTEAD OF THIS
predot=${name%.*}
postdot=${name##*.}
newname=${predot}-wm.$postdot
/R AS A ONE LINER
newname==${name%.*}-wm.${name##*.}
4HESE PATTERN
MATCHING OPERATORS ARE AVAILABLE IN "ASH AND ALL SHELLS THAT
ARE 0/3)8
COMPLIANT
—G. Allard
Dave Taylor replies: Thanks for sharing the fancy way to do those data field
chops in Bash. The reason I don’t use those sorts of notations is simply because
I believe it makes the script considerably harder to understand and edit if you
ever go back to it weeks, months or years later. I actually have two goals I’m
Beetle
2EGARDING THE REQUEST FROM A READER IN THE -AY ISSUES ,ETTERS SECTION
TO SEE A PHOTO OF 3HAWNS TRUCK )D RATHER SEE A PICTURE OF HIS 67 -Y
DAUGHTER AND ) ARE JUST ABOUT FINISHED WITH A 4YPE 7E HAD TO
REBUILD THE ENGINE BRAKES #6 JOINTS AND ON AND ON
I have enjoyed the magazine a lot over the years. Keep it up.
—Steve Witt
the perfect shape for driving. The paint isn’t perfect, and the top isn’t
perfect, but they’re presentable. Mechanically, it’s solid, without any rust.
It’s not a show car, but because it’s a bug, it turns heads!
2) This was my first bug, a couple years ago. It’s a yellow 1975 Basic
Beetle, model 110. It’s a very unique model, because it was made only
in 1975, and it is the “worst” outfitted Beetle ever made! In 1975,
inflation was rising like crazy, but VW wanted to offer a Beetle for less
than $3,000, so the company stripped down the Standard Beetle as much
as it could and sent one to every dealership with a price of $2,999.
The car came with all black trim, no ventilation blower, no radio, a
partial inside header cover, stripped down handles on the door, no sound-
proofing in the engine compartment, and every other shortcut the VW
folks could think of. Mine has a few modifications from its original model
stripped-down car is an odd bragging point! in a variety of digital formats, including PDF,
.epub, .mobi and an online digital edition,
as well as apps for iOS and Android devices.
Renewing your subscription, changing your
Here are some details about the model 110: email address for issue delivery, paying your
invoice, viewing your account details or other
HTTPSWWWTHESAMBACOMVWFORUMVIEWTOPICPHPT subscription inquiries can be done instantly
online: http://www.linuxjournal.com/subs.
HIGHLIGHTBASICMODEL. Email us at [email protected] or reach
us via postal mail at Linux Journal, PO Box
980985, Houston, TX 77098 USA. Please
Anyway, good luck with your daughter’s car. It remember to include your complete name
and address when contacting us.
sounds like a wonderful project! I just wish I had a
ACCESSING THE DIGITAL ARCHIVE:
garage, because working in the driveway is no fun! Your monthly download notifications
will have links to the various formats
and to the digital archive. To access the
digital archive at any time, log in at
7ÀÌiÊLJÊ>ÊiÌÌiÀÊ http://www.linuxjournal.com/digital.
We love hearing from our readers. Please send us your comments LETTERS TO THE EDITOR: We welcome your
letters and encourage you to submit them
and feedback via http://www.linuxjournal.com/contact. at http://www.linuxjournal.com/contact or
mail them to Linux Journal, PO Box 980985,
Houston, TX 77098 USA. Letters may be
edited for space and clarity.
PREVIOUS NEXT
V
V
diff -u
7
>̽ÃÊ iÜÊÊÊ
iÀiÊiÛi«iÌ
Arnd Bergmann has recommended that the minimum supported
GCC VERSION BE RAISED TO AND THE RECOMMENDED VERSION TO
(OWEVER HE PLANS TO DOCUMENT THE FACT THAT FOLKS LIKE Geert
Uytterhoeven AND OTHERS WERE STILL USING '## TO COMPILE RECENT
Linux kernels with success.
!CCORDING TO !RNDS ANALYSIS TESTING OLDER AND OLDER '## VERSIONS
initially would produce more and more unnecessary warnings, making
IT MORE AND MORE DIFFICULT TO SPOT LEGITIMATE BUGS !ND BEYOND A
CERTAIN '## VERSION LINKER ERRORS AND BUILD FAILURES WOULD BEGIN TO
APPEAR FOR CERTAIN ARCHITECTURES NOTABLY ARM.
(E POSTED A SERIES OF KERNEL PATCHES THAT GREW INCREASINGLY UGLY
as they had to accommodate older and older GCC versions. Some
OF THESE HE ACKNOWLEDGED PROBABLY WOULD BE TOO UGLY TO MAKE IT
into the kernel.
0ROTECTING THE KERNELS ABILITY TO COMPILE WITH ANCIENT '##
VERSIONS IS VALUABLE WORK ! LOT OF ENTERPRISE SYSTEMS CANT REALLY BE
upgraded without risking massive breakage, and so they just sit there
UNCHANGED FOR YEARS CHUGGING ALONG BRINGING IN REVENUE "UT THE
business has no choice but to upgrade its kernel in order to keep the
system secure. As long as the company can still use all its old tools to
do that, it won’t have to worry about the large expenditures needed
to retool the entire system and possibly discover that it can’t be done
within the available budget.
The oldest supported version of GNU Make is being raised from
3.80 to 3.81. Masahiro Yamada inadvertently broke Linux support
for Make 3.80 in 2014 with a cleanup patch that made it into the
kernel without anyone noticing the compatibility issue.
In fact, in the intervening three years, no one else has noticed the
issue either. Instead, Masahiro himself discovered what had happened
and recently suggested updating the documentation to list Make
version 3.81 as the official minimum version.
There were no objections of any kind. Being broken for three years
with no one noticing is a fairly good argument in favor of dropping
support for a given version of a tool. Even Linus Torvalds, in his
comment to the thread, seemed to indicate that this time period was
LINUX JOURNAL
on your
e-Reader
Customized
Kindle and Nook
editions
available e-Reader
editions
FREE for
Subscribers
LEARN MORE
15 | August 2017 | http://www.linuxjournal.com
WOMENbINbLINUX
SUMMIT
2017
Litebook
Linux Journal reader Kevin Bruce dropped me an email about a
TOO
GOOD
TO
BE
TRUE LAPTOP FROM THE FOLKS AT !LPHA 3TORE
https://alpha.store 4HE LAPTOP IS A QUAD CORE P LAPTOP
WITH A '" HARD DRIVE FOR -Y OLD $ELL $ HAS FINALLY
GIVEN UP SO ) WAS IN THE MARKET FOR A FAIRLY INEXPENSIVE LAPTOP
) DECIDED TO ORDER ONE ) OPTED FOR THE MODEL WITH A HYBRID
drive, but everything else is the same as the base model. Rather
THAN A FULL REVIEW HERE ARE MY QUICK TAKEAWAYS
Q 4HE SCREEN IS AMAZING 2EALLY )TS BRIGHT VIBRANT AND HAS INCREDIBLE
COLORS 4HE SCREEN MAKES MY $ LOOK LIKE GARBAGE AND UPON FIRST
boot, I was giddy to see how amazing it looked.
Q 4HE KEYBOARD IS A LITTLE SPRINGY BUT TOLERABLE 4HE PLASTIC KEYS FEEL
A LITTLE CHEAP BUT THE ACTION IS FINE )T REMINDS ME OF TYPING ON A
-ACBOOK 0RO BUT WITH LOOSER CHEAPER PLASTIC FOR THE ACTUAL KEYS
4HERE ARE ALSO A FEW STRANGE QUIRKS BUT NONE OF THEM WOULD HAVE
BEEN A SHOWSTOPPER FOR ME 4HE INCLUDED 7 I
&I DRIVER HAS WEIRD
ISSUES WITH SLEEPING SO ) FOUND MYSELF REBOOTING OCCASIONALLY WHEN
THE LAPTOP LOST CONNECTIVITY 4HIS ISNT UNCOMMON WHEN YOURE TRYING
TO RUN ,INUX ON A LAPTOP THAT OBVIOUSLY WAS MADE FOR 7 INDOWS AND
)M FAIRLY CERTAIN FINDING THE RIGHT DRIVER WOULD HELP
4HE HYBRID HARD DRIVE WAS REALLY JUST A '" 33$ DEVICE WITH THE
ENTIRE %LEMENTARY /3 INSTALLED AND A '" DEVICE THAT HAD FOUR
.4&3 PARTITIONS ON IT ) COULD DELETE THE PARTITIONS AND RECLAIM THE
SPACE BUT IT WAS A STRANGE hOUT OF THE BOXv EXPERIENCE
Finally, you can see two things in the photo. One, I have a really
AWESOME CAT 4WO THE hREDv MODEL ) BOUGHT IS CLEARLY PINK .OT
JUST PINK BUT HOT PINK 4HE WHITE LABEL EVEN SAYS ITS PINK BUT THE
!LPHA 3TORE INSISTS ) BOUGHT A RED LAPTOP 4HE FORUMS SHOW OTHER
PEOPLE WITH THE SAME ISSUE SO APPARENTLY TO THE !LPHA FOLKS PINK
and red are the same thing. Honestly, I think the pink looks cooler
than red anyway, but it was odd.
-Y ADVICE TO +EVIN 5NLESS YOU WANT TO USE AN EXTERNAL MOUSE
AVOID THIS COMPUTER 4HE DISPLAY IS ABSOLUTELY GORGEOUS BUT THE
TRACKPAD MAKES IT ALMOST UNUSABLE 4HE WHOLE COMPUTER FEELS CHEAP
BUT THATS NOT SURPRISING FOR SUCH AN INEXPENSIVE MODEL )F YOURE
LOOKING FOR A CHEAP LAPTOP COMPUTER ) THINK THE BEST OPTION IS TO
GET A USED ONE LIKE THE ,ENOVO 9OGA E OR SOMETHING 4HEYRE NICE
MACHINES HAVE BETTER HARDWARE APART FROM MAYBE THE SCREEN AND
YOU CAN GET THEM FOR ABOUT THE SAME PRICE —Shawn Powers
Microsoft Office on
a Linux Machine?!
-Y MIDDLE CHILD IS HEADED TO COLLEGE THIS FALL AND ALTHOUGH THE
COLLEGE DOESNT REQUIRE A SPECIFIC TYPE OF COMPUTER IT DOES REQUIRE
STUDENTS TO HAVE -ICROSOFT /FFICE .OT -ICROSOFT /FFICE
COMPATIBLE
BUT SPECIFICALLY -ICROSOFT /FFICE 4HAT BUMS ME OUT BUT ) FIGURED
/FFICE MIGHT BE JUST THE ANSWER FOR A DAUGHTER WHO DOESNT WANT
TO GET A 7 INDOWS LAPTOP
4HE COOLEST PART ABOUT /FFICE IS THAT COLLEGE STUDENTS CAN GET
IT FREE IF THEY HAVE A COLLEGE EMAIL ACCOUNT 4HE FREE SUBSCRIPTION
DOESNT INCLUDE A DOWNLOADABLE INSTALLABLE VERSION OF /FFICE BUT
FOR ,INUX USERS THAT DOESNT MATTER 4HE ONLINE VERSION IS ALL WED
BE ABLE TO USE ANYWAY SO FOR A COLLEGE STUDENT -ICROSOFT /FFICE
DOESNT ACTUALLY INCLUDE A -ICROSOFT TAX
4HE SURPRISING PART /FFICE WORKS GREAT ON ,INUX .O REALLY
LINUX JOURNAL
on your Android device
www.linuxjournal.com/android
For more information about advertising opportunities within Linux Journal iPhone, iPad and
Android apps, contact John Grogan at +1-713-344-1956 x2 or [email protected].
Android Candy:
Clip-on Lenses
-Y 3ONY 8PERIA PHONE TAKES FAIRLY NICE PHOTOS 9OU CAN SEE IN &IGURE
THAT ITS PRETTY CLEAR WITH NICE COLOR 4HE THING IS ) WANT TO LIVESTREAM
MY DAUGHTERS VOLLEYBALL AND BASKETBALL GAMES THIS YEAR AND MY PHONE
JUST DOESNT HAVE A WIDE ENOUGH ANGLE TO CAPTURE THE ENTIRE COURT 3O
) FIGURED )D TRY SOME OF THE CLIP
ON WIDE ANGLE LENSES FOR PHONES "UT
honestly, the results are a bit disappointing.
4HE FIRST LENS ) TRIED THE LARGER ONE ON THE LEFT OF &IGURE IS THE
:OMEI X LENS http://a.co/3b3AdGC 4HIS LENS FEELS SOLID AND
HEAVY WITH GOOD
LOOKING GLASS AND A METAL LENS CASE 4HE hCLIPPYv PART
ATTACHES WITH PLASTIC THREADS BUT STILL IT FEELS SOLID 5NFORTUNATELY IT
DIDNT PROVIDE VERY MUCH MORE COVERAGE AND THE WIDENESS IT DID GIVE
MADE FOR A PRETTY UGLY IMAGE &IGURE
4HE OTHER LENS ) TRIED WAS A !MIR ° wide angle lens that
Figure 2. Oddly, the cheaper lens felt nicer but performed worse, and the more expensive
lens felt cheaper but performed better.
Figure 4. This has a wider angle and a clearer picture, but both were disappointments.
Jeff Atwood Sara Chipps Kelsey Hightower Yehuda Katz Angie Jones
Stack Overflow Jewelbots Google Cloud Tilde Inc Twitter
More than 3,000 technologists and decision makers are expected from all over the U.S. and the world
www.AllThingsOpen.org
4HIS WILL ENSURE THAT YOU HAVE THE LATEST AND GREATEST VERSION
/NCE THIS IS INSTALLED GO AHEAD AND INSTALL THE SCIMAX CODE ITSELF
9OU CAN GET IT FROM THE MAIN 'IT(UB REPOSITORY WITH THE COMMAND
4HE FIRST TIME YOU DO THIS THERE WILL BE A LOT OF ACTIVITY WHILE %MACS
DOWNLOADS AND INSTALLS THE FULL SUITE OF EXTRA PACKAGES YOU NEED IN ORDER
FOR THE SCIMAX CODE TO HAVE ALL OF THE REQUIRED DEPENDENCIES
7HEN YOU FINALLY HAVE EVERYTHING INSTALLED AND START SCIMAX YOU WILL
Figure 1. You will see several new menu item entries at the top of your Emacs window.
ARENT ,A4E8 IS DOCUMENT LAYOUT PROGRAM WHERE YOU WRITE YOUR TEXT
AND INCLUDE LAYOUT INSTRUCTIONS FOR THE ,A4E8 ENGINE 4HE IDEA IS THAT
YOU SEPARATE OUT THE TEXT FROM THE FORMATTING OF THAT TEXT
)F YOU HAVE GRAPHICAL IMAGES AS PART OF YOUR RESEARCH SCIMAX
HAS ADDED SOME EXTRA FUNCTIONALITY TO MAKE IMAGE RESCALING AND
PRESENTATION BETTER THAN THE ORG
MODE DEFAULTS BY USING EXTERNAL
PROGRAMS FROM THE IMAGEMAGICK PACKAGE
"ECAUSE ORG
MODE IS DESIGNED TO BE A DOCUMENT STRUCTURING
PACKAGE FOR %MACS IT ALLOWS FOR EXPORTING YOUR TEXT INTO A GREAT MANY
OTHER FORMATS !LSO SINCE IT SEPARATES OUT THE FORMATTING FROM THE
ACTUAL TEXT IT CAN BE APPLIED TO MANY DIFFERENT DOCUMENT STRUCTURES
such as articles, books or web pages.
3CIMAX USES THE OX
MANUSCRIPT %MACS PACKAGE TO HANDLE EXPORTING
TO HIGH
QUALITY DOCUMENT FORMATS 4HIS IS USEFUL WHEN YOU NEED TO
PRODUCE FINAL VERSIONS OF YOUR SCIENTIFIC REPORTS OR ARTICLES IN A FORMAT
like PDF.
"IBLIOGRAPHIC REFERENCES WITHIN YOUR DOCUMENT ARE HANDLED THROUGH
bibtex entries.
3O FAR )VE COVERED A QUICK OVERVIEW OF THE DOCUMENT MANAGEMENT
ORGANIZATION AND FORMATTING TOOLS THAT ARE PROVIDED THROUGH SCIMAX
BUT %MACS AND ORG
MODE HAVE MUCH MORE FUNCTIONALITY 9OU CAN
INTERACT WITH THE OUTSIDE WORLD IN A FEW DIFFERENT WAYS 4HE FIRST
IS THROUGH EMAIL 9OU CAN GRAB SELECTIONS OF YOUR TEXT OR AN ENTIRE
BUFFER AND ISSUE AN org-mime COMMAND WITHIN %MACS TO TELL IT TO
SEND AN (4-,
BASED EMAIL $EPENDING ON YOUR SYSTEM YOU MAY NEED
ADDITIONAL CONFIGURATION IN ORDER FOR THIS TO WORK AS EXPECTED
4HE OTHER WAY TO INTERACT WITH THE OUTSIDE WORLD IS THROUGH
'OOGLE SEARCHES !S SOMEONE WHO WRITES A FAIR BIT MYSELF ) CANNOT
UNDERSTATE THE NEED FOR A 'OOGLE WINDOW TO BE OPEN TO BE ABLE
TO VERIFY SOME FACT OR STATEMENT AS ) AM WRITING 7 ITH SCIMAX THE
google-this %MACS PACKAGE GETS INSTALLED AND IS AVAILABLE AS YOU ARE
WORKING 4HIS ALLOWS YOU TO FIRE UP 'OOGLE SEARCHES BASED ON EITHER
SPECIFIC TEXT SELECTIONS OR THE CONTENTS OF ENTIRE BUFFERS IMMEDIATELY
FROM THE DOCUMENT THAT YOU ARE WORKING ON
Along with communicating with the outside world, the other
POWERFUL INTERACTION WITH EXTERNAL TOOLS IS THROUGH ORG
MODES
ability to run external programs and have their output inserted into
SECTIONS OF YOUR DOCUMENT 4HIS ONE PIECE OF FUNCTIONALITY MAKES THE
DREAM OF REPRODUCIBLE RESEARCH A REAL POSSIBILITY 9OU DO NEED TO BE
diligent and put it into practice, but you no longer have the excuse
OF SAYING THAT IT ISNT POSSIBLE 4HE IDEA IS THAT FROM WITHIN YOUR
ORG
MODE DOCUMENT YOU CAN DEFINE A BLOCK OF CODE THAT MAKES SOME
CALCULATION OR GENERATES SOME GRAPH 9OU THEN CAN HAVE ORG
MODE
FIRE THIS BLOCK SO THAT IT CAN BE RUN THROUGH AN EXTERNAL ENGINE AND
have the results pulled back in and inserted as the displayed text in
the original location.
4HE DEFAULT ENGINE CONFIGURED IN SCIMAX IS 0YTHON WHICH IS DEFINITELY
A GOOD STARTING POINT 7ITH MORE CONFIGURATION YOU CAN ADD SUPPORT
FOR SEVERAL OTHER LANGUAGES 4HE POWERFUL IDEA HERE IS THAT YOU
always can go back to the original code that generated some result
OR SOME GRAPH AND RE
CREATE IT -ORE AND MORE SCIENTIFIC JOURNALS ARE
DEMANDING THIS LEVEL OF REPRODUCIBILITY SO HAVING IT AS PART OF YOUR
ARTICLE CONTENTS DIRECTLY MEANS YOU NEVER WILL LOSE TRACK OF IT
4HE LAST THING ) WANT TO COVER IS HOW TO ORGANIZE ALL OF THE WORK
THAT SCIMAX IS HELPING YOU DO 4HE HIGHEST LEVEL OF ORGANIZATION IS
the ability to set up projects. A project is essentially a directory with
ALL OF THE ASSOCIATED FILES FOR THAT GIVEN PROJECT 4HESE PROJECTS ARE
HANDLED BY THE %MACS PROJECTILE PACKAGE 4HIS PACKAGE ALLOWS YOU TO
MOVE BETWEEN PROJECTS FIND FILES WITHIN PROJECTS OR DO FULL SEARCHES
through a given project.
Projectile assumes that these project directories are under some
KIND OF VERSION CONTROL SYSTEM SUCH AS 'IT ,UCKILY SCIMAX INCLUDES
THE MAGIT %MACS PACKAGE WHICH ADDS LOTS OF EXTRA FUNCTIONS THAT
ALLOW YOU TO INTERACT WITH THE 'IT REPOSITORY THAT THE CURRENT FILE
BELONGS TO DIRECTLY FROM %MACS 9OU CAN CREATE OR CLONE REPOSITORIES
STAGE AND COMMIT CHANGES MANAGE DIFFS BETWEEN VERSIONS AND EVEN
HANDLE PUSHES TO AND PULLS FROM REMOTE REPOSITORIES !LONG WITH THE
explicit control over a Git repository, scimax includes extensions to
ORG
MODE TO HANDLE TRACK CHANGES AS WELL AS TO INSERT EDIT MARKS
WITHIN YOUR ORG
MODE DOCUMENT
0UTTING ALL OF THIS ORGANIZATIONAL WORK TOGETHER SCIMAX PROVIDES THE
ABILITY TO CREATE AND USE SCIENTIFIC NOTEBOOKS ! SERIES OF COMMANDS
ϭϬϬ^W<Z^ͳ,hEZ^K&tKDE/E
^/EEd,EK>K'z
tomen are increasingly becoming the engine
driving global economic growth and
ŝŶŶŽǀĂƟŽŶ͘:ŽŝŶƵƐĂƐǁĞĐĞůĞďƌĂƚĞƚŚĞ
SEPTEMBER
women who are making this possible in spite 10th-‐12th
ŽĨĂůůƚŚĞŽĚĚƐ͘tŝƚŚŽǀĞƌĂŚƵŶĚƌĞĚƐƉĞĂŬĞƌƐ
ĂŶĚŚƵŶĚƌĞĚƐŽĨĂƩĞŶĚĞĞƐĨƌŽŵĂůůĂĐƌŽƐƐ SAN
ƚŚĞǁŽƌůĚ͕t/^dDŝƐƉŽƐƐŝďůLJƚŚĞďŝŐŐĞƐƚ FRANCISCO
tŽŵĞŶŝŶ^dDĐŽŶĨĞƌĞŶĐĞŝŶƚŚĞtŽƌůĚ͘
EXPERIENCE THE THREE AMAZING DAYS THAT FLY BY, BUT STAY WITH YOU FOREVER.
ĸůŝĂƚĞWĂƌƚŶĞƌWƌŽŐƌĂŵŽĨ
NEXT
PREVIOUS
Reuven M. Lerner’s
V
V
UpFront
At the Forge
My Quest for ™
EDITORS’
Inbox Zero CHOICE
)VE NEVER BEEN ABLE TO ACCOMPLISH hINBOX ZEROv FOR
★
MORE THAN A COUPLE HOURS 0ART OF IT IS DUE TO POOR
ORGANIZATION ON MY PART AND PART OF IT IS DUE TO BEING TOO BUSY 4HE
PROBLEM ISNT THAT ) GET MORE EMAIL THAN ) CAN HANDLE ALTHOUGH THATS
PROBABLY TRUE ) GET A COUPLE HUNDRED MESSAGES A DAY ITS THAT MOST
MESSAGES REQUIRE A FOLLOWUP THAT ) CANT ACCOMPLISH IMMEDIATELY )VE
TRIED TO MOVE ITEMS ) NEED TO HANDLE LATER QUICKLY INTO A TO
DO LIST LIKE
7UNDERLIST BUT ITS AN EXTRA STEP THAT TAKES MORE TIME SO ) JUST LET THINGS
pile up in my inbox.
&OR SOME REASON ) RECENTLY DECIDED TO TRY 'OOGLE )NBOX )TS NOT A NEW
OFFERING FROM 'OOGLE BUT ) THINK ITS MATURED SINCE ) ORIGINALLY TRIED IT
years ago. See, Google Inbox allows me to keep inbox zero with minimal
EFFORT AND ZERO GUILT (ERES THE PREMISE
7HEN AN EMAIL COMES IN A QUICK SWIPE TO THE RIGHT WILL ARCHIVE IT
)TS NOT EVEN A CLICKJUST A SWIPE AND ITS GONE
RETURN TO CONTENTS
Avoiding
Disaster REUVEN M.
Worried that your server will go down? LERNER
You should be. Here are some disaster-planning Reuven M. Lerner, a
ONE !LL DATABASES MAKE IT POSSIBLE TO hDUMPv THEIR CONTENTS ONTO DISK
INTO A FORMAT THAT THEN CAN BE LOADED BACK INTO THE DATABASE SERVER
#ONSIDER A SITE CONTAINING ONLY APPLICATION SOFTWARE STATIC ASSETS AND
CONFIGURATION FILES )N OTHER WORDS NO DATABASE IS INVOLVED )N MANY
CASES SUCH A SITE CAN BE BACKED UP RELIABLY IN 'IT )NDEED ) PREFER TO
keep my sites in Git, backed up on a commercial hosting service, such as
GitHub or Bitbucket, and then deployed using a system like Capistrano.
In other words, you develop the site on your own development
MACHINE 7HENEVER YOU ARE HAPPY WITH A CHANGE THAT YOUVE MADE YOU
COMMIT THE CHANGE TO 'IT ON YOUR LOCAL MACHINE AND THEN DO A git
push to your central repository. In order to deploy your application, you
then use Capistrano to do a cap deploy WHICH READS THE DATA FROM
THE CENTRAL REPOSITORY PUTS IT INTO THE APPROPRIATE PLACE ON THE SERVERS
FILESYSTEM AND YOURE GOOD TO GO
4HIS SYSTEM KEEPS YOU SAFE IN A FEW DIFFERENT WAYS 4HE CODE ITSELF
is located in at least three locations: your development machine, the
server and the repository. And those central repositories tend to be
FAIRLY RELIABLE IF ONLY BECAUSE ITS IN THE FINANCIAL INTEREST OF THE HOSTING
company to ensure that things are reliable.
) SHOULD ADD THAT IN SUCH A CASE YOU ALSO SHOULD INCLUDE THE (440
SERVERS CONFIGURATION FILES IN YOUR 'IT REPOSITORY 4HOSE FILES ARENT
LIKELY TO CHANGE VERY OFTEN BUT ) CAN TELL YOU FROM EXPERIENCE IF YOURE
RECOVERING FROM A CRISIS THE LAST THING YOU WANT TO THINK ABOUT IS HOW
YOUR !PACHE CONFIGURATION FILES SHOULD LOOK #OPYING THOSE FILES INTO YOUR
'IT REPOSITORY WILL WORK JUST FINE
Backing Up Databases
9OU COULD ARGUE THAT THE DIFFERENCE BETWEEN A hWEBSITEv AND A hWEB
APPLICATIONv IS A DATABASE $ATABASES LONG HAVE POWERED THE BACK ENDS OF
MANY WEB APPLICATIONS AND FOR GOOD REASONTHEY ALLOW YOU TO STORE AND
RETRIEVE DATA RELIABLY AND FLEXIBLY 4HE POWER THAT MODERN OPEN
SOURCE
DATABASES PROVIDES WAS UNTHINKABLE JUST A DECADE OR TWO AGO AND THERES
NO REASON TO THINK THAT THEYLL BE ANY LESS RELIABLE IN THE FUTURE
!ND YET JUST BECAUSE YOUR DATABASE IS PRETTY RELIABLE DOESNT MEAN
THAT IT WONT HAVE PROBLEMS 4HIS MEANS YOURE GOING TO WANT TO KEEP
A SNAPSHOT hDUMPv OF THE DATABASES CONTENTS AROUND IN CASE THE
#!/bin/sh
BACKUP_ROOT="/home/database-backups/"
YEAR=`/bin/date +'%Y'`
MONTH=`/bin/date +'%m'`
DAY=`/bin/date +'%d'`
DIRECTORY="$BACKUP_ROOT/$YEAR/$MONTH/$DAY"
USERNAME=dbuser
DATABASE=dbname
HOST=localhost
PORT=3306
/bin/mkdir -p $DIRECTORY
/usr/bin/mysqldump -h $HOST --databases $DATABASE -u $USERNAME
´| /bin/gzip --best --verbose >
´$DIRECTORY/$DATABASE-dump.gz
CASE )M USING -Y31, SO )M USING THE mysqldump COMMAND 4HE OUTPUT
FROM THIS COMMAND IS A STREAM OF 31, THAT CAN BE USED TO RE
CREATE THE
DATABASE ) THUS TAKE THE OUTPUT FROM mysqldump and pipe it into gzip ,
WHICH COMPRESSES THE OUTPUT FILE &INALLY THE RESULTING DUMPFILE IS PLACED
IN COMPRESSED FORM INSIDE THE DAILY BACKUP DIRECTORY
$EPENDING ON THE SIZE OF YOUR DATABASE AND THE AMOUNT OF DISK SPACE
YOU HAVE ON HAND YOULL HAVE TO DECIDE JUST HOW OFTEN YOU WANT TO
RUN DUMPS AND HOW OFTEN YOU WANT TO CLEAN OUT OLD ONES ) KNOW FROM
experience that dumping every hour can cause some load problems.
/N ONE VIRTUAL MACHINE )VE USED THE OVERALL ADMINISTRATION TEAM WAS
unhappy that I was dumping and compressing every hour, which they saw
AS AN UNNECESSARY USE OF SYSTEM RESOURCES
)F YOURE WORRIED YOUR SYSTEM WILL RUN OUT OF DISK SPACE YOU MIGHT
WELL WANT TO RUN A SPACE
CHECKING PROGRAM THATLL ALERT YOU WHEN THE
FILESYSTEM IS LOW ON FREE SPACE )N ADDITION YOU CAN RUN A CRON JOB THAT
uses find TO ERASE ALL DUMPFILES FROM BEFORE A CERTAIN CUTOFF DATE )M
always a bit nervous about programs that automatically erase backups, so
) GENERALLY PREFER NOT TO DO THIS 2ATHER ) RUN A PROGRAM THAT WARNS ME IF
THE DISK USAGE IS GOING ABOVE WHICH IS USUALLY LOW ENOUGH TO ENSURE
THAT ) CAN FIX THE PROBLEM IN TIME EVEN IF )M ON A LONG FLIGHT 4HEN ) CAN
GO IN AND REMOVE THE PROBLEMATIC FILES BY HAND
7HEN YOU BACK UP YOUR DATABASE YOU SHOULD BE SURE TO BACK UP
THE CONFIGURATION FOR THAT DATABASE AS WELL 4HE DATABASE SCHEMA AND
DATA WHICH ARE PART OF THE DUMPFILE ARE CERTAINLY IMPORTANT (OWEVER
IF YOU FIND YOURSELF HAVING TO RE
CREATE YOUR SERVER FROM SCRATCH YOULL
WANT TO KNOW PRECISELY HOW YOU CONFIGURED THE DATABASE SERVER WITH
A PARTICULAR EMPHASIS ON THE FILESYSTEM CONFIGURATION AND MEMORY
ALLOCATIONS ) TEND TO USE 0OSTGRE31, FOR MOST OF MY WORK AND ALTHOUGH
POSTGRESQLCONF IS SIMPLE TO UNDERSTAND AND CONFIGURE ) STILL LIKE TO KEEP
IT AROUND WITH MY DUMPFILES
Another crucial thing to do is to check your database dumps
occasionally to be sure that they are working the way you want. It turns
OUT THAT THE BACKUPS ) THOUGHT ) WAS MAKING WERENT ACTUALLY HAPPENING
IN NO SMALL PART BECAUSE ) HAD MODIFIED THE SHELL SCRIPT AND HADNT
DOUBLE
CHECKED THAT IT WAS CREATING USEFUL BACKUPS /CCASIONALLY PULLING
OUT ONE OF YOUR DUMPFILES AND RESTORING IT TO A SEPARATE AND OFFLINE
database to check its integrity is a good practice, both to ensure that the
DUMP IS WORKING AND THAT YOU REMEMBER HOW TO RESTORE IT IN THE CASE OF
an emergency.
Storing Backups
"UT WAIT )T MIGHT BE GREAT TO HAVE THESE BACKUPS BUT WHAT IF THE SERVER
GOES DOWN ENTIRELY )N THE CASE OF THE CODE ) MENTIONED TO ENSURE THAT IT
was located on more than one machine, ensuring its integrity. By contrast,
YOUR DATABASE DUMPS ARE NOW ON THE SERVER SUCH THAT IF THE SERVER FAILS
your database dumps will be inaccessible.
4HIS MEANS YOULL WANT TO HAVE YOUR DATABASE DUMPS STORED ELSEWHERE
PREFERABLY AUTOMATICALLY (OW CAN YOU DO THAT
4HERE ARE A FEW RELATIVELY EASY AND INEXPENSIVE SOLUTIONS TO THIS
PROBLEM )F YOU HAVE TWO SERVERSIDEALLY IN SEPARATE PHYSICAL LOCATIONS
you can use rsync TO COPY THE FILES FROM ONE TO THE OTHER $ONT rsync
THE DATABASES ACTUAL FILES SINCE THOSE MIGHT GET CORRUPTED IN TRANSFER
AND ARENT DESIGNED TO BE COPIED WHEN THE SERVER IS RUNNING "Y CONTRAST
THE DUMPFILES THAT YOU HAVE CREATED ARE MORE THAN ABLE TO GO ELSEWHERE
3ETTING UP A REMOTE SERVER WITH A USER SPECIFICALLY FOR HANDLING THESE
BACKUP TRANSFERS SHOULDNT BE TOO HARD AND WILL GO A LONG WAY TOWARD
ENSURING THE SAFETY OF YOUR DATA
I should note that using rsync IN THIS WAY BASICALLY REQUIRES THAT YOU
SET UP PASSWORDLESS 33( SO THAT YOU CAN TRANSFER WITHOUT HAVING TO BE
physically present to enter the password.
!NOTHER POSSIBLE SOLUTION IS !MAZONS 3IMPLE 3TORAGE 3ERVER 3
WHICH OFFERS ASTONISHING AMOUNTS OF DISK SPACE AT VERY LOW PRICES )
KNOW THAT MANY COMPANIES USE 3 AS A SIMPLE ALBEIT SLOW BACKUP
system. You can set up a cron job to run a program that copies the
CONTENTS OF A PARTICULAR DATABASE DUMPFILE DIRECTORY ONTO A PARTICULAR
SERVER 4HE ASSUMPTION HERE IS THAT YOURE NOT EVER GOING TO USE THESE
BACKUPS MEANING THAT 3S SLOW SEARCHING AND ACCESS WILL NOT BE AN
ISSUE ONCE YOURE WORKING ON THE SERVER
Similarly, you might consider using Dropbox. Dropbox is best known
FOR ITS DESKTOP CLIENT BUT IT HAS A hHEADLESSv TEXT
BASED CLIENT THAT CAN
BE USED ON ,INUX SERVERS WITHOUT A '5) CONNECTED /NE NICE ADVANTAGE
OF $ROPBOX IS THAT YOU CAN SHARE A FOLDER WITH ANY NUMBER OF PEOPLE
which means you can have Dropbox distribute your backup databases
EVERYWHERE AUTOMATICALLY INCLUDING TO A NUMBER OF PEOPLE ON YOUR TEAM
4HE BACKUPS ARRIVE IN THEIR $ROPBOX FOLDER AND YOU CAN BE SURE THAT THE
LAMP is conditional.
&INALLY IF YOURE RUNNING A 7ORD0RESS SITE YOU MIGHT WANT TO CONSIDER
6AULT0RESS A FOR
PAY BACKUP SYSTEM ) MUST ADMIT THAT IN THE WEEKS
BEFORE ) TOOK MY SERVER DOWN WITH A DATABASE BACKUP ERROR ) KEPT SEEING
ADS IN 7ORD0RESS FOR 6AULT0RESS h7HO WOULD BUY THATv ) ASKED MYSELF
THINKING THAT )M SMART ENOUGH TO DO BACKUPS MYSELF /F COURSE AFTER
DISASTER OCCURRED AND MY DATABASE WAS RUINED ) REALIZED THAT YEAR TO
BACK UP ALL OF MY DATA IS CHEAP AND ) SHOULD HAVE DONE IT BEFORE
Conclusion
7HEN IT COMES TO YOUR SERVERS THINK LESS LIKE AN OPTIMISTIC PROGRAMMER
AND MORE LIKE AN INSURANCE AGENT 0ERHAPS DISASTER WONT STRIKE BUT IF IT
DOES WILL YOU BE ABLE TO RECOVER -AKING SURE THAT EVEN IF YOUR SERVER IS
COMPLETELY UNAVAILABLE YOULL BE ABLE TO BRING UP YOUR PROGRAM AND ANY
associated database is crucial.
-Y PREFERRED SOLUTION INVOLVES COMBINING A 'IT REPOSITORY FOR CODE AND
CONFIGURATION FILES DISTRIBUTED ACROSS SEVERAL MACHINES AND SERVICES &OR
THE DATABASES HOWEVER ITS NOT ENOUGH TO DUMP YOUR DATABASE YOULL
NEED TO GET THAT DUMP ONTO A SEPARATE MACHINE AND PREFERABLY TEST THE
BACKUP FILE ON A REGULAR BASIS 4HAT WAY EVEN IF THINGS GO WRONG YOULL
be able to get back up in no time. Q
RETURN TO CONTENTS
Let’s Play
Bunco! DAVE TAYLOR
Bunco—a dice game that makes Yahtzee
look complicated! Dave Taylor has been
hacking shell scripts
on UNIX and Linux
systems for a really
PREVIOUS NEXT long time. He’s the
author of Learning
Reuven M. Lerner’s Kyle Rankin’s
V
V
MULTIPLE TABLES INCLUDING A WINNERS TABLE AND USUALLY CASH PRIZES FUNDED
BY EVERYONE PAYING OR SIMILAR TO PLAY AND BASED ON SPECIFIC WINNING
SCENARIOS LIKE hMOST "UNCOSv OR hMOST POINTSv )LL SKIP THAT PART HERE
HOWEVER AND JUST FOCUS ON THE DICE PART
)N OTHER WORDS YOU HAVE A CHANCE OF ROLLING A "UNCO WHICH IS A
BIT LESS THAN ONCE OUT OF EVERY ROLLS OF THREE DICE
)T COULD BE TOUGHER THOUGH )F YOU WERE PLAYING WITH FIVE DICE THE
CHANCE OF ROLLING A -INI "UNCO OR 9AHTZEE IS AND IF YOU WERE
TRYING TO ACCOMPLISH A SPECIFIC VALUE SAY JUST SIXES THEN ITS
LIKELY ON ANY GIVEN ROLLWHICH IS TO SAY NOT BLOODY LIKELY
4HATS THE DICE
ROLLING FEATURE ,ETS MAKE IT A FUNCTION WHERE YOU CAN SPECIFY
THE VARIABLE YOUD LIKE TO HAVE THE GENERATED VALUE AS PART OF THE INVOCATION
rolldie()
{
local result=$1
rolled=$(( ( $RANDOM % 6 ) + 1 ))
eval $result=$rolled
}
4HE USE OF THE eval IS TO ENSURE THAT THE VARIABLE SPECIFIED IN THE
INVOCATION IS ACTUALLY ASSIGNED THE CALCULATED VALUE )TS EASY TO WORK WITH
rolldie die1
4HAT WILL LOAD A RANDOM VALUE BETWEEN n INTO THE VARIABLE die1 4O
ROLL YOUR THREE DICE ITS STRAIGHTFORWARD
.OW TO TEST THE VALUES &IRST LETS TEST FOR A "UNCO WHERE ALL THREE DICE
HAVE THE SAME VALUE AND ITS THE VALUE OF THE CURRENT ROUND TOO
4HATS PROBABLY THE HARDEST OF THE TESTS AND NOTICE THE UNUSUAL USE
OF TEST IN THE FIRST CONDITIONAL [ cond1 ] && [ cond2 ] )F YOURE
thinking that you could also write it as cond1 -a cond2 YOURE
RIGHT !S WITH SO MUCH IN THE SHELL THERES MORE THAN ONE WAY TO GET
to the solution.
4HE REMAINDER OF THE CODE IS STRAIGHTFORWARD YOU JUST NEED TO TEST FOR
whether the die matches the current round value:
4HE ONLY THING TO CONSIDER HERE IS THAT YOU DONT WANT TO SCORE
DIE VALUE VS ROUND IF YOUVE ALSO SCORED A "UNCO OR -INI "UNCO
SO THE ENTIRE SECOND SET OF TESTS NEEDS TO BE WITHIN THE else
CLAUSE OF THE FIRST CONDITIONAL TO SEE IF ALL THREE DICE HAVE THE
SAME VALUE
0UT IT TOGETHER AND SPECIFY THE ROUND NUMBER ON THE COMMAND LINE
$ sh bunco.sh 5
You rolled: 1 1 5
score = 1
$ sh bunco.sh 2
You rolled: 6 4 3
score = 0
$ sh bunco.sh 1
You rolled: 1 1 1
BUNCO!
score = 25
BuncoRound()
{
# roll, display, and score a round of bunco!
# round is specified when invoked, score added to totalscore
local score=0 ;; local round=$1 ;; local hidescore=0
rolldie die1 ;; rolldie die2 ;; rolldie die3
echo Round $round. You rolled: $die1 $die2 $die3
if [ $die1 -eq $die2 ] && [ $die2 -eq $die3 ] ;; then
if [ $die1 -eq $round ] ;; then
4HATS ABOUT THE ENTIRE PROGRAM AT THIS POINT ,ETS RUN IT ONCE AND SEE
what happens:
$ sh bunco.sh 1
Round 1. You rolled: 2 3 3
score this round: 0
Round 2. You rolled: 2 6 6
score this round: 1
Round 3. You rolled: 1 2 4
score this round: 0
Round 4. You rolled: 2 1 4
score this round: 1
Round 5. You rolled: 5 5 6
score this round: 2
Round 6. You rolled: 2 1 3
score this round: 0
Game over. Your total score was 4
5GH .OT TOO IMPRESSIVE BUT ITS PROBABLY A TYPICAL ROUND !GAIN YOU
CAN RUN IT A FEW HUNDREDOR THOUSANDTIMES JUST SAVE THE h'AME
OVERv LINE THEN DO SOME QUICK STATISTICAL ANALYSIS TO SEE HOW OFTEN YOU
SCORE MORE THAN POINTS IN SIX ROUNDS 7ITH THREE DICE TO ROLL A GIVEN
VALUE YOU SHOULD HIT THAT OF THE TIME
)TS NOT A COMPLICATED GAME BY ANY MEANS BUT IT MAKES FOR AN
INTERESTING LITTLE PROGRAMMING PROJECT .OW WHAT IF THEY USED
SIDED
DIE AND LET YOU RE
ROLL ONE DIE PER ROUND AND HAD A DOZEN ROUNDS Q
RETURN TO CONTENTS
Preparing
for Vacation KYLE RANKIN
What to expect when you are expecting to go on
vacation. Kyle Rankin is VP of
engineering operations
at Final, Inc., the
NEXT author of many
PREVIOUS
Shawn Powers’ books including Linux
Dave Taylor’s
V
V
Documentation
Good documentation is the best way to reduce or eliminate how much
YOU HAVE TO STEP IN WHEN YOU ARENT ON CALL WHETHER YOURE ON VACATION
OR NOT %VERYTHING FROM ROUTINE PROCEDURES TO EMERGENCY RESPONSE SHOULD
BE DOCUMENTED AND KEPT UP TO DATE (ONESTLY THIS FALLS UNDER STANDARD
BEST PRACTICES AS A SYSADMIN SO ITS SOMETHING YOU SHOULD HAVE WHETHER
or not you are about to go on vacation.
&IRST ALL ROUTINE PROCEDURES FROM HOW YOU DEPLOY CODE AND
CONFIGURATION CHANGES HOW YOU MANAGE TICKETS HOW YOU PERFORM
security patches, how you add and remove users, and how the overall
ENVIRONMENT IS STRUCTURED SHOULD BE DOCUMENTED IN A CLEAR STEP
BY
STEP
WAY )F YOU USE AUTOMATION TOOLS FOR ROUTINE PROCEDURES WHETHER ITS
AS SIMPLE AS A FEW SCRIPTS OR AS COMPLEX AS FULL ORCHESTRATION TOOLS YOU
should make sure you document not only how to use the automation
TOOLS BUT ALSO HOW TO PERFORM THE SAME TASKS MANUALLY SHOULD THE
Stable State
4HE MORE STABLE YOUR INFRASTRUCTURE IS BEFORE YOU LEAVE AND THE MORE
STABLE IT STAYS WHILE YOU ARE GONE THE LESS LIKELY YOULL BE DISTURBED ON
OUT THOSE DATES AHEAD OF TIME AND PUT THEM IN YOUR CALENDAR )F NOTHING
ELSE IT MIGHT ENCOURAGE OTHERS TO WAIT ON MAKING A RISKY CHANGE IF THEY
KNOW THEY ABSOLUTELY WILL NOT BE ABLE TO REACH YOU FOR THE NEXT TWO
days. In general, set expectations on your availability, and also make sure
EVERYONE TAKES ANY TIME ZONE DIFFERENCES INTO ACCOUNT
Conclusion
/VERALL A VACATION SHOULD BE A TIME FOR YOU TO BE COMPLETELY REMOVED
FROM YOUR WORKS ON
CALL PROCESS 7HETHER THATS POSSIBLE OR NOT THE
MORE YOU PREPARE AHEAD OF TIME THE LESS LIKELY YOUR VACATION WILL BE
interrupted. Finally, when you get back, do a post mortem with your
team about anything that went wrong and any documentation that
WAS CONFUSING OR INCOMPLETE SO YOU CAN MAKE IMPROVEMENTS FOR YOUR
next vacation. Q
RETURN TO CONTENTS
14th Annual
2017 H IGH PERFORMANCE COMPUTING
FOR WALL STREET- CLOUD, AI AND DATA CENTERS
Show and Conference
September 12, 2017 (Tuesday) Roosevelt Hotel, NYC
Madison Ave and 45th St, next to Grand Central Station
Register Today: HPC, Cloud, AI, Machine Learning, Data Centers, Big Data,
Linux, Low Latency, Networks, Cost Savings.
Capital Markets, Systems, Architecture, Cloud, Machine Learning and AI is
driving solutions for large data centers and HPC computing.
Go online for the full conference program and save
$100. Includes general sessions, drill down sessions,
an industry luncheon, $295 in advance. $395 on site.
Qualified end-users are invited to register at no
charge. for the full conference. HPC sponsors and
Don’t have time for the full Conference? Register exhibitors to show and
demonstrate all new
for the free Show. at: www.flaggmgmt.com/hpc HPC systems at the
Show.
Register online: www.flaggmgmt.com/hpc
Show Hours: Tues, Sept 12 8:00 - 4:00 Wall Street IT speakers and Gold
Conference Hours: 8:30 - 4:50 Sponsors will lead drill-down ses-
sions in the Grand Ballroom program.
2016 Sponsors
Ansible: the
Automation
Framework SHAWN
POWERS
That Thinks
Shawn Powers is the
Associate Editor for
Linux Journal. He’s
also the Gadget Guy
Like a Sysadmin
for LinuxJournal.com,
and he has an
interesting collection
of vintage Garfield
coffee mugs. Don’t
With Ansible, managing 50 servers is a lot like let his silly hairdo
managing one server! fool you, he’s a
pretty ordinary guy
and can be reached
via email at
[email protected].
PREVIOUS Or, swing by the
NEXT #linuxjournal IRC
Kyle Rankin’s
V
V
IN YOUR ENVIRONMENT ) ALSO SHOULD NOTE THAT )M NOT GOING TO MENTION
SYSTEMS LIKE 6AGRANT BECAUSE ALTHOUGH 6AGRANT IS WONDERFUL FOR
BUILDING A QUICK INFRASTRUCTURE FOR TESTING AND DEVELOPING ITS SO VERY
DIFFERENT FROM A BUNCH OF SERVERS THAT THE CONSIDERATIONS ARE TOO
dissimilar really to compare.
IN YOUR ENVIRONMENT )M NOT A BIG FAN OF PROCLAIMING WHAT THE hBEST
PRACTICEv IS BECAUSE IN REALITY THE BEST PRACTICE IS TO CONSIDER YOUR
ENVIRONMENT AND CHOOSE THE SETUP THAT FITS YOUR SITUATION THE BEST
Privilege Escalation
Once your Ansible server connects to its clients via SSH, it needs to be
ABLE TO ESCALATE PRIVILEGE )F YOU CHOSE OPTION ABOVE YOURE ALREADY
ROOT AND THIS IS A MOOT POINT "UT SINCE NO ONE CHOSE OPTION RIGHT
you need to consider how a regular user on the client computer gains
ACCESS !NSIBLE SUPPORTS A WIDE VARIETY OF ESCALATION SYSTEMS BUT IN ,INUX
THE MOST COMMON OPTIONS ARE SUDO AND SU !S WITH 33( THERE ARE A FEW
situations to consider, although there are certainly other options.
1) Escalate privilege with su.
For Red Hat/CentOS users, the instinct might be to use su in order
TO GAIN SYSTEM ACCESS "Y DEFAULT THOSE SYSTEMS CONFIGURE THE ROOT
password during install, and to gain privileged access, you need to
TYPE IT IN 4HE PROBLEM WITH USING SU IS THAT ALTHOUGH IT GIVES YOU
total access to the remote system, it also gives you total access to the
REMOTE SYSTEM 9ES THAT WAS SARCASM !LSO THE SU PROGRAM DOESNT
have the ability to authenticate with key pairs, so the password either
MUST BE INTERACTIVELY TYPED OR STORED IN THE CONFIGURATION FILE !ND
SINCE ITS LITERALLY THE ROOT PASSWORD STORING IT IN THE CONFIG FILE SHOULD
sound like a horrible idea, because it is.
2) Escalate privilege with sudo.
4HIS IS HOW $EBIAN5BUNTU SYSTEMS ARE CONFIGURED ! USER IN THE CORRECT
group has access to sudo a command and execute it with root privileges.
/UT OF THE BOX THIS STILL HAS THE PROBLEM OF PASSWORD STORAGE OR
INTERACTIVE TYPING 3INCE STORING THE USERS PASSWORD IN THE CONFIGURATION
FILE SEEMS A LITTLE LESS HORRIBLE ) GUESS THIS IS A STEP UP FROM USING SU BUT
IT STILL GIVES COMPLETE ACCESS TO A SYSTEM IF THE PASSWORD IS COMPROMISED
!FTER ALL TYPING sudo su - WILL ALLOW USERS TO BECOME ROOT JUST AS IF
THEY HAD THE ROOT PASSWORD
3) Escalate privilege with sudo and configure NOPASSWD in the
sudoers file.
!GAIN IN MY LOCAL ENVIRONMENT THIS IS WHAT ) DO )TS NOT PERFECT
BECAUSE IT GIVES UNRESTRICTED ROOT ACCESS TO THE USER ACCOUNT AND DOESNT
REQUIRE ANY PASSWORDS "UT WHEN ) DO THIS AND USE 33( KEY PAIRS WITHOUT
PASSPHRASES IT ALLOWS ME TO AUTOMATE !NSIBLE COMMANDS EASILY )LL NOTE
again, that although it is convenient, it is not a terribly secure idea.
4) Escalate privilege with sudo and configure NOPASSWD on
specific executables.
4HIS IDEA MIGHT BE THE BEST COMPROMISE OF SECURITY AND CONVENIENCE
"ASICALLY IF YOU KNOW WHAT YOU PLAN TO DO WITH !NSIBLE YOU CAN GIVE
./0!337$ PRIVILEGE TO THE REMOTE USER FOR JUST THOSE APPLICATIONS
IT WILL NEED TO USE )T MIGHT GET A LITTLE CONFUSING SINCE !NSIBLE USES
0YTHON FOR LOTS OF THINGS BUT WITH ENOUGH TRIAL AND ERROR YOU SHOULD
BE ABLE TO FIGURE THINGS OUT )T IS MORE WORK BUT DOES ELIMINATE SOME
OF THE GLARING SECURITY HOLES
# ssh-keygen
# ssh-copy-id -i .ssh/id_dsa.pub [email protected]
# ssh [email protected]
# sudo visudo
4HIS WILL OPEN THE SUDOERS FILE AND ALLOW YOU TO MAKE CHANGES SAFELY
IT ERROR
CHECKS WHEN YOU SAVE SO YOU DONT ACCIDENTALLY LOCK YOURSELF
OUT WITH A TYPO 4HERE ARE EXAMPLES IN THE FILE SO YOU SHOULD BE ABLE
TO FIGURE OUT HOW TO ASSIGN THE EXACT PRIVILEGES YOU WANT
/NCE ITS ALL CONFIGURED YOU SHOULD TEST IT MANUALLY BEFORE
BRINGING !NSIBLE INTO THE PICTURE 4RY 33(ING TO THE REMOTE CLIENT
AND THEN TRY ESCALATING PRIVILEGE USING WHATEVER METHODS YOUVE
CHOSEN /NCE YOU HAVE CONFIGURED THE WAY YOULL CONNECT ITS TIME
to install Ansible.
Installing Ansible
3INCE THE !NSIBLE PROGRAM GETS INSTALLED ONLY ON THE SINGLE COMPUTER ITS
NOT A BIG CHORE TO GET GOING 2ED (AT5BUNTU SYSTEMS DO PACKAGE INSTALLS
A BIT DIFFERENTLY BUT NEITHER IS DIFFICULT
)N 2ED (AT#ENT/3 FIRST ENABLE THE %0%, REPOSITORY
# file /etc/ansible/hosts
[webservers]
blogserver ansible_host=192.168.1.5
wikiserver ansible_host=192.168.1.10
[dbservers]
mysql_1 ansible_host=192.168.1.22
pgsql_1 ansible_host=192.168.1.23
4HE BRACKETED SECTIONS ARE SPECIFYING GROUPS )NDIVIDUAL HOSTS CAN BE LISTED
IN MULTIPLE GROUPS AND !NSIBLE CAN REFER EITHER TO INDIVIDUAL HOSTS OR GROUPS
4HIS IS ALSO THE CONFIGURATION FILE WHERE THINGS LIKE PLAIN
TEXT PASSWORDS
WOULD BE STORED IF THATS THE SORT OF SETUP YOUVE PLANNED %ACH LINE IN
THE CONFIGURATION FILE CONFIGURES A SINGLE HOST AND YOU CAN ADD MULTIPLE
DECLARATIONS AFTER THE ansible_host STATEMENT 3OME USEFUL OPTIONS ARE
ansible_ssh_pass
ansible_become
ansible_become_method
ansible_become_user
ansible_become_pass
Finally, you should test your system to make sure your clients are
CONNECTING 4HE PING TEST WILL MAKE SURE THE !NSIBLE COMPUTER CAN PING
each host:
!FTER RUNNING YOU SHOULD SEE A MESSAGE FOR EACH DEFINED HOST
showing a ping: pong IF THE PING WAS SUCCESSFUL 4HIS DOESNT ACTUALLY
TEST AUTHENTICATION JUST THE NETWORK CONNECTIVITY 4RY THIS TO TEST YOUR
authentication:
9OU SHOULD SEE THE RESULTS OF THE uptime COMMAND FOR EACH HOST IN THE
webservers group.
)N MY NEXT ARTICLE )LL START TO DIG IN TO !NSIBLES ABILITY TO MANAGE
THE REMOTE COMPUTERS )LL LOOK AT VARIOUS MODULES AND HOW YOU CAN
USE THE AD
HOC MODE TO ACCOMPLISH IN A FEW KEYSTROKES WHAT WOULD
TAKE A LONG TIME TO HANDLE INDIVIDUALLY ON THE COMMAND LINE )F YOU
DIDNT GET THE RESULTS YOU EXPECTED FROM THE SAMPLE !NSIBLE COMMANDS
above, take this time to make sure authentication is working. Check
out http://docs.ansible.com FOR MORE HELP IF YOU GET STUCK Q
RETURN TO CONTENTS
Water + Irrigation
Q Networking
Data
ŅĹĹåÏƋƵĜƋʱčƋåÏĘĹŅĬŅčƼĜĹāƚåĹÏåųŸ
±ÏųŅŸŸ±ƴ±ųĜåƋƼŅüŞĬ±ƋüŅųĵŸţ%åĬåč±ƋåŸ Labor
ƵĜĬĬåŸƋ±ÆĬĜŸĘŸåĹĜŅųěĬåƴåĬÏŅĹƋ±ÏƋŸ±ĹÚ Energy
üŅŸƋåų±ÚĜ±ĬŅčƚåƋʱƋåĹÚƚų埱üƋåųƋĘå Water Management
ÏŅĹüåųåĹÏåűŸåĹÚţ Sensors + Iot
Logistics
Q Conference
Robotics
±ĩåĘŅĵå±ÚååŞåųƚĹÚåųŸƋ±ĹÚĜĹčŅüƋĘå
ÏʱĬĬåĹčåŸü±ÏåÚÆƼčųŅƵåųŸØŸåųƴĜÏå Labels
ŞųŅƴĜÚåųŸØ±ĹÚÏŅĬĬå±čƚåŸƵŅųĩĜĹčĜĹ Traceability
±ĹÚ
ŅƋĘåųޱųƋŸŅüƋĘåűƋĜŅűĹÚƵŅųĬÚţ Food Safety
Sustainability
Con- Q Get an “In the Field” Perspective with a
Pre-Conference Tour
a±ƋÏĘĬå±ųĹĜĹčŸ±ĹÚÏŅĹƋ±ÏƋŸčĬå±ĹåÚüųŅĵ
±čě ƋĘåÏŅĹüåųåĹÏåƵĜƋʱųå±ĬěƵŅųĬÚƴĜåƵŅü
Ņű eųĜDŽŅűűŸ±čųĜÏƚĬƋƚų±ĬƋåÏĘĹŅĬŅčƼ±ĹÚƋĘå S ES S IO N TO PIC S INC LU D E:
ĹĜƴåųŸĜƋƼŅüeųĜDŽŅĹ±ŅÆŅƋĜÏŸƼŸƋåĵţ
T H E STAT E O F T H E I N D U ST RY – P R EC I SION IN
R OW A ND S P EC I A LT Y C R OP P R OD UCTIO N
E X P LO R I N G T H E CO N N ECT I V E T I S S U E B ETWEEN
E X I ST I NG A ND E M E R G I NG T EC HNOLO G IES
140+ COMPANIES
35 LEADING SPEAKERS ®
12 COUNTRIES
185+ ATTENDEES
O c to b e r 1 0 -1 2 , 2 0 17 | P h o e n i x , A Z
#PRECISIONAGVISION
PRECISIONAGVISION.COM
s
s
The Open-Source
Station with Icecast
Classroom
and Liquidsoap
Nativ Vita
4HE MOTTO hOPEN TO ANYTHINGv UNDERPINS .ATIVS DEVELOPMENT PHILOSOPHY
ON ALL OF ITS AUDIO SOLUTIONS INCLUDING ITS NEW .ATIV 6ITA hTHE WORLDS
FIRST (IGH
2ESOLUTION -USIC 0LAYERv AND TOUCHSCREEN CONTROL CENTER THAT
IS DESIGNED TO FUNCTION AS THE CENTRAL ACCESS POINT FOR ONES ENTIRE MUSIC
COLLECTION 4HIS PHILOSOPHY IS EVIDENT IN .ATIV 6ITAS ,INUX AND OPEN
SOURCE INTERNALS OFFERING ADVANTAGES LIKE SUPPORT FOR VIRTUALLY ANY MUSIC
SERVICEEVEN LESSER
KNOWN AND REGIONAL SERVICES LIKE *ANGO 2ADIO ++"OX
AND 0ARADISE 2ADIOAND EXTENSIBILITY FAR BEYOND PURE AUDIO APPLICATIONS
.ATURALLY .ATIV 6ITA SUPPORTS MAINSTREAM MUSIC SERVICES LIKE !PPLE -USIC
3OUND#LOUD 6EVO 3POTIFY 4)$!, 0ANDORA AND !MAZON -USIC AMONG
OTHERS .ATIV 6ITA CAN STORE UP TO 4" OF MUSIC ON ITS INTERNAL HARD DISK
DRIVES OR 33$S AND CAN ACCESS REMOTE FILES ON A 0# .!3 OR SMARTPHONE
7IRELESS STREAMING TO MULTI
ROOM SPEAKER SYSTEMS IS ACHIEVED UTILIZING
POPULAR SOLUTIONS LIKE 3/./3 AND "LUESOUND AND TO HIGH
END HEADPHONES
VIA "LUETOOTH APT8 ! HIGH
END DIGITAL OUTPUT STAGE WITH MYRIAD OUTPUTS
RANGING FROM !%3%"5 TO 53" !UDIO #LASS CONNECT THE 6ITA TO AN
AMPLIFIER OR 53" $!# FOR BEST
IN
CLASS SOUND PERFORMANCE
http://nativsound.com
Zed A. Shaw’s
Learn P y thon 3
the Hard Way
(Addison-Wesley
Professional)
!UTHOR :ED ! 3HAW MAKES A SIMPLE
promise in his Hard Way SERIES OF
BOOKS FROM PUBLISHER !DDISON
7ESLEY
0ROFESSIONAL h)TLL BE HARD AT FIRST "UT
SOON YOULL JUST GET ITAND THAT WILL
FEEL GREATv 3HAWS LATEST BOOK IN THE SERIES IS CALLED Learn Python 3 the
Hard Way: A Very Simple Introduction to the Terrifyingly Beautiful World of
Computers and Code. In the book, readers learn Python by working through
hBRILLIANTLY CRAFTED EXERCISESv IN A PURPOSEFULLY PROSCRIBED MANNER !FTER
READING THE EXERCISE READERS TYPE THE CODE PRECISELYWITH NO COPYING AND
PASTING 4HEN READERS FIX THEIR MISTAKES AND WATCH THE PROGRAM RUN 4HE
PROCESS TEACHES ESSENTIALS OF HOW A COMPUTER WORKS WHAT GOOD PROGRAMS
look like, and how to read, write and think about computer code. Shaw
TEACHES EVEN MORE IN HOURS OF VIDEO WHERE HE SHOWS READERS HOW TO
BREAK FIX AND DEBUG CODELIVE AS HES DOING THE EXERCISES ,ESSONS COVER
TOPICS FROM INSTALLING A COMPLETE 0YTHON ENVIRONMENT TO WORKING WITH
CODE BASIC MATHEMATICS VARIABLES LOOPING AND LOGIC OBJECT
ORIENTED
programming, Python packaging, automated testing and much more.
2EADERS BRING THE DISCIPLINE COMMITMENT AND PERSISTENCE TO 3HAWS
FORMULA AND THE OUTPUT WILL BE A 0YTHON PROGRAMMER
HTTPAWPROFESSIONALCOM
RETURN TO CONTENTS
Creating an
Internet
Radio Station
with Icecast
and Liquidsoap
Ever wanted to stream prerecorded music or a live event, such
as a lecture or concert for an internet audience? With Icecast
and Liquidsoap, you can set up a full-featured, flexible internet
radio station using free software and open standards.
BILL DENGLER
NEXT
PREVIOUS Feature: Linux
V
I
CECAST IS hA STREAMING MEDIA AUDIOVIDEO SERVER THAT CURRENTLY
SUPPORTS /GG 6ORBIS AND 4HEORA /PUS 7EB- AND -0 STREAMS )T
can be used to create an internet radio station or a privately running
jukebox and many things in between. It is very versatile in that new
FORMATS CAN BE ADDED RELATIVELY EASILY AND SUPPORTS OPEN STANDARDS FOR
COMMUNICATION AND INTERACTIONv
,IQUIDSOAP IS hA POWERFUL AND FLEXIBLE LANGUAGE FOR DESCRIBING YOUR
STREAMS )T OFFERS A RICH COLLECTION OF OPERATORS THAT YOU CAN COMBINE AT
WILL GIVING YOU MORE POWER THAN YOU NEED FOR CREATING OR TRANSFORMING
STREAMS "UT ,IQUIDSOAP IS STILL VERY LIGHT AND EASY TO USE IN THE 5.)8
TRADITION OF SIMPLE STRONG COMPONENTS WORKING TOGETHERv
7HEN COMBINED )CECAST AND ,IQUIDSOAP CAN CREATE A FLEXIBLE FEATURE
RICH INTERNET RADIO STATION )N THIS ARTICLE ) DESCRIBE HOW TO CONFIGURE
)CECAST TO HOST AN INTERNET RADIO STATION 4HEN ) EXPLAIN HOW TO INSTALL AND
CONFIGURE ,IQUIDSOAP TO CONNECT TO )CECAST ADDING RANDOM OR SEQUENTIAL
MUSIC PLAYBACK WITH SMART CROSS
FADING PRERECORDED RANDOMLY INSERTED
ANNOUNCEMENTS AND JINGLES A SONG REQUEST SYSTEM AND SUPPORT FOR LIVE
streams, with automated recording and seamless switching between live and
AUTOMATED PROGRAMMING ) ALSO SHOW HOW TO CONFIGURE THE SERVER TO SERVE
YOUR STREAM IN -0 /GG AND /PUS FORMATS FOR MAXIMUM PLAYER COMPATIBILITY
)CECAST 6ORBIS AND RELATED PROJECTS ARE MAINTAINED BY 8IPH/RG
https://www.xiph.org A NONPROFIT ORGANIZATION THAT DEVELOPS OPEN
MULTIMEDIA STANDARDS AND SOFTWARE 4O ENSURE THAT YOU ARE RUNNING THE
LATEST VERSION OF )CECAST WITH ALL OR MOST FEATURES YOU SHOULD INSTALL
FROM AN OFFICIAL 8IPH/RG REPOSITORY 6ISIT THE LIST OF OFFICIAL REPOSITORIES AT
HTTPSWIKIXIPHORG)CECAST?3ERVER)NSTALLING?LATEST?VERSION?OFFICIAL?8IPH?
REPOSITORIES AND FOLLOW THE INSTRUCTIONS ON THAT PAGE TO ADD THE )CECAST
REPOSITORY FOR YOUR DISTRIBUTION 4HEN INSTALL USING YOUR SYSTEMS PACKAGE
MANAGER /N $EBIAN
BASED SYSTEMS SUCH AS 5BUNTU YOU MAY BE ASKED
TO hCONFIGURE )CECASTv DURING PACKAGE INSTALLATION SELECT hNOv AS YOU WILL
CONFIGURE THE SERVER MANUALLY IF YOU ARE FOLLOWING ALONG WITH THIS ARTICLE
/PEN THE )CECAST CONFIGURATION FILE USING YOUR PREFERRED TEXT EDITOR /N
$EBIAN
BASED SYSTEMS THE FILE IS LOCATED AT ETCICECASTICECASTXML 4HE
LOCATION ON OTHER SYSTEMS MAY DIFFER CHECK YOUR PACKAGES DOCUMENTATION
FOR THE CORRECT PATH 4HE CONFIGURATION FILE IS IN 8-, FORMAT AND IS DIVIDED
INTO SEVERAL SECTIONS &IRST ENTER YOUR SERVERS LOCATION AND EMAIL INTO THE
LOCATION AND ADMIN FIELDS RESPECTIVELYFOR EXAMPLE
<sources>10</sources>
<burst-on-connect>0</burst-on-connect>
<burst-size>0</burst-size>
<source-password>dontpanic</source-password>
<relay-password>dontpanic42</relay-password>
<admin-user>zaphod</admin-user>
<admin-password>2Headsarebetterthanone!</admin-password>
%NTER YOUR SYSTEMS FULLY QUALIFIED DOMAIN NAME IN THE HOSTNAME FIELD
<hostname>example.com</hostname>
3AVE AND CLOSE THE FILE )F YOU EDITED THE FILE AS ROOT YOULL NEED TO RESET
ITS PERMISSIONS /N $EBIAN
BASED SYSTEMS )CECAST RUNS UNDER USER ICECAST
systems, the adduser and gpasswd utilities allow you to create users
AND ADD THEM TO GROUPS RESPECTIVELY /N $EBIAN
BASED SYSTEMS RUN THE
FOLLOWING COMMANDS AS ROOT TO ADD A NEW USER AND GRANT IT SUDO ACCESS
FOR OTHER SYSTEMS REFER TO THE DOCUMENTATION ,ET username represent
THE USER NAME OF THE NEW USER
adduser username
gpasswd -a username sudo
0ERFORMING AS YOUR NON
ROOT USER INITIALIZE THE /#AML 0ACKAGE -ANAGER
by running:
opam init
!NSWER hYESv WHEN ASKED TO MODIFY YOUR PROFILE THIS WILL PLACE
,IQUIDSOAP ON YOUR PATH AND ALLOW IT TO BE EXECUTED WHEN YOU TYPE ITS
NAME 4O APPLY OPAM CHANGES RUN
SYSTEMS PACKAGE MANAGER THEN RUN THE FOLLOWING AS YOUR NON ROOT USER
.OW OPEN THE FILE MAINLIQ IN THE LIQUIDSOAP
DAEMON DIRECTORY !T THIS
POINT THAT FILE JUST CONTAINS
output.dummy(blank())
#Settings
set("server.telnet", true)
set("server.telnet.port", 1234)
set("harbor.bind_addr","0.0.0.0")
# Music playlists
music1 = playlist("~/music/music1")
# Some jingles
jingles = playlist("~/music/jingles")
# If something goes wrong, we'll play this
security = single("~/music/default.ogg")
# Start building the feed with music
radio = random([music1])
# Add the security, requests and smart crossfade
radio = fallback(track_sensitive = false,
´[smart_crossfade(fallback([request.queue(id="request"),
´radio])),security])
# Now add some jingles
radio = random(weights = [1, 7],[jingles, radio]) # This plays
# a jingle once every approximately seven songs, change 7 to
# another number to change this
# Add a skip command for the music stream
server.register(
usage="skip",
description="Skip the current song.",
"skip",
fun(_) -> begin source.skip(radio) "Done!" end
#Add support for live streams.
live =
audio_to_stereo(input.harbor("live",port=8080,password=
´"dontpanic1764",buffer=1.0)) #dontpanic1764 is the
# password used to connect a live stream;; it can (and should) be
# different from the source-password in icecast.xml.
full = fallback(track_sensitive=false,
[live,radio])
# Dump archives
file_name = '~/archives/%Y-%m-%d-%H:%M:%S$(if $(title),
´"-$(title)","").ogg'
output.file(%vorbis,file_name,live,fallible=true)
# Stream it out
output.icecast(%mp3.vbr,
host = "localhost", port = 8000,
password = "dontpanic", mount = "music.mp3",
name="myStation Music Service", description="This is the myStation
PLAYLIST ARE PLAYED 4O DO THIS CREATE DIRECTORIES UNDER MUSIC FOR EACH
PLAYLIST NAMED MUSIC MUSIC AND SO ON 4HEN JUST COPY THE music1
LINE IN THE MUSIC PLAYLISTS SECTION OF MAINLIQ CHANGING THE REFERENCE TO
music1 accordingly.
4O INSERT SONGS RANDOMLY FROM THE NEW PLAYLIST EVERY N SONGS IN
the stream, add a line below radio = random([music1]) , where n
REPRESENTS THE APPROXIMATE NUMBER OF SONGS TO PLAY BEFORE INSERTING A
SONG FROM THE NEW PLAYLIST
# Music playlists
music1 = playlist("~/music/music1")
music2 = playlist("~/music/music2")
music3 = playlist("~/music/music3")
...
radio = random([music1])
radio = random(weights = [1, 6],[music2, radio])
radio = random(weights = [1,12],[music3, radio])
File-Based Playlists
)N THE BASE CONFIGURATION ,IQUIDSOAP WILL SEARCH THE DIRECTORY
^MUSICMUSIC RECURSIVELY FOR SONGS TO PLAY (OWEVER YOU ALSO CAN GIVE
,IQUIDSOAP A NEWLINE
DELIMITED TEXT FILE OF PATHS TO SONGS EITHER LOCALLY
ON YOUR SYSTEM OR ON THE WEB 4O DO THIS SIMPLY CHANGE THE PATH TO A
DIRECTORY TO A PATH TO YOUR TEXT FILE LIKE THIS
music1 = playlist("~/music/music1.pls")
Sequential Playback
"Y DEFAULT ,IQUIDSOAP PLAYS TRACKS IN RANDOM ORDER )F YOU WANT TO PLAY TRACKS
SEQUENTIALLY ADD mode="sequential" TO YOUR PLAYLIST DEFINITION LIKE THIS
music1 = playlist("~/music/music1",mode="sequential")
3EQUENTIAL PLAYBACK IS BEST COMBINED WITH FILE
BASED PLAYLISTS AS THEY BOTH
GIVE YOU TOTAL CONTROL OVER THE ORDER IN WHICH TRACKS ARE PLAYED BY ,IQUIDSOAP
music1 = nrj(playlist("~/music/music1"))
Finishing Up
%DIT THE CONFIGURATION AS NECESSARY THEN SAVE AND CLOSE THE FILE
2ECORD A FILE TO ^MUSICDEFAULTOGG THIS FILE WILL BE PLAYED WHEN
,IQUIDSOAP CANNOT FIND OTHER TRACKS TO PLAY 4HE FILE SHOULD TELL LISTENERS
THAT THE STREAM IS DOWN AND GIVE THEM INFORMATION FOR CONTACTING YOU
TO NOTIFY YOU OF THE PROBLEM 0OPULATE THE PLAYLISTS WITH MUSIC THEN
START ,IQUIDSOAP WITH THE FOLLOWING COMMAND
%NABLE IT ON BOOT
Q Port: 8080
Q -OUNT MOUNTPOINT LIVE OR LIVE FOR A LIVE STREAM )F YOU ENABLED THE
ability to talk over automated programming, replace live with mic to
talk over the music.
Q USERNAME SOURCE SOME CLIENTS DONT PROMPT FOR A USER NAME IN WHICH
CASE SOURCE IS THE IMPLIED DEFAULT
9OU CAN STREAM IN /GG 6ORBIS OR -0 /GG /PUS MAY OR MAY NOT WORK
depending on your source client.
/NCE CONNECTED YOU CAN REQUEST A SONG WITH THE FOLLOWING WHERE
uri IS AN ABSOLUTE PATH TO AN AUDIO FILE ON YOUR SYSTEM OR A 52, OF AN
AUDIO FILE ON THE INTERNET
request.push uri
4O SKIP THE CURRENTLY PLAYING SONG AND IMMEDIATELY PLAY THE NEXT
one, simply type skip .
&OR A LIST OF ALL AVAILABLE COMMANDS TYPE help , or type help
FOLLOWED BY THE NAME OF A COMMAND FOR USAGE INFORMATION ON A
particular command.
4O END YOUR SESSION TYPE quit .
)N ADDITION TO ,IQUIDSOAPS TELNET INTERFACE )CECAST ALSO HAS
A WEB
BASED ADMINISTRATIVE INTERFACE THAT YOU CAN USE TO VIEW
LISTENER STATISTICS KILL ,IQUIDSOAPS STREAMS OR MOVE LISTENERS AMONG
Bill Dengler has been a Linux user and tinkerer since age nine. He was born totally blind due
to a rare genetic condition called Norrie Disease, so he relies on a screen reader to access his
computer. He is currently pursuing an International Baccalaureate diploma. Feel free to send
him questions and comments at [email protected].
RETURN TO CONTENTS
Linux
Filesystem
Events with
inotify
Triggering scripts with incron and systemd.
CHARLES FISHER
PREVIOUS
Feature: Creating
NEXT
an Internet Radio
V
I
t is, at times, important to know when things change in the
,INUX /3 4HE USES TO WHICH SYSTEMS ARE PLACED OFTEN INCLUDE
HIGH
PRIORITY DATA THAT MUST BE PROCESSED AS SOON AS IT IS SEEN 4HE
CONVENTIONAL METHOD OF FINDING AND PROCESSING NEW FILE DATA IS TO
POLL FOR IT USUALLY WITH CRON 4HIS IS INEFFICIENT AND IT CAN TAX PERFORMANCE
UNREASONABLY IF TOO MANY POLLING EVENTS ARE FORKED TOO OFTEN
,INUX HAS AN EFFICIENT METHOD FOR ALERTING USER
SPACE PROCESSES TO
CHANGES IMPACTING FILES OF INTEREST 4HE INOTIFY ,INUX SYSTEM CALLS WERE
FIRST DISCUSSED HERE IN Linux Journal IN A ARTICLE BY 2OBERT ,OVE
HTTPWWWLINUXJOURNALCOMARTICLE WHO PRIMARILY ADDRESSED THE
BEHAVIOR OF THE NEW FEATURES FROM THE PERSPECTIVE OF #
(OWEVER THERE ALSO ARE STABLE SHELL
LEVEL UTILITIES AND NEW CLASSES OF
MONITORING DMONS FOR REGISTERING FILESYSTEM WATCHES AND REPORTING EVENTS
,INUX INSTALLATIONS USING SYSTEMD ALSO CAN ACCESS BASIC INOTIFY FUNCTIONALITY
WITH PATH UNITS 4HE INOTIFY INTERFACE DOES HAVE LIMITATIONSIT CANT
MONITOR REMOTE NETWORK
MOUNTED FILESYSTEMS THAT IS .&3 IT DOES NOT
REPORT THE USERID INVOLVED IN THE EVENT IT DOES NOT WORK WITH PROC OR OTHER
PSEUDO
FILESYSTEMS AND MMAP OPERATIONS DO NOT TRIGGER IT AMONG OTHER
CONCERNS %VEN WITH THESE LIMITATIONS IT IS A TREMENDOUSLY USEFUL FEATURE
4HIS ARTICLE COMPLETES THE WORK BEGUN BY ,OVE AND GIVES EVERYONE
who can write a Bourne shell script or set a crontab the ability to react
TO FILESYSTEM CHANGES
Dependencies Resolved
==============================================================
Package Arch Version Repository Size
==============================================================
Installing:
inotify-tools x86_64 3.14-8.el7 ol7_latest 50 k
Transaction Summary
==============================================================
Install 1 Package
Total download size: 50 k
Installed size: 111 k
Is this ok [y/d/N]: y
Downloading packages:
inotify-tools-3.14-8.el7.x86_64.rpm | 50 kB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
Installing : inotify-tools-3.14-8.el7.x86_64 1/1
Verifying : inotify-tools-3.14-8.el7.x86_64 1/1
Installed:
inotify-tools.x86_64 0:3.14-8.el7
Complete!
$ touch /tmp/hello
$ cp /etc/passwd /tmp
$ rm /tmp/passwd
$ touch /tmp/goodbye
$ rm /tmp/hello /tmp/goodbye
! COMMON APPLICATION IS TESTING FOR THE ARRIVAL OF NEW FILES 3INCE INOTIFY
MUST BE GIVEN THE NAME OF AN EXISTING FILESYSTEM OBJECT TO WATCH THE
DIRECTORY CONTAINING THE NEW FILES IS PROVIDED ! TRIGGER OF INTEREST IS ALSO
EASY TO PROVIDENEW FILES SHOULD BE COMPLETE AND READY FOR PROCESSING
when the close_write TRIGGER FIRES "ELOW IS AN EXAMPLE SCRIPT TO WATCH
FOR THESE EVENTS
#!/bin/sh
unset IFS # default of space, tab and nl
# Wait for filesystem events
inotifywait -m -e close_write \
/tmp /var/tmp /home/oracle/arch-orcl/ |
while read dir op file
do [[ "${dir}" == '/tmp/' && "${file}" == *.txt ]] &&
echo "Import job should start on $file ($dir $op)."
[[ "${dir}" == '/var/tmp/' && "${file}" == CLOSE_WEEK*.txt ]] &&
echo Weekly backup is ready.
[[ "${dir}" == '/home/oracle/arch-orcl/' && "${file}" == *.ARC ]] &&
su - oracle -c 'ORACLE_SID=orcl ~oracle/bin/log_shipper' &
[[ "${dir}" == '/tmp/' && "${file}" == SHUT ]] && break
((step+=1))
done
echo We processed $step events.
4HERE ARE A FEW PROBLEMS WITH THE SCRIPT AS PRESENTEDOF ALL THE
AVAILABLE SHELLS ON ,INUX ONLY KSH THAT IS THE !44 +ORN SHELL WILL
REPORT THE hSTEPv VARIABLE CORRECTLY AT THE END OF THE SCRIPT !LL THE OTHER
shells will report this variable as null.
4HE REASON FOR THIS BEHAVIOR CAN BE FOUND IN A BRIEF EXPLANATION ON
THE MANUAL PAGE FOR "ASH h%ACH COMMAND IN A PIPELINE IS EXECUTED AS A
SEPARATE PROCESS IE IN A SUBSHELL v 4HE -IR"3$ CLONE OF THE +ORN SHELL
General features of at&t ksh88 that are not (yet) in pdksh:
- the last command of a pipeline is not run in the parent shell
- `echo foo | read bar;; echo $bar' prints foo in at&t ksh, nothing
in pdksh (ie, the read is done in a separate process in pdksh).
- in pdksh, if the last command of a pipeline is a shell builtin, it
is not executed in the parent shell, so "echo a b | read foo bar"
does not set foo and bar in the parent shell (at&t ksh will).
This may get fixed in the future, but it may take a while.
$ man pdksh | col -b | sed -n '/BTW, the/,/aware/p'
BTW, the most frequently reported bug is
echo hi | read a;; echo $a # Does not print hi
I'm aware of this and there is no need to report it.
# ./inotify.sh
%XAMINING THE PROCESS LIST WHILE THE SCRIPT IS RUNNING YOUgLL ALSO SEE TWO
SHELLS ONE FORKED FOR THE CONTROL STRUCTURE
# ./inotify.ksh93
Setting up watches.
Watches established.
Import job should start on newdata.txt (/tmp/ CLOSE_WRITE,CLOSE).
Weekly backup is ready.
We processed 2 events.
$ pps inot
PID TTY STAT TIME COMMAND
3583 pts/1 S+ 0:00 /bin/ksh93 ./inotify.sh
3584 pts/1 S+ 0:00 inotifywait -m -e close_write /tmp /var/tmp
#!/bin/mksh
unset IFS # default of space, tab and nl
# Wait for filesystem events
inotifywait -m -e close_write \
/tmp/ /var/tmp/ /home/oracle/arch-orcl/ \
2>/dev/null |& # Launch as Korn coprocess
while read -p dir op file # Read from Korn coprocess
do [[ "${dir}" == '/tmp/' && "${file}" == *.txt ]] &&
print "Import job should start on $file ($dir $op)."
[[ "${dir}" == '/var/tmp/' && "${file}" == CLOSE_WEEK*.txt ]] &&
print Weekly backup is ready.
[[ "${dir}" == '/home/oracle/arch-orcl/' && "${file}" == *.ARC ]] &&
su - oracle -c 'ORACLE_SID=orcl ~oracle/bin/log_shipper' &
[[ "${dir}" == '/tmp/' && "${file}" == SHUT ]] && break
((step+=1))
done
echo We processed $step events.
Q 4HE scp program will be used to copy the log to a remote server,
AND IT SHOULD BE CALLED REPEATEDLY UNTIL IT RETURNS SUCCESSFULLY
Q )M CALLING THE GENUINE +ORN SHELL FOR THIS ACTIVITY AS IT IS THE
MOST CAPABLE SCRIPTING SHELL AND ) DONT WANT ANY SURPRISES
# cat ~oracle/archutils/process_logs
#!/bin/ksh93
set -euo pipefail
IFS=$'\n\t' # http://redsymbol.net/articles/unofficial-bash-strict-mode/
(
flock -n 9 || exit 1 # Critical section-allow only one process.
ARCHDIR=~oracle/arch-${ORACLE_SID}
APREFIX=${ORACLE_SID}_1_
ASUFFIX=.ARC
CURLOG=$(<~oracle/.curlog-$ORACLE_SID)
File="${ARCHDIR}/${APREFIX}${CURLOG}${ASUFFIX}"
[[ ! -f "$File" ]] && exit
while [[ -f "$File" ]]
do ((NEXTCURLOG=CURLOG+1))
NextFile="${ARCHDIR}/${APREFIX}${NEXTCURLOG}${ASUFFIX}"
[[ ! -f "$NextFile" ]] && sleep 60 # Ensure ARCH has finished
nice /usr/local/bin/lzip -9q "$File"
until scp "${File}.lz" "yourcompany.com:~oracle/arch-$ORACLE_SID"
do sleep 5
done
CURLOG=$NEXTCURLOG
File="$NextFile"
done
echo $CURLOG > ~oracle/.curlog-$ORACLE_SID
) 9>~oracle/.processing_logs-$ORACLE_SID
4HE ABOVE SCRIPT CAN BE EXECUTED MANUALLY FOR TESTING EVEN WHILE
THE INOTIFY HANDLER IS RUNNING AS THE FLOCK PROTECTS IT
A standby server, or a DataGuard server in primitive standby
MODE CAN APPLY THE ARCHIVED LOGS AT REGULAR INTERVALS 4HE SCRIPT
BELOW FORCES A
HOUR DELAY IN LOG APPLICATION FOR THE RECOVERY
OF DROPPED OR DAMAGED OBJECTS SO INOTIFY CANNOT BE EASILY USED
IN THIS CASECRON IS A MORE REASONABLE APPROACH FOR DELAYED FILE
PROCESSING AND A RUN EVERY MINUTES WILL KEEP THE STANDBY AT THE
# cat ~oracle/archutils/delay-lock.sh
#!/bin/ksh93
(
flock -n 9 || exit 1 # Critical section-only one process.
WINDOW=43200 # 12 hours
LOG_DEST=~oracle/arch-$ORACLE_SID
OLDLOG_DEST=$LOG_DEST-applied
function fage { print $(( $(date +%s) - $(stat -c %Y "$1") ))
} # File age in seconds - Requires GNU extended date & stat
cd $LOG_DEST
of=$(ls -t | tail -1) # Oldest file in directory
[[ -z "$of" || $(fage "$of") -lt $WINDOW ]] && exit
for x in $(ls -rt) # Order by ascending file mtime
do if [[ $(fage "$x") -ge $WINDOW ]]
then y=$(basename $x .lz) # lzip compression is optional
[[ "$y" != "$x" ]] && /usr/local/bin/lzip -dkq "$x"
$ORACLE_HOME/bin/sqlplus '/ as sysdba' > /dev/null 2>&1 <<-EOF
recover standby database;;
$LOG_DEST/$y
cancel
quit
EOF
[[ "$y" != "$x" ]] && rm "$y"
mv "$x" $OLDLOG_DEST
fi
done
) 9> ~oracle/.recovering-$ORACLE_SID
Below is an example entry that was set with the -e option:
You can record a simple script and mark it with execute permission:
$ cat myincron.sh
#!/bin/sh
echo -e "path: $1 op: $2 \t file: $3" >> ~/op
$ chmod 755 myincron.sh
4HEN IF YOU REPEAT THE ORIGINAL TMP FILE MANIPULATIONS AT THE START OF
THIS ARTICLE THE SCRIPT WILL RECORD THE FOLLOWING OUTPUT
$ cat ~/op
path: /tmp/ op: IN_ATTRIB file: hello
path: /tmp/ op: IN_CREATE file: hello
path: /tmp/ op: IN_OPEN file: hello
path: /tmp/ op: IN_CLOSE_WRITE file: hello
path: /tmp/ op: IN_OPEN file: passwd
path: /tmp/ op: IN_CLOSE_WRITE file: passwd
path: /tmp/ op: IN_MODIFY file: passwd
path: /tmp/ op: IN_CREATE file: passwd
path: /tmp/ op: IN_DELETE file: passwd
path: /tmp/ op: IN_CREATE file: goodbye
path: /tmp/ op: IN_ATTRIB file: goodbye
path: /tmp/ op: IN_OPEN file: goodbye
path: /tmp/ op: IN_CLOSE_WRITE file: goodbye
path: /tmp/ op: IN_DELETE file: hello
path: /tmp/ op: IN_DELETE file: goodbye
IN_DONT_FOLLOW Don't dereference pathname if it is a symbolic link
IN_ONESHOT Monitor pathname for only one event
IN_ONLYDIR Only watch pathname if it is a directory
Additionally, there is a symbol which doesn't appear in the inotify sym-
bol set. It is IN_NO_LOOP. This symbol disables monitoring events until
the current one is completely handled (until its child process exits).
Note that when a systemd path unit spawns a shell script, the
$HOME AND TILDE ~ OPERATOR FOR THE OWNERS HOME DIRECTORY MAY
NOT BE DEFINED 5SING THE TILDE OPERATOR TO REFERENCE ANOTHER
USERS HOME DIRECTORY FOR EXAMPLE ^NOBODY DOES WORK EVEN
WHEN APPLIED TO THE SELF
SAME USER RUNNING THE SCRIPT 4HE
/RACLE SCRIPT ABOVE WAS EXPLICIT AND DID NOT REFERENCE ^ WITHOUT
SPECIFYING THE TARGET USER SO )M USING IT AS AN EXAMPLE HERE
5SING INOTIFY TRIGGERS WITH SYSTEMD PATH UNITS REQUIRES TWO FILES
$ cat /etc/systemd/system/oralog.path
[Unit]
Description=Oracle Archivelog Monitoring
Documentation=http://docs.yourserver.com
[Path]
PathChanged=/home/oracle/arch-orcl/
[Install]
WantedBy=multi-user.target
$ cat /etc/systemd/system/oralog.service
[Unit]
Description=Oracle Archivelog Monitoring
Documentation=http://docs.yourserver.com
[Service]
Type=oneshot
Environment=ORACLE_SID=orcl
ExecStart=/bin/sh -c '/root/process_logs >> /tmp/plog.txt 2>&1'
4HE oneshot parameter above alerts systemd that the program that it
FORKS IS EXPECTED TO EXIT AND SHOULD NOT BE RESPAWNED AUTOMATICALLYTHE
RESTARTS ARE LIMITED TO TRIGGERS FROM THE PATH UNIT 4HE ABOVE SERVICE
CONFIGURATION WILL PROVIDE THE BEST OPTIONS FOR LOGGINGDIVERT THEM TO
DEVNULL IF THEY ARE NOT NEEDED
5SE systemctl start ON THE PATH UNIT TO BEGIN MONITORINGA COMMON
error is using it on the service unit, which will directly run the handler only
ONCE %NABLE THE PATH UNIT IF THE MONITORING SHOULD SURVIVE A REBOOT
!LTHOUGH THIS LIMITED FUNCTIONALITY MAY BE ENOUGH FOR SOME CASUAL USES
OF INOTIFY IT IS A SHAME THAT THE FULL FUNCTIONALITY OF INOTIFYWAIT AND INCRON
are not represented here. Perhaps it will come in time.
Conclusion
!LTHOUGH THE INOTIFY TOOLS ARE POWERFUL THEY DO HAVE LIMITATIONS 4O REPEAT
THEM INOTIFY CANNOT MONITOR REMOTE .&3 FILESYSTEMS IT CANNOT REPORT THE
USERID INVOLVED IN A TRIGGERING EVENT IT DOES NOT WORK WITH PROC OR OTHER
PSEUDO
FILESYSTEMS MMAP OPERATIONS DO NOT TRIGGER IT AND THE INOTIFY
QUEUE CAN OVERFLOW RESULTING IN LOST EVENTS AMONG OTHER CONCERNS
%VEN WITH THESE WEAKNESSES THE EFFICIENCY OF INOTIFY IS SUPERIOR TO MOST
OTHER APPROACHES FOR IMMEDIATE NOTIFICATIONS OF FILESYSTEM ACTIVITY )T ALSO
IS QUITE FLEXIBLE AND ALTHOUGH THE CLOSE
WRITE DIRECTORY TRIGGER SHOULD
SUFFICE FOR MOST USAGE IT HAS AMPLE TOOLS FOR COVERING SPECIAL USE CASES
)N ANY EVENT IT IS PRODUCTIVE TO REPLACE POLLING ACTIVITY WITH INOTIFY
watches, and system administrators should be liberal in educating the
user community that the classic crontab is not an appropriate place to
CHECK FOR NEW FILES 2ECALCITRANT USERS SHOULD BE CONFINED TO 5LTRIX ON
A 6!8 UNTIL THEY DEVELOP SUFFICIENT APPRECIATION FOR MODERN TOOLS AND
APPROACHES WHICH SHOULD RESULT IN MORE EFFICIENT ,INUX SYSTEMS AND
happier administrators. Q
Charles Fisher has an electrical engineering degree from the University of Iowa and works as a
systems and database administrator for a Fortune 500 mining and manufacturing corporation.
He has previously published both journal articles and technical manuals on Linux for UnixWorld
and other McGraw-Hill publications.
Archiving /etc/passwd
Tracking changes to the password file involves many different types of
inotify triggering events. The vipw utility commonly will make changes
to a temporary file, then clobber the original with it. This can be seen
when the inode number changes:
For this reason, all inotify triggering events should be considered when
#!/bin/sh
# This script tracks changes to the /etc/passwd file from inotify.
# Uses RCS for archiving. Watch for UID zero.
[email protected]
TPDIR=~/track_passwd
cd $TPDIR
if diff -q /etc/passwd $TPDIR/passwd
then exit # they are the same
else sleep 5 # let passwd settle
diff /etc/passwd $TPDIR/passwd 2>&1 | # they are DIFFERENT
mail -s "/etc/passwd changes $(hostname -s)" "$PWMAILS"
cp -f /etc/passwd $TPDIR # copy for checkin
# "SCCS, the source motel! Programs check in and never check out!"
# -- Ken Thompson
rcs -q -l passwd # lock the archive
ci -q -m_ passwd # check in new ver
co -q passwd # drop the new copy
fi > /dev/null 2>&1
Here is an example email from the script for the above chfn operation:
-----Original Message-----
From: root [mailto:[email protected]]
Sent: Thursday, July 06, 2017 2:35 PM
To: Fisher, Charles J. <[email protected]>;;
Subject: /etc/passwd changes myhost
57c57
< fishecj:x:123:456:Fisher, Charles J.:/home/fishecj:/bin/bash
---
> fishecj:x:123:456:Fisher, Charles J.:/home/fishecj:/bin/csh
RETURN TO CONTENTS
)F YOU FEEL A BIT OVERWHELMED DONT WORRY 4HIS GUIDE LAYS OUT THE VARIOUS
DATABASE OPTIONS AND ANALYTIC SOLUTIONS AVAILABLE TO MEET YOUR APPS UNIQUE NEEDS
9OULL SEE HOW DATA CAN MOVE ACROSS DATABASES AND DEVELOPMENT LANGUAGES SO YOU CAN WORK IN YOUR FAVORITE
ENVIRONMENT WITHOUT THE FRICTION AND PRODUCTIVITY LOSS OF THE PAST
Sponsor: IBM
> https://geekguide.linuxjournal.com/content/field-guide-world-modern-data-stores
$EVELOPERS AND )4 ALIKE ARE FINDING IT DIFFICULT AND SOMETIMES EVEN IMPOSSIBLE TO QUICKLY INCORPORATE ALL OF THIS DATA INTO
THE RELATIONAL MODEL WHILE DYNAMICALLY SCALING TO MAINTAIN THE PERFORMANCE LEVELS USERS DEMAND 4HIS IS CAUSING MANY TO
LOOK AT .O31, DATABASES FOR THE FLEXIBILITY THEY OFFER AND IS A BIG REASON WHY THE GLOBAL .O31, MARKET IS FORECASTED TO
NEARLY DOUBLE AND REACH 53$ BILLION IN
Sponsor: IBM
> https://geekguide.linuxjournal.com/content/why-nosql-your-database-options-new-non-relational-world
4HERE ARE GOOD REASONS WHY ITgS HARD TO FIGURE OUT WHAT CONSUMES RESOURCES LIKE #05 )/ AND MEMORY IN
A COMPLEX PIECE OF SOFTWARE SUCH AS A DATABASE 4HE FIRST PROBLEM IS THAT MOST DATABASE SERVER SOFTWARE
DOESNgT OFFER ANY WAY TO MEASURE OR INSPECT THAT TYPE OF PERFORMANCE DATA 4HE DATABASE SERVER ISNgT
OBSERVABLE 4HIS PROBLEM ARISES IN TURN FROM THE COMPLEXITY OF THE DATABASE SERVER SOFTWARE AND THE WAY
IT DOES ITS WORK WHICH ACTUALLY PRECLUDES MEASURING RESOURCE CONSUMPTION ACCURATELY
3PONSOR 6IVID#ORTEX
> https://geekguide.linuxjournal.com/content/estimating-cpu-query-weighted-linear-regression
4HIS BUYERgS GUIDE IS DESIGNED TO HELP YOU UNDERSTAND WHAT DATABASE MANAGEMENT REALLY
REQUIRES SO YOUR INVESTMENTS IN A SOLUTION PROVIDE THE GREATEST POSSIBLE ULTIMATE VALUE
3PONSOR 6IVID#ORTEX
> https://geekguide.linuxjournal.com/content/database-performance-monitoring-buyer%E2%80%99s-guide
3PONSOR 6IVID#ORTEX
> https://geekguide.linuxjournal.com/content/essential-guide-queueing-theory
3PONSOR 6IVID#ORTEX
> https://geekguide.linuxjournal.com/content/sampling-stream-events-probabilistic-sketch
The Actually
Distributed
Web
DOC SEARLS
I
thought my mind was through getting blown until I
HEARD IN MID
*UNE THAT "RAVE https://brave.com
RAISED MILLION IN LESS THAN SECONDS
HTTPSTECHCRUNCHCOMBRAVE
ICO
MILLION
SECONDS
BRENDAN
EICH THOUGH AN )#/ )NITIAL #OIN
/FFERING HTTPWWWINVESTOPEDIACOMTERMSIINITIAL
COIN
OFFERING
ICOASP ) DID KNOW )#/S WERE HOT STUFF ) ALSO
KNEW "RAVES )#/ WAS ABOUT TO HAPPEN BECAUSE "RENDAN
%ICH HTTPSENWIKIPEDIAORGWIKI"RENDAN?%ICH THE
COMPANY #%/ SAID SO OVER BREAKFAST TWO DAYS EARLIER 3O
MY SEAT BELT WAS FASTENED BUT THE ACCELERATION OF THE )#/
STILL LEFT MY MENTAL ASS ON THE PAVEMENT TWO COUNTIES BACK
3INCE THEN )VE HYPER
FOCUSED ON CRYPTOCURRENCIES
https://en.wikipedia.org/wiki/Cryptocurrency TOKENS
OWN BUSINESS PURPOSES CHIEF AMONG WHICH IS TRACKING YOU LIKE AN ANIMAL
4HERE ARE PERHAPS A BILLION OR MORE SERVER
COWS NOW EACH WITH ITS OWN
hBRANDv AS MARKETERS AND CATTLE OWNERS LIKE TO SAY
4HIS IS NOT WHAT THE .ETS FOUNDERS HAD IN MIND .OR WAS IT WHAT 4IM
"ERNERS
,EE MEANT FOR HIS 7ORLD 7IDE 7EB OF HYPERTEXT DOCUMENTS TO
BECOME "UT ITS WHAT WEVE GOT AND ITS GETTING WORSE
3O ) WANT TO SHARE WHAT )M THINKING ABOUT THIS WHOLE NEW THING WHICH
HAS NO ONE LABEL IN FAITH THAT WE MIGHT BRING A ,INUX
ISH SENSIBILITY TO IT
) AM ALSO ENCOURAGED THAT THE ,INUX &OUNDATION IS ALREADY AHEAD OF
THE CURVE WITH THE (YPERLEDGER 0ROJECT https://www.hyperledger.org
hAN OPEN SOURCE COLLABORATIVE EFFORT CREATED TO ADVANCE CROSS
INDUSTRY
BLOCKCHAIN TECHNOLOGIESv 4HOSE INDUSTRIES ALREADY INCLUDE hLEADERS
IN FINANCE BANKING )NTERNET OF 4HINGS SUPPLY CHAINS MANUFACTURING
AND 4ECHNOLOGYv
4HE ASPIRATIONS FOR NEW CURRENCIES TOKENS DISTRIBUTED LEDGERS AND
PROGRAMMING ENVIRONMENTS IN THIS EMERGING MEGA
SPACE ARE ALSO IN SOME
WAYS SIMILAR TO THOSE OF ,INUX EARLY ON 2EMEMBER ,INUS TALK ABOUT
hWORLD DOMINATIONv HTTPCATBORGESRWRITINGSWORLD
DOMINATIONWORLD
DOMINATION
HTML TWO DECADES BEFORE IT CAME TRUE )TS LIKE THAT
without the Linus.
"OTH THE INTERNET AND ,INUX WERE EASY CALLS IN THE EARLY S EVEN
IF RELATIVELY FEW PEOPLE CALLED THEM /N THE NETWORK SIDE CLOSED
hONLINE SERVICESv SUCH AS !/, AND #OMPUSERVE WERE THEIR OWN BEST
ARGUMENT FOR A NETWORK OF NETWORKS THAT SUPPORTED EVERYBODY AND
FAVORED NOBODY 3O DID THE CLOSED ISOLATED AND DOOMED NETWORKS
inside every large enterprise. On the operating system side, BSD was
ALREADY PROVING ITSELF AS AN OPEN ALTERNATIVE TO COUNTLESS WARRING AND
CLOSED 5.)8ES AND WAS BUSY FORKING INTO THREE DIFFERENT BRANCHES
HELPING OPEN THE WAY FOR ,INUX
.OW THE ONE CLEAR THING IS THAT THE INTERNETS ORIGINAL PROMISE OF
SUPPORTING EVERYBODY AND FAVORING NOBODY IS STILL UNDER
FULFILLED
MEANING THE OPPORTUNITIES ARE STILL VAST REGARDLESS OF HOW MUCH OF
LIFE ON THE NET IS LIVED INSIDE THE FEUDAL CASTLES OF WHAT IN %UROPE THEY
call GAFA: Google, Amazon, Facebook and Apple.
4HE KEY TO MITIGATING THE MARKET POWER OF THE WEB GIANTS IS OPEN PROTOCOLS
FURTHER UP THE STACK HTTPWWWUSVCOMBLOGFAT
PROTOCOLS )F AN OPEN
PUBLIC COMMUNICATIONS NETWORK THE )NTERNET UNLOCKED THE DISTRIBUTION
bottlenecks that characterized the media industry, an open public data
LAYER IS THE KEY TO UNLEASHING ANOTHER WAVE OF INNOVATION )T IS THE MISSION
OF 0ROTOCOL ,ABS TO COORDINATE THE EFFORTS OF A LARGE AND PASSIONATE
COMMUNITY OF OPEN SOURCE CONTRIBUTORS TO CREATE THESE PROTOCOLS
Q 7HAT DOES THE MEDIUM RETRIEVE THAT HAD BEEN OBSOLESCED EARLIER
Q 7HAT DOES THE MEDIUM REVERSE OR FLIP INTO WHEN PUSHED TO EXTREMES
Figure 2. Marshall
McLuhan’s Framework
3O LETS DROP cryptocurrencies IN THE MIDDLE OF THAT -Y FIRST Hmm SAYS THEY
Q %NHANCE EXCHANGE
ADVERTISER INDEX
Thank you as always for supporting our advertisers by buying their products!
ADVERTISER URL PAGE #
ATTENTION ADVERTISERS
!LL 4HINGS /PEN HTTPWWW!LL4HINGS/PENORG
The Linux Journal brand’s following has grown
$RUPALIZEME HTTPDRUPALIZEME
(0# 7ALLSTREET HTTPWWWFLAGGMGMTCOMHPC to a monthly readership nearly one million strong.
)NTER$RONE HTTPWWW)NTER$RONECOM
Encompassing the magazine, Web site, newsletters
0EER (OSTING HTTPGOPEERCOMLINUX
3ILICON -ECHANICS HTTPWWWSILICONMECHANICSCOM and much more, Linux Journal offers the ideal con-
353% HTTPSUSECOMSTORAGE tent environment to help you reach your marketing
6ISION HTTPPRECISIONAGVISIONCOM
7I34%- HTTPWWWWOMENINSTEMCONFERENCECOM objectives. For more information, please visit
7OMEN )N ,INUX 3UMMIT HTTPWOMENINLINUXCOM http://www.linuxjournal.com/advertising.
Go to http://drupalize.me and
get Drupalized today!
break down
your innovation barriers
power your business to its full potential
When you’re presented with new opportunities, you want to focus on turning
them into successes, not whether your IT solution can support them.
Peer 1 Hosting powers your business with our wholly owned FastFiber NetworkTM,
solutions that are secure, scalable, and customized for your business.