bericht: git-Installation

This commit is contained in:
Jörg Thalheim 2013-10-31 18:05:31 +01:00
parent 30b116c40f
commit 91d5457c2c
10 changed files with 168 additions and 6 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "aufgabe4/gitolite-admin"]
path = aufgabe4/gitolite-admin
url = git@lctp:gitolite-admin.git

20
aufgabe4/cron.daily/etckeeper Executable file
View File

@ -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

View File

@ -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

42
aufgabe4/etckeeper.conf Normal file
View File

@ -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"

@ -0,0 +1 @@
Subproject commit 9ef5e71225c672494ee436de71e121b40f5b26c1

14
aufgabe4/pacman Executable file
View File

@ -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

14
aufgabe4/yaourt Executable file
View File

@ -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

View File

@ -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 <package>
\end{center}
\shellcmd{pacman -S <package>}
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.

View File

@ -1,2 +1,39 @@
\subsection{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

View File

@ -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;
}
</style>
</head>
<body>
@ -103,6 +114,15 @@ body,
<h2>Bericht</h2>
<a href="uploads/bericht.pdf" class="pure-button pure-button-primary">Download</a>
</section>
<section id="git">
<h2>Git-Zugriff</h2>
<pre>cat <<'EOF' >> ~/.ssh/config
Host lctp
HostName 141.76.90.104
EOF</pre>
<pre>git clone git@lctp:lctp.git</pre>
<pre>cd lctp && git submodule update</pre>
</section>
<section id="team">
<h2>Team</h2>
<p>
@ -140,6 +160,5 @@ body,
(C) ZOTAC Cluster
</footer>
-->
</body>
</html>