diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 7010367..01a76bc 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -66,7 +66,7 @@ jobs: run: | for package in ${ALPINE_PACKAGES}; do case "${package}" in - seaweedfs|greptimedb|lavinmq|gitea|nifi|rclone-openrc) ;; + seaweedfs|greptimedb|lavinmq|gitea|nifi|nifi-registry|rclone-openrc) ;; *) printf 'selected package is missing from the CI build matrix: %s\n' "${package}" >&2 exit 1 @@ -82,7 +82,7 @@ jobs: strategy: fail-fast: false matrix: - package: [seaweedfs, greptimedb, lavinmq, gitea, nifi, rclone-openrc] + package: [seaweedfs, greptimedb, lavinmq, gitea, nifi, nifi-registry, rclone-openrc] container: image: "alpine:3.24" env: diff --git a/README.md b/README.md index 6acf135..475a239 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ https://code.factoring.digital/api/packages/public/alpine/v3.24/alpine-packages | [LavinMQ](packaging/alpine/local/lavinmq/README.md) | `lavinmq` | `2.10.1` | Source build from upstream release | Provides a current LavinMQ build on Alpine 3.24 with matching Crystal support. | | [Gitea](packaging/alpine/local/gitea/README.md) | `gitea` | `28.2.0` | Binary repackaging of official upstream release binaries | Ships current Gitea releases with the expected Alpine runtime layout and OpenRC service. | | [Apache NiFi](packaging/alpine/local/nifi/README.md) | `nifi` | `2.12.0` | Binary repackaging of the official Standard distribution | Provides Apache NiFi 2 with a secure default configuration and OpenRC service. | +| [Apache NiFi Registry](packaging/alpine/local/nifi-registry/README.md) | `nifi-registry` | `2.12.0` | Binary repackaging of the official Standard distribution | Provides Apache NiFi Registry 2 with a secure default configuration and OpenRC service. | | [rclone OpenRC](packaging/alpine/local/rclone-openrc/README.md) | `rclone-openrc` | `0.1.0` | OpenRC integration for Alpine's rclone package | Provides reusable, instance-capable OpenRC supervision for rclone commands. | ## Use In Production diff --git a/packaging/alpine/local/nifi-registry/APKBUILD b/packaging/alpine/local/nifi-registry/APKBUILD new file mode 100644 index 0000000..fada4ab --- /dev/null +++ b/packaging/alpine/local/nifi-registry/APKBUILD @@ -0,0 +1,72 @@ +# Maintainer: Joachim Schlöffel +pkgname=nifi-registry +pkgver=2.12.0 +pkgrel=0 +pkgdesc="Central registry for shared NiFi and MiNiFi resources" +url="https://nifi.apache.org/registry.html" +arch="x86_64 aarch64" +license="Apache-2.0" +depends="openjdk21-jre-headless" +makedepends="unzip" +install="$pkgname.pre-install" +pkgusers="nifi-registry" +pkggroups="nifi-registry" +subpackages=" + $pkgname-openrc:_openrc:noarch + " +options="!check !strip !tracedeps" +source=" + $pkgname-$pkgver-bin.zip::https://dlcdn.apache.org/nifi/$pkgver/nifi-registry-$pkgver-bin.zip + nifi-registry.confd + nifi-registry.initd + nifi-registry.wrapper + " + +package() { + local _dir + + install -d "$pkgdir"/usr/lib/nifi-registry "$pkgdir"/etc/nifi-registry + cp -a "$builddir"/. "$pkgdir"/usr/lib/nifi-registry/ + chmod -R a+rX "$pkgdir"/usr/lib/nifi-registry + install -d "$pkgdir"/usr/lib/nifi-registry/docs + + cp -a "$pkgdir"/usr/lib/nifi-registry/conf/. "$pkgdir"/etc/nifi-registry/ + rm -r "$pkgdir"/usr/lib/nifi-registry/conf + ln -s /etc/nifi-registry "$pkgdir"/usr/lib/nifi-registry/conf + + install -d -m 0750 -o nifi-registry -g nifi-registry \ + "$pkgdir"/var/lib/nifi-registry + for _dir in database extension_bundles flow_storage work; do + install -d -m 0750 -o nifi-registry -g nifi-registry \ + "$pkgdir"/var/lib/nifi-registry/$_dir + ln -s /var/lib/nifi-registry/$_dir \ + "$pkgdir"/usr/lib/nifi-registry/$_dir + done + install -d -m 0750 -o nifi-registry -g nifi-registry \ + "$pkgdir"/var/log/nifi-registry + ln -s /var/log/nifi-registry "$pkgdir"/usr/lib/nifi-registry/logs + ln -s /run/nifi-registry "$pkgdir"/usr/lib/nifi-registry/run + + chown -R nifi-registry:nifi-registry "$pkgdir"/etc/nifi-registry + chmod 0750 "$pkgdir"/etc/nifi-registry + + install -Dm755 "$srcdir"/nifi-registry.wrapper \ + "$pkgdir"/usr/bin/nifi-registry +} + +_openrc() { + pkgdesc="$pkgdesc (OpenRC service)" + depends="$pkgname=$pkgver-r$pkgrel openrc" + + install -Dm755 "$srcdir"/nifi-registry.initd \ + "$subpkgdir"/etc/init.d/nifi-registry + install -Dm644 "$srcdir"/nifi-registry.confd \ + "$subpkgdir"/etc/conf.d/nifi-registry +} + +sha512sums=" +f4410a082f264175bd2f2c8b3366ac61636f1736d8fb3685cee20d8076509ed05f413dfffaaa3ca9a2b1ba49ab510bb006c9ccc9decef0332906a13f8fb9e52b nifi-registry-2.12.0-bin.zip +61d8f644a0a2f87b8d6d4ef9820d4195ee4fbaaa7da6ddba347197d4202a983a82b4f376a0ddb5c80c247d7af9d5b26d7890db325e3d124c5025b41cbd19c319 nifi-registry.confd +87116490a925d9e3133d1561baa06727bcd22637332d7ac35a7e7e8921427a68dc1b52d1560c733b5f8bd38d5ba9e82868dd9fd74d91e13efaa65b764d4b1936 nifi-registry.initd +1efcb07dbc83f4f1a3e138a16d142ffd825097ef7e209383129b2bc02266f277edc3973143bcc7498982359cffd829d999c9b944acc5860059396a2dd5112950 nifi-registry.wrapper +" diff --git a/packaging/alpine/local/nifi-registry/README.md b/packaging/alpine/local/nifi-registry/README.md new file mode 100644 index 0000000..954992f --- /dev/null +++ b/packaging/alpine/local/nifi-registry/README.md @@ -0,0 +1,42 @@ +# Apache NiFi Registry Alpine Package + +Repackages Apache NiFi Registry 2.12.0 for Alpine. The package requires Java +21 and preserves the upstream default: an unsecured HTTP service listening on +port 18080. Configure TLS and authentication before exposing it to an +untrusted network. + +## Install + +```sh +apk add nifi-registry nifi-registry-openrc +rc-update add nifi-registry default +rc-service nifi-registry start +``` + +Open `http://127.0.0.1:18080/nifi-registry/`. + +## Runtime Layout + +```text +/usr/bin/nifi-registry Administration command wrapper +/usr/lib/nifi-registry NiFi Registry binaries and bundled extensions +/etc/nifi-registry Mutable configuration and authorization state +/var/lib/nifi-registry Database, flow, extension, and work files +/var/log/nifi-registry Application logs +/etc/conf.d/nifi-registry OpenRC account defaults +/etc/init.d/nifi-registry OpenRC service +``` + +Edit `/etc/nifi-registry/nifi-registry.properties` to configure HTTPS, TLS, +authentication, and the listening address. Registry has been deprecated +upstream in favor of NiFi's Git-based Flow Registry clients, but remains +available through the NiFi 2.x series. + +## Package Commands + +```sh +ALPINE_PACKAGE=nifi-registry mise run apk:checksum +ALPINE_PACKAGE=nifi-registry mise run apk:build +ALPINE_PACKAGE=nifi-registry SKIP_BUILD=1 mise run apk:test-install +ALPINE_PACKAGE=nifi-registry mise run apk:runtime-test +``` diff --git a/packaging/alpine/local/nifi-registry/nifi-registry.confd b/packaging/alpine/local/nifi-registry/nifi-registry.confd new file mode 100644 index 0000000..cb8e082 --- /dev/null +++ b/packaging/alpine/local/nifi-registry/nifi-registry.confd @@ -0,0 +1,3 @@ +# Defaults for Apache NiFi Registry. +NIFI_REGISTRY_USER="nifi-registry" +NIFI_REGISTRY_GROUP="nifi-registry" diff --git a/packaging/alpine/local/nifi-registry/nifi-registry.initd b/packaging/alpine/local/nifi-registry/nifi-registry.initd new file mode 100644 index 0000000..0bfed01 --- /dev/null +++ b/packaging/alpine/local/nifi-registry/nifi-registry.initd @@ -0,0 +1,26 @@ +#!/sbin/openrc-run + +description="Apache NiFi Registry service" + +supervisor=supervise-daemon +name=nifi-registry +command="/usr/lib/nifi-registry/bin/nifi-registry.sh" +command_args="run" +command_user="${NIFI_REGISTRY_USER:-nifi-registry}:${NIFI_REGISTRY_GROUP:-nifi-registry}" +directory="/usr/lib/nifi-registry" +pidfile="/run/nifi-registry/nifi-registry.pid" +supervise_daemon_args="--chdir /usr/lib/nifi-registry --env HOME=/var/lib/nifi-registry --pidfile ${pidfile}" + +depend() { + need net + use dns logger +} + +start_pre() { + local service_owner="${NIFI_REGISTRY_USER:-nifi-registry}:${NIFI_REGISTRY_GROUP:-nifi-registry}" + + checkpath -d -m 0750 -o "$service_owner" \ + /run/nifi-registry \ + /var/lib/nifi-registry \ + /var/log/nifi-registry +} diff --git a/packaging/alpine/local/nifi-registry/nifi-registry.pre-install b/packaging/alpine/local/nifi-registry/nifi-registry.pre-install new file mode 100644 index 0000000..9141db4 --- /dev/null +++ b/packaging/alpine/local/nifi-registry/nifi-registry.pre-install @@ -0,0 +1,7 @@ +#!/bin/sh + +addgroup -S nifi-registry 2>/dev/null +adduser -S -D -H -h /var/lib/nifi-registry -s /sbin/nologin \ + -G nifi-registry -g nifi-registry nifi-registry 2>/dev/null + +exit 0 diff --git a/packaging/alpine/local/nifi-registry/nifi-registry.wrapper b/packaging/alpine/local/nifi-registry/nifi-registry.wrapper new file mode 100644 index 0000000..2a6436c --- /dev/null +++ b/packaging/alpine/local/nifi-registry/nifi-registry.wrapper @@ -0,0 +1,3 @@ +#!/bin/sh + +exec /usr/lib/nifi-registry/bin/nifi-registry.sh "$@" diff --git a/packaging/alpine/local/nifi-registry/scripts/runtime-test.sh b/packaging/alpine/local/nifi-registry/scripts/runtime-test.sh new file mode 100755 index 0000000..58dfdb8 --- /dev/null +++ b/packaging/alpine/local/nifi-registry/scripts/runtime-test.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -euo pipefail + +apk add nifi-registry nifi-registry-openrc curl + +test -x /usr/bin/nifi-registry +test -x /usr/lib/nifi-registry/bin/nifi-registry.sh +test -d /etc/nifi-registry +test -L /usr/lib/nifi-registry/conf +test "$(readlink /usr/lib/nifi-registry/conf)" = /etc/nifi-registry +test -d /var/lib/nifi-registry +test -d /var/log/nifi-registry +test -f /etc/init.d/nifi-registry +test -f /etc/conf.d/nifi-registry +test -f /usr/lib/nifi-registry/README +test -d /usr/lib/nifi-registry/docs +test "$(stat -c '%U:%G %a' /var/lib/nifi-registry)" = "nifi-registry:nifi-registry 750" + +rc-update add nifi-registry default || true +test -L /etc/runlevels/default/nifi-registry +rc-service nifi-registry start + +for _attempt in $(seq 1 300); do + if curl --fail --silent --show-error http://localhost:18080/nifi-registry/ >/dev/null; then + break + fi + sleep 1 +done + +curl --fail --silent --show-error http://localhost:18080/nifi-registry/ >/dev/null +rc-service nifi-registry status +rc-service nifi-registry stop diff --git a/packaging/alpine/local/nifi-registry/scripts/test-install.sh b/packaging/alpine/local/nifi-registry/scripts/test-install.sh new file mode 100755 index 0000000..eaaac57 --- /dev/null +++ b/packaging/alpine/local/nifi-registry/scripts/test-install.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root="${REPO_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../../.." && pwd)}" +# shellcheck source=scripts/apk/test-install-lib.sh +. "${repo_root}/scripts/apk/test-install-lib.sh" + +apk_test_install_run "${repo_root}" "${PACKAGE_NAME:-nifi-registry}" "${PACKAGE_VERSION:-2.12.0-r0}" <<'SCRIPT' + set -e + + if [ -n "${ALPINE_REPOSITORY_URL}" ]; then + if [ -n "${ALPINE_REPOSITORY_KEY_URL}" ]; then + apk add --no-cache curl >/dev/null + cd /etc/apk/keys + curl -fsSLOJ "${ALPINE_REPOSITORY_KEY_URL}" + fi + printf "%s\n" "${ALPINE_REPOSITORY_URL}" >> /etc/apk/repositories + else + cp "/repo/${ALPINE_ARCH}"/*.rsa.pub /etc/apk/keys/ + printf "%s\n" /repo >> /etc/apk/repositories + fi + apk update + apk add "${PACKAGE_NAME}" "${PACKAGE_NAME}-openrc" + + test -x /usr/bin/nifi-registry + test -x /usr/lib/nifi-registry/bin/nifi-registry.sh + test -d /etc/nifi-registry + test -L /usr/lib/nifi-registry/conf + test "$(readlink /usr/lib/nifi-registry/conf)" = /etc/nifi-registry + test -d /var/lib/nifi-registry + test -d /var/log/nifi-registry + test -f /etc/init.d/nifi-registry + test -f /etc/conf.d/nifi-registry + test -f /usr/lib/nifi-registry/README + test -d /usr/lib/nifi-registry/docs + test "$(stat -c '%U:%G %a' /var/lib/nifi-registry)" = "nifi-registry:nifi-registry 750" + + rc-update add nifi-registry default + test -L /etc/runlevels/default/nifi-registry +SCRIPT diff --git a/packaging/alpine/local/nifi-registry/update-check.conf b/packaging/alpine/local/nifi-registry/update-check.conf new file mode 100644 index 0000000..f7bdc1e --- /dev/null +++ b/packaging/alpine/local/nifi-registry/update-check.conf @@ -0,0 +1,3 @@ +provider="github" +repo="apache/nifi" +version_prefix="rel/nifi-"