ltcp/bericht/abschnitte/bs-git.tex

65 lines
3.4 KiB
TeX
Raw Normal View History

2013-10-29 09:41:47 +00:00
\subsection{Git-Server}
2013-10-31 17:05:31 +00:00
\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.
2013-11-07 12:34:31 +00:00
Die Authentifizierung erfolgt dabei über SSH-Keys. Hier für wird ein {\tt git} Nutzer eingerichtet:
2013-10-31 17:05:31 +00:00
\shellcmd{useradd -m -U -r -s /bin/bash -d /srv/git git}
Für die initiale Einrichtung wird der eigene SSH-Schlüssel zu gitolite hinzugefügt:
2013-11-03 17:20:54 +00:00
\shellcmd{gitolite setup -pk id\_rsa.pub}
2013-10-31 17:05:31 +00:00
Nun kann die eigentliche Konfiguration per git heruntergeladen werden:
2013-11-07 12:34:31 +00:00
\shellcmd{git clone git@141.76.90.104:gitolite-admin.git}
2013-10-31 17:05:31 +00:00
2013-11-07 12:34:31 +00:00
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}
2013-10-31 17:05:31 +00:00
2013-11-05 09:50:33 +00:00
\subsubsection{etckeeper}
2013-10-31 17:05:31 +00:00
Um die Konfiguration in {\tt /etc } versionierbar und damit nachvollziehbar zu machen installierten wir {\tt etckeeper}:
\shellcmd{yaourt -S etckeeper \&\& sudo etckeeper init}
2013-11-07 12:34:31 +00:00
\shellcmd{cd /etc/.git \&\& sudo git remote add git@localhost:lctp.git}
2013-10-31 17:05:31 +00:00
Dieses legt ein {\tt git}-Repository in {\tt /etc/.git} an und erstellt Commits bei Änderungen in {\tt /etc}.
2013-11-07 12:34:31 +00:00
Um die Konfiguration vom Bericht zu trennen, haben wir uns entschieden, {\tt
etckeeper} in einen dedizierten Branch im {\tt lctp}-Repository pushen:
2013-10-31 17:05:31 +00:00
\shellcmd{sudo git push -u origin master:etckeeper}
2013-11-07 12:34:31 +00:00
Dieser Branch lässt sich auf folgender Weise auschecken:
\shellcmd{git checkout -b etckeeper origin/etckeeper}
2013-10-31 17:05:31 +00:00
Anders als bei anderen Paketmanagern wie {\tt apt} auf Debian, existieren in {\tt pacman} (\ref{sec:pacman})
keine Hooks.
2013-10-31 17:16:08 +00:00
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}).
2013-11-07 12:34:31 +00:00
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}).
2013-10-31 17:05:31 +00:00
\subsubsection{Logs in git}
2013-11-03 12:16:31 +00:00
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.
2013-11-07 12:34:31 +00:00
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.
Dieser Branch lässt sich folgendermaßen auschecken:
2013-10-31 17:05:31 +00:00
2013-11-07 12:34:31 +00:00
\shellcmd{git checkout -b logs origin/log}