A Linux host with a C toolchain, cmake,
ninja, xorriso, mksquashfs,
bubblewrap, and about 30 GiB free.
git clone https://github.com/apiwo/arctic-linux git clone https://github.com/apiwo/arctic-linux-ports cd arctic-linux ln -s ../arctic-linux-ports ports
The ports tree lives in its own repository, so the main one stays the system rather than the system plus five hundred recipes.
./build.sh everything ./build.sh rootfs iso only these steps
Steps, in order: fetch, kernel,
rootfs, usable, pkgs,
iso. Each is idempotent — anything already built is skipped,
so a failed run can be fixed and re-run without starting over.
build/arctic-sandbox build/build-batch.sh vim nano
Not a convention — a rule the filesystem enforces. Every build runs
under bubblewrap with the entire host bound read-only; only the build
tree, the source tree and /tmp are writable.
build/arctic-sandbox --check
This exists because it went wrong once. Arctic's glibc is configured
with slibdir=/usr/lib, so a recipe that forgets
DESTDIR writes that glibc straight into the host's
/usr/lib and every dynamically linked program on the machine
stops working. A note in a README was not good enough; the filesystem has
to refuse.
For musl packages use arctic-musl-sandbox instead — same
guarantee, plus a working musl toolchain. See
musl.
build/arctic-qemu live boot the ISO build/arctic-qemu live-uefi through OVMF build/arctic-qemu install with a blank disk attached build/arctic-qemu boot boot what you installed build/arctic-qemu wipe start over
glibc cannot be compiled by clang — upstream requires GCC — so the host's GCC is used as a stage-0 tool for glibc alone. Nothing it produces beyond glibc is packaged.
One thing worth knowing if you write recipes: alpm-build
exports pkgdir but deliberately not srcdir.
srcdir is autoconf's own variable name, and exporting it put
a path autoconf never chose into every configure script — which broke any
package whose configure re-execs a nested one, silently and with no error
at all.
Pull requests are welcome and are read before merging. Package changes
go through ports/manifest.tsv in
arctic-linux-ports,
not the main repository — recipes are generated from the manifest.
There is no logo yet. If you want to make one:
CONTRIBUTING.md says what is wanted.
More: arctic linux docs · install · declarative configuration · generations and rollback · init systems · kernels · packages (alpm) · desktops and audio · ephemeral shells · musl