Script für Konfigurationsmanagement mit Mercurial

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche


Dokumentation

Dieses Script wird im Artikel Konfigurationsmanagement mit Mercurial benötigt.

Folgende Möglichkeiten der Shell werden genutzt:

  • Auswerten des Returncodes eines Programms: $?
  • Test, ob Verzeichnis existiert: -d
  • "Here"-Dokument: Der Text zwischen <<EOS und EOS wird in eine Temporärdatei kopiert und diese dem Programm anstelle von <<EOS übergeben.
  • Nutzen von Zeilen einer Datei in der Shell: for line in $(hg stat) ...

Folgende (eher seltene) Optionen von Programmen werden demonstriert:

  • find
    • Kombination von Bedingungen: Klammern, -a
    • Negieren einer Bedingung: -not
    • Vergleich mit dem ganzen Dateinamen (inclusive Pfad): -path
  • Kombination von find und xarg
    • Zusammenarbeit von -print0 in find und -0 in xarg

Script

#! /bin/bash
# Richtet ein lokales Mercurial Repository fuer /etc ein.
#
ID=$(id -u)
if [ $ID != 0 ] ; then
  echo "Nur root darf das!"
  exit 1
fi
grep -i username ~/.hgrc >/dev/null
if [ $? != 0 ] ; then
        echo "+++ Keine Mercurial-Installation gefunden: ~/.hgrc enthaelt kein [gui].username = name <email>"                                                                                                 
        exit 1                                                                                         
fi                                                                                                     
cd /etc
echo "Links werden gesichert..."
find -type l -ls >etc_links.txt
if [ ! -d .hg ] ; then
  echo "Repository wird initialisiert..."      
  hg init
fi
echo "Dateien werden ins Repository uebernommen..."
find \( -type f -a -not -path "./.hg/*" \) -print0 | xargs -0r hg add 
if [ ! -f .hgignore ] ; then
  echo ".hgignore wird installiert..."
        cat <<EOS >.hgignore                                                                                 
syntax: glob                                                                                           
rcS.d/*                                                                                                
rc0.d/*
rc1.d/*
rc2.d/*
rc3.d/*
rc4.d/*
rc5.d/*
rc6.d/*
fonts/conf.d/*
apache2/sites-enabled/*
apache2/mods-enabled/*
ssl/certs/*
alternatives/*
EOS
  hg add .hgignore
fi
echo "Links in .hgignore eintragen..."
for line in $(hg stat) ; do
  if [ "$line" != "" -a "$line" != "?" -a -L "$line" ] ; then
    echo $line >>.hgignore
  fi
done
hg commit -m "init"
DATE=$(date "+%Y_%m_%d")
echo "Tag v$DATE wird erstelle..."
hg tag v$date -m "init"
echo "Zugriff nur root erlauben..."
chmod -R g-rwx .hg