Tag: /etc

  • First and foremost I’m a coder, a coder who strongly believes in revision control. Second I am also a sysadmin; but only by accident. I have some servers and someone has to take care of them. I’m not a good sysadmin because I don’t have any interest on it so I learn as little as possible and also because I don’t want to be good at it and get stuck doing that all the time. What I love is to code.

    I’m always scare of touching a file in /etc. What if I break something? I decided to treat /etc the same way I treat my software (where I am generally not afraid of touching anything). I decided to use revision control. So far I’ve never had to roll back a change in /etc, but it gives me a big peace of mind knowing that I can.

    In the days of CVS and Subversion I thought about it, but I’ve never done it. It was just too cumbersome. But DVCS changed that, it made it trivial. That’s why I believe DVCS is a breakthru. Essentially what you need to revision-control your /etc with Git is to go to /etc and turn it into a repository:

    cd /etc
    git init

    Done. It’s now a repo. Then, submit everything in there.

    git add .
    git commit -am "Initial commit. Before today it's prehistory, after today it's fun!"

    From now on every time you modify a file you can do

    git add <filename>
    git commit -m "Description of the change to <filename>"

    where <filename> is one or many files. Or if you are lazy you can also do:

    git commit -am "Description to all the changes."

    which will commit all pending changes. To see your pending changes do:

    git status

    and

    git diff

    When there are new files, you add them all with

    git add .

    and if some files were remove, you have to run

    git add -u .

    to be sure that they are remove in the repo as well (otherwise they’ll stay as pending changes forever).

    That’s essentially all the commands I use when using git and doing sysadmin. If you ever have to do a rollback, merge, branch, etc, you’ll need to learn git for real.

    One last thing. I often forget to commit my changes in /etc, so I created this script:

    #!/usr/bin/env sh
    
    cd /etc
    git status | grep -v "On branch master" | grep -v "nothing to commit"
    true # Don't return 1, which is what git status does when there's nothing to do.

    on /etc/cron.daily/git-status which reminds me, daily, of my pending changes.

    Hope it helps!