Get it
packages.marlinos/
is the index.
current is the FreeBSD release line;
dev tracks development.
- New FreeBSD box: image, then install.
- Existing FreeBSD 16: convert in place.
- Linux (Debian 13 / Ubuntu 26.04, amd64): packages. No OS image.
- Alpine 3.24 (amd64, rsyslog + WAKE only): packages. No OS image.
- Flatcar Container Linux LTS 4081 (amd64, rsyslog + WAKE only): OCI images. Preview, not packages.
- FreeBSD images
- FreeBSD packages
- Linux packages
- Alpine packages
- Flatcar images
- pkgbase
- Install
- Convert
FreeBSD images
Memstick and ISO. Each directory includes CHECKSUM.SHA256.
FreeBSD packages
Index: packages.marlinos/.
A memstick install already has the repo and its signing key
at /usr/share/keys/pkg/pkg.marlinos.io.
Package names: rsyslog, wake, fleetd.
mkdir -p /usr/share/keys/pkg
fetch -o /usr/share/keys/pkg/pkg.marlinos.io \
https://marlinos.io/keys/pkg.marlinos.io
# /usr/local/etc/pkg/repos/MarlinOS.conf
MarlinOS: {
url: "https://pkg.marlinos.io/${ABI}-current",
signature_type: "pubkey",
pubkey: "/usr/share/keys/pkg/pkg.marlinos.io",
enabled: yes,
priority: 90,
}
pkg update
pkg install rsyslog wake fleetd
Linux packages
Debian 13 and Ubuntu 26.04, amd64, dev channel.
Names: rsyslog, wake, marlinos-fleetd.
curl -fsSL https://pkg.marlinos.io/packages.marlinos/marlinos.gpg \
| gpg --dearmor -o /usr/share/keyrings/marlinos.gpg
# fingerprint: D32A E5CF AB44 65C4 86F0 54A1 4FC3 26FF FEFD E96D
echo "deb [signed-by=/usr/share/keyrings/marlinos.gpg] https://pkg.marlinos.io/Ubuntu:26.04:amd64-dev/ ./" \
> /etc/apt/sources.list.d/marlinos.list
apt-get update
apt-get install rsyslog wake marlinos-fleetd
For Debian 13, swap Ubuntu:26.04 for Debian:13.
Alpine packages
Alpine 3.24, amd64, dev channel. rsyslog + WAKE stack only —
no fleetd/fleetserver on this target.
Names: rsyslog, wake.
- Alpine 3.24
- x86_64-dev
curl -fsSL https://pkg.marlinos.io/packages.marlinos/marlinos.rsa.pub \
-o /etc/apk/keys/marlinos.rsa.pub
echo "https://pkg.marlinos.io/packages.marlinos/Alpine:3.24:amd64-dev" \
>> /etc/apk/repositories
apk update
apk add rsyslog wake
Flatcar Container Linux images
/usr rules out apt/apk, so
this ships as two OCI images instead of packages, and the CI job that
builds them runs allow_failure: true until a live LTS
4081 load is verified (ADR-0118). Everything below works against the
published tarball; treat it as best-effort until that note is gone.
Flatcar LTS 4081, amd64, dev channel. rsyslog + WAKE
stack only, same reduced scope as Alpine: no fleetd, no fleet-pushed
config. journald stays the host logger; rsyslog tails it via
imjournal.
- Flatcar LTS 4081
- amd64-dev
# fetch + load the images curl -fsSLO https://pkg.marlinos.io/packages.marlinos/Flatcar:LTS-4081:amd64-dev/marlinos-wake_<version>_amd64.tar.gz docker load < marlinos-wake_<version>_amd64.tar.gz # compose.yaml: network_mode host (imtcp/imudp/imbeats + mesh), # waked shares rsyslog's pid namespace to SIGHUP it on config reload docker compose up -d
waked.toml and any operator rulebases are bind-mounts,
same as Alpine: no fleet-pushed CTI, GeoIP, or rsyslog.d
here. See Linux support for the
delivery-model rationale.
pkgbase
Base and the MARLINOS kernel as pkg sets.
Used by convert.
- amd64
- FreeBSD:16:amd64/base_current
- aarch64
- FreeBSD:16:aarch64/base_current
Install (FreeBSD)
Flash the memstick, boot it. The installer walks ZFS layout, network,
and root password. On first boot set the enrollment broker.
fleetd then logs its node id, and
fleetctl enroll list shows the pending request; any
unambiguous prefix of that id works as an argument:
sudo dd if=marlinos-memstick.img of=/dev/da0 bs=1M status=progress conv=fsync sudo sysrc fleetd_enable="YES" sudo sysrc fleetd_server="fleet.example.org:8444" sudo service fleetd restart
Enroll
# operator workstation fleetctl namespace add home --api https://fleet.example.org:8888 fleetctl login admin --namespace home # namespace add only creates it fleetctl enroll list fleetctl enroll approve a1b2c3 --name edge-01 fleetctl device platform a1b2c3 wake-edge fleetctl overlay push a1b2c3 -f overlays/site.yaml fleetctl apply a1b2c3
See Fleet for the rest of the operator commands.
First fleetserver
One node runs fleetserver. The nas and
vpn-hub platforms include it. Bring that host up first,
then enroll the rest.
# fleetserver host
sudo pkg install fleetserver fleet-cli
sudo service fleetserver enable
sudo service fleetserver start
fleetctl namespace add home --api https://fleet.example.org:8888
fleetctl login admin --namespace home
Convert an existing FreeBSD 16 host
Point pkg at the MarlinOS pkgbase repository and upgrade
base and kernel. Same end state as the memstick. Fetch the pubkey
first (path matches the overlay on the image).
mkdir -p /usr/share/keys/pkg
fetch -o /usr/share/keys/pkg/pkg.marlinos.io \
https://marlinos.io/keys/pkg.marlinos.io
# /usr/local/etc/pkg/repos/MarlinOS-base.conf
MarlinOS-base: {
url: "https://pkg.marlinos.io/${ABI}/base_current",
signature_type: "pubkey",
pubkey: "/usr/share/keys/pkg/pkg.marlinos.io",
enabled: yes,
priority: 100,
}
# /usr/local/etc/pkg/repos/MarlinOS.conf
MarlinOS: {
url: "https://pkg.marlinos.io/${ABI}-current",
signature_type: "pubkey",
pubkey: "/usr/share/keys/pkg/pkg.marlinos.io",
enabled: yes,
priority: 90,
}
sudo pkg update
sudo pkg upgrade -r MarlinOS-base -f -g 'FreeBSD-*'
sudo shutdown -r now
FreeBSD-* glob
matches nothing and the command silently no-ops; use the memstick
instead.
After reboot, uname -v reports the MARLINOS
kernel. Then:
sudo pkg install fleetd
sudo sysrc fleetd_server="fleet.example.org:8444"
sudo service fleetd enable
sudo service fleetd start
Enroll as in the previous section.