commit 584233d1e6ca207101046dc8fafe0347c1652c1e parent ce0a3b3cb4f41d0970d8656891a503736f261650 Author: Fred Großkopf <fred@kuandu.systems> Date: Wed, 29 Apr 2026 00:26:14 +0200 WIP: install.sh Diffstat:
| M | install.sh | | | 113 | ++++++++++++++++++++++++++++++++++++++----------------------------------------- |
1 file changed, 55 insertions(+), 58 deletions(-)
diff --git a/install.sh b/install.sh @@ -1,83 +1,80 @@ #!/bin/sh - set -eu -SRC_DIR="$(cd "$(dirname "$0")" && pwd)" -DST_DIR="${1:-$HOME/bin}" -INSTALL_SCRIPTS="gitpages-init.sh gitpages.sh mirror-git.sh" - -usage() { - cat << EOF -Usage: $0 [DST_DIR] [SCRIPT...] - -Installs symlinks for git tools to DST_DIR (default: \$HOME/bin). - -Default scripts: $INSTALL_SCRIPTS - -Examples: - $0 # Install defaults to \$HOME/bin - $0 ~/bin # Defaults to ~/bin - $0 /usr/local/bin # Defaults to /usr/local/bin - $0 ~/bin gitpages.sh # Only gitpages.sh - -EOF - exit 0 -} - +log() { printf 'info: %s\n' "$1"; } +warn() { printf 'warning: %s\n' "$1" >&2; } error() { printf 'error: %s\n' "$1" >&2 exit 1 } -info() { - printf 'info: %s\n' "$1" +usage() { + printf 'usage: %s <git-user>\n' "$(basename "$0")" + exit 1 } -print_next_steps() { - cat << EOF - -Next: make sure to update your path, e.g.: - -echo 'export PATH="\$DST_DIR:\$PATH"' >> ~/.profile && source ~/.profile - -EOF +setup_dirs() { + install -d -m 755 -o gitpages -g gitpages "$VAR_DIR" "$LOG_DIR" + install -d -m 755 "$BIN_DIR" "$SPOOL_DIR" } -ensure_destination() { - mkdir -p "$DST_DIR" 2> /dev/null || error "$DST_DIR: cannot create directory" - [ -w "$DST_DIR" ] || error "$DST_DIR: not writable" +setup_user() { + if ! id "gitpages" > /dev/null 2>&1; then + useradd -s /sbin/nologin -d "$VAR_DIR" -c "Gitpages service user" gitpages + fi } -install() { - scripts="${*:-$INSTALL_SCRIPTS}" - for name in $scripts; do - src="$SRC_DIR/$name" - [ -f "$src" ] || error "missing: $src" - target="$DST_DIR/${name%.sh}" +setup_spool() { + install -m 664 -o "$GIT_USER" -g gitpages /dev/null "$QUEUE_FILE" +} - if [ -L "$target" ]; then - rm "$target" - info "Updated: ${name%.sh}" +install_scripts() { + for script in gitpages.sh gitpages-init.sh gitpages-mirror-git.sh gitpages-update.sh; do + if [ -f "./$script" ]; then + install -m 755 -o root -g wheel "./$script" "$BIN_DIR/$script" + log "Installed $script to $BIN_DIR" else - info "Created: ${name%.sh}" + warn "$script not found, skipping." fi - - ln -sf "$src" "$target" - chmod +x "$target" done +} - info "Installation complete: $DST_DIR" - print_next_steps +setup_config() { + if [ ! -f "$ETC_DIR/gitpages.conf" ]; then + cat << EOF > "$ETC_DIR/gitpages.conf" +GIT_SRC=/var/git/repos +WEB_ROOT=/var/www/htdocs +GIT_RAW=git-raw +GIT_HTML=git +EOF + log "Created default config in $ETC_DIR/gitpages.conf" + fi } main() { - case "${1:-}" in - --help | -h) usage ;; - -*) error "unknown option: $1 (try --help)" ;; - esac - ensure_destination "$DST_DIR" - shift # Consume DST_DIR if provided - install "$@" + [ $# -ne 1 ] && usage + GIT_USER="$1" + + BIN_DIR="/usr/local/sbin" + ETC_DIR="/etc" + VAR_DIR="/var/gitpages" + LOG_DIR="/var/log/gitpages" + SPOOL_DIR="/var/spool" + QUEUE_FILE="$SPOOL_DIR/gitpages-update-queue" + + if ! id "$GIT_USER" > /dev/null 2>&1; then + error "User '$GIT_USER' does not exist." + fi + + log "Installing gitpages environment for git-user: $GIT_USER" + + setup_user + setup_dirs + setup_spool + install_scripts + setup_config + + log "Installation complete." } main "$@"