v0.3.0-prod
This commit is contained in:
1 parent
387933957e
commit
9d093b691c
21 files changed
+1239
-180
No files matched your search
Executable
+151
@@ -0,0 +1,151 @@
|
||||
#!/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
|
||||
Reference in new issue
Block a user