summaryrefslogtreecommitdiff
path: root/packages/scripts/pkg-dtail-rpm.sh
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-16 15:22:00 +0300
committerPaul Buetow <paul@buetow.org>2026-05-16 15:22:00 +0300
commit91d5fec541ecc9147d89a2c25f3ba76ce1895bb7 (patch)
tree848c677cb4b3748dc2d104f30f4d77ab068fc894 /packages/scripts/pkg-dtail-rpm.sh
parent98217b5ab29265d2662bebf0a1d946eaead80dbd (diff)
frontends + packages: add dserver/dtail support for FreeBSD and Rocky
Adds FreeBSD .tpl variants of the existing dserver templates and a matching pkg-dtail-freebsd.sh packaging script, plus a pkg-dtail-rpm.sh script and packages/files/dtail-rocky/ (systemd units, key-cache script, dtail.json) for the Rocky Linux dtail build.
Diffstat (limited to 'packages/scripts/pkg-dtail-rpm.sh')
-rwxr-xr-xpackages/scripts/pkg-dtail-rpm.sh140
1 files changed, 140 insertions, 0 deletions
diff --git a/packages/scripts/pkg-dtail-rpm.sh b/packages/scripts/pkg-dtail-rpm.sh
new file mode 100755
index 0000000..b654933
--- /dev/null
+++ b/packages/scripts/pkg-dtail-rpm.sh
@@ -0,0 +1,140 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+if [[ $# -ne 5 ]]; then
+ echo "usage: $0 <x86_64|aarch64> <version> <dtail-src> <asset-dir> <out-dir>" >&2
+ exit 1
+fi
+
+rpm_arch=$1
+raw_version=$2
+dtail_src=$3
+asset_dir=$4
+out_dir=$5
+
+case "$rpm_arch" in
+ x86_64)
+ goarch=amd64
+ ;;
+ aarch64)
+ goarch=arm64
+ ;;
+ *)
+ echo "unsupported rpm arch: $rpm_arch" >&2
+ exit 1
+ ;;
+esac
+
+rpm_version=${raw_version%%-*}
+rpm_release=1
+if [[ "$raw_version" == *-* ]]; then
+ suffix=${raw_version#"$rpm_version"-}
+ suffix=${suffix//[^A-Za-z0-9.+~]/.}
+ rpm_release="1.${suffix}"
+fi
+
+workdir=$(mktemp -d)
+trap 'rm -rf "$workdir"' EXIT
+
+pkgroot="$workdir/root"
+topdir="$workdir/rpmbuild"
+mkdir -p \
+ "$pkgroot/usr/local/bin" \
+ "$pkgroot/etc/dserver" \
+ "$pkgroot/usr/lib/systemd/system" \
+ "$pkgroot/usr/share/licenses/dtail" \
+ "$topdir/BUILD" \
+ "$topdir/BUILDROOT" \
+ "$topdir/RPMS" \
+ "$topdir/SOURCES" \
+ "$topdir/SPECS" \
+ "$topdir/SRPMS"
+
+if [[ -n "${DTAIL_PREBUILT_ROOT:-}" ]]; then
+ cp -a "$DTAIL_PREBUILT_ROOT/." "$pkgroot/"
+else
+ for bin in dserver dcat dgrep dmap dtail dtailhealth; do
+ (
+ cd "$dtail_src"
+ CGO_ENABLED=0 GOOS=linux GOARCH="$goarch" go build -tags nozstd -o "$pkgroot/usr/local/bin/$bin" "./cmd/$bin/main.go"
+ )
+ done
+
+ install -m 0644 "$asset_dir/dtail.json" "$pkgroot/etc/dserver/dtail.json"
+ install -m 0755 "$asset_dir/dserver-update-key-cache.sh" "$pkgroot/usr/local/bin/dserver-update-key-cache.sh"
+ install -m 0644 "$asset_dir/dserver.service" "$pkgroot/usr/lib/systemd/system/dserver.service"
+ install -m 0644 "$asset_dir/dserver-update-keycache.service" "$pkgroot/usr/lib/systemd/system/dserver-update-keycache.service"
+ install -m 0644 "$asset_dir/dserver-update-keycache.timer" "$pkgroot/usr/lib/systemd/system/dserver-update-keycache.timer"
+ install -m 0644 "$dtail_src/LICENSE" "$pkgroot/usr/share/licenses/dtail/LICENSE"
+fi
+
+cp -a "$pkgroot" "$topdir/SOURCES/root"
+
+cat >"$topdir/SPECS/dtail.spec" <<EOF
+Name: dtail
+Version: $rpm_version
+Release: $rpm_release
+Summary: Distributed log tail and grep tool
+License: Apache-2.0
+URL: https://codeberg.org/snonux/dtail
+BuildArch: $rpm_arch
+Requires(pre): shadow-utils
+Requires(post): systemd
+Requires(preun): systemd
+Requires(postun): systemd
+
+%description
+DTail is a distributed DevOps tool for tailing, grepping, catting, and
+mapping across many remote machines at once via SSH.
+
+%prep
+
+%build
+
+%install
+mkdir -p %{buildroot}
+cp -a %{_sourcedir}/root/. %{buildroot}/
+
+%pre
+getent group dserver >/dev/null || groupadd -r dserver
+getent passwd dserver >/dev/null || useradd -r -g dserver -d /var/lib/dserver -s /sbin/nologin -c "DTail server" dserver
+exit 0
+
+%post
+systemctl daemon-reload >/dev/null 2>&1 || true
+
+%preun
+if [ \$1 -eq 0 ]; then
+ systemctl --no-reload disable --now dserver-update-keycache.timer >/dev/null 2>&1 || true
+fi
+
+%postun
+systemctl daemon-reload >/dev/null 2>&1 || true
+
+%files
+%license /usr/share/licenses/dtail/LICENSE
+%dir /etc/dserver
+%config(noreplace) /etc/dserver/dtail.json
+/usr/local/bin/dserver
+/usr/local/bin/dcat
+/usr/local/bin/dgrep
+/usr/local/bin/dmap
+/usr/local/bin/dtail
+/usr/local/bin/dtailhealth
+/usr/local/bin/dserver-update-key-cache.sh
+/usr/lib/systemd/system/dserver.service
+/usr/lib/systemd/system/dserver-update-keycache.service
+/usr/lib/systemd/system/dserver-update-keycache.timer
+
+%changelog
+* Sat Apr 11 2026 Paul Buetow <paul@buetow.org> - $rpm_version-$rpm_release
+- Package DTail for Rocky Linux 9
+EOF
+
+mkdir -p "$out_dir"
+rpmbuild --quiet \
+ --define "_topdir $topdir" \
+ --target "$rpm_arch" \
+ -bb "$topdir/SPECS/dtail.spec"
+cp "$topdir/RPMS/$rpm_arch"/*.rpm "$out_dir/"