Skip to content

Arctic Linux - A1

Latest

Choose a tag to compare

@apiwo apiwo released this 20 Aug 17:32
· 27 commits to main since this release

No ISO, no guided installer. Boot any live Linux, partition and format by hand, extract a base tarball, chroot in and alpm add the rest. See the install guide or the deeper walkthrough.

Two tarballs: arctic-linux-def-tarball.tar.xz (busybox init) and arctic-linux-openrc-tarball.tar.xz (OpenRC wired up as init instead) - both boot-tested end to end in QEMU, both reach a working default runlevel. Both ship alpm pre-installed.

What changed

  • Config is six small files under /etc/arctic/ instead of one install.conf and one system.conf: pkgs.conf (a mirror alpm keeps in step with add/rem, never a reconcile target), network.conf, users.conf, services.conf, hardware.conf, identity.conf.
  • Networking is one stack, live and installed alike: wpa_supplicant + udhcpc via wifi-connect, no NetworkManager anywhere. A successful connect is saved to network.conf; rc.d/wifi reconnects at every boot in the background, never blocking login.
  • busybox ships setuid-root with /etc/busybox.conf, fixing non-root ping - granted to root and wheel only, with mount/findfs/traceroute explicitly denied rather than left unlisted.
  • New: alpm-strap, genfstab, a real GRUB port, sound-setup/sound-setup-openrc, libcap.
  • arctic-rebuild auto-detects which bootloader is installed (limine/grub) when hardware.conf doesn't declare one - it always shipped empty, so the bootloader-config step was silently a no-op before this.

Fixed while verifying the new install path end to end

  • Every install hit a kernel panic on first boot - Failed to execute /init (error -2), indistinguishable from /init being missing. arctic-mkinitramfs never created the /lib64 -> usr/lib symlink that busybox's own dynamic linker path needs, so busybox itself couldn't load. Found boot-testing the OpenRC flavor end to end in QEMU; confirmed against a real install too. If you installed from an earlier build of this release, regenerate your initramfs (alpm update, then arctic-mkinitramfs from a chroot or the running system) or reinstall.
  • OpenRC's sysctl service called sysctl --system, a GNU procps-ng extension busybox's sysctl doesn't have, and failed on every boot - rewritten around busybox's own -p FILE support.
  • OpenRC's keymaps/save-keymaps services need kbd_mode/loadkeys/dumpkeys, which come from a kbd package Arctic doesn't build - dropped from the default boot runlevel rather than failing every boot. Arctic already applies the configured keymap its own way (arctic-rebuild + busybox's loadkmap).
  • alpm couldn't find its own libalpm.sh when run by absolute path from a non-Arctic host (alpm-strap's exact use case).
  • alpm-repo's index generator had no dedup - two releases of the same package in one directory resolved to whichever sorted first alphabetically, not the newer one.
  • The base tarball was missing merged-/usr symlinks, /etc/passwd+group+shadow+nsswitch.conf, /tmp, /home, and the awk/xz/bsdtar packages alpm needs to run at all outside a chroot's PATH.
  • rc.boot's fsck step handed fstab's UUID= entries straight to fsck.fat, which - unlike e2fsck - doesn't resolve UUID= itself, so it failed on every boot with a separate FAT /boot partition; and a fsck exit of 1 (errors corrected, the normal outcome of an unclean shutdown) was being treated as a hard failure requiring a repair shell instead of the successful outcome it actually is.
  • toybox now builds with tr, stty, expr, diff, more enabled.
  • util-linux and util-linux-libs shipped overlapping libmount/libblkid/libuuid, so anything depending on the latter (e2fsprogs, openrc, genfstab's own util-linux dependency) hit a hard file conflict. util-linux now declares replaces="util-linux-libs".
  • alpm add's download progress bar only ever showed a start frame and 100% - it polled once a second, and most packages finish inside that window. Polls every 0.2s now.
  • Source builds (alpm add -s) run under set -x, so the actual build commands are visible instead of just phase names.
  • A source build needing a build tool that was itself part of the same transaction (e.g. alpm add base-devel) failed with a spurious "missing" error - source builds ran before the transaction's own binary installs finished.

Known gaps

  • BIOS + GRUB deploy is broken: grub-install --target=i386-pc refuses to write boot sectors because ld.lld miscompiles GRUB's freestanding real-mode kernel.img. BIOS installs should use Limine (needs a small unformatted BIOS-boot partition ahead of a FAT32 /boot); EFI installs are unaffected either way.
  • LXQt is not packaged.

sha256 checksums are attached alongside each tarball.