From 42d36d2e9f2f21e8321b3a89cba7705066b17c6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hauke=20Z=C3=BChl?= Date: Wed, 13 Jun 2018 12:20:38 +0200 Subject: [PATCH] Changed docu from gogs to gitea, added system scripts, fixed some typos --- Git.tex | 251 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 214 insertions(+), 37 deletions(-) diff --git a/Git.tex b/Git.tex index 24a66fb..f04447b 100644 --- a/Git.tex +++ b/Git.tex @@ -390,41 +390,43 @@ sollte nat"urlich "uber LAN (und nicht via WLAN) mit dem Netz verbunden sein, da Daten"ubertragung m"oglichst hastig erfolgen kann. Eine FritzBox zum Beispiel hat Gigabitinterfaces, da kann man schon mal gut was "uber die Leitung jagen (wobei des Raspberries Interface langsamer ist).\\ -Als GIT-Serversoftware empfehle ich an dieser Stelle gogs\footnote{https://gogs.io/}.\\ +Als GIT-Serversoftware empfehle ich an dieser Stelle gitea\footnote{https://gitea.io/}.\\ Wenn du dich damit besch"aftigen willst, solltest du aber "uber gute Linuxkenntnisse verf"ugen.\\ -Mit gogs hast du eine Weboberfl"ache, "ahnlich wie bei GitHub, unter der du deine Projekte +Mit gitea hast du eine Weboberfl"ache, "ahnlich wie bei GitHub, unter der du deine Projekte recht einfach verwalten kannst. Du hast auch die M"oglichkeit, private Projekte dort anzulegen -und mit Hilfe der Benutzerverwaltung kannst du auch Einfluss darauf nehmen, was deineTeammitgleider +und mit Hilfe der Benutzerverwaltung kannst du auch Einfluss darauf nehmen, was deine Teammitgleider alles so d"urfen. -\subsection{gogs} -Gogs ist ein kleines, aber feines Projekt, das ein Webfrontend f"ur einen git-Server bereitstellt. +\subsection{gitea} +Gitea ist ein kleines, aber feines Projekt, das ein Webfrontend f"ur einen git-Server bereitstellt. Es ist in der Programmiersprache go geschrieben und ben"otigt nur minimale Resourcen. \subsubsection{Vorbereiten der Datenbank} -Bevor du dir gogs herunterl"adst und installierst, solltest du das Datenbanksystem -ausw"ahlen, das gogs sp"ater benutzen soll. Du kannst zwischen MariaDB/MySQL und PostgreSQL -w"ahlen. Gut, es giobt noch SQLite, MSSQL oder TiDB nutzen, aber die ersten beiden will man +Bevor du dir gitea herunterl"adst und installierst, solltest du das Datenbanksystem +ausw"ahlen, das gitea sp"ater benutzen soll. Du kannst zwischen MariaDB/MySQL und PostgreSQL +w"ahlen. Gut, es gibt noch SQLite, MSSQL oder TiDB nutzen, aber die ersten beiden will man nicht wirklich und TiDB ist wohl noch zu speziell. Achte darauf, dass MySQL/MariaDB auch tats"achlich auf dem Netzwerkinterface horcht, das du bei der Installation angibst!\\ \paragraph{PostgreSQL} + Am einfachsten loggst du dich per ``sudo su - postgres'' als Benutzer postgres in deiner -Shell auf deinem GIT-Server ein, dann erzeugst du per ``createuser -P -d gogs'' einen Benutzer -f"ur die Datenbank ``gogs''.\\ -Im n"achsten Schritt loggst du dich auf der Shell per ``psql -h localhost template1 gogs'' -in das Datenbanksystem ein. Hier reicht nun ein ``CREATE DATABASE gogs;'', um die Datenbank -f"ur gogs anzulegen. +Shell auf deinem GIT-Server ein, dann erzeugst du per ``createuser -P -d gitea'' einen Benutzer +f"ur die Datenbank ``gitea''.\\ +Im n"achsten Schritt loggst du dich auf der Shell per ``psql -h localhost template1 gitea'' +in das Datenbanksystem ein. Hier reicht nun ein ``CREATE DATABASE gitea;'', um die Datenbank +f"ur gitea anzulegen. \paragraph{MariaDB/MySQL} + Du loggst dich mit dem administrativen Benutzer in MariaDB/MySQL, den du bei der Installation eingerichtet hast, in das Datenbanksystem ein. Das ist oft der Datenbankbenutzer ``root'' (nicht zu verwechseln mit dem Systembenutzer ``root''). Also ``mysql -p -u root''. Nun -erfolgt ein ``GRANT ALL PRIVILEGES ON gogs.* to 'gogs'@'localhost' IDENTIFIED BY -'geheimes passwort';''. Dann loggst du dich aus, loggst dich per ``mysql -p -u gogs'' -wieder ein und f"uhrst ein ``CREATE DATABASE gogs CHARACTER SET utf8mb4;'' aus, -um die Datenbank f"ur gogs anzulegen. +erfolgt ein ``GRANT ALL PRIVILEGES ON gitea.* to 'gitea'@'localhost' IDENTIFIED BY +'geheimes passwort';''. Dann loggst du dich aus, loggst dich per ``mysql -p -u gitea'' +wieder ein und f"uhrst ein ``CREATE DATABASE gitea CHARACTER SET utf8mb4;'' aus, +um die Datenbank f"ur gitea anzulegen. \\ \textbf{Hinweis:} Sollte bei Benutzung von MariaDB w"ahrend der Installation im Webbrowser die Fehlermeldung ``Datenbankeinstellungen sind nicht korrekt: Error 1071: Specified key was too long; max key length is 767 bytes'', dann folgende Befehle in der @@ -437,20 +439,195 @@ set global innodb_file_format=Barracuda; \subsubsection{Installation} Bevor du dir gleich die Software runterl"adst, lege bitte einen Benutzer ``git'' auf deinem Server an, sofern der Benutzer noch nicht existiert.\\ -Von https://gogs.io/docs/installation/install\_from\_binary l"adt man sich die passende Version +Von https://gitea.io/ l"adt man sich die passende Version f"ur seinen Server runter und entpackt diese. Das entstandene Verzeichnis wird dann in das Benutzerverzeichnis des Benutzers ``git'' verschoben und diesem zu eigen gemacht (chown).\\ -Im Verzeichnis gogs/scripts findest du Beispiele, um gogs auf deinem System bei Systemstart -automatisch zu starten. Das geht zum Beispiel via init oder systemd.\\ +Um gitea beim Systemstart zu starten, benötigst du die passenden Skripte.\\ Nat"urlich solltest du die Dateien entsprechend f"ur dein System anpassen, sonst stimmen die Pfade unter Umst"anden nicht. +\paragraph{systemd} +In ``/etc/systemd/system/'' legst du (z.B. mit vim) die Datei ``gitea.service'' mit +folgendem Inhalt an: + +\begin{verbatim} +[Unit] +Description=Gitea +After=syslog.target +After=network.target +After=mariadb.service mysqld.service postgresql.service +After=memcached.service redis.service + +[Service] +# Modify these two values and uncomment them if you have +# repos with lots of files and get an HTTP error 500 because +# of that +### +#LimitMEMLOCK=infinity +#LimitNOFILE=65535 +Type=simple +User=git +Group=git +WorkingDirectory=/home/git/gitea +ExecStart=/home/git/gitea/gitea web +Restart=always +Environment=USER=git HOME=/home/git + +[Install] +WantedBy=multi-user.target +\end{verbatim} + +Dann folgen ein ``systemctl enable gitea'', danach ein ``systemctl start gitea''. + +\paragraph{SystemV init} + +Es gibt ja immer noch Puristen, die das alte init-System +von SystemV verwenden. Dafür benötigt man die Datei +``/etc/init.d/gitea'', die Executrechte benötigt. + +\begin{verbatim} +#! /bin/sh +### BEGIN INIT INFO +# Provides: gitea +# Required-Start: $syslog $network +# Required-Stop: $syslog +# Should-Start: mysql postgresql +# Should-Stop: mysql postgresql +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: A self-hosted Git service written in Go. +# Description: A self-hosted Git service written in Go. +### END INIT INFO + +# Author: Danny Boisvert + +# Do NOT "set -e" + +# PATH should only include /usr/* if it runs after the mountnfs.sh script +PATH=/sbin:/usr/sbin:/bin:/usr/bin +DESC="Gitea" +NAME=gitea +SERVICEVERBOSE=yes +PIDFILE=/var/run/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME +WORKINGDIR=/home/git/gitea +DAEMON=$WORKINGDIR/$NAME +DAEMON_ARGS="web" +USER=git + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.2-14) to ensure that this file is present +# and status_of_proc is working. +. /lib/lsb/init-functions + +# +# Function that starts the daemon/service +# +do_start() +{ + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + sh -c "USER=$USER start-stop-daemon --start --quiet \\ + --pidfile $PIDFILE --make-pidfile \\ + --test --chdir $WORKINGDIR --chuid $USER \\ + --exec $DAEMON -- $DAEMON_ARGS > /dev/null \\ + || return 1" + sh -c "USER=$USER start-stop-daemon --start --quiet \\ + --pidfile $PIDFILE --make-pidfile \\ + --background --chdir $WORKINGDIR --chuid $USER \\ + --exec $DAEMON -- $DAEMON_ARGS \\ + || return 2" +} + +# +# Function that stops the daemon/service +# +do_stop() +{ + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon --stop --quiet --retry=TERM/1/KILL/5 \\ + --pidfile $PIDFILE --name $NAME + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + start-stop-daemon --stop --quiet --oknodo \\ + --retry=0/1/KILL/5 --exec $DAEMON + [ "$?" = 2 ] && return 2 + # Many daemons don't delete their pidfiles when they exit. + rm -f $PIDFILE + return "$RETVAL" +} + +case "$1" in + start) + [ "$SERVICEVERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" + do_start + case "$?" in + 0|1) [ "$SERVICEVERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$SERVICEVERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + stop) + [ "$SERVICEVERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) [ "$SERVICEVERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$SERVICEVERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + status) + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + restart|force-reload) + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +\end{verbatim} + +Um das Skript zu aktivieren, führt man ``update-rc.d gitea defaults'' aus und +startet gitea per ``/etc/init.d/gitea start''. + \subsubsection{Konfigurationsdatei} Um sp"ater noch ein wenig Feintuning vorzunehmen, kann man im Verzeichnis ``custom/conf'' die Datei ``app.ini'' "andern, die bei der Installation automatisch angelegt wird.\\ Ein Beispiel f"ur eine app.ini: + \begin{verbatim} -APP_NAME = Gogs +APP_NAME = Gitea RUN_USER = git RUN_MODE = prod @@ -460,11 +637,11 @@ ROOT = /home/git/repositories [database] DB_TYPE = postgres HOST = 127.0.0.1:5432 -NAME = gogs -USER = gogs +NAME = gitea +USER = gitea PASSWD = GEHEIM SSL_MODE = disable -PATH = data/gogs.db +PATH = data/gitea.db [server] DOMAIN = git.hauke-zuehl.de @@ -495,7 +672,7 @@ PROVIDER = file [log] MODE = file LEVEL = Info -ROOT_PATH = /home/git/gogs/log +ROOT_PATH = /home/git/gitea/log [security] INSTALL_LOCK = true @@ -508,29 +685,29 @@ kannst aber gerne MariaDB oder MySQL verwenden. \subsubsection{Der erste Start} -Du startest gogs zun"achst "uber die Kommandozeil per ``./gogs web'' und gibst dann in +Du startest gitea zun"achst "uber die Kommandozeil per ``./gitea web'' und gibst dann in deinem Webbrowser die URL ``http://localhost:3000'' ein.\\ -Du wirst nun durch die Konfiguration der Datenbank und von gogs gef"uhrt. Bei der Domain +Du wirst nun durch die Konfiguration der Datenbank und von gitea gef"uhrt. Bei der Domain solltest du den Server- oder einen ordentlichen Domainnamen eingeben. Hast du also zum -Beispiel einen kleinen RaspberryPi zu Hause, auf dem gogs laufen soll, und dieser heisst +Beispiel einen kleinen RaspberryPi zu Hause, auf dem gitea laufen soll, und dieser heisst ``pi.deinzuhause.net'' dann gibst du eben diesen Namen bei der Domain und der Application URL ein.\\ -Den Datenbankbenutzer f"ur gogs und die entsprechende Datenbank solltest du nun auch +Den Datenbankbenutzer f"ur gitea und die entsprechende Datenbank solltest du nun auch anlegen, sonst kracht es bei der Einrichtung der Tabellen.\\ -Hast du soweit alles eingetragen, kannst du dich anmelden und deine Projekte mit gogs +Hast du soweit alles eingetragen, kannst du dich anmelden und deine Projekte mit gitea verwalten.\\ -Der erste Benutzer, der sich registriert bei gogs, wird "ubrigens als Administrator -angelegt, also Obacht! Von nun kannst du gogs in aller Ruhe erforschen und -eigene Repositores anlegen, Organiosationen und Teams erzeugen, usw.! +Der erste Benutzer, der sich registriert bei gitea, wird "ubrigens als Administrator +angelegt, also Obacht! Von nun kannst du gitea in aller Ruhe erforschen und +eigene Repositores anlegen, Organisationen und Teams erzeugen, usw.! -\subsection{Gitea} +\subsection{Gogs} Gitea ist ein sog. ``fork'' von gogs, d.h, jemand fand die Entwicklung von gogs nicht so toll, hat das Projekt geklont und fortgeführt.\\ \\ -Gitea hat inzwischen einige Features mehr als gogs, lässt sich aber genau so installieren -wie gogs, von daher wird nur auf die Installation von gogs verwiesen. -Gitea kann unter https://gitea.io/ heruntergeladen werden. +Gogs dagegen ist zur Zeit ein wenig eingeschlafen, sodass hier nicht weiter darauf eingegangen wird. +Wer aber gogs verwenden möge, kann dies nach der Installationsanleitung von +gitea durchführen. \section{GIT from scratch} Ich habe keine bessere "Uberschrift gefunden, aber wenn du keine Lust auf GitHub oder gogs oder