Tag: Linux

  • 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!

  • For the purpose of writing this article I’m going to use the following definition of “operating system”. There are other definitions and I’m not claiming this is the right one. An operating system is a unit of software that you can install in a computer and will let you use the computer, thought a set of utilities or program in one way or another. (more…)