From 51dc24486c059321609ae1ea557d820b17185f89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Thu, 7 Nov 2013 13:34:31 +0100 Subject: [PATCH] Git: Repositories verlinkt --- bericht/abschnitte/bs-git.tex | 41 ++++++++++++++++++++++++++-------- bericht/abschnitte/bs-pdsh.tex | 9 +++++++- www/index.html | 4 ++-- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/bericht/abschnitte/bs-git.tex b/bericht/abschnitte/bs-git.tex index 3142e40..4a82c54 100644 --- a/bericht/abschnitte/bs-git.tex +++ b/bericht/abschnitte/bs-git.tex @@ -2,7 +2,7 @@ \label{sub:git_server} Zur Verwaltung von {\tt Git} haben wir uns für \href{https://github.com/sitaramc/gitolite}{gitolite} entschieden. Dies erlaubt eine Verwaltung von Zugriffsrechten auf Repositories. -Die Authentisierung erfolgt dabei über SSH-Keys. Hier für wird ein {\tt git} Nutzer eingerichtet: +Die Authentifizierung erfolgt dabei über SSH-Keys. Hier für wird ein {\tt git} Nutzer eingerichtet: \shellcmd{useradd -m -U -r -s /bin/bash -d /srv/git git} @@ -12,9 +12,14 @@ Für die initiale Einrichtung wird der eigene SSH-Schlüssel zu gitolite hinzuge Nun kann die eigentliche Konfiguration per git heruntergeladen werden: -\shellcmd{git clone git@lctp:gitolite.git} +\shellcmd{git clone git@141.76.90.104:gitolite-admin.git} -Wir legten das Repository {\tt lctp} an. +Wir legten in dieser Konfiguration das Repository {\tt lctp} an und gaben allen +Benutzern Zugriff darauf. Die gitolite-Konfiguration befindet sich als +Git-Submodule im Verzeichnis {\tt aufgabe4/gitolite-admin}. Das lctp-Repository +wiederum lässt sich mit folgendem Befehl clonen: + +\shellcmd{git clone git@141.76.90.104:lctp.git} \subsubsection{etckeeper} @@ -22,20 +27,38 @@ Um die Konfiguration in {\tt /etc } versionierbar und damit nachvollziehbar zu m \shellcmd{yaourt -S etckeeper \&\& sudo etckeeper init} +\shellcmd{cd /etc/.git \&\& sudo git remote add git@localhost:lctp.git} + Dieses legt ein {\tt git}-Repository in {\tt /etc/.git} an und erstellt Commits bei Änderungen in {\tt /etc}. -Um die Konfiguration von den restlichen Daten zu trennen, haben wir uns entschieden, {\tt etckeeper} in einen dedizierten Branch pushen: +Um die Konfiguration vom Bericht zu trennen, haben wir uns entschieden, {\tt +etckeeper} in einen dedizierten Branch im {\tt lctp}-Repository pushen: \shellcmd{sudo git push -u origin master:etckeeper} +Dieser Branch lässt sich auf folgender Weise auschecken: + +\shellcmd{git checkout -b etckeeper origin/etckeeper} + Anders als bei anderen Paketmanagern wie {\tt apt} auf Debian, existieren in {\tt pacman} (\ref{sec:pacman}) keine Hooks. Um dennoch nach Systemaktualisierungen oder Paketinstallationen automatisch die neue Konfiguration zu commiten haben wir jeweils einen \href{https://gist.github.com/Mic92/7250403}{Wrapper-Script} für {\tt pacman} und {\tt yaourt} geschrieben und diese {\tt /usr/local/bin} abgelegt. Da in der Shell {\tt /usr/local/bin} für gewöhnlich eine höhere Priorität hat als {\tt /usr/bin} werden Programme in diesem Verzeichnis vorrangig ausgeführt. (Die Wrapper befinden sich in \emph{aufgabe4/yaourt} sowie in \emph{aufgabe4/pacman}). -Darüber hinaus haben wir das Shell-Script für tägliche automatische Commits, welches im \href{https://github.com/joeyh/etckeeper/blob/master/debian/cron.daily}{Git-Repository} von {\tt etckeeper} liegt, als cronjob installiert (siehe \emph{aufgabe4/cron.daily/etckeeper}) - +Darüber hinaus haben wir das Shell-Script für tägliche automatische Commits, +welches im +\href{https://github.com/joeyh/etckeeper/blob/master/debian/cron.daily}{Git-Repository} +(Stand 07.11.2013) +von {\tt etckeeper} liegt, als cronjob installiert (siehe +\emph{aufgabe4/cron.daily/etckeeper}). \subsubsection{Logs in git} Arch Linux setzt in der Standard-Installation {\tt journald} als Logging-Daemon ein. Dieses benutzt im Unterschied zu herkömmlichen Syslog-Varianten ein Binärformat zum Speichern. -Dieses Dateiformat eignet sich aus offensichtlichen Gründen nicht um mithilfe git verwaltet zu werden. Deswegen haben wir zusätzlich {\tt syslog-ng} installiert und {\tt journald} so konfiguriert, das dieses ebenfalls ins syslog schreibt (siehe \emph{aufgabe4/journald.conf}). -Für tägliche commits haben wir hierfür das Shell-Script {\tt git-commit-log} nach {\tt /etc/cron.daily/} installiert (siehe \emph{aufgabe4/cron.daily/git-commit-log}). Dieses pusht die Log-Dateien in den logs-Branch des lctp-Repository. +Dieses Dateiformat eignet sich aus offensichtlichen Gründen nicht um mithilfe +von git verwaltet zu werden. Deswegen haben wir zusätzlich {\tt syslog-ng} +installiert und {\tt journald} so konfiguriert, das dieses ebenfalls in das syslog schreibt (siehe \emph{aufgabe4/journald.conf}). +Für tägliche commits haben wir hierfür das Shell-Script {\tt git-commit-log} +nach {\tt /etc/cron.daily/} installiert (siehe +\emph{aufgabe4/cron.daily/git-commit-log}). Dieses pusht die Log-Dateien in den +logs-Branch des lctp-Repository. -% - journald -> syslog, cronjob +Dieser Branch lässt sich folgendermaßen auschecken: + +\shellcmd{git checkout -b logs origin/log} diff --git a/bericht/abschnitte/bs-pdsh.tex b/bericht/abschnitte/bs-pdsh.tex index 99b8b86..db1bb97 100644 --- a/bericht/abschnitte/bs-pdsh.tex +++ b/bericht/abschnitte/bs-pdsh.tex @@ -7,4 +7,11 @@ Das entsprechende Paket war nicht im offiziellen Arch Linux Repository vorhanden, deshalb haben wir es über das AUR (siehe \ref{sec:aur}) installiert. \subsubsection{Gruppenverwaltung} -Zur Verwaltung mehrerer Rechner in Gruppen (in unserem Fall Headnode und Computenodes) greift {\tt pdsh} auf die Gruppenbeschreibungsdatei {\tt /etc/genders} (siehe \emph{aufgabe5/genders}) zurück. Dort können mehrere Hosts in verschiedene Gruppen eingeteilt werden. Außerdem mussten wir noch ein Wrapper-Script in {\tt /usr/local/bin} erstellen, das die Umgebungsvariable {\tt PDSH\_RCMD\_TYPE=ssh} setzt (siehe \emph{aufgabe5/pdsh}). \ No newline at end of file +Zur Verwaltung mehrerer Rechner in Gruppen (in unserem Fall Headnode und +Computenodes) greift {\tt pdsh} auf die Gruppenbeschreibungsdatei {\tt +/etc/genders} (siehe \emph{aufgabe5/genders}) zurück. Dort können mehrere Hosts +in verschiedene Gruppen eingeteilt werden. +Um zu gewährleisten, dass pdsh den richtigen Befehl beim Verbinden benutzt, muss +die Umgebungsvariable {\tt PDS\_RCMD\_TYPE} auf den Wert {\tt ssh} gesetzt sein. Dies +lösten wir durch ein Wrapper-Script in {\tt /usr/local/bin} erstellen, das die +genannte Umgebungsvariable setzt (siehe \emph{aufgabe5/pdsh}). diff --git a/www/index.html b/www/index.html index 1d526e1..e02306d 100644 --- a/www/index.html +++ b/www/index.html @@ -115,8 +115,8 @@ pre { Host zotac0 HostName 141.76.90.104 EOF -
git clone git@zotac0:lctp.git
-
cd lctp && git submodule init && git submodule update
+
git clone git@zotac0:lctp.git lctp-gruppe4
+
cd lctp-gruppe4 && git submodule init && git submodule update

Team