152 lines
5.0 KiB
Bash
Executable File
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
|