193 lines
6.6 KiB
Bash
Executable File
193 lines
6.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
BUILDER_ROOT=${BUILDER_ROOT:-/opt/rust-package-builder}
|
|
source "$BUILDER_ROOT/scripts/lib.sh"
|
|
|
|
SRC=${1:?source path required}
|
|
PKG_AGENT=${2:?agent package workspace required}
|
|
AGENT_BINARY=${3:?agent binary path required}
|
|
: "${VERSION:?RustProxy source version is required}"
|
|
: "${PACKAGE_RELEASE:?package release is required}"
|
|
: "${GPG_PRIVATE_KEY_FILE:?GPG key path is required}"
|
|
[[ -x "$AGENT_BINARY" ]] || fatal "Go agent binary not found: $AGENT_BINARY"
|
|
[[ -r "$SRC/docker-agent/rustproxy-docker-agent.service" ]] || fatal 'missing Docker Agent systemd unit'
|
|
[[ -r "$SRC/docker-agent/docker-agent.env.example" ]] || fatal 'missing Docker Agent environment template'
|
|
|
|
AGENT_NAME=rustproxy-docker-agent
|
|
rm -rf -- "$PKG_AGENT"
|
|
mkdir -p "$PKG_AGENT/payload" "$PKG_AGENT/scripts"
|
|
install -D -m 0755 "$AGENT_BINARY" "$PKG_AGENT/payload/usr/bin/$AGENT_NAME"
|
|
sed 's@/usr/local/bin/rustproxy-docker-agent@/usr/bin/rustproxy-docker-agent@g' \
|
|
"$SRC/docker-agent/rustproxy-docker-agent.service" > "$PKG_AGENT/payload/agent.service"
|
|
install -D -m 0644 "$PKG_AGENT/payload/agent.service" "$PKG_AGENT/payload/usr/lib/systemd/system/$AGENT_NAME.service"
|
|
install -D -m 0600 "$SRC/docker-agent/docker-agent.env.example" "$PKG_AGENT/payload/etc/rustproxy/docker-agent.env"
|
|
install -D -m 0644 "$SRC/docker-agent/README.md" "$PKG_AGENT/payload/usr/share/doc/$AGENT_NAME/README.md"
|
|
|
|
cat > "$PKG_AGENT/scripts/deb-postinstall.sh" <<'SCRIPT'
|
|
#!/bin/sh
|
|
set -e
|
|
if ! getent group rustproxy-docker-agent >/dev/null 2>&1; then
|
|
addgroup --system rustproxy-docker-agent >/dev/null
|
|
fi
|
|
if ! getent passwd rustproxy-docker-agent >/dev/null 2>&1; then
|
|
adduser --system --ingroup rustproxy-docker-agent --home /var/lib/rustproxy-docker-agent \
|
|
--no-create-home --disabled-password --shell /usr/sbin/nologin rustproxy-docker-agent >/dev/null
|
|
fi
|
|
if getent group docker >/dev/null 2>&1; then
|
|
usermod -a -G docker rustproxy-docker-agent
|
|
fi
|
|
install -d -o rustproxy-docker-agent -g rustproxy-docker-agent -m 0750 /var/lib/rustproxy-docker-agent
|
|
install -d -m 0750 /etc/rustproxy
|
|
/usr/bin/rustproxy-docker-agent init
|
|
if command -v systemctl >/dev/null 2>&1; then
|
|
systemctl daemon-reload >/dev/null 2>&1 || true
|
|
systemctl enable rustproxy-docker-agent.service >/dev/null 2>&1 || true
|
|
if getent group docker >/dev/null 2>&1 && [ -S /var/run/docker.sock ]; then
|
|
systemctl restart rustproxy-docker-agent.service >/dev/null 2>&1 || true
|
|
else
|
|
echo 'RustProxy Docker Agent installed but not started: Docker group/socket unavailable.' >&2
|
|
fi
|
|
fi
|
|
exit 0
|
|
SCRIPT
|
|
|
|
cat > "$PKG_AGENT/scripts/rpm-postinstall.sh" <<'SCRIPT'
|
|
#!/bin/sh
|
|
set -e
|
|
if ! getent group rustproxy-docker-agent >/dev/null 2>&1; then
|
|
groupadd --system rustproxy-docker-agent
|
|
fi
|
|
if ! getent passwd rustproxy-docker-agent >/dev/null 2>&1; then
|
|
useradd --system --gid rustproxy-docker-agent --home-dir /var/lib/rustproxy-docker-agent \
|
|
--no-create-home --shell /sbin/nologin rustproxy-docker-agent
|
|
fi
|
|
if getent group docker >/dev/null 2>&1; then
|
|
usermod -a -G docker rustproxy-docker-agent
|
|
fi
|
|
install -d -o rustproxy-docker-agent -g rustproxy-docker-agent -m 0750 /var/lib/rustproxy-docker-agent
|
|
install -d -m 0750 /etc/rustproxy
|
|
/usr/bin/rustproxy-docker-agent init
|
|
if command -v systemctl >/dev/null 2>&1; then
|
|
systemctl daemon-reload >/dev/null 2>&1 || true
|
|
systemctl enable rustproxy-docker-agent.service >/dev/null 2>&1 || true
|
|
if getent group docker >/dev/null 2>&1 && [ -S /var/run/docker.sock ]; then
|
|
systemctl restart rustproxy-docker-agent.service >/dev/null 2>&1 || true
|
|
else
|
|
echo 'RustProxy Docker Agent installed but not started: Docker group/socket unavailable.' >&2
|
|
fi
|
|
fi
|
|
exit 0
|
|
SCRIPT
|
|
|
|
cat > "$PKG_AGENT/scripts/deb-preremove.sh" <<'SCRIPT'
|
|
#!/bin/sh
|
|
set -e
|
|
case "${1:-}" in
|
|
remove|deconfigure) systemctl stop rustproxy-docker-agent.service >/dev/null 2>&1 || true ;;
|
|
esac
|
|
exit 0
|
|
SCRIPT
|
|
cat > "$PKG_AGENT/scripts/rpm-preremove.sh" <<'SCRIPT'
|
|
#!/bin/sh
|
|
set -e
|
|
if [ "${1:-1}" -eq 0 ]; then
|
|
systemctl stop rustproxy-docker-agent.service >/dev/null 2>&1 || true
|
|
systemctl disable rustproxy-docker-agent.service >/dev/null 2>&1 || true
|
|
fi
|
|
exit 0
|
|
SCRIPT
|
|
for kind in deb rpm; do
|
|
cat > "$PKG_AGENT/scripts/$kind-postremove.sh" <<'SCRIPT'
|
|
#!/bin/sh
|
|
set -e
|
|
systemctl daemon-reload >/dev/null 2>&1 || true
|
|
exit 0
|
|
SCRIPT
|
|
done
|
|
chmod 0755 "$PKG_AGENT/scripts/"*.sh
|
|
|
|
AGENT_NAME_Q=$(yaml_quote "$AGENT_NAME")
|
|
VERSION_Q=$(yaml_quote "$VERSION")
|
|
MAINTAINER_Q=$(yaml_quote "$MAINTAINER")
|
|
HOMEPAGE_Q=$(yaml_quote "$HOMEPAGE")
|
|
GPG_Q=$(yaml_quote "$GPG_PRIVATE_KEY_FILE")
|
|
|
|
cat > "$PKG_AGENT/contents.yaml" <<YAML
|
|
- src: $(yaml_quote "$PKG_AGENT/payload/usr/bin/$AGENT_NAME")
|
|
dst: /usr/bin/$AGENT_NAME
|
|
file_info:
|
|
mode: 0755
|
|
- src: $(yaml_quote "$PKG_AGENT/payload/usr/lib/systemd/system/$AGENT_NAME.service")
|
|
dst: /usr/lib/systemd/system/$AGENT_NAME.service
|
|
file_info:
|
|
mode: 0644
|
|
- src: $(yaml_quote "$PKG_AGENT/payload/etc/rustproxy/docker-agent.env")
|
|
dst: /etc/rustproxy/docker-agent.env
|
|
type: "config|noreplace"
|
|
file_info:
|
|
mode: 0600
|
|
- src: $(yaml_quote "$PKG_AGENT/payload/usr/share/doc/$AGENT_NAME/README.md")
|
|
dst: /usr/share/doc/$AGENT_NAME/README.md
|
|
file_info:
|
|
mode: 0644
|
|
YAML
|
|
|
|
cat > "$PKG_AGENT/nfpm-deb.yaml" <<YAML
|
|
name: $AGENT_NAME_Q
|
|
arch: amd64
|
|
platform: linux
|
|
version: $VERSION_Q
|
|
release: "$PACKAGE_RELEASE"
|
|
section: net
|
|
priority: optional
|
|
maintainer: $MAINTAINER_Q
|
|
description: "RustProxy Docker discovery agent (HTTPS and bearer token)"
|
|
license: "Proprietary"
|
|
homepage: $HOMEPAGE_Q
|
|
contents:
|
|
$(cat "$PKG_AGENT/contents.yaml")
|
|
depends:
|
|
- adduser
|
|
- ca-certificates
|
|
- systemd
|
|
- passwd
|
|
scripts:
|
|
postinstall: "$PKG_AGENT/scripts/deb-postinstall.sh"
|
|
preremove: "$PKG_AGENT/scripts/deb-preremove.sh"
|
|
postremove: "$PKG_AGENT/scripts/deb-postremove.sh"
|
|
deb:
|
|
compression: xz
|
|
signature:
|
|
key_file: $GPG_Q
|
|
type: origin
|
|
YAML
|
|
cat > "$PKG_AGENT/nfpm-rpm.yaml" <<YAML
|
|
name: $AGENT_NAME_Q
|
|
arch: amd64
|
|
platform: linux
|
|
version: $VERSION_Q
|
|
release: "$PACKAGE_RELEASE"
|
|
section: net
|
|
priority: optional
|
|
maintainer: $MAINTAINER_Q
|
|
description: "RustProxy Docker discovery agent (HTTPS and bearer token)"
|
|
license: "Proprietary"
|
|
homepage: $HOMEPAGE_Q
|
|
contents:
|
|
$(cat "$PKG_AGENT/contents.yaml")
|
|
depends:
|
|
- ca-certificates
|
|
- shadow-utils
|
|
- systemd
|
|
scripts:
|
|
postinstall: "$PKG_AGENT/scripts/rpm-postinstall.sh"
|
|
preremove: "$PKG_AGENT/scripts/rpm-preremove.sh"
|
|
postremove: "$PKG_AGENT/scripts/rpm-postremove.sh"
|
|
rpm:
|
|
compression: zstd
|
|
signature:
|
|
key_file: $GPG_Q
|
|
YAML
|
|
|
|
log "prepared signed Linux DEB/RPM metadata for $AGENT_NAME $VERSION-$PACKAGE_RELEASE"
|