seeseekey.net - Invictus Deus Ex Machina

Möchte man Git-Repositories auf einem Ubuntu-Server hosten, so ist das schnell erledigt. Wenn etwas mehr Komfort aller GitHub gewünscht ist, so sollte man sich Gogs anschauen. Gogs steht dabei für Go Git Service. Wie der Name andeutet handelt es sich um einen komplett in Go geschriebenden Git-Service. Im ersten Schritt muss Git auf dem Server installiert werden:

apt-get install git

Nachdem Git installiert ist, muss der für Gogs verwendete Nutzer angelegt und in diesen gewechselt werden:

useradd -m gogs
su gogs
cd

Danach kann das Gogs Binary heruntergeladen:

wget https://github.com/gogits/gogs/releases/download/v0.6.15/linux_amd64.zip
linux_amd64.zip
unzip linux_amd64.zip

und anschließend entpackt werden. Nachdem man mittels cd in den Ordner gogs gewechselt ist, kann gogs gestartet werden:

./gogs web

Damit wird ein Webserver auf Port 3000 gestartet. Mit dem Aufruf der passenden URL im Browser (z.B. http://example.org:3000) öffnet sich die Installationsroutine von Gogs.

Die Installationsroutine von Gogs

Die Installationsroutine von Gogs

In der Routine wird die gewünschte Datenbank eingestellt und einige weitere Punkte konfiguriert. Die Installationsroutine erstellt eine app.ini im Verzeichnis custom/conf/. Dort können die Optionen später geändert werden. Damit Gogs automatisch startet – wird der Nutzer verlassen und ein Initscript angelegt, an die Konfiguration angepasst und zu den automatisch startenden Prozessen hinzugefügt:

cp /home/gogs/scripts/init/debian/gogs /etc/init.d/gogs
nano /etc/init.d/gogs
chmod +x /etc/init.d/gogs
update-rc.d gogs defaults

Damit sollte sich der Service über:

service gogs start

starten lassen. Bei mir führt das allerdings zu dem Problem das der Service angeblich gestartet wird, aber trotzdem nicht läuft. Wird der Service manuell per:

sh -x /etc/init.d/gogs start

gestartet funktioniert er ohne Probleme – hier ist noch der entsprechende Fehler zu finden.

2 Kommentare

  1. Hi,

    hilfreich ist es, wenn man Gogs über einen Apache/Nginx als Reverse Proxy ausliefert. Dann muss man bei der Adresseingabe keine Portnummer eingeben und kann die SSl-Fähigkeit des Webservers nutzen.

    Ich habe Gogs auf dem Raspberry mit Apache 2 als Reverse Proxy unter einer Subdomain (https://abcabc.xy/gogs) laufen und das funktioniert bestens.

    Antworten

  2. Hier mal das Init-Script (/etc/init.d/gogs-service) , wie ich es beim Pi benutze, der ja auf Debian basiert. Vielleicht hilft es dir bei der Fehlersuche. Wichtig ist, die folgenden Einstellungen an die eigenen Bedürnisse anzupassen:
    WORKINGDIR=PATH_TO_GOGS –> müsste bei deinem Beispiel /home/gogs sein
    USER=GOGSUSER –> müsste bei dir gogs sein

    Das Script:
    ——————————-
    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides: gogs
    # Required-Start: $syslog $network
    # Required-Stop: $syslog
    # 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=“Go Git Service“
    NAME=gogs
    SERVICEVERBOSE=yes
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    WORKINGDIR=PATH_TO_GOGS
    DAEMON=$WORKINGDIR/$NAME
    DAEMON_ARGS=“web“
    USER=GOGSUSER

    # 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 „start-stop-daemon –start –quiet –pidfile $PIDFILE –make-pidfile \\
    –exec $DAEMON — $DAEMON_ARGS –test > /dev/null \\
    || return 1“
    sh -c „start-stop-daemon –start –quiet –pidfile $PIDFILE –make-pidfile \\
    –background –exec /bin/su — – $USER -c \“cd \\\“$WORKINGDIR\\\“ && $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
    ;;
    *)
    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

    :

    Antworten

  3. Pingback: HTTPS für Gogs aktivieren | seeseekey.net

  4. Pingback: Probleme mit dem Init-Script von Gogs | seeseekey.net

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.