bericht: git-Installation
This commit is contained in:
parent
30b116c40f
commit
91d5457c2c
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal 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
20
aufgabe4/cron.daily/etckeeper
Executable 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
|
6
aufgabe4/cron.daily/git-commit-log
Executable file
6
aufgabe4/cron.daily/git-commit-log
Executable 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
42
aufgabe4/etckeeper.conf
Normal 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"
|
1
aufgabe4/gitolite-admin
Submodule
1
aufgabe4/gitolite-admin
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 9ef5e71225c672494ee436de71e121b40f5b26c1
|
14
aufgabe4/pacman
Executable file
14
aufgabe4/pacman
Executable 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
14
aufgabe4/yaourt
Executable 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
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user