Many network engineers are also tasked with maintaining systems that provide network services, those things that make the network easier to use such as DNS and DHCP or management systems that perform useful things like monitor the network, collect flow data or bestow access to the equipment by acting as bastion or jump hosts.  In many instances, robust and high availability services run on UNIX, Linux or BSD systems for stability and reliability, so those that manage these systems need to be well versed system admins as well as whatever their other job functions are.  Hybridization, if you will.  Nothing new, nothing unexpected.  However, one of the banes of these tasks is having a uniform shell environment across platforms and systems. Why create a customized environment with aliases, environmental variables and other personalized settings more than once? I have struggled with how to do this efficiently across desktop, server, jumphosts and other daily use systems for years. Most of the important variables are controlled by dotfiles.   In what I am hoping is the start of a short series of “UNIX stuff for networking folks”, I will explain how I did this for myself. UNIX and Linux admins have been dealing with dotfiles forever. GitHub even has a repo dedicated to it.  For my environment, I chose to go with Briefcase and BitBucket.  Briefcase because it has mechanisms for stripping out sensitive information if needed and bitbucket because I can have private repos without paying money.  This can all certainly be done with local git repos or github and without briefcase. Briefcase is really straightforward to install, it’s just a ruby gem, so gem install briefcase is all that is needed to get it on your machine.  OSX has it by default.  On my machine I needed to tosudo gem update —system before it would install.  Your mileage may vary Once it’s installed, just add your files.  I switched to bash, so I needed to import .bashrc and .bash_profile, but I wanted to make sure I had a backup just in case.``` mkdir -p tmp/dotfiles mv .bashrc tmp/dotfiles/ mv .bash_profile tmp/dotfiles/

briefcase import ~/.bashrc
briefcase import ~/.bash\_profile

briefcase git remote add origin git@repo.forwardingplane.net:buraglio/briefcase-dotfiles.git

briefcase git commit -am "Initial newhost commit"

briefcase git checkout origin master

briefcase sync

This should output something like this:``` Synchronizing dotfiles between /Users/buraglio/.dotfiles and /Users/buraglio Symlink verified: /Users/buraglio/.bash_profile -> /Users/buraglio/.dotfiles/bash_profile Symlink verified: /Users/buraglio/.bashrc -> /Users/buraglio/.dotfiles/bashrc Symlink verified: /Users/buraglio/.profile -> /Users/buraglio/.dotfiles/profile Symlink verified: /Users/buraglio/.README.md -> /Users/buraglio/.dotfiles/README.md

git clone git@your.repoaddress.net:username/reponame.git .dotfiles
mkdir -p tmp/dotfiles
mv .bashrc tmp/dotfiles/
mv .bash\_profile tmp/dotfiles/
briefcase sync
briefcase git branch \[newhost\]
briefcase git checkout \[newhost\]

…Make changes… briefcase git commit -am "Initial newhost commit" briefcase git push origin [newhost] There you have it, easily backed up and distributed environment control.  I’m planning to add etckeeper to this process next.