#!/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" < 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" < "$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 < "$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