home · contact · privacy
Use server as git repo mirror.
authorPlom Heller <plom@plomlompom.com>
Mon, 7 Sep 2026 14:10:38 +0000 (16:10 +0200)
committerPlom Heller <plom@plomlompom.com>
Mon, 7 Sep 2026 14:10:38 +0000 (16:10 +0200)
setup_scripts/_lib.sh
setup_scripts/install_server.sh
setup_scripts/setup_git_mirror.sh [new file with mode: 0755]

index 5d9e37f0b871f5c3fe56c5092c9e7844b346c4e9..8fa181a40e7dda2d6179c7fab2b957a728f98d9d 100644 (file)
@@ -22,6 +22,7 @@ USERNAME=plom
 PATH_MY_SSH="${HOME}/${DIRNAME_SSH}"
 PATH_PROFILE="${HOME}/${FNAME_PROFILE}"
 PATH_REPO=$(cd .. && pwd)
+NAME_REPO_DIR=$(basename "${PATH_REPO}")
 
 # path constructors
 path_luks_mapper() {
index 65464d00e1d92084db16f2b019d1ad720f07e5ff..d21593f3669163ddbe958049b337ae27afe654e5 100755 (executable)
@@ -5,7 +5,6 @@
 FNAME_REPO_TAR=repo.tar
 
 # constants derived from changeables
-NAME_REPO_DIR=$(basename "${PATH_REPO}")
 PATH_REPO_PARENT=$(dirname "${PATH_REPO}")
 PATH_SETUP_SCRIPT="./${NAME_REPO_DIR}/setup_scripts/start_root_server.sh"
 
diff --git a/setup_scripts/setup_git_mirror.sh b/setup_scripts/setup_git_mirror.sh
new file mode 100755 (executable)
index 0000000..25f6143
--- /dev/null
@@ -0,0 +1,47 @@
+#!/bin/sh
+. "$(dirname "$0")/_lib.sh"
+
+# constants we might want to change at some point
+PATH_GIT_BASE=/srv/git
+
+# constants derived from changeables
+PATH_GIT_DAEMON_UNIT=/etc/systemd/system/git-daemon.service
+PATH_GIT_MIRROR="${PATH_GIT_BASE}/${NAME_REPO_DIR}.git"
+
+[ -e "${PATH_GIT_MIRROR}" ]\
+    && error "${PATH_GIT_MIRROR} already exists"
+
+msg 'Installing git …'
+apt-get -y update
+apt-get -y install git
+
+msg 'Bare-cloning repo to %s for anonymous serving …' "${PATH_GIT_MIRROR}"
+mkdir -p "${PATH_GIT_BASE}"
+git clone --quiet --bare "${PATH_REPO}" "${PATH_GIT_MIRROR}"
+touch "${PATH_GIT_MIRROR}/git-daemon-export-ok"
+
+msg 'Own repo to %s so they can update it via ssh …' "${USERNAME}"
+chown -R "${USERNAME}:${USERNAME}" "${PATH_GIT_MIRROR}"
+
+msg 'Writing and enabling git-daemon systemd unit …'
+cat <<EOF >| "${PATH_GIT_DAEMON_UNIT}"
+[Unit]
+Description=Anonymous read-only git daemon
+After=network.target
+
+[Service]
+User=${USERNAME}
+ExecStart=/usr/bin/git daemon --reuseaddr \
+    --base-path=${PATH_GIT_BASE} ${PATH_GIT_BASE}
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
+EOF
+systemctl daemon-reload
+systemctl enable --now git-daemon
+
+msg 'Anonymous clone URL: git://<this-server>/%s.git' "${NAME_REPO_DIR}"
+msg 'Push updates later with: git push ssh://%s@<this-server>%s' \
+    "${USERNAME}" "${PATH_GIT_MIRROR}"
+msg 'Firewall note: git daemon listens on port 9418/tcp.'