40 Commits
Author SHA1 Message Date
Joachim Schlöffel 0f5d8f1c5c bump Gitea to 28.2.0
Build Alpine Packages / preflight (pull_request) Successful in 10s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 9s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 8s
Build Alpine Packages / build (nifi) (pull_request) Successful in 8s
Build Alpine Packages / build (rclone-openrc) (pull_request) Successful in 8s
Build Alpine Packages / build (gitea) (pull_request) Successful in 1m2s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 9s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 44s
Build Alpine Packages / preflight (push) Successful in 11s
Build Alpine Packages / build (greptimedb) (push) Successful in 11s
Build Alpine Packages / build (lavinmq) (push) Successful in 8s
Build Alpine Packages / build (nifi) (push) Successful in 8s
Build Alpine Packages / build (rclone-openrc) (push) Successful in 8s
Build Alpine Packages / build (seaweedfs) (push) Successful in 9s
Build Alpine Packages / build (gitea) (push) Successful in 1m0s
Build Alpine Packages / verify-and-publish (push) Successful in 47s
2026-10-19 21:58:39 +02:00
Joachim Schlöffel aaaf33ef8b update tooling 2026-10-19 21:57:55 +02:00
Joachim Schlöffel 766bb2bfa0 smoke test complete local rebuilds offline
Build Alpine Packages / preflight (pull_request) Successful in 4s
Build Alpine Packages / build (gitea) (pull_request) Successful in 59s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 2m36s
Build Alpine Packages / build (nifi) (pull_request) Successful in 3m55s
Build Alpine Packages / build (rclone-openrc) (pull_request) Successful in 13s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 38m49s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 1h9m7s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 14m50s
Build Alpine Packages / preflight (push) Successful in 35s
Build Alpine Packages / build (gitea) (push) Successful in 2m26s
Build Alpine Packages / build (lavinmq) (push) Successful in 2m53s
Build Alpine Packages / build (rclone-openrc) (push) Successful in 12s
Build Alpine Packages / build (nifi) (push) Successful in 11m8s
Build Alpine Packages / build (seaweedfs) (push) Successful in 25m54s
Build Alpine Packages / build (greptimedb) (push) Successful in 1h34m50s
Build Alpine Packages / verify-and-publish (push) Successful in 5m46s
2026-10-08 12:11:53 +02:00
Joachim Schlöffel 16197f7a6c rebuild when Alpine registry index is absent
Build Alpine Packages / preflight (pull_request) Successful in 4s
Build Alpine Packages / build (gitea) (pull_request) Successful in 52s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 1h16m48s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 2m28s
Build Alpine Packages / build (nifi) (pull_request) Successful in 3m46s
Build Alpine Packages / build (rclone-openrc) (pull_request) Successful in 11s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 39m19s
Build Alpine Packages / verify-and-publish (pull_request) Failing after 4m11s
2026-10-08 10:47:21 +02:00
Joachim Schlöffel 7a9916ea17 trigger full rebuild
Build Alpine Packages / preflight (pull_request) Failing after 4s
Build Alpine Packages / build (gitea) (pull_request) Skipped
Build Alpine Packages / build (greptimedb) (pull_request) Skipped
Build Alpine Packages / build (lavinmq) (pull_request) Skipped
Build Alpine Packages / build (nifi) (pull_request) Skipped
Build Alpine Packages / build (rclone-openrc) (pull_request) Skipped
Build Alpine Packages / build (seaweedfs) (pull_request) Skipped
Build Alpine Packages / verify-and-publish (pull_request) Skipped
2026-10-08 10:43:31 +02:00
Joachim Schlöffel a2761c0b1f update LavinMQ bundled sources
Build Alpine Packages / preflight (pull_request) Failing after 4s
Build Alpine Packages / build (gitea) (pull_request) Skipped
Build Alpine Packages / build (greptimedb) (pull_request) Skipped
Build Alpine Packages / build (lavinmq) (pull_request) Skipped
Build Alpine Packages / build (nifi) (pull_request) Skipped
Build Alpine Packages / build (rclone-openrc) (pull_request) Skipped
Build Alpine Packages / build (seaweedfs) (pull_request) Skipped
Build Alpine Packages / verify-and-publish (pull_request) Skipped
2026-10-08 09:55:25 +02:00
fspjo 29c79708f1 add rclone-openrc (#21)
Build Alpine Packages / preflight (pull_request) Successful in 7s
Build Alpine Packages / build (gitea) (pull_request) Successful in 3s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 3s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 4s
Build Alpine Packages / build (nifi) (pull_request) Successful in 3s
Build Alpine Packages / build (rclone-openrc) (pull_request) Successful in 9s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 3s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 27s
Build Alpine Packages / preflight (push) Failing after 5s
Build Alpine Packages / build (gitea) (push) Skipped
Build Alpine Packages / build (greptimedb) (push) Skipped
Build Alpine Packages / build (lavinmq) (push) Skipped
Build Alpine Packages / build (nifi) (push) Skipped
Build Alpine Packages / build (rclone-openrc) (push) Skipped
Build Alpine Packages / build (seaweedfs) (push) Skipped
Build Alpine Packages / verify-and-publish (push) Skipped
Reviewed-on: #21
2026-10-07 14:24:24 +02:00
Joachim Schlöffel 7bdcc83050 bump Gitea version to 28.1.0
Build Alpine Packages / preflight (pull_request) Successful in 6s
Build Alpine Packages / build (gitea) (pull_request) Successful in 54s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 2m58s
Build Alpine Packages / build (nifi) (pull_request) Successful in 6s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 38m57s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 1h12m41s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 1m49s
Build Alpine Packages / preflight (push) Successful in 5s
Build Alpine Packages / build (gitea) (push) Successful in 52s
Build Alpine Packages / build (lavinmq) (push) Successful in 2m30s
Build Alpine Packages / build (nifi) (push) Successful in 4s
Build Alpine Packages / build (seaweedfs) (push) Successful in 40m11s
Build Alpine Packages / build (greptimedb) (push) Successful in 1h8m59s
Build Alpine Packages / verify-and-publish (push) Successful in 2m2s
2026-10-06 23:02:04 +02:00
Joachim Schlöffel 57fc0e658c remove artificial package status from readme
Build Alpine Packages / preflight (pull_request) Successful in 16s
Build Alpine Packages / build (gitea) (pull_request) Successful in 56s
Build Alpine Packages / build (nifi) (pull_request) Successful in 11s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 39m22s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 1h29m31s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 2m56s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 1m47s
2026-10-06 22:54:17 +02:00
Joachim Schlöffel c9543e113b add logrotate subpackages
Build Alpine Packages / preflight (pull_request) Successful in 14s
Build Alpine Packages / build (gitea) (pull_request) Successful in 1m0s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 2m51s
Build Alpine Packages / build (nifi) (pull_request) Successful in 5s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 39m45s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 1h31m44s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 1m42s
2026-10-06 22:39:50 +02:00
Joachim Schlöffel 450d4815dd add support for AMQP, RClone and SQLite to SeaweedFS
Build Alpine Packages / preflight (pull_request) Successful in 6s
Build Alpine Packages / build (gitea) (pull_request) Successful in 4s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 4s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 4s
Build Alpine Packages / build (nifi) (pull_request) Successful in 4s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 26m9s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 56s
Build Alpine Packages / preflight (push) Successful in 15s
Build Alpine Packages / build (gitea) (push) Successful in 5s
Build Alpine Packages / build (greptimedb) (push) Successful in 6s
Build Alpine Packages / build (lavinmq) (push) Successful in 6s
Build Alpine Packages / build (nifi) (push) Successful in 5s
Build Alpine Packages / build (seaweedfs) (push) Successful in 26m15s
Build Alpine Packages / verify-and-publish (push) Successful in 1m30s
2026-10-06 14:46:59 +02:00
Joachim Schlöffel 53747a13cc update readme
Build Alpine Packages / preflight (push) Successful in 7s
Build Alpine Packages / build (gitea) (push) Skipped
Build Alpine Packages / build (greptimedb) (push) Skipped
Build Alpine Packages / build (lavinmq) (push) Skipped
Build Alpine Packages / build (nifi) (push) Skipped
Build Alpine Packages / build (seaweedfs) (push) Skipped
Build Alpine Packages / verify-and-publish (push) Skipped
2026-10-05 22:03:36 +02:00
Joachim Schlöffel 13570ccbd9 Merge branch 'main' into development
Build Alpine Packages / preflight (pull_request) Successful in 5s
Build Alpine Packages / build (gitea) (pull_request) Successful in 3s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 4s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 4s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 6s
Build Alpine Packages / build (nifi) (pull_request) Successful in 3m22s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 2m53s
Build Alpine Packages / preflight (push) Successful in 5s
Build Alpine Packages / build (gitea) (push) Successful in 2s
Build Alpine Packages / build (greptimedb) (push) Successful in 3s
Build Alpine Packages / build (lavinmq) (push) Successful in 3s
Build Alpine Packages / build (seaweedfs) (push) Successful in 6s
Build Alpine Packages / build (nifi) (push) Successful in 3m22s
Build Alpine Packages / verify-and-publish (push) Successful in 4m12s
2026-10-05 21:09:31 +02:00
fspjo f89ebac967 add Apache Nifi (#15)
Reviewed-on: #15
2026-10-05 21:06:42 +02:00
fspjoandJoachim Schlöffel bded7c8adc 2026/10 (#14)
Build Alpine Packages / preflight (push) Successful in 4s
Build Alpine Packages / build (greptimedb) (push) Successful in 4s
Build Alpine Packages / build (gitea) (push) Successful in 53s
Build Alpine Packages / build (seaweedfs) (push) Successful in 4s
Build Alpine Packages / build (lavinmq) (push) Successful in 2m20s
Build Alpine Packages / verify-and-publish (push) Successful in 42s
Co-authored-by: Joachim Schlöffel <me@joachim-schloeffel.com>
Reviewed-on: #14
2026-10-05 20:23:33 +02:00
Joachim Schlöffel 158fd18984 bump LavinMQ to 2.10.1
Build Alpine Packages / preflight (pull_request) Successful in 4s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 5s
Build Alpine Packages / build (gitea) (pull_request) Successful in 52s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 3s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 2m19s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 38s
2026-10-05 20:18:27 +02:00
Joachim Schlöffel fd0f484d4a WIP: check CI build
Build Alpine Packages / build (gitea) (pull_request) Canceled after 0s
Build Alpine Packages / build (greptimedb) (pull_request) Canceled after 0s
Build Alpine Packages / build (lavinmq) (pull_request) Canceled after 0s
Build Alpine Packages / build (seaweedfs) (pull_request) Canceled after 0s
Build Alpine Packages / verify-and-publish (pull_request) Canceled after 0s
Build Alpine Packages / preflight (pull_request) Canceled after 5s
2026-10-05 09:31:46 +02:00
fspjo 1716f42970 update package build process (#12)
Build Alpine Packages / preflight (push) Successful in 15s
Build Alpine Packages / build (gitea) (push) Successful in 4s
Build Alpine Packages / build (greptimedb) (push) Successful in 5s
Build Alpine Packages / build (lavinmq) (push) Successful in 4s
Build Alpine Packages / build (seaweedfs) (push) Successful in 34m15s
Build Alpine Packages / verify-and-publish (push) Successful in 1m15s
Reviewed-on: #12
2026-10-02 09:16:46 +02:00
Joachim Schlöffel 37b6e4cf2c bump Gitea to 28.0.0 (breaking network changes!)
Build Alpine Packages / preflight (pull_request) Successful in 6s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 7s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 5s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 4s
Build Alpine Packages / build (gitea) (pull_request) Successful in 54s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 36s
2026-09-30 11:30:25 +02:00
Joachim Schlöffel a97bafbd92 Merge branch 'main' into development
Build Alpine Packages / preflight (pull_request) Successful in 23s
Build Alpine Packages / build (gitea) (pull_request) Successful in 11s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 13s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 12s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 28m48s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 1m6s
2026-09-30 11:00:52 +02:00
Joachim Schlöffel 573608a04b add graceful shutdown to OpenRC script 2026-09-30 10:55:45 +02:00
fspjo b94463642a Parallel builds and package updates and source build for SeaweedFS (#11)
Build Alpine Packages / preflight (push) Successful in 16s
Build Alpine Packages / build (gitea) (push) Successful in 18s
Build Alpine Packages / build (lavinmq) (push) Successful in 2m51s
Build Alpine Packages / build (seaweedfs) (push) Successful in 21m35s
Build Alpine Packages / build (greptimedb) (push) Successful in 1h20m0s
Build Alpine Packages / verify-and-publish (push) Successful in 2m3s
Reviewed-on: #11
2026-09-29 11:00:07 +02:00
Joachim Schlöffel fc965e072c fix trivy db download n CI
Build Alpine Packages / preflight (pull_request) Successful in 15s
Build Alpine Packages / build (gitea) (pull_request) Successful in 16s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 2m57s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 20m41s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 1h14m12s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 1m47s
2026-09-29 09:33:26 +02:00
fspjo 1c3994a7c4 Merge branch 'main' into development
Build Alpine Packages / preflight (pull_request) Successful in 15s
Build Alpine Packages / build (gitea) (pull_request) Successful in 11s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 3m56s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 25m55s
Build Alpine Packages / verify-and-publish (pull_request) Canceled after 0s
Build Alpine Packages / build (greptimedb) (pull_request) Canceled after 1h29m33s
2026-09-29 08:00:21 +02:00
fspjo e8333709a5 Parallel Builds (#10)
Build Alpine Packages / preflight (push) Successful in 12s
Build Alpine Packages / build (gitea) (push) Successful in 21s
Build Alpine Packages / build (lavinmq) (push) Successful in 2m54s
Build Alpine Packages / build (seaweedfs) (push) Successful in 20m49s
Build Alpine Packages / build (greptimedb) (push) Successful in 1h42m55s
Build Alpine Packages / verify-and-publish (push) Failing after 1m26s
Reviewed-on: #10
2026-09-29 07:17:00 +02:00
Joachim Schlöffel 03daf40d6e remove vendor src archives
Build Alpine Packages / preflight (pull_request) Successful in 20s
Build Alpine Packages / build (gitea) (pull_request) Successful in 15s
Build Alpine Packages / build (lavinmq) (pull_request) Successful in 3m30s
Build Alpine Packages / build (seaweedfs) (pull_request) Successful in 29m27s
Build Alpine Packages / build (greptimedb) (pull_request) Successful in 56m19s
Build Alpine Packages / verify-and-publish (pull_request) Successful in 1m31s
2026-09-29 01:02:15 +02:00
Joachim Schlöffel 40eaf081ad fix CI key collision
Build Alpine Packages / preflight (pull_request) Successful in 16s
Build Alpine Packages / build (gitea) (pull_request) Canceled after 0s
Build Alpine Packages / build (greptimedb) (pull_request) Canceled after 0s
Build Alpine Packages / build (lavinmq) (pull_request) Canceled after 0s
Build Alpine Packages / build (seaweedfs) (pull_request) Canceled after 0s
Build Alpine Packages / verify-and-publish (pull_request) Canceled after 0s
2026-09-29 00:34:41 +02:00
Joachim Schlöffel 254fa76a7d Merge branch 'features/source-build' into development 2026-09-28 23:46:45 +02:00
Joachim Schlöffel 0e6bc657a9 update readme 2026-09-28 23:18:01 +02:00
Joachim Schlöffel 74a31e6f45 run Alpine runtime tests in Docker
Build Alpine Packages / preflight (push) Successful in 20s
Build Alpine Packages / build (gitea) (push) Successful in 16s
Build Alpine Packages / build (lavinmq) (push) Successful in 2m28s
Build Alpine Packages / build (seaweedfs) (push) Successful in 48m41s
Build Alpine Packages / build (greptimedb) (push) Successful in 1h39m5s
Build Alpine Packages / verify-and-publish (push) Failing after 20s
2026-09-28 22:50:32 +02:00
Joachim Schlöffel 815a47e19f parallel CI package builds
Build Alpine Packages / preflight (push) Successful in 23s
Build Alpine Packages / build (gitea) (push) Successful in 18s
Build Alpine Packages / build (lavinmq) (push) Successful in 2m30s
Build Alpine Packages / build (seaweedfs) (push) Successful in 47m10s
Build Alpine Packages / build (greptimedb) (push) Successful in 1h33m37s
Build Alpine Packages / verify-and-publish (push) Failing after 2m32s
2026-09-28 20:55:46 +02:00
Joachim Schlöffel 96bd8a20e0 fix greptimedb test linker memory
Build Alpine Packages / build-and-publish (v3.24, 3.24) (push) Failing after 3h0m4s
Build Alpine Packages / build-and-publish (v3.24, 3.24) (pull_request) Failing after 3h0m8s
2026-09-28 00:48:25 +02:00
Joachim Schlöffel 0a9ed89a47 fix lavinmq crystal dependency
Build Alpine Packages / build-and-publish (v3.24, 3.24) (push) Failing after 2h41m8s
Build Alpine Packages / build-and-publish (v3.24, 3.24) (pull_request) Failing after 3h0m4s
2026-09-27 17:55:35 +02:00
Joachim Schlöffel 001bd51931 fix greptimedb openrc shutdown
Build Alpine Packages / build-and-publish (v3.24, 3.24) (pull_request) Failing after 1h18m35s
Build Alpine Packages / build-and-publish (v3.24, 3.24) (push) Canceled after 55m50s
2026-09-27 09:42:13 +02:00
Joachim Schlöffel f01d209780 build greptimedb dashboard from source
Build Alpine Packages / build-and-publish (v3.24, 3.24) (push) Canceled after 59s
Build Alpine Packages / build-and-publish (v3.24, 3.24) (pull_request) Canceled after 8m22s
2026-09-27 02:27:30 +02:00
Joachim Schlöffel f5efea2160 add package update status badge
Build Alpine Packages / build-and-publish (v3.24, 3.24) (pull_request) Successful in 35m57s
Build Alpine Packages / build-and-publish (v3.24, 3.24) (push) Successful in 1h17m58s
2026-09-26 23:51:50 +02:00
Joachim Schlöffel e4093a3c9f retain package registries as CI artifacts 2026-09-26 23:40:12 +02:00
Joachim Schlöffel d70e9ce84c Merge branch 'main' into features/source-build 2026-09-26 23:30:24 +02:00
Joachim Schlöffel dae1f755a2 vendor lavinmq build inputs 2026-09-26 23:22:14 +02:00
Joachim Schlöffel 13a2d0dd16 build seaweedfs from vendored source 2026-09-26 16:26:27 +02:00
55 changed files with 1067 additions and 223 deletions
+120 -51
View File
@@ -1,8 +1,6 @@
name: Build Alpine Packages
on:
schedule:
- cron: "17 5 * * 1"
push:
branches:
- main
@@ -11,41 +9,35 @@ on:
pull_request:
workflow_dispatch:
jobs:
build-and-publish:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- alpine_version: "3.24"
alpine_registry_branch: "v3.24"
container:
image: "alpine:${{ matrix.alpine_version }}"
env:
ALPINE_VERSION: "${{ matrix.alpine_version }}"
ALPINE_VERSION: "3.24"
ALPINE_ARCHES: "x86_64 aarch64"
ALPINE_REGISTRY_BRANCH: "${{ matrix.alpine_registry_branch }}"
ALPINE_REGISTRY_BRANCH: "v3.24"
ALPINE_REGISTRY_REPOSITORY: "${{ vars.PACKAGE_NAME }}"
INSTANCE_URL: "${{ vars.INSTANCE_URL }}"
PACKAGE_OWNER: "${{ vars.PACKAGE_OWNER }}"
PACKAGE_USER: "${{ secrets.PACKAGE_USER }}"
PACKAGE_TOKEN: "${{ secrets.PACKAGE_TOKEN }}"
PACKAGER: "${{ gitea.repository_owner }}"
ALPINE_APK_REPO_CACHE: "/cache/public-alpine-packages/${{ matrix.alpine_registry_branch }}/apk-repo"
ALPINE_RUST_CACHE_ROOT: "/cache/public-alpine-packages/${{ matrix.alpine_registry_branch }}/rust"
ALPINE_RUST_CACHE_ROOT: "/cache/public-alpine-packages/v3.24/rust"
TRIVY_VERSION: "0.74.0"
TRIVY_SHA256: "2ae6fe3ee734b7fdf11335663e18c75ea12dccc76062f09f164a3b0f8be4371a"
jobs:
preflight:
runs-on: ubuntu-latest
timeout-minutes: 180
container:
image: "alpine:3.24"
outputs:
packages_selected: "${{ steps.package-selection.outputs.packages_selected }}"
selected_packages: "${{ steps.package-selection.outputs.selected_packages }}"
greptimedb_selected: "${{ steps.package-selection.outputs.greptimedb_selected }}"
steps:
- name: Prepare Environment
run: |
printf '%s\n' 'https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories
apk add --no-cache --update abuild-rootbld alpine-sdk atools-apkbuild-lint bash ca-certificates curl doas git jq nodejs rsync shellcheck sudo tar
trivy_archive="trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz"
curl -fsSL -o "/tmp/${trivy_archive}" "https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/${trivy_archive}"
echo "${TRIVY_SHA256} /tmp/${trivy_archive}" | sha256sum -c -
tar -xzf "/tmp/${trivy_archive}" -C /usr/local/bin trivy
mkdir -p "$ALPINE_APK_REPO_CACHE" "$ALPINE_RUST_CACHE_ROOT"
chown -R 1000:1000 /cache/public-alpine-packages/${{ matrix.alpine_registry_branch }}
apk add --no-cache --update atools-apkbuild-lint bash ca-certificates curl git jq nodejs shellcheck tar
- name: Checkout
uses: actions/checkout@v3
@@ -67,46 +59,125 @@ jobs:
fi
- name: Prepare package cache
if: github.event_name != 'schedule'
id: package-selection
run: |
scripts/apk/ci-package-cache.sh prepare
run: scripts/apk/ci-package-cache.sh prepare
- name: Build packages
if: github.event_name != 'schedule'
- name: Validate selected package matrix
run: |
for package in ${ALPINE_PACKAGES}; do
case "${package}" in
seaweedfs|greptimedb|lavinmq|gitea|nifi|rclone-openrc) ;;
*)
printf 'selected package is missing from the CI build matrix: %s\n' "${package}" >&2
exit 1
;;
esac
done
build:
needs: preflight
if: needs.preflight.outputs.packages_selected == 'true'
runs-on: ubuntu-latest
timeout-minutes: 180
strategy:
fail-fast: false
matrix:
package: [seaweedfs, greptimedb, lavinmq, gitea, nifi, rclone-openrc]
container:
image: "alpine:3.24"
env:
ALPINE_PACKAGE: "${{ matrix.package }}"
steps:
- name: Prepare Environment
run: |
printf '%s\n' 'https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories
apk add --no-cache --update abuild-rootbld alpine-sdk bash ca-certificates doas git nodejs sudo
mkdir -p "$ALPINE_RUST_CACHE_ROOT"
chown -R 1000:1000 /cache/public-alpine-packages/v3.24
- name: Checkout
uses: actions/checkout@v3
- name: Build package
if: contains(needs.preflight.outputs.selected_packages, matrix.package)
run: |
scripts/apk/ci-build.sh
if [ -d packages/local ]; then
scripts/apk/list-packages.sh
fi
- name: Export GreptimeDB CI assets
if: github.event_name != 'schedule' && steps.package-selection.outputs.greptimedb_selected == 'true'
run: scripts/apk/export-ci-assets.sh
- name: Check artifact upload support
if: github.event_name != 'schedule'
id: artifact-upload
if: contains(needs.preflight.outputs.selected_packages, matrix.package)
run: |
if [ -n "${ACTIONS_RUNTIME_TOKEN:-}" ]; then
echo "available=true" >> "$GITHUB_OUTPUT"
else
echo "available=false" >> "$GITHUB_OUTPUT"
fi
test -n "${ACTIONS_RUNTIME_TOKEN:-}" || {
echo "artifact upload support is required for split package builds" >&2
exit 1
}
- name: Upload generated CI assets
if: github.event_name != 'schedule' && steps.package-selection.outputs.greptimedb_selected == 'true' && steps.artifact-upload.outputs.available == 'true'
- name: Upload package artifacts
if: contains(needs.preflight.outputs.selected_packages, matrix.package)
uses: actions/upload-artifact@v3
with:
name: greptimedb-musl-binaries-${{ matrix.alpine_registry_branch }}
name: alpine-package-${{ matrix.package }}-${{ github.sha }}
path: packages/local/
retention-days: 1
verify-and-publish:
needs: [preflight, build]
if: needs.preflight.outputs.packages_selected == 'true'
runs-on: ubuntu-latest
timeout-minutes: 180
container:
image: "alpine:3.24"
env:
ALPINE_PACKAGES: "${{ needs.preflight.outputs.selected_packages }}"
steps:
- name: Prepare Environment
run: |
printf '%s\n' 'https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories
apk add --no-cache --update abuild-rootbld alpine-sdk bash ca-certificates curl doas docker-cli git jq nodejs rsync shellcheck sudo tar
trivy_archive="trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz"
curl -fsSL -o "/tmp/${trivy_archive}" "https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/${trivy_archive}"
echo "${TRIVY_SHA256} /tmp/${trivy_archive}" | sha256sum -c -
tar -xzf "/tmp/${trivy_archive}" -C /usr/local/bin trivy
- name: Checkout
uses: actions/checkout@v3
- name: Prepare registry fallback
run: |
selected_packages="$ALPINE_PACKAGES"
scripts/apk/ci-package-cache.sh prepare
printf 'ALPINE_PACKAGES=%s\n' "$selected_packages" >> "$GITHUB_ENV"
- name: Download package artifacts
uses: actions/download-artifact@v3
with:
path: packages/worker-artifacts
- name: Merge package artifacts
run: scripts/apk/merge-ci-artifacts.sh
- name: Export GreptimeDB CI assets
if: needs.preflight.outputs.greptimedb_selected == 'true'
run: scripts/apk/export-ci-assets.sh
- name: Upload generated CI assets
if: needs.preflight.outputs.greptimedb_selected == 'true'
uses: actions/upload-artifact@v3
with:
name: greptimedb-musl-binaries-v3.24
path: packages/ci-assets/
- name: Upload local Alpine registry
uses: actions/upload-artifact@v3
with:
name: alpine-local-registry-v3.24-${{ github.sha }}
path: packages/local/
retention-days: 30
- name: Smoke test
if: github.event_name != 'schedule'
run: scripts/apk/ci-smoke.sh
- name: Generate security reports
if: github.event_name != 'schedule' && env.ALPINE_SKIP_BUILD != '1'
run: |
scripts/apk/security-report.sh
if [ -n "${GITHUB_STEP_SUMMARY:-}" ]; then
@@ -116,16 +187,14 @@ jobs:
fi
- name: Upload security reports
if: github.event_name != 'schedule' && env.ALPINE_SKIP_BUILD != '1' && steps.artifact-upload.outputs.available == 'true'
uses: actions/upload-artifact@v3
with:
name: apk-security-reports-${{ matrix.alpine_registry_branch }}
name: apk-security-reports-v3.24
path: packages/security-reports/
- name: Runtime test
if: github.event_name != 'schedule' && env.ALPINE_SKIP_BUILD != '1'
run: scripts/apk/runtime-test.sh
run: ALPINE_RUNTIME_TEST_MODE=docker scripts/apk/runtime-test.sh
- name: Publish Alpine packages
if: github.event_name != 'pull_request' && github.event_name != 'schedule' && env.ALPINE_SKIP_BUILD != '1'
if: github.ref == 'refs/heads/main'
run: scripts/apk/publish-gitea.sh
+4
View File
@@ -3,5 +3,9 @@
packages/
packaging/alpine/*/*/pkg/
packaging/alpine/*/*/src/
packaging/alpine/*/*/tmp/
packaging/alpine/*/*/*.apk
packaging/alpine/*/*/*.tar.*
!packaging/alpine/*/*/*-vendor.tar.gz
!packaging/alpine/local/lavinmq/lavinmq-*-shards.tar.gz
!packaging/alpine/local/lavinmq/lavinmq-*-assets.tar.gz
+8 -3
View File
@@ -19,10 +19,12 @@ https://code.factoring.digital/api/packages/public/alpine/v3.24/alpine-packages
| Package | APK Name | Package Version | Package Type | Purpose |
|-----------------------------------------------------------|--------------|-----------------|----------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------|
| [SeaweedFS](packaging/alpine/local/seaweedfs/README.md) | `seaweedfs` | `4.47` | Binary repackaging of official upstream release tarballs | Ships current SeaweedFS features with Alpine OpenRC role splits. |
| [SeaweedFS](packaging/alpine/local/seaweedfs/README.md) | `seaweedfs` | `4.48` | Binary repackaging of official upstream release tarballs | Ships current SeaweedFS features with Alpine OpenRC role splits. |
| [GreptimeDB](packaging/alpine/local/greptimedb/README.md) | `greptimedb` | `1.2.1` | Source build from upstream release | Provides a current GreptimeDB build and component OpenRC packages before it is available from Alpine community. |
| [LavinMQ](packaging/alpine/local/lavinmq/README.md) | `lavinmq` | `2.10.0` | 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` | `1.27.3` | Binary repackaging of official upstream release binaries | Ships current Gitea releases with the expected Alpine runtime layout and OpenRC service. |
| [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. |
| [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
@@ -167,6 +169,9 @@ weed version
apk add greptimedb greptimedb-docs greptimedb-standalone-openrc
greptime --version
apk add rclone-openrc
rclone version
```
Run package-local runtime tests:
+2 -66
View File
@@ -43,32 +43,10 @@ url = "https://github.com/nektos/act/releases/download/v0.2.89/act_Windows_x86_6
url_api = "https://api.github.com/repos/nektos/act/releases/assets/434891261"
[[tools.docker-cli]]
version = "29.8.1"
version = "29.9.1"
backend = "aqua:docker/cli"
specifiers = ["latest"]
[tools.docker-cli."platforms.linux-arm64"]
url = "https://download.docker.com/linux/static/stable/aarch64/docker-29.8.1.tgz"
[tools.docker-cli."platforms.linux-arm64-musl"]
url = "https://download.docker.com/linux/static/stable/aarch64/docker-29.8.1.tgz"
[tools.docker-cli."platforms.linux-x64"]
checksum = "blake3:b3c6e46dfca03af898b43595c488aab73adb867f0352f486388d9ef41933b0e6"
url = "https://download.docker.com/linux/static/stable/x86_64/docker-29.8.1.tgz"
[tools.docker-cli."platforms.linux-x64-musl"]
url = "https://download.docker.com/linux/static/stable/x86_64/docker-29.8.1.tgz"
[tools.docker-cli."platforms.macos-arm64"]
url = "https://download.docker.com/mac/static/stable/aarch64/docker-29.8.1.tgz"
[tools.docker-cli."platforms.macos-x64"]
url = "https://download.docker.com/mac/static/stable/x86_64/docker-29.8.1.tgz"
[tools.docker-cli."platforms.windows-x64"]
url = "https://download.docker.com/win/static/stable/x86_64/docker-29.8.1.zip"
[[tools.jq]]
version = "1.8.2"
backend = "aqua:jqlang/jq"
@@ -157,48 +135,6 @@ url = "https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellche
url_api = "https://api.github.com/repos/koalaman/shellcheck/releases/assets/279056944"
[[tools.trivy]]
version = "0.74.0"
version = "0.76.0"
backend = "aqua:aquasecurity/trivy"
specifiers = ["latest"]
[tools.trivy."platforms.linux-arm64"]
checksum = "sha256:b94ce1976bbf3c15b514b605ee88be7c6d94a29be2302847ff01cb794d47aad5"
url = "https://github.com/aquasecurity/trivy/releases/download/v0.74.0/trivy_0.74.0_Linux-ARM64.tar.gz"
url_api = "https://api.github.com/repos/aquasecurity/trivy/releases/assets/514339429"
provenance = "cosign"
[tools.trivy."platforms.linux-arm64-musl"]
checksum = "sha256:b94ce1976bbf3c15b514b605ee88be7c6d94a29be2302847ff01cb794d47aad5"
url = "https://github.com/aquasecurity/trivy/releases/download/v0.74.0/trivy_0.74.0_Linux-ARM64.tar.gz"
url_api = "https://api.github.com/repos/aquasecurity/trivy/releases/assets/514339429"
provenance = "cosign"
[tools.trivy."platforms.linux-x64"]
checksum = "sha256:2ae6fe3ee734b7fdf11335663e18c75ea12dccc76062f09f164a3b0f8be4371a"
url = "https://github.com/aquasecurity/trivy/releases/download/v0.74.0/trivy_0.74.0_Linux-64bit.tar.gz"
url_api = "https://api.github.com/repos/aquasecurity/trivy/releases/assets/514339431"
provenance = "cosign"
[tools.trivy."platforms.linux-x64-musl"]
checksum = "sha256:2ae6fe3ee734b7fdf11335663e18c75ea12dccc76062f09f164a3b0f8be4371a"
url = "https://github.com/aquasecurity/trivy/releases/download/v0.74.0/trivy_0.74.0_Linux-64bit.tar.gz"
url_api = "https://api.github.com/repos/aquasecurity/trivy/releases/assets/514339431"
provenance = "cosign"
[tools.trivy."platforms.macos-arm64"]
checksum = "sha256:1caada5e0e2091909357c7525d3aa76f4b660b13821bc143b190c7483e31cc11"
url = "https://github.com/aquasecurity/trivy/releases/download/v0.74.0/trivy_0.74.0_macOS-ARM64.tar.gz"
url_api = "https://api.github.com/repos/aquasecurity/trivy/releases/assets/514339464"
provenance = "cosign"
[tools.trivy."platforms.macos-x64"]
checksum = "sha256:472816f6888dda689d075c30254d4210b4d1035acf365aa72332f584c2f60485"
url = "https://github.com/aquasecurity/trivy/releases/download/v0.74.0/trivy_0.74.0_macOS-64bit.tar.gz"
url_api = "https://api.github.com/repos/aquasecurity/trivy/releases/assets/514339388"
provenance = "cosign"
[tools.trivy."platforms.windows-x64"]
checksum = "sha256:94c40e0696e4b907a74b7b2e1438d5d72ebaca83115817407f568a002d520842"
url = "https://github.com/aquasecurity/trivy/releases/download/v0.74.0/trivy_0.74.0_windows-64bit.zip"
url_api = "https://api.github.com/repos/aquasecurity/trivy/releases/assets/514339469"
provenance = "cosign"
+16 -5
View File
@@ -1,6 +1,6 @@
# Maintainer: Joachim Schlöffel <joachim.schloeffel@financial-service-plus.de>
pkgname=gitea
pkgver=1.27.3
pkgver=28.2.0
pkgrel=0
pkgdesc="Self-hosted Git service written in Go"
url="https://about.gitea.com/"
@@ -14,6 +14,7 @@ pkgusers="gitea"
pkggroups="www-data"
subpackages="
$pkgname-doc
$pkgname-logrotate:_logrotate:noarch
$pkgname-openrc:_openrc:noarch
"
options="!check !strip !tracedeps"
@@ -33,6 +34,7 @@ source="
$pkgname-src-$pkgver.tar.gz::https://github.com/go-gitea/gitea/releases/download/v$pkgver/gitea-src-$pkgver.tar.gz
gitea.ini
gitea.initd
gitea.logrotate
"
builddir="$srcdir/gitea-src-$pkgver"
@@ -68,10 +70,19 @@ _openrc() {
install -Dm755 "$srcdir"/gitea.initd "$subpkgdir"/etc/init.d/gitea
}
_logrotate() {
pkgdesc="Log rotation configuration for $pkgname"
depends="$pkgname=$pkgver-r$pkgrel logrotate"
install -Dm644 "$srcdir"/gitea.logrotate \
"$subpkgdir"/etc/logrotate.d/$pkgname
}
sha512sums="
67974010369075d56d219b5daaaf3258d0897e94ab62727f68ab2e98f56a4b64f8f0358183c49fe3e60c8a54a1ff1cbdaf6d172e219452fed161d6e828a65917 gitea-1.27.3-linux-amd64.xz
28239b94b3d84162e50a49286cb495d005b92725a8359a54d8b5a6d75af689c84805eb110e558112c525c67636ef38ecaaa3f49a99a552d0253b97f4ec96d1c5 gitea-1.27.3-linux-arm64.xz
8b22b5b9cb9578a6f228ed2ab87999292a5b283424932b88c6eb97634ca43e142b53d13602b9f1bb8db3d61eddcd83e9f329149cafc2fcf3c1209ca108283ef6 gitea-src-1.27.3.tar.gz
431184faffa8996873d92d7b0d16bc4b1a0178d264cd2928d1f49b13ad3e6470d9ede7a18c12112deeeb38f0647ccc0b012e98bcbd96e7b8496a3dc18f5b1fb7 gitea.ini
a6ebe8f400d7ccbc4b98f314a2f21695e012d3ddd78f9b94583fe912f93ed078da5ef34c25ff2f5a0fd2d8ae6b531b25c6c1627fde09f17e9624bb9a9d5113fb gitea-28.2.0-linux-amd64.xz
e95cac30cad61cad06dee885fdb88676198663b25c70816860152ae85497332e03aa87bff2c1f58f84fcd0b46bb9b3f978617f972dd94dc506b1493f36da7f47 gitea-28.2.0-linux-arm64.xz
7bf890a3572f2992f2056f9e846732a267e2eb4a178212927fda98ed47b4ca09e9ecb748c2b424c4a90911689fe451c51f0bf987b02a49d751fc472a1d84d3fd gitea-src-28.2.0.tar.gz
4e20b24c34af01a27589a13d9140d559909cc44507febe5de692d7bc154d65f4b01b79d2f1dcce9fed77b60ac3b1a52cc0ec72161e5a2484a4c718d26d3c630d gitea.ini
9474d707df8b049c93ec4642f71195adff699e1e812f315cac4295b3ab29eeb9ba8b83bf3307c50b04e072a4a9dc4c4f84ac490ee22291bd50015009795c1598 gitea.initd
456a565123b46c0c3a36adbde4c881ee04557a2f1ba492a76205c28f72598bf3b7b96192ddeae4f9ab197fdc75bb5e10a3421574e1bf831192220b4540bb39fc gitea.logrotate
"
+7
View File
@@ -19,6 +19,13 @@ rc-update add gitea default
rc-service gitea start
```
Install daily rotation for the OpenRC service log, retaining 14 compressed
archives:
```sh
apk add gitea-logrotate
```
Refresh checksums:
```sh
+2 -1
View File
@@ -1,4 +1,5 @@
# Configuration cheat sheet: https://docs.gitea.io/en-us/config-cheat-sheet/
# Configuration cheat sheet: https://docs.gitea.com/administration/config-cheat-sheet/
# Example configuration: https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini
RUN_USER = gitea
RUN_MODE = prod
@@ -0,0 +1,10 @@
/var/log/gitea/http.log {
daily
rotate 14
missingok
notifempty
compress
delaycompress
copytruncate
su gitea www-data
}
@@ -5,7 +5,7 @@ repo_root="${REPO_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../../.." &&
# shellcheck source=scripts/apk/test-install-lib.sh
. "${repo_root}/scripts/apk/test-install-lib.sh"
apk_test_install_run "${repo_root}" "${PACKAGE_NAME:-gitea}" "${PACKAGE_VERSION:-1.27.0-r1}" <<'SCRIPT'
apk_test_install_run "${repo_root}" "${PACKAGE_NAME:-gitea}" "${PACKAGE_VERSION:-28.0.0-r1}" <<'SCRIPT'
set -e
if [ -n "${ALPINE_REPOSITORY_URL}" ]; then
@@ -29,7 +29,7 @@ apk_test_install_run "${repo_root}" "${PACKAGE_NAME:-gitea}" "${PACKAGE_VERSION:
printf "%s\n" /repo >> /etc/apk/repositories
fi
apk update
apk add --upgrade "${PACKAGE_NAME}" "${PACKAGE_NAME}-doc" "${PACKAGE_NAME}-openrc"
apk add --upgrade "${PACKAGE_NAME}" "${PACKAGE_NAME}-doc" "${PACKAGE_NAME}-logrotate" "${PACKAGE_NAME}-openrc"
installed_after="$(apk list -I "${PACKAGE_NAME}" | awk "{print \$1}")"
printf "Installed package after local upgrade: %s\n" "${installed_after}"
test "${installed_after}" = "${PACKAGE_NAME}-${PACKAGE_VERSION}"
@@ -45,6 +45,9 @@ apk_test_install_run "${repo_root}" "${PACKAGE_NAME:-gitea}" "${PACKAGE_VERSION:
test -d /usr/share/webapps/gitea/public
test -d /usr/share/webapps/gitea/templates
test -f /etc/init.d/gitea
test -f /etc/logrotate.d/gitea
apk info -e logrotate
logrotate -d /etc/logrotate.conf
gitea --version
+39 -10
View File
@@ -1,7 +1,7 @@
# Maintainer: Joachim Schlöffel <joachim.schloeffel@financial-service-plus.de>
pkgname=greptimedb
pkgver=1.2.1
pkgrel=0
pkgrel=5
pkgdesc="Cloud-native observability database for metrics, logs, and traces"
url="https://github.com/GreptimeTeam/greptimedb"
arch="x86_64"
@@ -12,14 +12,17 @@ makedepends="
clang
cmake
coreutils
curl
cargo-auditable
git
lld
linux-headers
make
mold
nodejs
openssl-dev
openssl-libs-static
perl
pnpm
protobuf
protobuf-dev
rustup
@@ -28,12 +31,14 @@ makedepends="
zstd-dev
zstd-static
"
checkdepends="cargo-nextest"
install="$pkgname.pre-install"
subpackages="
$pkgname-datanode-openrc:_openrc_datanode:noarch
$pkgname-docs:_docs:noarch
$pkgname-flownode-openrc:_openrc_flownode:noarch
$pkgname-frontend-openrc:_openrc_frontend:noarch
$pkgname-logrotate:_logrotate:noarch
$pkgname-metasrv-openrc:_openrc_metasrv:noarch
$pkgname-standalone-openrc:_openrc_standalone:noarch
"
@@ -41,7 +46,7 @@ options="net"
_dashboard_version="v0.12.0"
source="
$pkgname-$pkgver.tar.gz::https://github.com/GreptimeTeam/greptimedb/archive/refs/tags/v$pkgver.tar.gz
dashboard-$_dashboard_version.tar.gz::https://github.com/GreptimeTeam/dashboard/releases/download/$_dashboard_version/build.tar.gz
dashboard-$_dashboard_version.tar.gz::https://github.com/GreptimeTeam/dashboard/archive/refs/tags/$_dashboard_version.tar.gz
datanode.toml
flownode.toml
frontend.toml
@@ -49,6 +54,7 @@ source="
greptimedb.flownode.confd
greptimedb.frontend.confd
greptimedb.initd
greptimedb.logrotate
greptimedb.metasrv.confd
greptimedb.standalone.confd
metasrv.toml
@@ -64,31 +70,45 @@ export CARGO_BUILD_JOBS="${CARGO_BUILD_JOBS:-2}"
export CARGO_PROFILE_NIGHTLY_CODEGEN_UNITS="${CARGO_PROFILE_NIGHTLY_CODEGEN_UNITS:-16}"
export CARGO_PROFILE_NIGHTLY_DEBUG="${CARGO_PROFILE_NIGHTLY_DEBUG:-false}"
export CARGO_PROFILE_NIGHTLY_LTO="${CARGO_PROFILE_NIGHTLY_LTO:-thin}"
export CARGO_PROFILE_TEST_DEBUG="${CARGO_PROFILE_TEST_DEBUG:-false}"
export LIBRARY_PATH="/usr/lib"
export RUSTFLAGS="${RUSTFLAGS:-} -C link-arg=-fuse-ld=mold"
prepare() {
default_prepare
if [ ! -d "$builddir"/src/servers/dashboard/dist ]; then
mv "$srcdir"/dist "$builddir"/src/servers/dashboard/dist
fi
rustup-init \
-y \
--no-modify-path \
--profile minimal \
--default-toolchain "$_rust_toolchain"
"$CARGO_HOME"/bin/rustup run "$_rust_toolchain" cargo fetch \
--locked
local _dashboard_builddir="$srcdir"/dashboard-${_dashboard_version#v}
(
cd "$_dashboard_builddir"
pnpm install --frozen-lockfile --store-dir "$srcdir"/pnpm-store
pnpm run build:docker
)
rm -rf "$builddir"/src/servers/dashboard/dist
cp -a "$_dashboard_builddir"/dist "$builddir"/src/servers/dashboard/
}
build() {
"$CARGO_HOME"/bin/rustup run "$_rust_toolchain" cargo build \
"$CARGO_HOME"/bin/rustup run "$_rust_toolchain" cargo auditable build \
--profile "$_cargo_profile" \
--frozen \
--locked \
--bin greptime \
--features servers/dashboard
}
check() {
"$CARGO_TARGET_DIR"/"$_cargo_profile"/greptime --version
"$CARGO_HOME"/bin/rustup run "$_rust_toolchain" cargo nextest run \
-p cmd \
--lib \
--frozen
}
package() {
@@ -118,6 +138,14 @@ _openrc_frontend() { _openrc_service frontend; }
_openrc_metasrv() { _openrc_service metasrv; }
_openrc_standalone() { _openrc_service standalone; }
_logrotate() {
pkgdesc="Log rotation configuration for $pkgname"
depends="$pkgname=$pkgver-r$pkgrel logrotate"
install -Dm644 "$srcdir"/greptimedb.logrotate \
"$subpkgdir"/etc/logrotate.d/$pkgname
}
_docs() {
pkgdesc="$pkgdesc (configuration examples and reference)"
depends=""
@@ -128,14 +156,15 @@ _docs() {
sha512sums="
fc580f6e34df84b4f37219047d751968324c356f3cad352d1515abb4b441515a1ad98f0d01e2de33aac5129a2d7a5335edc4d8888923da7683a084a484769bea greptimedb-1.2.1.tar.gz
4260acae5bed00a693dceffe9f53d0f8b25fd677b15638e951cf973dc29681f4bacde352c661a12bd78af7be9181a3740812f814fc3c4c8c87ea4eee6ee07e2d dashboard-v0.12.0.tar.gz
3f853b6767a86cfa97ec640a17de59b2e798561c9402026e9b3a749907780b9b686149dba8a932b5d61ae538c430deab2410248e5c9e6e1961909000445ee2ee dashboard-v0.12.0.tar.gz
29cc3376753487b216748e3f85e12639830e1ac4a763e94f330f87c3651a8ef9de35732958311c0049e1b7cbb4e90a9e602b3aff43297fe088c5ce795a110a79 datanode.toml
52790808cb4f5cf0220ac2ab169b623fe76b6318d27d7f003e1197e850373cb915bfd40556098bcb7650f293d751039cb3bccbf9107bb160b8284887794ba975 flownode.toml
e3e19ab3c7a345ecf8cf0a507f7fc95dd3b036a4a797385cf77fcf1999f2e4f053042c7bbda8de73ed43ff72e87aad81e4ac6d4a34d01773bbc1f6d0d967d9f7 frontend.toml
313ed7d9ccd174b1869f3009e174266cdc414599e0b0f8307c8aaf2b73841eb36ce4c1b2f6244a0358b5a587a4edaa621b781fbd767835088b3fa13623fcc0df greptimedb.datanode.confd
daf8efacc8bf2b74abd9f4900f889585295b57333a8a562a722de0596d35f25d5f9149e0879f4140bfdf727caa59c3f55b1380212722df92c588d912275530b8 greptimedb.flownode.confd
e3e61b1df00f8172a3b1d4a0d37ed2574a8c5cd27676b4e2ce14d15ad8933d233baabe8da374f715d00cfaee26f665244c1ba00f70197fcc713c4e9af9c3229e greptimedb.frontend.confd
c00740aee566b161bbe3610e0e0d6e8340022055750e6778772262474ffd6484d9f58be2fd498beafe28d0943e259e2277930af691bedea7650726e6c8998881 greptimedb.initd
f72f52aa8277fc56eb071b5118990b8f4e09d143634c2f7fc54ed1f5ff065631c8630c45fe90d3db1f3ea0540c1ab3154a383d2000b4c5978e889ca02a1b6564 greptimedb.initd
775b4db7e7bc6127376b22fed8330b952c5027e3bfbfa29bb6ae034e6c75e7fed8ddfc0ad9761f369acd37398dfbd145cfea210828f2fc0bec9be92b051e6a75 greptimedb.logrotate
df495367d85844dcba99e5aa01e5a23fd14799b7521a72d9ea00d29fc0e5fbc5c5d06ee88e88d9637e260f8337249a39d2b0115de58da4899824d20bd844254a greptimedb.metasrv.confd
882a79e969cac42adfada22060e6507fb687755a6d266d6728154b3e4da5777d2eaf5ad9bc331ed050448249ca609e6a61977b624d9faf25d83ed975345452cf greptimedb.standalone.confd
8120ec338ebe1330d43b20d9b34a8f5f778ea13cb056febd3c8e9dc189d0de2380b90e5474a0990294d7004827c6133d44d2dd3e32d463b9259c47c82592d257 metasrv.toml
+14 -4
View File
@@ -1,14 +1,22 @@
# GreptimeDB Alpine Package
Builds `greptime` from the upstream source release and packages OpenRC service
subpackages plus `/etc/greptimedb` defaults.
Builds `greptime` and its embedded dashboard from their upstream source
releases, and packages OpenRC service subpackages plus `/etc/greptimedb`
defaults.
Build command:
```sh
cargo build --profile nightly --locked --bin greptime --features servers/dashboard
cargo auditable build --profile nightly --frozen --locked --bin greptime --features servers/dashboard
```
GreptimeDB requires the nightly pinned in its source release
(`nightly-2026-03-21`). The package uses Rustup to install that toolchain and
uses locked Cargo and pnpm dependency resolution, so `options="net"` is
intentional. Cargo dependencies are fetched before compilation; the Rust build
then runs frozen. The dashboard is built from the matching `v0.12.0` source tag
with its checked-in `pnpm-lock.yaml`.
## Runtime Layout
Installs `/usr/bin/greptime` and component OpenRC packages:
@@ -20,6 +28,8 @@ Installs `/usr/bin/greptime` and component OpenRC packages:
- `greptimedb-datanode-openrc`: `greptime datanode start`
- `greptimedb-flownode-openrc`: `greptime flownode start`
- `greptimedb-frontend-openrc`: `greptime frontend start`
- `greptimedb-logrotate`: daily rotation for the OpenRC service logs, retaining
14 compressed archives
Default TOML files are installed in `/etc/greptimedb`. Standalone ports:
@@ -92,4 +102,4 @@ ALPINE_REPOSITORY_KEY_URL=https://code.factoring.digital/api/packages/public/alp
mise run apk:test-install
```
Full builds take close to an hour.
Full builds and the targeted upstream Nextest check take close to an hour.
@@ -6,6 +6,7 @@ description="GreptimeDB ${service_name} service"
command="/usr/bin/greptime"
command_user="${GREPTIMEDB_USER:-greptimedb}:${GREPTIMEDB_GROUP:-greptimedb}"
command_background="yes"
retry="TERM/30/KILL/5"
pidfile="/run/greptimedb/${RC_SVCNAME}.pid"
output_log="${GREPTIMEDB_LOG:-/var/log/greptimedb/${RC_SVCNAME}.log}"
error_log="${GREPTIMEDB_ERRLOG:-/var/log/greptimedb/${RC_SVCNAME}.log}"
@@ -0,0 +1,10 @@
/var/log/greptimedb/greptimedb.*.log {
daily
rotate 14
missingok
notifempty
compress
delaycompress
copytruncate
su greptimedb greptimedb
}
@@ -21,3 +21,14 @@ greptime --version
rc-update add greptimedb.standalone default || true
test -L /etc/runlevels/default/greptimedb.standalone
rc-service greptimedb.standalone start
for _attempt in $(seq 1 30); do
if wget -qO- http://127.0.0.1:4000/status >/dev/null; then
break
fi
sleep 1
done
wget -qO- http://127.0.0.1:4000/status >/dev/null
wget -qO- http://127.0.0.1:4000/dashboard/ | grep -qi '<!doctype html>'
rc-service greptimedb.standalone stop
@@ -26,6 +26,7 @@ apk_test_install_run "${repo_root}" "${PACKAGE_NAME:-greptimedb}" "${PACKAGE_VER
"${PACKAGE_NAME}-docs" \
"${PACKAGE_NAME}-flownode-openrc" \
"${PACKAGE_NAME}-frontend-openrc" \
"${PACKAGE_NAME}-logrotate" \
"${PACKAGE_NAME}-metasrv-openrc" \
"${PACKAGE_NAME}-standalone-openrc"
@@ -34,5 +35,8 @@ apk_test_install_run "${repo_root}" "${PACKAGE_NAME:-greptimedb}" "${PACKAGE_VER
ls -1 /etc/greptimedb
test -f "/usr/share/doc/${PACKAGE_NAME}/config/config.md"
test -f "/usr/share/doc/${PACKAGE_NAME}/config/standalone.example.toml"
test -f /etc/logrotate.d/greptimedb
apk info -e logrotate
logrotate -d /etc/logrotate.conf
find /etc/init.d -maxdepth 1 -name "greptimedb.*" -print | sort
SCRIPT
@@ -1,6 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
package_dir="${PACKAGE_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
printf 'No generated sources for %s\n' "${package_dir}"
+16 -5
View File
@@ -1,6 +1,6 @@
# Maintainer: Joachim Schlöffel <joachim.schloeffel@financial-service-plus.de>
pkgname=lavinmq
pkgver=2.10.0
pkgver=2.10.2
pkgrel=1
pkgdesc="High-performance AMQP and MQTT message queue server"
url="https://github.com/cloudamqp/lavinmq"
@@ -8,7 +8,7 @@ arch="x86_64"
license="Apache-2.0"
depends="ca-certificates /bin/sh"
makedepends="
crystal=1.21.0-r0
crystal>=1.21.0
gc-dev
help2man
libevent-dev
@@ -26,6 +26,7 @@ pkgusers="lavinmq"
pkggroups="lavinmq"
subpackages="
$pkgname-doc
$pkgname-logrotate:_logrotate:noarch
$pkgname-openrc:_openrc:noarch
"
source="
@@ -34,6 +35,7 @@ source="
$pkgname-$pkgver-assets.tar.gz
lavinmq.confd
lavinmq.initd
lavinmq.logrotate
use-vendored-build-inputs.patch
"
@@ -71,11 +73,20 @@ _openrc() {
"$subpkgdir"/etc/conf.d/lavinmq
}
_logrotate() {
pkgdesc="Log rotation configuration for $pkgname"
depends="$pkgname=$pkgver-r$pkgrel logrotate"
install -Dm644 "$srcdir"/lavinmq.logrotate \
"$subpkgdir"/etc/logrotate.d/$pkgname
}
sha512sums="
b494892dada6eb713025bc3245e16035a63265805d77c537b4530226195f00dacab1fb14de5bf4c999165faa6bf2f7ef7c6b8ffb4c6f4a921977f1c13a4f1545 lavinmq-2.10.0.tar.gz
d0dfdd5c0e474024f57deb9e31c76e3f176e798c8d21dea53d3aea1b05436bd03fa34e69ccddf322bc89adedce5f379df5a316cddbbdfe12520e5bf672ad8228 lavinmq-2.10.0-shards.tar.gz
ae3cea2534b211abbcbd1e4fcb6da73dfaf383a19aef1c45f367cba77492cc20a7ce8283fc42f26c0a023149114c369bed307fb8cde0b8f27fba61165092e986 lavinmq-2.10.0-assets.tar.gz
35757407adb6fdd6378c65cde229471bd362b6a7fdc13279658312ef8a7304c0557619a1394a0b4cf33ef25ffb6c039f65c217f2af37bf12fc01b73d84e55e69 lavinmq-2.10.2.tar.gz
d0dfdd5c0e474024f57deb9e31c76e3f176e798c8d21dea53d3aea1b05436bd03fa34e69ccddf322bc89adedce5f379df5a316cddbbdfe12520e5bf672ad8228 lavinmq-2.10.2-shards.tar.gz
ae3cea2534b211abbcbd1e4fcb6da73dfaf383a19aef1c45f367cba77492cc20a7ce8283fc42f26c0a023149114c369bed307fb8cde0b8f27fba61165092e986 lavinmq-2.10.2-assets.tar.gz
62a609d50f28db960098c4c84ce4f1dad78413366a9a9aca18fe321114d687be3bf7b71924d4ace69bd74383c5ac40d2ee09ae0eef9c1bfe653b97448e42e110 lavinmq.confd
1853196e70297b5c4a2207fde50df735620cf6d99c4994644fd676bffaf863d67300ad7ae771c4bbb86fce1a0485c2a7968cf912c5f5bb878e08b15e5a28ba1b lavinmq.initd
9999dd6a96bd29a3d0bda1b2110af940b15acf1250a0f3ba6c93d16bd62063ab1c1dfa4c237da99bbb401150517abde59e2c7275f4b72c3eb7c90e1ce61d43b9 lavinmq.logrotate
e7617099f745ecbf2f0686830d0a1b28044741ebd543798505b5b3c08f1be96b6cc478eb18f6785af49b100c2f49d837775f0721ac27519ddf3f081e681c581c use-vendored-build-inputs.patch
"
+29 -4
View File
@@ -11,10 +11,9 @@ Build command:
make
```
Crystal package, avoiding a glibc toolchain in the Alpine musl build.
LavinMQ 2.10.0 requires Crystal 1.21.0. The package pins Alpine edge's native
Crystal package, avoiding a glibc toolchain in the Alpine musl build.
Crystal package, avoiding a glibc toolchain in the Alpine musl build.
LavinMQ 2.10.1 requires Crystal 1.21.0 or newer. The package uses Alpine
edge's native Crystal package, avoiding a glibc toolchain in the Alpine musl
build.
## Runtime Layout
@@ -39,12 +38,38 @@ rc-update add lavinmq default
rc-service lavinmq start
```
Install daily rotation for the OpenRC service log, retaining 14 compressed
archives:
```sh
apk add lavinmq-logrotate
```
Wrapper settings in `/etc/conf.d/lavinmq`:
- `LAVINMQ_CONFIG`: config file path passed with `--config`
- `LAVINMQ_DATA_DIR`: data directory passed with `-D`
- `LAVINMQ_OPTS`: extra LavinMQ arguments appended after package defaults
## Updating LavinMQ
1. In `APKBUILD`, set `pkgver` to the new upstream version and reset `pkgrel`
to `0`.
2. Generate the versioned, locked Shards and frontend-asset archives:
```sh
ALPINE_PACKAGE=lavinmq mise run apk:update-generated
```
The hook uses the upstream `shard.lock` and `Makefile`, so it also refreshes
the bundled inputs when either dependency list changes.
3. From the repository root, refresh checksums and build the package:
```sh
ALPINE_PACKAGE=lavinmq mise run apk:checksum
ALPINE_PACKAGE=lavinmq mise run apk:build
```
## Package Commands
Refresh checksums:
@@ -0,0 +1,10 @@
/var/log/lavinmq/lavinmq.log {
daily
rotate 14
missingok
notifempty
compress
delaycompress
copytruncate
su lavinmq lavinmq
}
@@ -20,7 +20,7 @@ apk_test_install_run "${repo_root}" "${PACKAGE_NAME:-lavinmq}" "${PACKAGE_VERSIO
printf "%s\n" /repo >> /etc/apk/repositories
fi
apk update
apk add "${PACKAGE_NAME}" "${PACKAGE_NAME}-doc" "${PACKAGE_NAME}-openrc"
apk add "${PACKAGE_NAME}" "${PACKAGE_NAME}-doc" "${PACKAGE_NAME}-logrotate" "${PACKAGE_NAME}-openrc"
test -x /usr/bin/lavinmq
test -x /usr/bin/lavinmqctl
@@ -30,6 +30,9 @@ apk_test_install_run "${repo_root}" "${PACKAGE_NAME:-lavinmq}" "${PACKAGE_VERSIO
test "$(stat -c "%U:%G %a" /var/lib/lavinmq)" = "lavinmq:lavinmq 750"
test -f /etc/conf.d/lavinmq
test -f /etc/init.d/lavinmq
test -f /etc/logrotate.d/lavinmq
apk info -e logrotate
logrotate -d /etc/logrotate.conf
test -f /usr/share/doc/lavinmq/README.md
test -f /usr/share/doc/lavinmq/changelog
@@ -0,0 +1,55 @@
#!/usr/bin/env bash
set -euo pipefail
package_dir="${PACKAGE_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
repo_root="${REPO_ROOT:-$(cd "${package_dir}/../../../.." && pwd)}"
pkgver="$(awk -F= '$1 == "pkgver" { print $2; exit }' "${package_dir}/APKBUILD")"
distfiles_dir="${repo_root}/.cache/apk-distfiles"
shards_cache_dir="${repo_root}/.cache/shards"
source_archive="${distfiles_dir}/lavinmq-${pkgver}.tar.gz"
shards_archive="${package_dir}/lavinmq-${pkgver}-shards.tar.gz"
assets_archive="${package_dir}/lavinmq-${pkgver}-assets.tar.gz"
tmpdir="$(mktemp -d)"
assets_dir="${tmpdir}/assets"
cleanup() {
rm -rf "${tmpdir}"
}
trap cleanup EXIT
mkdir -p "${distfiles_dir}" "${shards_cache_dir}"
if [[ ! -f "${source_archive}" ]]; then
curl --fail --location --retry 3 --silent --show-error \
--output "${source_archive}" \
"https://github.com/cloudamqp/lavinmq/archive/refs/tags/v${pkgver}.tar.gz"
fi
tar -xzf "${source_archive}" -C "${tmpdir}"
source_dir="${tmpdir}/lavinmq-${pkgver}"
if [[ ! -d "${source_dir}" ]]; then
printf 'unexpected LavinMQ source archive layout: %s\n' "${source_archive}" >&2
exit 1
fi
# shard.lock pins the Crystal dependencies. `make js` fetches exactly the
# frontend assets declared by this upstream version's Makefile.
(
cd "${source_dir}"
SHARDS_CACHE_PATH="${shards_cache_dir}" shards install --production
make js
)
tar --create --gzip --file "${shards_archive}" \
--directory "${source_dir}" \
--sort=name --mtime='UTC 1970-01-01' --owner=0 --group=0 --numeric-owner \
lib
mkdir -p "${assets_dir}"
# The offline Makefile patch intentionally reads every asset from the root of
# .alpine-assets, including helpers.segment.js which upstream stores in chunks/.
find "${source_dir}/static/js/lib" -type f -exec cp -p {} "${assets_dir}/" \;
tar --create --gzip --file "${assets_archive}" \
--directory "${assets_dir}" \
--sort=name --mtime='UTC 1970-01-01' --owner=0 --group=0 --numeric-owner \
.
printf 'Updated %s and %s\n' "${shards_archive##*/}" "${assets_archive##*/}"
+75
View File
@@ -0,0 +1,75 @@
# Maintainer: Joachim Schlöffel <joachim.schloeffel@financial-service-plus.de>
pkgname=nifi
pkgver=2.12.0
pkgrel=1
pkgdesc="Reliable system for processing and distributing data"
url="https://nifi.apache.org/"
arch="x86_64 aarch64"
license="Apache-2.0"
depends="openjdk21-jre-headless"
makedepends="unzip"
install="$pkgname.pre-install"
pkgusers="nifi"
pkggroups="nifi"
subpackages="
$pkgname-openrc:_openrc:noarch
"
options="!check !strip !tracedeps"
source="
$pkgname-$pkgver-bin.zip::https://dlcdn.apache.org/nifi/$pkgver/nifi-$pkgver-bin.zip
nifi.confd
nifi.initd
nifi.wrapper
"
package() {
local _dir
install -d "$pkgdir"/usr/lib/nifi "$pkgdir"/etc/nifi
cp -a "$builddir"/. "$pkgdir"/usr/lib/nifi/
chmod -R a+rX "$pkgdir"/usr/lib/nifi
cp -a "$pkgdir"/usr/lib/nifi/conf/. "$pkgdir"/etc/nifi/
rm -r "$pkgdir"/usr/lib/nifi/conf
ln -s /etc/nifi "$pkgdir"/usr/lib/nifi/conf
install -d -m 0750 -o nifi -g nifi "$pkgdir"/var/lib/nifi
for _dir in \
assets \
connector_assets \
content_repository \
database_repository \
diagnostics \
extensions \
flowfile_repository \
nar_repository \
provenance_repository \
state \
status_repository \
work; do
install -d -m 0750 -o nifi -g nifi "$pkgdir"/var/lib/nifi/$_dir
ln -s /var/lib/nifi/$_dir "$pkgdir"/usr/lib/nifi/$_dir
done
install -d -m 0750 -o nifi -g nifi "$pkgdir"/var/log/nifi
ln -s /var/log/nifi "$pkgdir"/usr/lib/nifi/logs
ln -s /run/nifi "$pkgdir"/usr/lib/nifi/run
chown -R nifi:nifi "$pkgdir"/etc/nifi
chmod 0750 "$pkgdir"/etc/nifi
install -Dm755 "$srcdir"/nifi.wrapper "$pkgdir"/usr/bin/nifi
}
_openrc() {
pkgdesc="$pkgdesc (OpenRC service)"
depends="$pkgname=$pkgver-r$pkgrel openrc"
install -Dm755 "$srcdir"/nifi.initd "$subpkgdir"/etc/init.d/nifi
install -Dm644 "$srcdir"/nifi.confd "$subpkgdir"/etc/conf.d/nifi
}
sha512sums="
5891039ccf15234bb21c2d1ce65027357ca7603ad8fdfc946dd4b6499ab8061fb07a6a56f8e8c5bb7635d446354ca7cc76ba40e55921818931f193a75f247334 nifi-2.12.0-bin.zip
fd576c2d2333aa79f7dac90e83f9cf6e0faed9748ebce0dfc1c18bcd1da0ec1d0da90d4004055bbddcb0f011a0e9efdc08f0eed2f3c19d49b1746019f2be1da9 nifi.confd
9f8a005fcd6a6f75a553321c27c672c4c202e8b86ff5fa0a1bd5eb0e7305592e67d8dc6a915d1f1bc01b39916b0fb0e61478cb6ae5aee4ae8b3be36c80c5662a nifi.initd
7764c6a53f0fb109ecde4959b438a0eeb669b00eafdbdb2abe5255f4053a237d4e97349594b3bf053abd55a96f8e217aa0cf0fec59a7c14f1db2490e747f713e nifi.wrapper
"
+50
View File
@@ -0,0 +1,50 @@
# Apache NiFi Alpine Package
Repackages Apache NiFi 2.12.0 Standard for Alpine. The package requires Java
21 and retains NiFi 2's secure default: HTTPS listens on `127.0.0.1:8443` and
uses generated single-user credentials.
## Install
```sh
apk add nifi nifi-openrc
rc-update add nifi default
rc-service nifi start
```
Open `https://127.0.0.1:8443/nifi` and retrieve the generated credentials:
```sh
grep 'Generated \(Username\|Password\)' /var/log/nifi/nifi-app.log
```
Set fixed single-user credentials as the service account:
```sh
doas -u nifi nifi set-single-user-credentials '<username>' '<password>'
rc-service nifi restart
```
## Runtime Layout
```text
/usr/bin/nifi Administration command wrapper
/usr/lib/nifi NiFi binaries and bundled NARs
/etc/nifi Mutable NiFi configuration and authorization state
/var/lib/nifi Repositories, state, extensions, and work files
/var/log/nifi Application logs
/etc/conf.d/nifi OpenRC account defaults
/etc/init.d/nifi OpenRC service
```
Edit `/etc/nifi/nifi.properties` to bind a different HTTPS address, configure
TLS, or select LDAP, OIDC, or another supported authentication provider.
## Package Commands
```sh
ALPINE_PACKAGE=nifi mise run apk:checksum
ALPINE_PACKAGE=nifi mise run apk:build
ALPINE_PACKAGE=nifi SKIP_BUILD=1 mise run apk:test-install
ALPINE_PACKAGE=nifi mise run apk:runtime-test
```
+3
View File
@@ -0,0 +1,3 @@
# Defaults for Apache NiFi.
NIFI_USER="nifi"
NIFI_GROUP="nifi"
+26
View File
@@ -0,0 +1,26 @@
#!/sbin/openrc-run
description="Apache NiFi dataflow service"
supervisor=supervise-daemon
name=nifi
command="/usr/lib/nifi/bin/nifi.sh"
command_args="run"
command_user="${NIFI_USER:-nifi}:${NIFI_GROUP:-nifi}"
directory="/usr/lib/nifi"
pidfile="/run/nifi/nifi.pid"
supervise_daemon_args="--chdir /usr/lib/nifi --env HOME=/var/lib/nifi --pidfile ${pidfile}"
depend() {
need net
use dns logger
}
start_pre() {
local service_owner="${NIFI_USER:-nifi}:${NIFI_GROUP:-nifi}"
checkpath -d -m 0750 -o "$service_owner" \
/run/nifi \
/var/lib/nifi \
/var/log/nifi
}
+7
View File
@@ -0,0 +1,7 @@
#!/bin/sh
addgroup -S nifi 2>/dev/null
adduser -S -D -H -h /var/lib/nifi -s /sbin/nologin \
-G nifi -g nifi nifi 2>/dev/null
exit 0
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
exec /usr/lib/nifi/bin/nifi.sh "$@"
+34
View File
@@ -0,0 +1,34 @@
#!/usr/bin/env bash
set -euo pipefail
apk add nifi nifi-openrc curl
test -x /usr/bin/nifi
test -x /usr/lib/nifi/bin/nifi.sh
test -d /etc/nifi
test -L /usr/lib/nifi/conf
test "$(readlink /usr/lib/nifi/conf)" = /etc/nifi
test -d /var/lib/nifi
test -d /var/log/nifi
test -f /etc/init.d/nifi
test -f /etc/conf.d/nifi
test -d /usr/lib/nifi/docs
test "$(stat -c '%U:%G %a' /var/lib/nifi)" = "nifi:nifi 750"
rc-update add nifi default || true
test -L /etc/runlevels/default/nifi
rc-service nifi start
for _attempt in $(seq 1 300); do
if curl --fail --insecure --silent --show-error \
https://localhost:8443/nifi/ >/dev/null; then
break
fi
sleep 1
done
curl --fail --insecure --silent --show-error https://localhost:8443/nifi/ >/dev/null
grep -q 'Generated Username' /var/log/nifi/nifi-app.log
grep -q 'Generated Password' /var/log/nifi/nifi-app.log
rc-service nifi status
rc-service nifi stop
+39
View File
@@ -0,0 +1,39 @@
#!/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}" "${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
test -x /usr/lib/nifi/bin/nifi.sh
test -d /etc/nifi
test -L /usr/lib/nifi/conf
test "$(readlink /usr/lib/nifi/conf)" = /etc/nifi
test -d /var/lib/nifi
test -d /var/log/nifi
test -f /etc/init.d/nifi
test -f /etc/conf.d/nifi
test -d /usr/lib/nifi/docs
test "$(stat -c '%U:%G %a' /var/lib/nifi)" = "nifi:nifi 750"
rc-update add nifi default
test -L /etc/runlevels/default/nifi
SCRIPT
@@ -0,0 +1,3 @@
provider="github"
repo="apache/nifi"
version_prefix="rel/nifi-"
@@ -0,0 +1,29 @@
# Maintainer: Joachim Schlöffel <joachim.schloeffel@financial-service-plus.de>
pkgname=rclone-openrc
pkgver=0.1.0
pkgrel=1
pkgdesc="Generic, instance-capable OpenRC service for rclone"
url="https://rclone.org/"
arch="noarch"
license="MIT"
depends="openrc rclone"
install="$pkgname.pre-install"
pkgusers="rclone"
pkggroups="rclone"
options="!check"
source="
rclone.confd
rclone.initd
"
package() {
install -d -m 0750 -o root -g rclone "$pkgdir"/etc/rclone
install -d -m 0750 -o rclone -g rclone "$pkgdir"/var/lib/rclone/cache
install -Dm644 "$srcdir"/rclone.confd "$pkgdir"/etc/conf.d/rclone
install -Dm755 "$srcdir"/rclone.initd "$pkgdir"/etc/init.d/rclone
}
sha512sums="
91a05da2c5740a810faf0226ab5fcb3d92a9db56b42c10decaed91481d3129cfc37f5f726a6dc1b5b1246ad4d1386cbe918e109f152969912ea670dbff35fe70 rclone.confd
e92ce86aa21ce1a94beb8304c806b4c0045d412477d7a232e37b0f28354af3060de054c5ae3d1ea353b92d19137a0cfa00b0891b0e179aa32bc6b2c7ecdfc7ea rclone.initd
"
@@ -0,0 +1,59 @@
# rclone OpenRC Alpine Package
Provides a generic, instance-capable OpenRC service for Alpine's `rclone`
package. It does not repackage the rclone binary.
## Install
```sh
apk add rclone-openrc
```
The package creates the unprivileged `rclone` account, `/etc/rclone` for
configuration and credentials, and `/var/lib/rclone/cache` for rclone state.
It deliberately does not create remotes, credentials, authorized-key files, or
SSH host keys; provision those as machine-specific secrets.
## Create an Instance
Copy the template and symlink the generic service under an instance name:
```sh
cp /etc/conf.d/rclone /etc/conf.d/rclone.sftp
ln -s rclone /etc/init.d/rclone.sftp
```
For an SFTP server, configure `/etc/conf.d/rclone.sftp`:
```sh
RCLONE_COMMAND="serve sftp"
RCLONE_REMOTE="/srv/storage"
RCLONE_ARGS="
--addr :2022
--authorized-keys /etc/rclone/authorized_keys
--key /etc/rclone/ssh_host_ed25519_key
--log-level INFO
"
```
Then enable and start it:
```sh
rc-update add rclone.sftp default
rc-service rclone.sftp start
```
Other instances, such as `rclone.webdav` or `rclone.rcd`, use their own
`/etc/conf.d/rclone.<name>` file with the same generic init script. The service
runs rclone in the foreground under `supervise-daemon`, which restarts it after
an unexpected exit. Set `RCLONE_RESPAWN_MAX` to a positive value to limit
restart attempts.
## Package Commands
```sh
ALPINE_PACKAGE=rclone-openrc mise run apk:checksum
ALPINE_PACKAGE=rclone-openrc mise run apk:build
ALPINE_PACKAGE=rclone-openrc SKIP_BUILD=1 mise run apk:test-install
ALPINE_PACKAGE=rclone-openrc mise run apk:runtime-test
```
@@ -0,0 +1,7 @@
#!/bin/sh
addgroup -S rclone 2>/dev/null
adduser -S -D -H -h /var/lib/rclone -s /sbin/nologin \
-G rclone -g rclone rclone 2>/dev/null
exit 0
@@ -0,0 +1,23 @@
# Defaults for rclone OpenRC instances.
#
# To create an instance, copy this file to /etc/conf.d/rclone.<name> and create
# /etc/init.d/rclone.<name> as a symlink to /etc/init.d/rclone. For example:
#
# cp /etc/conf.d/rclone /etc/conf.d/rclone.sftp
# ln -s rclone /etc/init.d/rclone.sftp
#
# Each instance must set RCLONE_COMMAND. RCLONE_REMOTE is optional because
# commands such as "rcd" do not use a remote.
RCLONE_COMMAND=""
RCLONE_REMOTE=""
RCLONE_ARGS=""
RCLONE_CONFIG="/etc/rclone/rclone.conf"
RCLONE_CACHE_DIR="/var/lib/rclone/cache"
RCLONE_USER="rclone"
RCLONE_GROUP="rclone"
# Restart a long-running rclone command after an unexpected exit. Set
# RCLONE_RESPAWN_MAX to a positive number to limit restart attempts.
RCLONE_RESPAWN_DELAY="5"
RCLONE_RESPAWN_MAX="0"
@@ -0,0 +1,31 @@
#!/sbin/openrc-run
instance_name="${RC_SVCNAME#rclone.}"
description="rclone ${instance_name} service"
supervisor="supervise-daemon"
command="/usr/bin/rclone"
command_user="${RCLONE_USER:-rclone}:${RCLONE_GROUP:-rclone}"
pidfile="/run/rclone/${RC_SVCNAME}.pid"
respawn_delay="${RCLONE_RESPAWN_DELAY:-5}"
respawn_max="${RCLONE_RESPAWN_MAX:-0}"
supervise_daemon_args="--chdir /var/lib/rclone --pidfile ${pidfile}"
command_args="${RCLONE_COMMAND:-} ${RCLONE_REMOTE:-} --config ${RCLONE_CONFIG:-/etc/rclone/rclone.conf} --cache-dir ${RCLONE_CACHE_DIR:-/var/lib/rclone/cache} ${RCLONE_ARGS:-}"
depend() {
need net
use dns logger
}
start_pre() {
local service_owner="${RCLONE_USER:-rclone}:${RCLONE_GROUP:-rclone}"
if [ -z "${RCLONE_COMMAND:-}" ]; then
eerror "RCLONE_COMMAND is required; configure /etc/conf.d/${RC_SVCNAME}"
return 1
fi
checkpath -d -m 0750 -o "$service_owner" \
/run/rclone \
"${RCLONE_CACHE_DIR:-/var/lib/rclone/cache}"
}
@@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -euo pipefail
apk add rclone-openrc
test -x /usr/bin/rclone
test -f /etc/conf.d/rclone
test -f /etc/init.d/rclone
test "$(stat -c '%U:%G %a' /etc/rclone)" = "root:rclone 750"
test "$(stat -c '%U:%G %a' /var/lib/rclone/cache)" = "rclone:rclone 750"
cp /etc/conf.d/rclone /etc/conf.d/rclone.rcd
ln -s rclone /etc/init.d/rclone.rcd
sed -i 's|^RCLONE_COMMAND=""|RCLONE_COMMAND="rcd"|' /etc/conf.d/rclone.rcd
sed -i 's|^RCLONE_ARGS=""|RCLONE_ARGS="--rc-addr 127.0.0.1:5572 --rc-no-auth"|' /etc/conf.d/rclone.rcd
rc-update add rclone.rcd default || true
rc-service rclone.rcd start
rc-service rclone.rcd status
rc-service rclone.rcd stop
@@ -0,0 +1,36 @@
#!/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:-rclone-openrc}" "${PACKAGE_VERSION:-}" <<'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}"
test -x /usr/bin/rclone
test -f /etc/conf.d/rclone
test -f /etc/init.d/rclone
test -d /etc/rclone
test "$(stat -c '%U:%G %a' /etc/rclone)" = "root:rclone 750"
test "$(stat -c '%U:%G %a' /var/lib/rclone/cache)" = "rclone:rclone 750"
cp /etc/conf.d/rclone /etc/conf.d/rclone.sftp
ln -s rclone /etc/init.d/rclone.sftp
rc-update add rclone.sftp default
test -L /etc/runlevels/default/rclone.sftp
SCRIPT
+31 -26
View File
@@ -1,13 +1,13 @@
# Maintainer: Joachim Schlöffel <joachim.schloeffel@financial-service-plus.de>
pkgname=seaweedfs
pkgver=4.48
pkgrel=0
pkgrel=4
pkgdesc="Distributed storage system for object storage, file systems, and Iceberg tables"
url="https://github.com/seaweedfs/seaweedfs"
arch="x86_64 aarch64"
license="Apache-2.0"
depends="ca-certificates /bin/sh"
makedepends="build-base cargo rust protobuf-dev"
makedepends="build-base cargo go protobuf-dev rust"
provides="!$pkgname-openrc cmd:weed=$pkgver-r$pkgrel"
install="$pkgname.pre-install"
subpackages="
@@ -15,6 +15,7 @@ subpackages="
$pkgname-bash-completion:_bashcomp:noarch
$pkgname-doc
$pkgname-filer-openrc:_openrc_filer:noarch
$pkgname-logrotate:_logrotate:noarch
$pkgname-master-openrc:_openrc_master:noarch
$pkgname-s3-openrc:_openrc_s3:noarch
$pkgname-sftp-openrc:_openrc_sftp:noarch
@@ -24,20 +25,9 @@ subpackages="
$pkgname-worker-lance:_worker_lance
$pkgname-worker-lance-openrc:_openrc_worker_lance:noarch
"
options="!check !strip !tracedeps"
case "$CARCH" in
x86_64)
_archive="$pkgname-$pkgver-linux-amd64.tar.gz"
;;
aarch64)
_archive="$pkgname-$pkgver-linux-arm64.tar.gz"
;;
esac
options="!strip !tracedeps net"
source="
$pkgname-$pkgver-linux-amd64.tar.gz::https://github.com/seaweedfs/seaweedfs/releases/download/$pkgver/linux_amd64.tar.gz
$pkgname-$pkgver-linux-arm64.tar.gz::https://github.com/seaweedfs/seaweedfs/releases/download/$pkgver/linux_arm64.tar.gz
$pkgname-$pkgver-src.tar.gz::https://github.com/seaweedfs/seaweedfs/archive/refs/tags/$pkgver.tar.gz
admin.toml
credential.toml
@@ -56,6 +46,7 @@ source="
seaweedfs.admin.confd
seaweedfs.filer.confd
seaweedfs.initd
seaweedfs.logrotate
seaweedfs.master.confd
seaweedfs.s3.confd
seaweedfs.sftp.confd
@@ -66,22 +57,28 @@ source="
weed.bash-completion
"
builddir="$srcdir"
_worker_builddir="$builddir/$pkgname-$pkgver/seaweed-worker"
_worker_builddir="$srcdir/$pkgname-$pkgver/seaweed-worker"
prepare() {
default_prepare
tar -xzf "$srcdir/$_archive" -C "$builddir"
tar -xzf "$srcdir/$pkgname-$pkgver-src.tar.gz" -C "$builddir"
}
build() {
go build -mod=readonly -buildvcs=false -trimpath \
-tags "sqlite rclone gocdk" -o "$builddir/weed-bin" ./weed
cd "$_worker_builddir"
cargo build --locked --release -p weed-lance-worker
}
check() {
"$builddir/weed-bin" version
"$builddir/weed-bin" scaffold -config master >/dev/null
"${CARGO_TARGET_DIR:-$_worker_builddir/target}/release/weed-worker" --help >/dev/null
}
package() {
install -Dm755 "$srcdir"/weed "$pkgdir"/usr/bin/weed
install -Dm755 "$builddir"/weed-bin "$pkgdir"/usr/bin/weed
install -Dm755 "${CARGO_TARGET_DIR:-$_worker_builddir/target}/release/weed-worker" \
"$pkgdir"/usr/bin/weed-worker
local _config
@@ -115,6 +112,14 @@ _openrc_volume() { _openrc_service volume; }
_openrc_webdav() { _openrc_service webdav; }
_openrc_worker() { _openrc_service worker; }
_logrotate() {
pkgdesc="Log rotation configuration for $pkgname"
depends="$pkgname=$pkgver-r$pkgrel logrotate"
install -Dm644 "$srcdir"/seaweedfs.logrotate \
"$subpkgdir"/etc/logrotate.d/$pkgname
}
_worker_lance() {
pkgdesc="SeaweedFS Lance table maintenance worker"
depends="$pkgname=$pkgver-r$pkgrel libgcc"
@@ -137,25 +142,25 @@ _bashcomp() {
}
sha512sums="
cf446e4a70451fd46923416d2a048d8f0b6ee4eba91911acb71ed4ed572a91f17d823d33f31cef5ce592cf622e15468bf41e0f373d1c6cafb3039d6fd3b758e9 seaweedfs-4.48-linux-amd64.tar.gz
fd4d4947dc4587ec943ad4c11e0a6bc4d3cd1c59ad45299cf84bcbc8d25a2b8745fd426343087928bedc50e168b4448d2d358a2356974a3d8cdc3bfce04bbe48 seaweedfs-4.48-linux-arm64.tar.gz
91a34fec9bb78832f421b54dd823adb1c1690b746083d947c5f72e4ad7670362512bbb920432f42342482774fd8be2b396645ff3bc764b10f328432601733fe3 seaweedfs-4.48-src.tar.gz
4f24760848c909fdee1ae8569ef7ef7cbec2c885d891a543d7beddee492bddbf266e6789601095a86798d1b00256782c45297ea36cdb527bb6b64980dd02486a admin.toml
58be6587b082f45b4dd22ad8ebb1b8bf84cea2a7c0cb6b4ad4a749ac0bfdf92d10d22281a432f9e5a87afa0b940cd0172671a292fbe17803e56425cd940d47f9 admin.toml
7f77ad8787629e3defbc89e39e5432482aa50d87ddd723de927a9c6c77b14b1673cbf5b3fc3c18dd7d0eba26fbcd4220d2da6939ed097d0294b24ccd5c002635 credential.toml
507b389f6373b5f4d8ca69f27bc806b39bda8edf7f58e4f32720958e7782ee171dd0461bdecb285e5a8bf2cf4ea3d6cbe8b62ae6ac43c2a40d0eb053d50a22f8 example-admin.toml
7105de7053654b8c0502521ce58585915fc831c3152801e1db02b1c5214dc3c3ed31f4fc18000665d8338c7a10ffbf0d248368bef2ef3a6d37d46cd856398366 example-credential.toml
64821eba8661b39b94016a7ca3fa37b74154dcc998bcb9978a6b9983a58741ff28a2984db3c0789595d1864354f83b33cf6bb31b014ffd71ebd6570d8760dc26 example-filer.toml
e5753bd0bcc60dc84428c40ba556c08acae61dec083a5b76640125f637532e7c5759a72cdfd95114222a7a0901a916ec3c4d12f306853cfca0fe9a0b1857893e example-master.toml
c6ec4fc7709c42dc6771b5039203c44cbd693742abcd7720936c00b1bd5f99bb2999bb1545680ae4418efedd65d71c234f4602f52ce9d58b1ff7ec53eafb1a1a example-filer.toml
59965fd2649a956677c6d4104ff07ff010d6edd1d3733eaa5c5bc01eabe54429c413e35d52ed4a4c0129bfa798e434828b32a5f0ef19dbbe4eab0199faa2738c example-master.toml
aea1b3114311304230cb30143825329ef7353a302d094c131ca4e049b847305e2143b76078e6574c6d7d4039c03a2e2d5a4925de80cd7cb2be75b2b522ce47f7 example-volume.toml
2c200c28172a5d0b1c80ab28e849287e7af8d103355638fd3183b8614d3e2b1b3482132522663f7c6d844e10e13b8c6e23fb5fba0dec2cc83de45c2f17b33477 example-notification.toml
328cfe43d0c2ebf5092a1178af45c37b07593085135c31649754f0df9fd4c043847c13b56c3c7c45194541db8082309c4845c825d7011e4c3e503b1e6576528d example-replication.toml
3b45b0f5bf6c5339cfb63c3ddb489b7122e03996ce380c7a244778ef1e7f6c06b4e3e56ea695a2dc3c9c49322a58df865ff50b2904318abafee5e66b2af757f1 example-security.toml
b7caad9dff0bb812d4046b8e0285ac4e88a7af3a742a168579df08762da735a025725f78286e17bdd4b19a966a3d7ab88e0e52efbb5cf1c69d7a4ff071390e0f example-security.toml
70069f97edf261a2cd0669dd60adad80533609a25d7429254e0c3322d7e80337f5ff69a5581bc39e6a15442098d14d610ce5f0cb14f02c461c8d3dd440b22c56 example-shell.toml
130b9932f99d0a3ec3c30c74eaf1dc441c1a9252da30e2c5365084f2a0679f58531e6180689c24b71f92cf9a7966b02ea25ee31d356e7118cbb82743d0bfcbd9 filer.toml
088c3aebc142054af1b54a92a2c5bd30d53be61bdf382f7cae2efef2d917d7b57022d9b494a60f32c7bf56689d4ce2f971e19c98da1d87e27021a3e948035605 master.toml
79a078133c259473e601488cd1d8032b74c5fa32da6f34a4ed46efa9736bf5369365a77d775e3d78512b1060cd87012eb40226829eecb30544e1542d165af7d6 security.toml
82e2793bf483ffb5b0c8fbe38e6c9df75afe01f824f8414cafd91e4bed5c79c13dae1ca659070401d4968d16ed4b26455b0c6208f777705527bceb2e5f286988 seaweedfs.admin.confd
5ad952c37c62a770327bd70f7349fa677406606f0b9bf03fdc8f6c6804701f1e77710ab20d6153f9e0cfb549ec161d68a3316abab9c59837bbe3f91ee99e5ce0 seaweedfs.filer.confd
077c513851bbbe53dd32d26455abc361f97006f9ace1190f96eb4b9136d16befab1a6153752eae8dac695c3a9aed084a00b411684915618cb30dd0770e608403 seaweedfs.initd
19cbd65d701b0995e088f265d88f481f14e214ecbd8a783f7e7b17e811e421a28425f96d073757cc07fbb17e8eb084d14d41f46baee82ee13e043ce0c0c5bde9 seaweedfs.initd
816e763164c2cec66509c213ed56cb633f13d1daf48a511d1a9cfdf692a6ad945cf599cb0e706202b8fd522022ce512eae6170422e478abdf95334b0088ac4cc seaweedfs.logrotate
57ba77519bb266f0117eaadae3af5ae6bc99bb653668ff526202f327df1c8d93973c0e19dae0c53a19e06389868043c04e53f16f01c851b77fe1387e92cc993b seaweedfs.master.confd
22a3ea6c83266a979ea7c848fc74b40fc0f2ade960b273fa11e63d4a72a1328bd688c9918be3e9234cfb19f889fd9c931388bb5c2863cea3500e534b8bd90282 seaweedfs.s3.confd
3e9c41bc61cdd9a4c53ece64d847eca26ab7d0ce0cc98e72462c3dbb225a40de10a02201362801015a9c629d77d5c0d54c7228e9d20111fb6f478b2267d2db98 seaweedfs.sftp.confd
+17 -5
View File
@@ -1,18 +1,21 @@
# SeaweedFS Alpine Package
Repackages official SeaweedFS 4.47 Linux release tarballs for `x86_64` and
`aarch64`.
Builds SeaweedFS 4.48 from its upstream source release for `x86_64` and
`aarch64`. The package intentionally builds the upstream baseline feature set,
with the `sqlite`, `rclone`, and `gocdk` optional Go build tags enabled. Go and
Cargo dependencies are resolved from the versions pinned in the upstream
`go.sum` and `Cargo.lock` files.
## Package Commands
Refresh generated sources:
When updating SeaweedFS, generate the config scaffolds and refresh checksums:
```sh
ALPINE_PACKAGE=seaweedfs mise run apk:update-generated
ALPINE_PACKAGE=seaweedfs mise run apk:checksum
```
The refresh command generates every SeaweedFS 4.47 scaffold configuration:
The refresh command generates every SeaweedFS scaffold configuration:
`admin`, `credential`, `filer`, `master`, `volume`, `notification`,
`replication`, `security`, and `shell`.
@@ -128,6 +131,15 @@ Bash completion:
apk add bash-completion seaweedfs-bash-completion
```
Log rotation for the default OpenRC service logs:
```sh
apk add seaweedfs-logrotate
```
This rotates `/var/log/seaweedfs/seaweedfs.*.log` daily and retains 14
compressed archives.
## Upgrade Or Pin
Upgrade:
@@ -140,5 +152,5 @@ rc-service seaweedfs.master restart
Pin:
```sh
apk add seaweedfs=4.47-r2
apk add seaweedfs=4.47-r3
```
@@ -41,3 +41,8 @@ rc-service seaweedfs.filer start
rc-service seaweedfs.master status
rc-service seaweedfs.volume status
rc-service seaweedfs.filer status
# SeaweedFS needs more than OpenRC's default stop timeout to finish its
# graceful volume-server shutdown. Keep the restart path covered.
rc-service seaweedfs.volume restart
rc-service seaweedfs.volume status
@@ -16,6 +16,7 @@ apk_test_install_run "${repo_root}" "${PACKAGE_NAME:-seaweedfs}" "${PACKAGE_VERS
seaweedfs-master-openrc \
seaweedfs-volume-openrc \
seaweedfs-filer-openrc \
seaweedfs-logrotate \
seaweedfs-worker-lance-openrc
test -x /usr/bin/weed
@@ -30,6 +31,9 @@ apk_test_install_run "${repo_root}" "${PACKAGE_NAME:-seaweedfs}" "${PACKAGE_VERS
test -f /etc/init.d/seaweedfs.volume
test -f /etc/init.d/seaweedfs.filer
test -f /etc/init.d/seaweedfs.worker-lance
test -f /etc/logrotate.d/seaweedfs
apk info -e logrotate
logrotate -d /etc/logrotate.conf
test -x /usr/bin/weed-worker
/usr/bin/weed-worker --help >/dev/null
@@ -7,29 +7,26 @@ pkgver="$(
awk -F= '$1 == "pkgver" { print $2; exit }' "${package_dir}/APKBUILD"
)"
tmpdir="$(mktemp -d)"
repo_root="${REPO_ROOT:-$(cd "${package_dir}/../../../.." && pwd)}"
source_archive="${repo_root}/.cache/apk-distfiles/seaweedfs-${pkgver}-src.tar.gz"
cleanup() {
rm -rf "${tmpdir}"
}
trap cleanup EXIT
case "$(uname -m)" in
x86_64)
archive="linux_amd64.tar.gz"
;;
aarch64|arm64)
archive="linux_arm64.tar.gz"
;;
*)
printf 'unsupported host architecture for SeaweedFS generated sources: %s\n' "$(uname -m)" >&2
exit 2
;;
esac
if [[ ! -f "${source_archive}" ]]; then
source_archive="${tmpdir}/seaweedfs-${pkgver}-src.tar.gz"
curl -fsSL \
-o "${tmpdir}/${archive}" \
"https://github.com/seaweedfs/seaweedfs/releases/download/${pkgver}/${archive}"
tar -xzf "${tmpdir}/${archive}" -C "${tmpdir}" weed
-o "${source_archive}" \
"https://github.com/seaweedfs/seaweedfs/archive/refs/tags/${pkgver}.tar.gz"
fi
tar -xzf "${source_archive}" -C "${tmpdir}"
source_dir="${tmpdir}/seaweedfs-${pkgver}"
(
cd "${source_dir}"
go build -mod=readonly -buildvcs=false -trimpath -o "${tmpdir}/weed" ./weed
)
for config in "${configs[@]}"; do
"${tmpdir}/weed" scaffold -config "${config}" 2>/dev/null \
@@ -6,6 +6,9 @@ description="SeaweedFS ${service_name} service"
command="/usr/bin/weed"
command_user="${SEAWEEDFS_USER:-seaweedfs}:${SEAWEEDFS_GROUP:-seaweedfs}"
command_background="yes"
# SeaweedFS performs a graceful shutdown, including a 10-second final heartbeat.
# The OpenRC default stop timeout can expire before that work has completed.
retry="TERM/30/KILL/5"
pidfile="/run/seaweedfs/${RC_SVCNAME}.pid"
output_log="${SEAWEEDFS_LOG:-/var/log/seaweedfs/${RC_SVCNAME}.log}"
error_log="${SEAWEEDFS_ERRLOG:-/var/log/seaweedfs/${RC_SVCNAME}.log}"
@@ -0,0 +1,10 @@
/var/log/seaweedfs/seaweedfs.*.log {
daily
rotate 14
missingok
notifempty
compress
delaycompress
copytruncate
su seaweedfs seaweedfs
}
+7 -1
View File
@@ -50,7 +50,13 @@ if [[ ! -e "${HOME}/.abuild/abuild.conf" && -d "${repo_root}/.cache/abuild" ]];
fi
if ! compgen -G "${HOME}/.abuild/*.rsa" > /dev/null; then
abuild-keygen -a -n
# APK signatures identify their public key by filename. Matrix workers can
# otherwise generate different builder-<timestamp>.rsa keys with the same
# name when they start during the same second, making their artifacts
# impossible to merge. Use the selected package only while generating the
# key so the package metadata retains the configured PACKAGER value.
key_identity="${ALPINE_PACKAGE:-ci}"
PACKAGER="CI key <ci-${key_identity}@local.invalid>" abuild-keygen -a -n
fi
doas cp "${HOME}"/.abuild/*.rsa.pub /etc/apk/keys/
+19 -3
View File
@@ -30,16 +30,30 @@ registry_key_url() {
}
download_registry_metadata() {
local arch url key_dir
local arch url key_dir http_status
require_registry_config INSTANCE_URL "${instance_url}"
require_registry_config PACKAGE_OWNER "${owner}"
declare -gA registry_index_available=()
mkdir -p "${registry_cache}"
url="$(registry_url)"
for arch in ${arches}; do
curl --fail --silent --show-error --location \
if http_status="$(curl --fail --silent --location \
--output "${registry_cache}/${arch}.APKINDEX.tar.gz" \
"${url}/${arch}/APKINDEX.tar.gz"
--write-out '%{http_code}' \
"${url}/${arch}/APKINDEX.tar.gz")"; then
registry_index_available["${arch}"]=1
continue
fi
if [[ "${http_status}" == 404 ]]; then
registry_index_available["${arch}"]=0
printf 'Registry index is absent: %s/%s/APKINDEX.tar.gz; treating it as empty\n' \
"${url}" "${arch}" >&2
continue
fi
printf 'failed to download registry index (%s): %s/%s/APKINDEX.tar.gz\n' \
"${http_status:-curl error}" "${url}" "${arch}" >&2
return 1
done
key_dir="${registry_cache}/keys"
mkdir -p "${key_dir}"
@@ -59,6 +73,7 @@ load_registry_index() {
declare -gA registry_latest_versions=()
for arch in ${arches}; do
[[ "${registry_index_available[${arch}]:-0}" == 1 ]] || continue
while IFS=$'\t' read -r package_name package_version; do
[[ -n "${package_name}" && -n "${package_version}" ]] || continue
registry_key="${arch}|${package_name}"
@@ -138,6 +153,7 @@ prepare() {
} >> "${GITHUB_ENV}"
fi
if [[ -n "${GITHUB_OUTPUT:-}" ]]; then
printf 'selected_packages=%s\n' "${ALPINE_PACKAGES}" >> "${GITHUB_OUTPUT}"
if [[ -n "${ALPINE_PACKAGES}" ]]; then
printf 'packages_selected=true\n' >> "${GITHUB_OUTPUT}"
else
+20 -2
View File
@@ -6,12 +6,13 @@ repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
. "${repo_root}/scripts/apk/package-lib.sh"
repo_name="${ALPINE_REPO_NAME:-local}"
arch="${ALPINE_ARCH:-$(apk --print-arch)}"
packages="${SMOKE_PACKAGES:-seaweedfs seaweedfs-master-openrc seaweedfs-filer-openrc seaweedfs-worker-openrc greptimedb lavinmq lavinmq-openrc gitea gitea-openrc}"
packages="${SMOKE_PACKAGES:-seaweedfs seaweedfs-master-openrc seaweedfs-filer-openrc seaweedfs-worker-openrc greptimedb lavinmq lavinmq-openrc gitea gitea-openrc rclone-openrc}"
repo_dir="${repo_root}/packages/${repo_name}/${arch}"
registry_url="${ALPINE_REGISTRY_URL:-}"
registry_key="${ALPINE_REGISTRY_KEY:-}"
read -r -a package_list <<< "${packages}"
declare -A source_packages=()
local_repo_complete=0
while IFS= read -r package_dir; do
while IFS= read -r spec; do
@@ -26,18 +27,30 @@ for package in "${package_list[@]}"; do
fi
done
if [[ -d "${repo_dir}" ]]; then
local_repo_complete=1
for package in "${package_list[@]}"; do
if ! compgen -G "${repo_dir}/${package}-*.apk" >/dev/null; then
local_repo_complete=0
break
fi
done
fi
if [[ -d "${repo_dir}" ]]; then
cp "${repo_dir}"/*.rsa.pub /etc/apk/keys/
echo "${repo_root}/packages/${repo_name}" >> /etc/apk/repositories
fi
if [[ -n "${registry_url}" ]]; then
if [[ -n "${registry_url}" && "${local_repo_complete}" == 0 ]]; then
if [[ ! -f "${registry_key}" ]]; then
printf 'missing Alpine registry signing key: %s\n' "${registry_key:-<unset>}" >&2
exit 1
fi
cp "${registry_key}" /etc/apk/keys/
echo "${registry_url}" >> /etc/apk/repositories
elif [[ -n "${registry_url}" ]]; then
printf 'Using the complete local Alpine repository; registry fallback is not needed\n'
fi
if [[ ! -d "${repo_dir}" && -z "${registry_url}" ]]; then
@@ -64,6 +77,11 @@ if command -v gitea >/dev/null 2>&1; then
test -f /etc/gitea/app.ini
test -d /var/lib/gitea
fi
if command -v rclone >/dev/null 2>&1; then
rclone version
test -f /etc/conf.d/rclone
test -f /etc/init.d/rclone
fi
if ls /etc/init.d/seaweedfs.* >/dev/null 2>&1; then
find /etc/init.d -maxdepth 1 -name 'seaweedfs.*' -print | sort
fi
+103
View File
@@ -0,0 +1,103 @@
#!/usr/bin/env bash
set -euo pipefail
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
repo_name="${ALPINE_REPO_NAME:-local}"
arches="${ALPINE_ARCHES:-x86_64 aarch64}"
artifact_root="${APK_CI_ARTIFACTS_DIR:-${repo_root}/packages/worker-artifacts}"
package_root="${APK_CI_PACKAGE_ROOT:-${repo_root}/packages/${repo_name}}"
keys_root="$(mktemp -d)"
cleanup() {
rm -rf "${keys_root}"
}
trap cleanup EXIT
require_command() {
command -v "$1" >/dev/null 2>&1 || {
printf 'missing required command: %s\n' "$1" >&2
exit 2
}
}
copy_key() {
local key="$1"
local destination="$2"
local key_name
key_name="$(basename "${key}")"
if [[ -e "${destination}/${key_name}" ]]; then
if cmp -s "${key}" "${destination}/${key_name}"; then
return
fi
printf 'conflicting public keys named %s\n' "${key_name}" >&2
exit 1
fi
cp "${key}" "${destination}/${key_name}"
}
require_command abuild-keygen
require_command abuild-sign
require_command apk
if [[ ! -d "${artifact_root}" ]]; then
printf 'missing worker artifacts directory: %s\n' "${artifact_root}" >&2
exit 1
fi
rm -rf "${package_root}"
mkdir -p "${package_root}" "${HOME}/.abuild"
if ! compgen -G "${HOME}/.abuild/*.rsa" > /dev/null; then
abuild-keygen -a -n
fi
shopt -s nullglob
merge_private_keys=("${HOME}"/.abuild/*.rsa)
merge_public_keys=("${HOME}"/.abuild/*.rsa.pub)
shopt -u nullglob
if [[ "${#merge_private_keys[@]}" -ne 1 || "${#merge_public_keys[@]}" -ne 1 ]]; then
printf 'expected exactly one merge signing key in %s/.abuild\n' "${HOME}" >&2
exit 1
fi
for arch in ${arches}; do
destination="${package_root}/${arch}"
keys_dir="${keys_root}/${arch}"
mkdir -p "${destination}"
while IFS= read -r -d '' apk; do
cp "${apk}" "${destination}/"
done < <(find "${artifact_root}" -type f -path "*/${arch}/*.apk" -print0)
shopt -s nullglob
apks=("${destination}"/*.apk)
shopt -u nullglob
if [[ "${#apks[@]}" -eq 0 ]]; then
rmdir "${destination}"
continue
fi
while IFS= read -r -d '' key; do
copy_key "${key}" "${destination}"
mkdir -p "${keys_dir}"
copy_key "${key}" "${keys_dir}"
done < <(find "${artifact_root}" -type f -path "*/${arch}/*.rsa.pub" -print0)
if ! compgen -G "${keys_dir}/*.rsa.pub" > /dev/null; then
printf 'missing worker signing key for %s artifacts\n' "${arch}" >&2
exit 1
fi
copy_key "${merge_public_keys[0]}" "${destination}"
(
cd "${destination}"
apk --keys-dir "${keys_dir}" index --rewrite-arch "${arch}" -o APKINDEX.tar.gz ./*.apk
abuild-sign -k "${merge_private_keys[0]}" APKINDEX.tar.gz
)
done
if ! compgen -G "${package_root}"/*/*.apk > /dev/null; then
printf 'no APK files found in worker artifacts: %s\n' "${artifact_root}" >&2
exit 1
fi
+7 -2
View File
@@ -10,6 +10,11 @@ alpine_version="${ALPINE_VERSION:-3.24}"
arches="${ALPINE_SECURITY_ARCHES:-${ALPINE_ARCHES:-x86_64}}"
reports_dir="${APK_SECURITY_REPORTS_DIR:-${repo_root}/packages/security-reports}"
trivy_bin="${TRIVY_BIN:-trivy}"
# The GCR pull-through mirror can serve a manifest whose layer has already
# expired, returning 404 rather than letting Trivy continue to its fallback.
# Use the publisher's registry directly; callers may still select an internal
# mirror by setting TRIVY_DB_REPOSITORY.
trivy_db_repository="${TRIVY_DB_REPOSITORY:-ghcr.io/aquasecurity/trivy-db:2}"
require_command() {
command -v "$1" >/dev/null 2>&1 || {
@@ -166,9 +171,9 @@ while IFS= read -r package_dir; do
install_rootfs_docker "${rootfs}" "${arch}" "${specs[@]}"
fi
"${trivy_bin}" filesystem --distro "alpine/${alpine_version}" --scanners vuln --format json --no-progress \
"${trivy_bin}" filesystem --db-repository "${trivy_db_repository}" --distro "alpine/${alpine_version}" --scanners vuln --format json --no-progress \
--output "${report_dir}/trivy.json" "${rootfs}/installed"
"${trivy_bin}" filesystem --distro "alpine/${alpine_version}" --scanners vuln --format cyclonedx --no-progress \
"${trivy_bin}" filesystem --db-repository "${trivy_db_repository}" --distro "alpine/${alpine_version}" --scanners vuln --format cyclonedx --no-progress \
--output "${report_dir}/sbom.cdx.json" "${rootfs}/installed"
jq -e 'type == "object" and has("ArtifactName")' "${report_dir}/trivy.json" >/dev/null
jq -e '.bomFormat == "CycloneDX"' "${report_dir}/sbom.cdx.json" >/dev/null
+6 -1
View File
@@ -5,7 +5,7 @@ repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
alpine_version="${ALPINE_VERSION:-3.24}"
platform="${ALPINE_BUILD_PLATFORM:-linux/amd64}"
arch="${ALPINE_ARCH:-x86_64}"
packages="${SMOKE_PACKAGES:-seaweedfs seaweedfs-master-openrc seaweedfs-filer-openrc seaweedfs-worker-openrc greptimedb lavinmq lavinmq-openrc gitea gitea-openrc}"
packages="${SMOKE_PACKAGES:-seaweedfs seaweedfs-master-openrc seaweedfs-filer-openrc seaweedfs-worker-openrc greptimedb lavinmq lavinmq-openrc gitea gitea-openrc rclone-openrc}"
if [[ ! -d "${repo_root}/packages/local/${arch}" ]]; then
printf 'missing local repository: packages/local/%s\n' "${arch}" >&2
@@ -39,6 +39,11 @@ docker run --rm --platform "${platform}" \
test -f /etc/gitea/app.ini
test -d /var/lib/gitea
fi
if command -v rclone >/dev/null 2>&1; then
rclone version
test -f /etc/conf.d/rclone
test -f /etc/init.d/rclone
fi
if ls /etc/init.d/seaweedfs.* >/dev/null 2>&1; then
ls -1 /etc/init.d/seaweedfs.* | sort
fi
+1
View File
@@ -76,6 +76,7 @@ Examples:
apk add greptimedb greptimedb-docs greptimedb-standalone-openrc
apk add lavinmq lavinmq-openrc
apk add gitea gitea-openrc
apk add rclone-openrc
Entering ${TEST_SHELL}.