Files
ts3-monolith-go/scripts/build-deb.sh
T
2026-11-04 14:57:48 +01:00

152 lines
5.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Buduje pakiet .deb dla ts3monolith w kontenerze Docker (tak samo jak
# scripts/build-deb.sh w PostfixAdminRS): zero zaleznosci na hoscie poza
# Dockerem, wersja Go dokladnie taka jak w go.mod, build w pelni offline
# (modul nie ma zadnych zewnetrznych zaleznosci).
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
OUT="$ROOT/packages"
IMAGE_BASE="${TS3MONOLITH_GO_IMAGE:-golang}"
ARCH="${DEB_ARCH:-amd64}"
TOOLCHAIN="$(sed -n 's/^go[[:space:]]*\([0-9.]*\)[[:space:]]*$/\1/p' "$ROOT/go.mod" | head -n1)"
command -v docker >/dev/null 2>&1 || { echo "error: docker is required" >&2; exit 1; }
[ -n "$TOOLCHAIN" ] || { echo "error: cannot read Go toolchain version from go.mod" >&2; exit 1; }
mkdir -p "$OUT"
IMAGE="${IMAGE_BASE}:${TOOLCHAIN}-bookworm"
printf 'Building Debian package with %s (GOARCH=%s)\n' "$IMAGE" "$ARCH"
printf 'Output: %s\n' "$OUT"
docker run --rm \
-e CGO_ENABLED=0 \
-e GOOS=linux \
-e GOARCH="$ARCH" \
-e GOFLAGS=-mod=mod \
-v "$ROOT:/src:ro" \
-v "$OUT:/packages" \
-v ts3monolith-gocache:/root/.cache/go-build \
-v ts3monolith-gomodcache:/go/pkg/mod \
"$IMAGE" bash -euxo pipefail -c '
rm -rf /work/ts3monolith /work/pkg
mkdir -p /work/ts3monolith
cp -a /src/. /work/ts3monolith/
cd /work/ts3monolith
gofmt -l . > /tmp/fmt.out
if [ -s /tmp/fmt.out ]; then
echo "gofmt: nieotypowane pliki:"; cat /tmp/fmt.out
exit 1
fi
go vet ./...
go test ./...
go build -trimpath -buildvcs=false -ldflags="-s -w -buildid=" -o target/ts3monolith ./cmd/ts3monolith
VERSION="$(tr -d " \t\n" < VERSION)"
DEB_VERSION="${VERSION}"
ARCH="'"$ARCH"'"
PKG=/work/pkg
install -d "$PKG/DEBIAN" "$PKG/usr/bin" "$PKG/usr/lib/ts3monolith" "$PKG/etc/default" "$PKG/lib/systemd/system" "$PKG/usr/share/doc/ts3monolith"
install -m 0755 target/ts3monolith "$PKG/usr/bin/ts3monolith"
install -m 0640 packaging/ts3monolith.default "$PKG/etc/default/ts3monolith"
install -m 0644 packaging/ts3monolith.service "$PKG/lib/systemd/system/ts3monolith.service"
install -m 0755 packaging/ts3monolith-init-rrd "$PKG/usr/lib/ts3monolith/init-rrd"
install -m 0644 README.md "$PKG/usr/share/doc/ts3monolith/"
cat > "$PKG/DEBIAN/control" <<CONTROL
Package: ts3monolith
Version: $DEB_VERSION
Section: net
Priority: optional
Architecture: $ARCH
Maintainer: local build <root@localhost>
Depends: adduser, passwd, rrdtool, ca-certificates
Description: Panel TeamSpeak 3 - tworzenie kanalow i statystyki RRD
TS3 Monolith to pojedyncza aplikacja Go laczaca tworzenie kanalow
TeamSpeak 3 na zadanie uzytkownika z historycznymi statystykami
obecnosci (RRD). Zastepuje stary zestaw aplikacji PHP.
CONTROL
cat > "$PKG/DEBIAN/conffiles" <<CONFFILES
/etc/default/ts3monolith
CONFFILES
cat > "$PKG/DEBIAN/postinst" <<"POSTINST"
#!/bin/sh
set -e
if ! getent group ts3monolith >/dev/null 2>&1; then
addgroup --system ts3monolith >/dev/null
fi
if ! getent passwd ts3monolith >/dev/null 2>&1; then
adduser --system \
--ingroup ts3monolith \
--home /var/lib/ts3monolith \
--no-create-home \
--disabled-login \
--shell /usr/sbin/nologin \
ts3monolith >/dev/null
fi
install -d -o ts3monolith -g ts3monolith -m 0750 /var/lib/ts3monolith
install -d -o ts3monolith -g ts3monolith -m 0750 /var/lib/ts3monolith/graphs
if [ -f /etc/default/ts3monolith ]; then
chown root:ts3monolith /etc/default/ts3monolith
chmod 0640 /etc/default/ts3monolith
fi
if ! command -v rrdtool >/dev/null 2>&1; then
echo "UWAGA: rrdtool nie jest zainstalowany - usluga sie nie uruchomi." >&2
fi
if command -v systemctl >/dev/null 2>&1; then
systemctl daemon-reload || true
fi
cat <<MSG
ts3monolith zainstalowany.
1. Uzupelnij sekrety: nano /etc/default/ts3monolith
2. Jesli nie masz archiwalnej bazy RRD, zainicjuj nowa:
sudo -u ts3monolith /usr/lib/ts3monolith/init-rrd
3. Uruchom usluge: systemctl enable --now ts3monolith
4. Status / logi: systemctl status ts3monolith / journalctl -u ts3monolith -f
MSG
exit 0
POSTINST
chmod 0755 "$PKG/DEBIAN/postinst"
cat > "$PKG/DEBIAN/prerm" <<"PRERM"
#!/bin/sh
set -e
if [ "${1:-}" = remove ] && command -v systemctl >/dev/null 2>&1; then
systemctl stop ts3monolith.service >/dev/null 2>&1 || true
fi
exit 0
PRERM
chmod 0755 "$PKG/DEBIAN/prerm"
cat > "$PKG/DEBIAN/postrm" <<"POSTRM"
#!/bin/sh
set -e
if command -v systemctl >/dev/null 2>&1; then
systemctl daemon-reload >/dev/null 2>&1 || true
fi
exit 0
POSTRM
chmod 0755 "$PKG/DEBIAN/postrm"
grep -qx "User=ts3monolith" "$PKG/lib/systemd/system/ts3monolith.service"
grep -qx "Group=ts3monolith" "$PKG/lib/systemd/system/ts3monolith.service"
dpkg-deb --root-owner-group --build "$PKG" "/packages/ts3monolith_${DEB_VERSION}_${ARCH}.deb"
sha256sum "/packages/ts3monolith_${DEB_VERSION}_${ARCH}.deb" > "/packages/ts3monolith_${DEB_VERSION}_${ARCH}.deb.sha256"
'
printf '\nPackages created:\n'
find "$OUT" -maxdepth 1 -type f -name 'ts3monolith_*.deb*' -printf ' %f\n' | sort