etckepper: Versionskontrolle und Backup vom Linux /etc Verzeichnis mittels git

248 Wörter 2 Minuten Lesezeit

git lässt sich heutzutage einfach für alles verwenden, u.a. auch für ein Backup der Konfigurationsdaten eines Linuxsystems unter /etc. Am einfachsten geht das mit etckeeper.

etckeeper installieren

# Debian, Ubuntu, Mint, ...
sudo apt install etckeeper

# Archlinux
sudo pacman -S etckeeper

git als VCS aktivieren

sudo sed -i '/VCS=/ s/^#*/#/' /etc/etckeeper/etckeeper.conf
sudo sed -i 's/#VCS="git"/VCS="git"/' /etc/etckeeper/etckeeper.conf

git repository via etckeeper aktivieren

etckeeper init

etckeeper konfigurieren

sudo sed -i 's/#AVOID_DAILY_AUTOCOMMITS=1/AVOID_DAILY_AUTOCOMMITS=1' /etc/etckeeper/etckeeper.conf
sudo sed -i 's/PUSH_REMOTE=""/PUSH_REMOTE="origin"' /etc/etckeeper/etckeeper.conf
sudo systemctl enable etckeeper.timer

etckeeper macht für bislang nicht commitete Änderungen (z.B. händische Anpassungen) standardmässig einen automatischen Commit bevor ein Paketmanager eine Installation vornimmt. Damit man diese Änderungen händisch überprüfen (und in Folge auch händisch committen muss) kann eine entsprechende Option gesetzt werden. Sollte es solche Änderungen geben bricht der Paketmanager die installation ab.

sudo sed -i 's/#AVOID_COMMIT_BEFORE_INSTALL=1/AVOID_COMMIT_BEFORE_INSTALL=1/' /etc/etckeeper/etckeeper.conf

user/email für commits

Anpassen der Platzhalter root@fqdn und root@host erforderlich

sudo git --git-dir /etc/.git --config --local user.email "root@fqdn"
sudo git --git-dir /etc/.git config --local user.name "root@host"

remote repository einstellen

Anpassen der Platzhalter (hostname), (namespace)/(repository) und /home/user/.ssh/id_rsa erforderlich.

cat <<'EOF' | sudo tee -a /root/.ssh/config

Host etckeeperupstream
        HostName (hostname)
        User git
        IdentityFile /home/user/.ssh/id_rsa
EOF

sudo git --git-dir /etc/.git remote add origin etckeeperupstream:(namespace)/(repository).git
sudo git --git-dir /etc/.git push --set-upstream origin master

Dateien ignorieren

sudo sed -i '/\# end section managed by etckeeper/i *.bak' /etc/.gitignore
sudo etckeeper commit 'added *.bak to gitignore'
sudo etckeeper vcs rm --cached *.bak

etckeeper verwenden

sudo etckeeper unclean
sudo etckeeper commit 'nachricht'
sudo etckeeper vcs <git subcommand>
sudo etckeeper vcs log