GitBucket unter Debian als Service installieren
Unser GitBucket soll als Service unter einen None Privilegierten Benutzer laufen, daher erstellen wir uns einen Benutzer und Gruppe gitbucket mit der (U|G)ID 555.
sudo groupadd -g 555 gitbucket
sudo useradd -g gitbucket --no-user-group --home-dir /var/lib/gitbucket --no-create-home --shell /usr/sbin/nologin --system --uid 555 gitbucket
Nun erstellen wir uns die benötigten Verzeichnisse.
sudo mkdir -p /usr/share/gitbucket/{bin,doc,lib}
sudo mkdir -p /var/{lib,log,run}/gitbucket
sudo chown -R gitbucket:gitbucket /var/{lib,log,run}/gitbucket
In /etc/default/gitbucket
erstellen wir uns die Defaul Konfiguration, welche von GitBucket verwendet wird.
cat <<'CONFIG' | sudo tee /etc/default/gitbucket >/dev/null
#
# This is the configuration file for the Serverstats service
# (/lib/systemd/system/gitbucket.service)
#
# Bind host, default 0.0.0.0
GITBUCKET_HOST="127.0.0.1"
# Server port, default 8080
GITBUCKET_PORT=8080
# URL prefix for the GitBucket page (http://<host>:<port>/<prefix>/)
GITBUCKET_PREFIX=""
# Other Java option
GITBUCKET_JVM_OPTS="-Xms128m -Xmx256m -Dmail.smtp.starttls.enable=true"
# Data directory, holds repositories
GITBUCKET_HOME="/var/lib/gitbucket"
# Logs directory
GITBUCKET_LOG_DIR="/var/log/gitbucket"
# Directory where GitBucket is installed
# Configuration is stored here:
GITBUCKET_DIR="/usr/share/gitbucket"
# Path to the PID file
GITBUCKET_PID_FILE="/var/run/gitbucket/gitbucket.pid"
# vim: syntax=sh ts=4 sw=4 sts=4 sr noet
CONFIG
Als nächstes erstellen wir und das Startskript startup.sh.
cat <<'STARTSH' | sudo tee /usr/share/gitbucket/bin/startup.sh >/dev/null
#!/bin/bash
# **********************************************************************
# @File: startup.sh
# @Author: Marko Schulz <info@tuxnet24.de> - @Date: 2023-03-09 12:26:09 +0100
# @Description: Startup script for gitbucket service.
# **********************************************************************
# Load configuration, when exists
if [ -r /etc/default/gitbucket ]; then
. /etc/default/gitbucket
fi
# Set variables from config or default
GITBUCKET_HOME=${GITBUCKET_HOME:-/var/lib/gitbucket}
GITBUCKET_HOST=${GITBUCKET_HOST:-0.0.0.0}
GITBUCKET_PORT=${GITBUCKET_PORT:-8080}
GITBUCKET_PREFIX=${GITBUCKET_PREFIX:-""}
GITBUCKET_LOG_DIR=${GITBUCKET_LOG_DIR:-"/var/log/gitbucket"}
GITBUCKET_DIR=${GITBUCKET_DIR:-"/usr/share/gitbucket"}
GITBUCKET_JVM_OPTS=${GITBUCKET_JVM_OPTS:-"-Dmail.smtp.starttls.enable=true"}
GITBUCKET_PID_FILE=${GITBUCKET_PID_FILE:-"/var/run/gitbucket/gitbucket.pid"}
GITBUCKET_WAR_DIR=$GITBUCKET_DIR/lib
GITBUCKET_LOGFILE="${GITBUCKET_LOG_DIR}/run.log"
JAVA_HOME=${JAVA_HOME:-java}
# Use JAVA_HOME if set, otherwise assume java is in the path.
JAVA=${JAVA_HOME}
if [ -f "${JAVA_HOME}/bin/java" ]; then
JAVA=${JAVA_HOME}/bin/java
fi
# Remove Logfile at startup
if [ -f "${GITBUCKET_LOGFILE}" ]; then
rm -f "${GITBUCKET_LOGFILE}"
fi
# Change to cwd of the script
CWD=$(dirname $0)
cd $CWD/
if [ -L $0 ] && ([ -e /bin/readlink ] || [ -e /usr/bin/readlink ]); then
CWD=$(dirname $(readlink $0)); cd $CWD/
fi
# Build string for java options
START_OPTS=
if [ $GITBUCKET_HOST ]; then
START_OPTS="${START_OPTS} --host=${GITBUCKET_HOST}"
fi
if [ $GITBUCKET_PORT ]; then
START_OPTS="${START_OPTS} --port=${GITBUCKET_PORT}"
fi
if [ $GITBUCKET_PREFIX ]; then
START_OPTS="${START_OPTS} --prefix=${GITBUCKET_PREFIX}"
fi
# Run java process
${JAVA} ${GITBUCKET_JVM_OPTS} -jar ${GITBUCKET_WAR_DIR}/gitbucket.war ${START_OPTS} >>${GITBUCKET_LOGFILE} 2>&1 &
ecode=$?
# Write pid to pidfile if it is defined.
if [ "${GITBUCKET_PID_FILE}" != "" ]; then
echo $! > ${GITBUCKET_PID_FILE}
fi
if [ $ecode -eq 0 ]; then
echo Gitbucket service successfuly started [PID $!, ${GITBUCKET_LOGFILE}]
fi
exit $ecode
# vim: syntax=sh ts=4 sw=4 sts=4 sr noet
STARTSH
Danach erstellen wir noch das Stopskript shutdown.sh.
cat <<'STOPSH' | sudo tee /usr/share/gitbucket/bin/shutdown.sh >/dev/null
#!/bin/bash
# **********************************************************************
# @File: shutdown.sh
# @Author: Marko Schulz <info@tuxnet24.de> - @Date: 2023-03-09 12:26:09 +0100
# @Description: Shutdown script for gitbucket service.
# **********************************************************************
# Load configuration, when exists
if [ -r /etc/default/gitbucket ]; then
. /etc/default/gitbucket
fi
# Set variables from config or default
GITBUCKET_LOG_DIR=${GITBUCKET_LOG_DIR:-"/var/log/gitbucket"}
GITBUCKET_PID_FILE=${GITBUCKET_PID_FILE:-"/var/run/gitbucket.pid"}
GITBUCKET_LOGFILE="${GITBUCKET_LOG_DIR}/run.log"
# Terminate gitbucket process
if [ -f "${GITBUCKET_PID_FILE}" ]; then
kill $(cat $GITBUCKET_PID_FILE 2>/dev/null) >>$GITBUCKET_LOGFILE 2>&1
else
PID=`ps aux | grep 'java' | grep -v 'grep' | grep gitbucket.war | awk '{print $2}'`
kill ${PID} >>$GITBUCKET_LOGFILE 2>&1
fi
# Delete PID file, if exists
if [ -f "${GITBUCKET_PID_FILE}" ]; then
rm -f ${GITBUCKET_PID_FILE}
fi
exit $ecode
# vim: syntax=sh ts=4 sw=4 sts=4 sr noet
STOPSH
Nun laden wir GitBucket von https://github.com/gitbucket/gitbucket/releases herunter.
cd /usr/share/gitbucket/lib/ && \
sudo wget https://github.com/gitbucket/gitbucket/releases/download/4.38.4/gitbucket.war
Optional erstellen wir uns im Verzeichnis /usr/share/gitbucket/doc
die zwei Beispieldateien für die Datenbank Konfiguration und auch die README Datei.
Beispiel der internen Datenbank H2.
cat <<'DB1' | sudo tee /usr/share/gitbucket/doc/database-h2.conf >/dev/null
db {
url = "jdbc:h2:${DatabaseHome};MVCC=true"
user = "sa"
password = "sa"
}
DB1
Beispiel der mysql Datenbank.
cat <<'DB2' | sudo tee /usr/share/gitbucket/doc/database-mysql.conf >/dev/null
db {
url = "jdbc:mysql://<HOSTNAME>/<DATABASE>?useUnicode=true&characterEncoding=utf8"
user = "<MYSQLUSERNAME>"
password = "<MYSQLPASSWORD>"
}
DB2
Erstellen der README Datei.
cat <<'README' | sudo tee /usr/share/gitbucket/doc/README >/dev/null
1. Setup your database
To set you database you have to copy the doc/database-h2.conf to $GITBUCKET_HOME/database.conf
cp doc/database-h2.conf $GITBUCKET_HOME/database.conf
or for mysql you have to copy the doc/database-mysql.conf to $GITBUCKET_HOME/database.conf
cp doc/database-mysql.conf $GITBUCKET_HOME/database.conf
Replace the placeholder like <HOSTNAME>, <DATABASE> etc.
1.1. Create MySQL User and Database
mysql -u root -p
mysql> create database gitbucket;
mysql> grant all privileges on `gitbucket`.* to testuser@localhost identified by 'testpassword';
mysql> flush privileges;
mysql> quit;
2. Enable and start the gitbucker.service
systemctl enable gitbucket.service
systemctl start gitbucket.service
More documentation on official GitBucket Wiki
https://github.com/gitbucket/gitbucket/wiki
README
Setzen die Berechtigungen auf das Verzeichnis /usr/share/gitbucket
.
chown -R gitbucket:gitbucket /usr/share/gitbucket
Dann erstellen wir die Service Unit Datei.
cat <<'SERVICE' | sudo tee /lib/systemd/system/gitbucket.service >/dev/null
[Unit]
Description=GitBucket Server
After=remote-fs.target network.target
[Service]
Type=oneshot
User=gitbucket
Group=gitbucket
ExecStart=/bin/sh -c "/usr/share/gitbucket/bin/startup.sh"
ExecStop=/bin/sh -c "/usr/share/gitbucket/bin/shutdown.sh"
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
SERVICE
Wir aktualisieren den SystemV Daemon, aktivieren unsere Service Unit und starten GitBucket.
sudo systemctl daemon-reload
sudo systemctl enable gitbucket
sudo systemctl start gitbucket
Prüfen, ob der GiBucket Service läuft, lässt sich wie folgt.
systemctl status gitbucket
Nun können wir uns unter den definieren Port uns an GitBucket anmelden. Der Default Administrator und das Passwort ist root.
Login to http://IP_ADRESS_OF_RPI:8080/