From 91d5457c2ca3ef3c120b80fee3dadbdaca39eaeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Thu, 31 Oct 2013 18:05:31 +0100 Subject: [PATCH] bericht: git-Installation --- .gitmodules | 3 +++ aufgabe4/cron.daily/etckeeper | 20 ++++++++++++++ aufgabe4/cron.daily/git-commit-log | 6 +++++ aufgabe4/etckeeper.conf | 42 ++++++++++++++++++++++++++++++ aufgabe4/gitolite-admin | 1 + aufgabe4/pacman | 14 ++++++++++ aufgabe4/yaourt | 14 ++++++++++ bericht/abschnitte/anhang.tex | 14 +++++++--- bericht/abschnitte/bs-git.tex | 39 ++++++++++++++++++++++++++- www/index.html | 21 ++++++++++++++- 10 files changed, 168 insertions(+), 6 deletions(-) create mode 100644 .gitmodules create mode 100755 aufgabe4/cron.daily/etckeeper create mode 100755 aufgabe4/cron.daily/git-commit-log create mode 100644 aufgabe4/etckeeper.conf create mode 160000 aufgabe4/gitolite-admin create mode 100755 aufgabe4/pacman create mode 100755 aufgabe4/yaourt diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..8c98d11 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "aufgabe4/gitolite-admin"] + path = aufgabe4/gitolite-admin + url = git@lctp:gitolite-admin.git diff --git a/aufgabe4/cron.daily/etckeeper b/aufgabe4/cron.daily/etckeeper new file mode 100755 index 0000000..65d0c8b --- /dev/null +++ b/aufgabe4/cron.daily/etckeeper @@ -0,0 +1,20 @@ +#!/bin/sh +set -e +if [ -x /usr/bin/etckeeper ] && [ -e /etc/etckeeper/etckeeper.conf ]; then + . /etc/etckeeper/etckeeper.conf + if [ "$AVOID_DAILY_AUTOCOMMITS" != "1" ]; then + # avoid autocommit if an install run is in progress + lockfile=/var/cache/etckeeper/packagelist.pre-install + if [ -e "$lockfile" ] && [ -n "$(find "$lockfile" -mtime +1)" ]; +then + rm -f "$lockfile" # stale + fi + if [ ! -e "$lockfile" ]; then + AVOID_SPECIAL_FILE_WARNING=1 + export AVOID_SPECIAL_FILE_WARNING + if etckeeper unclean; then + etckeeper commit "daily autocommit" >/dev/null + fi + fi + fi +fi diff --git a/aufgabe4/cron.daily/git-commit-log b/aufgabe4/cron.daily/git-commit-log new file mode 100755 index 0000000..4895662 --- /dev/null +++ b/aufgabe4/cron.daily/git-commit-log @@ -0,0 +1,6 @@ +#!/bin/bash + +GIT_HOME=/var/log +find /var/log -iname \*.log | xargs git add +git commit -m "daily autocommit" +git push --force origin master:logs diff --git a/aufgabe4/etckeeper.conf b/aufgabe4/etckeeper.conf new file mode 100644 index 0000000..94c07e4 --- /dev/null +++ b/aufgabe4/etckeeper.conf @@ -0,0 +1,42 @@ +# The VCS to use. +#VCS="hg" +VCS="git" +#VCS="bzr" +#VCS="darcs" + +# Options passed to git commit when run by etckeeper. +GIT_COMMIT_OPTIONS="" + +# Options passed to hg commit when run by etckeeper. +HG_COMMIT_OPTIONS="" + +# Options passed to bzr commit when run by etckeeper. +BZR_COMMIT_OPTIONS="" + +# Options passed to darcs record when run by etckeeper. +DARCS_COMMIT_OPTIONS="-a" + +# Uncomment to avoid etckeeper committing existing changes +# to /etc automatically once per day. +#AVOID_DAILY_AUTOCOMMITS=1 + +# Uncomment the following to avoid special file warning +# (the option is enabled automatically by cronjob regardless). +#AVOID_SPECIAL_FILE_WARNING=1 + +# Uncomment to avoid etckeeper committing existing changes to +# /etc before installation. It will cancel the installation, +# so you can commit the changes by hand. +#AVOID_COMMIT_BEFORE_INSTALL=1 + +# The high-level package manager that's being used. +# (apt, pacman-g2, yum, zypper etc) +HIGHLEVEL_PACKAGE_MANAGER=yaourt + +# The low-level package manager that's being used. +# (dpkg, rpm, pacman, pacman-g2, etc) +LOWLEVEL_PACKAGE_MANAGER=pacman + +# To push each commit to a remote, put the name of the remote here. +# (eg, "origin" for git). +PUSH_REMOTE="origin" diff --git a/aufgabe4/gitolite-admin b/aufgabe4/gitolite-admin new file mode 160000 index 0000000..9ef5e71 --- /dev/null +++ b/aufgabe4/gitolite-admin @@ -0,0 +1 @@ +Subproject commit 9ef5e71225c672494ee436de71e121b40f5b26c1 diff --git a/aufgabe4/pacman b/aufgabe4/pacman new file mode 100755 index 0000000..cbb9069 --- /dev/null +++ b/aufgabe4/pacman @@ -0,0 +1,14 @@ +#!/bin/bash + +if [[ "$1" != -S && "$1" != -S*u && "$1" != -U ]]; then + /usr/bin/pacman "$@" + exit $? +fi + +[[ $EUID -eq 0 ]] && etckeeper pre-install + +/usr/bin/pacman "$@" +EXIT_CODE=$? + +[[ $EUID -eq 0 ]] && etckeeper post-install +exit $EXIT_CODE diff --git a/aufgabe4/yaourt b/aufgabe4/yaourt new file mode 100755 index 0000000..6b5bc52 --- /dev/null +++ b/aufgabe4/yaourt @@ -0,0 +1,14 @@ +#!/bin/bash + +if [[ "$1" != -S && "$1" != -S*u && "$1" != -U ]]; then + /usr/bin/yaourt "$@" + exit $? +fi + +sudo etckeeper pre-install + +/usr/bin/yaourt "$@" +EXIT_CODE=$? + +sudo etckeeper post-install +exit $EXIT_CODE diff --git a/bericht/abschnitte/anhang.tex b/bericht/abschnitte/anhang.tex index 0dc01ac..e774ec6 100644 --- a/bericht/abschnitte/anhang.tex +++ b/bericht/abschnitte/anhang.tex @@ -1,6 +1,10 @@ \appendix \section{Paket-Installationen unter Arch Linux} +\label{sec:pacman} + +Pacman ist der Paketmanager unter Archlinux. Paketmanager werden benutzt um die +Software zu installieren, zu aktualisieren oder zu entfernen. \subsection{Paketlisten laden / Updates} @@ -10,9 +14,7 @@ Die Paketlisten werden mit {\tt pacman -Sy} neu geladen. Updates werden mit {\tt Pakete aus dem offiziellen Arch Linux-Repository werden mit: -\begin{center} -\tt pacman -S -\end{center} +\shellcmd{pacman -S } installiert. @@ -23,4 +25,8 @@ Bei den \href{https://aur.archlinux.org/?setlang=de}{»Arch User Repositories«} \subsubsection{yaourt} -Das Tool {\tt yaourt}, das man ebenfalls aus dem AUR beziehen kann, automatisiert die Installation weiterer Pakete aus dem AUR und bietet ebenfalls die Möglichkeit, diese zu aktualisieren. Die Kommandozeilen-Argumente sind die gleichen wie bei {\tt pacman}, da das Tool im Grunde ein Wrapper für {\tt pacman} ist. +Das Tool {\tt yaourt}, das man ebenfalls aus dem AUR beziehen kann, +automatisiert die Installation weiterer Pakete aus dem AUR und bietet ebenfalls +die Möglichkeit, diese zu aktualisieren. Die Kommandozeilen-Argumente sind die +gleichen wie bei {\tt pacman}, da das Tool im Grunde ein Wrapper für {\tt +pacman} ist. diff --git a/bericht/abschnitte/bs-git.tex b/bericht/abschnitte/bs-git.tex index 9800405..e21e006 100644 --- a/bericht/abschnitte/bs-git.tex +++ b/bericht/abschnitte/bs-git.tex @@ -1,2 +1,39 @@ \subsection{Git-Server} -\label{sub:git_server} +\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: + +\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: + +%\shellcmd{gitolite setup -pk id_rsa.pub} + +Nun kann die eigentliche Konfiguration per git heruntergeladen werden: + +%\shellcmd{git clone git@lctp:gitolite.git} + +Wir legten das Repository {\tt lctp}. + +\subsubsection{Etckeeper} + +Um die Konfiguration in {\tt /etc } versionierbar und damit nachvollziehbar zu machen installierten wir {\tt etckeeper}: + +\shellcmd{yaourt -S etckeeper \&\& sudo etckeeper init} + +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: + +\shellcmd{sudo git push -u origin master: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 {\tt aufgabe4/yaourt} sowie in {\tt 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 {\tt 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 {\tt 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 {\tt aufgabe4/cron.daily/git-commit-log}). + +% - journald -> syslog, cronjob diff --git a/www/index.html b/www/index.html index 5cf8ace..0c4beaf 100644 --- a/www/index.html +++ b/www/index.html @@ -40,6 +40,17 @@ body, /* Set you're content font stack here: */ font-family: 'Source Sans Pro', sans-serif; } + +pre { + font-family: Consolas,'Liberation Mono',Courier,monospace; + color: rgb(51, 51, 51); + background: none repeat scroll 0% 0% rgb(250, 250, 250); + word-wrap: break-word; + line-height: 1.3em; + border: 1px solid rgb(238, 238, 238); + margin: 1.3em 0px 1em; + padding: 1.3em; +} @@ -103,6 +114,15 @@ body,

Bericht

Download +
+

Git-Zugriff

+
cat <<'EOF' >> ~/.ssh/config
+Host lctp
+  HostName 141.76.90.104
+EOF
+
git clone git@lctp:lctp.git
+
cd lctp && git submodule update
+

Team

@@ -140,6 +160,5 @@ body, (C) ZOTAC Cluster --> -