Skip to content

Arctic Linux - Alpha 2 (not fully tested)

Choose a tag to compare

@apiwo apiwo released this 16 Aug 22:55
· 59 commits to main since this release

Arctic Linux Alpha 2Arctic-linux-a2.iso, x86_64, 695 MiB.

Not fully tested. The live image is verified — it boots, the greeting,
console and regulatory database were checked on a running machine. The
install-to-disk path carries fixes that are reasoned and code-verified but
whose end-to-end run was not completed before release, and the wireless
fix could not be exercised in a virtual machine because there is no wireless
hardware in one. Treat this as a test image. Keep a copy of anything that
matters on the disk you point it at.

Alpha 1 ran from a1 to a1.24. This is the start of the second line, and it is
mostly two things that had never worked at all.

Wireless could never have associated

wifi-connect wrote its wpa_supplicant configuration by piping the passphrase
into wpa_passphrase, to keep it out of a command line every process can read.

wpa_passphrase turns terminal echo off before reading, so it calls
tcgetattr on its stdin. On a pipe that fails with ENOTTY and it exits 1
having written nothing:

$ printf 'testpass123\n' | wpa_passphrase TestNet
exit=1   stdout: (empty)
stderr: tcgetattr: Inappropriate ioctl for device

Its stderr went to /dev/null and its exit status was never checked, so what
landed on disk was a configuration file with no network= block in it.
wpa_supplicant started perfectly, associated with nothing, and thirty seconds
later blamed the passphrase. The passphrase was never wrong.

The block is written directly now — wpa_supplicant derives the key from a
quoted passphrase itself, and wpa_passphrase's own output carries the
plaintext in a #psk= comment beside the hash anyway, so the indirection was
protecting nothing. 0600 either way, and it refuses to continue if no network
block landed.

Three more, all on the same path:

  • Nothing wrote a ctrl_interface, so wpa_supplicant opened no control
    socket, every wpa_cli call failed silently — including the association
    check in the wait loop — and the error message told you to run
    wpa_cli -i wlan0 status, which could only answer Could not connect to wpa_supplicant. It prints the real wpa_state and the supplicant log now.
  • The installer dropped the key it was carrying across. It read the psk
    with grep -v '^"', deliberately skipping a quoted passphrase, which would
    have written an open-network profile for a WPA network. Both forms accepted.
  • No regulatory database on the image, so the kernel stayed in world
    domain 00 where most 5 GHz channels are receive-only: the access point
    shows in a scan and the card is forbidden to transmit to it.
    wireless-regdb is 17 KiB and ships now; WIFI_COUNTRY=US wifi-connect
    sets a domain.

No installed system could boot

The installer wrote root=PARTUUID= on the kernel command line and into
fstab. Arctic always boots through an initramfs, and the initramfs resolves
root= with busybox findfs, which implements LABEL= and UUID= and
nothing else:

# findfs UUID=f1832033-6264-4f35-8f81-43170e93a396
/dev/vda3
# findfs PARTUUID=9813faed-6c1b-4e86-808b-61e6498d25db
Usage: findfs LABEL=label | UUID=uuid

Every install finished, reported success, and then stopped at no device matches PARTUUID=... in the initramfs shell with the disk sitting right
there. busybox blkid does not report PARTUUID either, so nothing on the
machine could have resolved it. /boot in fstab had the same problem.

Both are UUID= now, falling back to PARTUUID= then the device path;
arctic-boot-strap re-derives rather than copying a PARTUUID out of an older
fstab; and the initramfs falls back to LABEL=arctic-root, which every
filesystem the installer makes carries, so a machine installed by an older
version comes up too.

The firewall had no package

A_FIREWALL=y is the default and nftables had no binary in any repository, so
the installer compiled it inside the target and failed with "C compiler cannot
create executables" — and reported success anyway. It would not build on the
host either: configure probes for readline inside -ledit, which Arctic's
libedit does not provide. Built --with-cli=no, which drops nft -i and
nothing else, and packaged with libnftnl.

The boot and the console

  • The whole boot was right-aligned against column 80 of a 240-column
    console.
    The width was measured when rc.lib was sourced — the first
    thing rc.boot does, before /dev is mounted — so every boot took the
    80-column fallback. Measured at first use and cached now.
  • Every service reported t=0.0s: one decimal place, and almost
    everything starts in under a tenth of a second.
  • A failure before /run/arctic existed printed a shell error on top of
    itself
    — a redirection that cannot be opened is reported by the shell
    before 2>/dev/null is in effect.
  • The live session says how to install it instead of running
    arcticfetch. Three steps, the alpm commands, where the configuration
    lives, and arctic-chroot for repair. arcticfetch is still there to run,
    and no longer reports sh for a session running zsh.

Known

  • No web browser: firefox, librewolf, chromium and qutebrowser all need Rust.
  • No audio — wireplumber will not build against the packaged lua.
  • No terminfo database, so tput does not work.
  • Declared dependencies are still not checked against real linkage; dwm
    installs and then fails on libharfbuzz.so.0.
  • gtk3 in the repository is corrupt (no .PKGINFO) and cannot be installed.
  • LXDE and LXQt have recipes but no packages.

Install

dd if=Arctic-linux-a2.iso of=/dev/sdX bs=4M status=progress conv=fsync

Run wifi-connect if you need wireless, edit /etc/arctic/install.conf, run
arctic-install.

sha256  b4972b233eda64f30717d8271f2787b752f3315a326d40f2836f6e56491fdf2b