#!/bin/bash
# Copyright (C) 2019 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
set -xe
SCRIPT_DIR="$(dirname "$(realpath "$0")")"
source "$SCRIPT_DIR"/globals.sh
source "$SCRIPT_DIR"/parameters.sh
swupd bundle-add scm-server || :
check_dependency gitolite
check_dependency git
## GITOLITE SETUP
mkdir -p "$GIT_DIR"
chown -R "$GIT_USER":"$GIT_USER" "$GIT_DIR"
# Add symlink for backwards compatibility
if [[ "$GIT_DIR" != "$GIT_DEFAULT_DIR" ]]; then
if [ "$(ls -A "$GIT_DEFAULT_DIR")" ]; then
mv "$GIT_DEFAULT_DIR" "$GIT_DEFAULT_DIR".old
else
rm -rf "$GIT_DEFAULT_DIR"
fi
ln -sf "$GIT_DIR" "$GIT_DEFAULT_DIR"
chown -h "$GIT_USER":"$GIT_USER" "$GIT_DEFAULT_DIR"
fi
GITOLITE_PUB_KEY_FILE="$GIT_DEFAULT_DIR/gitolite.pub"
echo "$GITOLITE_PUB_KEY" > "$GITOLITE_PUB_KEY_FILE"
chown "$GIT_USER":"$GIT_USER" "$GITOLITE_PUB_KEY_FILE"
sudo -u "$GIT_USER" gitolite setup -pk "$GITOLITE_PUB_KEY_FILE"
usermod -s /bin/bash gitolite
if $IS_ANONYMOUS_GIT_NEEDED; then
swupd bundle-add httpd || :
check_dependency httpd
## GIT PROTOCOL CLONING
mkdir -p /etc/systemd/system
cat > /etc/systemd/system/git-daemon.service <<- EOF
[Unit]
Description=Git Daemon
[Service]
ExecStart=/usr/bin/git daemon --export-all --reuseaddr --base-path=$GIT_DEFAULT_DIR/repositories $GIT_DEFAULT_DIR/repositories
Restart=always
RestartSec=500ms
User=$GIT_USER
Group=$GIT_USER
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now git-daemon
## CGIT WEB INTERFACE
cat > /etc/cgitrc <<- EOF
# Enable caching of up to 1000 output entries
cache-size=10
# Specify the css url
css=/cgit-data/cgit.css
# Show extra links for each repository on the index page
enable-index-links=1
# Enable ASCII art commit history graph on the log pages
enable-commit-graph=1
# Show number of affected files per commit on the log pages
enable-log-filecount=1
# Show number of added/removed lines per commit on the log pages
enable-log-linecount=1
# Use a custom logo
logo=/cgit-data/cgit.png
# Enable statistics per week, month and quarter
max-stats=quarter
# Allow download of tar.gz, tar.bz2, and tar.xz formats
snapshots=tar.gz tar.bz2 tar.xz
##
## List of common mimetypes
##
mimetype.gif=image/gif
mimetype.html=text/html
mimetype.jpg=image/jpeg
mimetype.jpeg=image/jpeg
mimetype.pdf=application/pdf
mimetype.png=image/png
mimetype.svg=image/svg+xml
# Enable syntax highlighting and about formatting
source-filter=/usr/libexec/cgit/filters/syntax-highlighting.py
about-filter=/usr/libexec/cgit/filters/about-formatting.sh
##
## List of common readmes
##
readme=:README.md
readme=:readme.md
readme=:README.mkd
readme=:readme.mkd
readme=:README.rst
readme=:readme.rst
readme=:README.html
readme=:readme.html
readme=:README.htm
readme=:readme.htm
readme=:README.txt
readme=:readme.txt
readme=:README
readme=:readme
readme=:INSTALL.md
readme=:install.md
readme=:INSTALL.mkd
readme=:install.mkd
readme=:INSTALL.rst
readme=:install.rst
readme=:INSTALL.html
readme=:install.html
readme=:INSTALL.htm
readme=:install.htm
readme=:INSTALL.txt
readme=:install.txt
readme=:INSTALL
readme=:install
# Direct cgit to repository location managed by gitolite
remove-suffix=1
project-list=$GIT_DEFAULT_DIR/projects.list
scan-path=$GIT_DEFAULT_DIR/repositories
EOF
mkdir -p /etc/httpd/conf.modules.d
cat > /etc/httpd/conf.modules.d/cgid.conf <<- EOF
LoadModule cgid_module lib/httpd/modules/mod_cgid.so
ScriptSock /run/httpd/cgid.sock
EOF
mkdir -p /etc/httpd/conf.d
cat > /etc/httpd/conf.d/cgit.conf <<- EOF
Alias /cgit-data /usr/share/cgit
AllowOverride None
Options None
Require all granted
ScriptAlias /cgit /usr/libexec/cgit/cgi-bin/cgit
AllowOverride None
Options ExecCGI
Require all granted
EOF
usermod -a -G "$GIT_USER" "$HTTPD_USER"
systemctl restart httpd
systemctl enable httpd
fi