be.murderu.us/linux

a.out

ACPI

logind (as part of SystemD), elogind, acpid, and many desktop environments can manage ACPI events automatically, and sometimes this is configured by default as part of a Linux software distribution.

acpid(8)

acpid(8) is a daemon that can automatically manage ACPI events on Linux.

Alpine

Alpine Linux is a small Linux #distribution based on musl libc. Its main purpose is to serve as a server distribution, however many have found use for it as a desktop distribution.

apk(8)

Adding software

apk-add(8)

Repositories

See apk-repositories(5).

Most Internet repositories use the URL scheme of https://[server]/alpine/[release branch]/[repository branch]. For example, the main repository branch on the edge release branch on the server dl-cdn.alpinelinux.org is http://dl-cdn.alpinelinux.org/alpine/edge/main. A repositories file could look like the following:

http://dl-cdn.alpinelinux.org/alpine/edge/main
http://dl-cdn.alpinelinux.org/alpine/edge/community
http://dl-cdn.alpinelinux.org/alpine/edge/testing

Local directories like /media/cdrom/apks, an example from the Alpine Wiki, are valid as well.

WARNING: Ignoring [path]: UNTRUSTED signature

If you are absolutely sure what you're doing is fine, apk [command] --allow-untrusted. This ignores the error and allows the operation to proceed.

Always install manual pages

Alpine doesn't include man pages in program packages to save on space, instead keeping them in [package]-doc sibling packages. To always install doc packages with program packages, apk add docs.

Bootstrapping

See #bootstrapping. The Alpine setup scripts also exist to aid in the bootstrap process.

To bootstrap apk(8) do the following:

  1. Copy apk-keys(5) to the analogous location on the mounted volume.
  2. Fill out apk-repositories(5) on the mount.
  3. Use apk-add(8) to initialize the package database on the mount (apk --root [mount] add --initdb alpine-base).

Copy resolv.conf(5) over (and bind /dev/, /proc/, and /sys/) before /unix/#posix#chroot(1)ing.

In the chroot, make sure to install a kernel, which will put #initramfs creation in the apk(8) build hooks and rebuild the initramfs whenever the kernel is upgraded.

Setup scripts

setup-alpine is jank.

(Eunakria on the Alpine Linux Discord server)

setup-hostname validates a hostname(5) before writing to the mounted volume.

setup-xorg-base adds the packages xorg-server, xf86-input-libinput, eudev, and mesa, and then enables the #initialization services for udev.

postmarketOS

postmarketOS is an Alpine-based Linux software distribution that makes configuring and using Linux easy on mobile devices.

Random MAC address generation on Wifi

By default, postmarketOS will generate a random software MAC address when connecting to a new WLAN network. You can disable this by adding a NetworkManager rule. In /etc/NetworkManager/conf.d/ you can make a file with any name that has the following:

[device]
wifi.scan-rand-mac-address=no

On a live system you can then rc-service networkmanager restart to restart NetworkManager and have it load the new configuration.

Arch

