171 lines
4.9 KiB
Markdown
171 lines
4.9 KiB
Markdown
# SeaweedFS Alpine Package
|
|
|
|
Local Alpine 3.23 packaging for SeaweedFS `4.31`. The workflow runs Alpine tooling
|
|
inside Docker and writes signed packages under `packages/local/<arch>/`.
|
|
|
|
## Commands
|
|
|
|
```sh
|
|
mise run apk:build
|
|
mise run apk:build-all
|
|
mise run apk:build-x86_64
|
|
mise run apk:build-aarch64
|
|
mise run apk:update-generated
|
|
mise run apk:checksum
|
|
mise run apk:lint
|
|
mise run apk:packages
|
|
mise run apk:smoke
|
|
mise run apk:test-shell
|
|
mise run apk:publish-check
|
|
mise run apk:publish-gitea
|
|
mise run gitea-workflow-build
|
|
mise run apk:shell
|
|
mise run apk:clean
|
|
```
|
|
|
|
`apk:build` targets `x86_64` by default. Multi-arch builds target `x86_64` and
|
|
`aarch64`; override with `ALPINE_ARCHES` when needed:
|
|
|
|
```sh
|
|
ALPINE_ARCHES="x86_64 aarch64" mise run apk:build-all
|
|
```
|
|
|
|
The release binary is also exposed as a mise HTTP tool stub:
|
|
|
|
```sh
|
|
./bin/weed version
|
|
```
|
|
|
|
## Package Layout
|
|
|
|
```text
|
|
packaging/alpine/local/seaweedfs/APKBUILD
|
|
packaging/alpine/local/seaweedfs/*.toml
|
|
packaging/alpine/local/seaweedfs/example-*.toml
|
|
packaging/alpine/local/seaweedfs/weed.bash-completion
|
|
packaging/alpine/local/seaweedfs/seaweedfs.*.confd
|
|
packaging/alpine/local/seaweedfs/seaweedfs.initd
|
|
packages/local/<arch>/
|
|
```
|
|
|
|
The package repackages upstream release tarballs, so builds use
|
|
`ALPINE_BUILD_PLATFORM=linux/amd64` by default. Signing keys and distfiles are
|
|
cached in `.cache/abuild/` and `.cache/apk-distfiles/`.
|
|
|
|
The Gitea workflow publishes to the Alpine package registry branch `v3.23`.
|
|
Override `ALPINE_VERSION` and `ALPINE_REGISTRY_BRANCH` if you intentionally
|
|
build for another Alpine branch, including `edge`.
|
|
Use `mise run gitea-workflow-build` for a local `pull_request` workflow check
|
|
through `act`; the publish step is skipped for that event.
|
|
|
|
## Test And Publish
|
|
|
|
```sh
|
|
mise run apk:smoke
|
|
mise run apk:test-shell
|
|
mise run apk:publish-check
|
|
```
|
|
|
|
`apk:publish-check` runs APKBUILD linting, rebuilds configured architectures,
|
|
lists package metadata, and installs the built packages in an Alpine container.
|
|
`apk:test-shell` builds the selected architecture, installs the local package
|
|
set in an Alpine container, and opens a shell. Use `SKIP_BUILD=1` to reuse an
|
|
existing local repository. Set `TEST_SHELL_TIMEOUT` to adjust the timeout for
|
|
`apk update` and `apk add` inside the test container.
|
|
|
|
Install from the local repo with the base package plus the role-specific OpenRC
|
|
subpackage you need:
|
|
|
|
```sh
|
|
apk add seaweedfs seaweedfs-master-openrc
|
|
```
|
|
|
|
Optional generated material is split out:
|
|
|
|
```sh
|
|
apk add seaweedfs-doc
|
|
apk add bash-completion seaweedfs-bash-completion
|
|
```
|
|
|
|
The doc split installs upstream scaffolds under
|
|
`/usr/share/doc/seaweedfs/examples/`. The bash completion split installs
|
|
`/usr/share/bash-completion/completions/weed` and is also selected by
|
|
`install_if` when `seaweedfs` and `bash-completion` are installed together.
|
|
|
|
This repository publishes `seaweedfs`, matching Alpine aports. Remove Alpine's
|
|
old generic OpenRC package before installing a role split:
|
|
|
|
```sh
|
|
apk del seaweedfs-openrc
|
|
apk add seaweedfs seaweedfs-master-openrc
|
|
```
|
|
|
|
The OpenRC subpackages are:
|
|
|
|
```text
|
|
seaweedfs-master-openrc -> seaweedfs.master
|
|
seaweedfs-volume-openrc -> seaweedfs.volume
|
|
seaweedfs-filer-openrc -> seaweedfs.filer
|
|
seaweedfs-s3-openrc -> seaweedfs.s3
|
|
seaweedfs-webdav-openrc -> seaweedfs.webdav
|
|
seaweedfs-sftp-openrc -> seaweedfs.sftp
|
|
seaweedfs-admin-openrc -> seaweedfs.admin
|
|
seaweedfs-worker-openrc -> seaweedfs.worker
|
|
```
|
|
|
|
Each service has defaults in `/etc/conf.d/seaweedfs.*`. Enable only the roles
|
|
needed on the node:
|
|
|
|
```sh
|
|
rc-update add seaweedfs.master default
|
|
rc-service seaweedfs.master start
|
|
```
|
|
|
|
If the repo key is missing on a target system, copy `.cache/abuild/*.rsa.pub`
|
|
into `/etc/apk/keys/` before `apk update`.
|
|
|
|
## Gitea Registry
|
|
|
|
The Gitea workflow reads these repository variables and secrets:
|
|
|
|
```text
|
|
Variables: INSTANCE_URL, PACKAGE_OWNER, PACKAGE_NAME
|
|
Secrets: PACKAGE_USER, PACKAGE_TOKEN
|
|
```
|
|
|
|
It uploads each built `*.apk` with HTTP `PUT` to:
|
|
|
|
```text
|
|
${INSTANCE_URL}/api/packages/${PACKAGE_OWNER}/alpine/v3.23/${PACKAGE_NAME}
|
|
```
|
|
|
|
For local publishing, run:
|
|
|
|
```sh
|
|
INSTANCE_URL=https://code.factoring.digital \
|
|
PACKAGE_OWNER=fspdigital \
|
|
PACKAGE_NAME=seaweedfs-alpine \
|
|
PACKAGE_USER=... \
|
|
PACKAGE_TOKEN=... \
|
|
mise run apk:publish-gitea
|
|
```
|
|
|
|
## Alpine Package Dos And Don'ts
|
|
|
|
Do:
|
|
|
|
- Keep local `source` files next to the `APKBUILD`.
|
|
- Put full upstream scaffolds in `/usr/share/doc/seaweedfs/examples/`, not active `/etc`.
|
|
- Run `mise run apk:update-generated` when updating generated examples or completions.
|
|
- Run `mise run apk:checksum` after changing any package source file.
|
|
- Increment `pkgrel` for package-only changes; reset it when `pkgver` changes.
|
|
- Keep installed defaults short and production-neutral.
|
|
- Run `mise run apk:publish-check` before handing off a repository.
|
|
|
|
Don't:
|
|
|
|
- Edit generated `src/`, `pkg/`, or `packages/` output.
|
|
- Hand-edit checksum lines when `abuild checksum` can do it.
|
|
- Bundle long upstream examples as active `/etc` defaults.
|
|
- Install all OpenRC roles on a node by default.
|