Arch is a Linux software distribution that uses the pacman(8) package manager. Arch performs little in the way of modification of upstream versions of packages and offers only the latest (or last noticed) revisions of programs in its repositories, which has given it a reputation for instability compared to other Linux software distributions that bug-test programs before offering them to users in standard release channels (for example, #debian).

AUR

You will need base-devel.

Bootstrapping

See #bootstrapping. Use pacstrap(8) on Arch and basestrap(8) on Artix.

Arch's base package is base. Additionally, a kernel such as linux or linux-lts will be necessary. The Arch wiki says linux-firmware is necessary; it's not on many hardware configurations but it's recommended. On Artix you also need to select the #initialization system: 66, dinit, openrc, runit, or s6-base. The Artix wiki says the initialization-specific #login#logind package is necessary; it's not but it's recommended.

On the bootstrapped system, after chrooting in, uncomment a local mirror in /etc/pacman.d/mirrorlist-arch. Then configure /etc/pacman.conf to use that mirror list.

#
# ARCHLINUX
#

#[testing]
#Include = /etc/pacman.d/mirrorlist-arch

[extra]
Include = /etc/pacman.d/mirrorlist-arch

#[community-testing]
#Include = /etc/pacman.d/mirrorlist-arch

[community]
Include = /etc/pacman.d/mirrorlist-arch

#[multilib-testing]
#Include = /etc/pacman.d/mirrorlist-arch

#[multilib]
#Include = /etc/pacman.d/mirrorlist-arch
(Config block conveyed to Leyla by an Arch package maintainer, shared to the Tebibyte Media Discord server 2021-06-04T1746+0500)

Artix

Artix is a Linux software distribution based on Arch that doesn't mandate SystemD as its initialization system.

makepkg(8)

makepkg(8) is a bash(1) script provided by pacman that provides an interface through which to manage PKGBUILD(5)s.

Audio

Most audio servers recommend that they be run in userspace with user privileges, with PulseAudio going so far as to exiting when run as root without additional configuration. The Alpine wiki currently recommends pipewire(1), with postmarketOS, which is based on Alpine, coming pre-configured with PipeWire. PipeWire is relatively new and the typical audio server used is PulseAudio; #debian and many popular Debian-based distributions come pre-configured with PulseAudio.

ALSA

The Alpine wiki ("Adding sound") says to install alsa-conf, alsa-lib, and alsa-utils, add yourself to the audio group, and then do some more configuration that I've never needed to do: Use alsamixer(1) to find a working sound card (press F6 from the first screen ALSAMixer presents) and edit /usr/share/alsa/alsa.conf and change defaults.ctl.card and defaults.pcm.card to the sound card that works.

The Alpine wiki doesn't mention this but you'll need to enable the alsa OpenRC service and either start it or reboot. I also installed gstreamer but I don't know why.

ALSA is clunky, many people prefer to use a frontend such as Pipewire or PulseAudio that exposes its own interface while remaining compatible with ALSA.

OSS

Deprecated, unfortunately.

PipeWire

Provided by the pipewire package on Alpine.

RTKit error: org.freedesktop.DBus.Error.ServiceUnknown

This means you need rtkit installed and running through your initialization system.

PulseAudio

On Alpine you'll need the pulseaudio, pulseaudio-alsa, and alsa-plugins-pulse packages for PulseAudio with ALSA compatibility. Start pulseaudio(1) when you want audio, ideally in your .xinitrc.

Bootstrapping

Usually the first program a computer will run is the /unix/#bootloader, which loads the kernel and usually the #initramfs which will handle mounting the system storage. Then the #initialization system is started, which handles daemons, some of which will handle login.

Bootstrapping Linux involves booting an operating system, usually off a temporary storage medium, mounting the intended system storage, and installing the operating system on the intended storage. Sometimes distributions come with software that mostly automates this.

bootstrapping things is only useful for rare cases where you actually dont want to use the base packages that the installer gets for you automatically, and the installer doesnt get in your way of making your own system, instead it suggests you install certain packages, and asks what packages you want installed. If youre installing a desktop environment, it will probably ask you which meta package you want (or at least thats how I remember it working).

If you have an installer to do the same things with less steps for you, you should use it. Automation is progress, automation is the whole point of all this computer stuff. If you can automate it or make it easier, you probably should, unless you want some control over the process. For example, instead of checking the charge and running a command to put your laptop into battery saver mode, you make a program do it for you. Convenience is key to happy and painless computing

(veronika on the Alpine Linux Discord server, 2022-12-04T1111+0400)

If running very thin installation media, for example, a #debian network install CD, or just need the most up-to-date software possible, the first step will be to connect to the Internet.

Next, if your chosen Linux distribution has a package manager, configure it, use it to initialize the file system on the intended system storage, and install the necessary system packages to the storage. Usually distributions have a single base package, like #arch's base or #alpine's alpine-base. If it doesn't include any of them, install separately a kernel, initialization system, and userland.

Bind mount (mount -o bind) /dev/, /proc/, and /sys/ to the corresponding locations on the volume to bootstrap (for d in dev proc sys; do mount -o bind /$d /[mount]/$d; done), then /unix/#posix#chroot(1) in and complete the system setup. Set up additional configuration necessary to boot (including /unix/#fstab(5), hostname(5), hosts(5), and anything necessary for the kernel or initialization).

Debian

Debian is a software #distribution that can use Linux or the GNU HURD as its kernel. In the past, FreeBSD's kernel was also an option. Debian is known for its stability and longevity. Debian uses SystemD as its initialization system, the GNU core utilities, and dpkg and apt for package management.

The vast majority of support and attention is on the Debian GNU+Linux configuration.

Ubuntu

Ubuntu is a derivative of Debian Linux.

Devices

Distribution

Linux is usually obtained as part of a software distribution put together to form a useable operating system.

#alpine

#arch

#debian

hostname

The special file /proc/sys/kernel/hostname directly controls the system hostname in the kernel.

Initialization

OpenRC

Runit

S6

Systemd

initramfs

initramfs is a /unix/#archives#cpio archive that contains a small Linux filesystem with just enough utility to mount the actual operating system's root filesystem.

util-linux

util-linux is distributed on all popular Linux distributions and contains utilities users may expect to be already present on their systems, like more(1) or hexdump(1).