1
0

reorganization and some expansion

This commit is contained in:
dtb 2022-08-29 15:28:42 -04:00
parent 486050a94e
commit 3930a750cd

View File

@ -33,58 +33,164 @@ Caution can accompany admiration.
Ultimately, the humans were the ones that produced the computers, and computers amplify human flaws as well as human feats.
Try to be kind to everyone but don't take anything too seriously.
</P>
<P>
This guide encompasses usage of IBM-compatible, amd64 processor architecture computers, particularly with POSIX and other UNIX-like operating systems like Linux and DragonflyBSD.
Non-standard, proprietary operating systems such as Microsoft Windows or OS/2 are out of scope.
</P>
<H2>UNIX</H2>
<UL>
<LI><A HREF="https://en.wikipedia.org/wiki/Unix">Unix</A> (Wikipedia)</LI>
<LI><A HREF="https://github.com/dspinellis/unix-history-repo">unix-history-repo</A> (GitHub)</LI>
</UL>
<H2>ACPI client</H2>
<H2>Advanced Configuration and Power Interface</H2>
<UL>
<LI><A HREF="https://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface">Advanced Configuration and Power Interface</A> (Wikipedia)</LI>
</UL>
<P>
An ACPI client is a program that displays computer ACPI information, typically power and thermal statuses.
The usual text program used is <CODE>acpi(1)</CODE>.
The Advanced Configuration and Power Interface, or ACPI, is the interface through which the operating system and client programs can control features in your computer's firmware.
Usually this is used with an ACPI client or opaquely controlled by the operating environment.
</P>
<P>
On Linux, <CODE>acpi(1)</CODE> can be used to read and control ACPI events manually.
<CODE><A HREF="https://sourceforge.net/projects/acpid2/">acpid</A>(8)</CODE>, <CODE><A HREF="#logind">elogind</A>(8)</CODE>,
SystemD, and many desktop environments can control the ACPI automatically.
</P>
<P>
On NetBSD, see <CODE>acpi(4)</CODE>.
</P>
<H2>Alpine</H2>
<H2>C Language</H2>
<P>
For compilation, <CODE>tcc(1)</CODE>, <CODE>gcc(1)</CODE>, and <CODE>clang(1)</CODE> are all reasonable choices depending on your needs.
</P>
<P>
On Alpine Linux, the standard library headers are in the <CODE>musl-dev</CODE> package.
</P>
<P>
In most system package managers, standard library documentation can be found in the <CODE>man-pages</CODE> and <CODE>man-pages-posix</CODE> packages.
</P>
<P>
Many Linux software distributions' system package managers have meta-packages that pull all necessities for C development as dependencies.
Alpine has <CODE>build-base</CODE> and Debian has <CODE>build-essential</CODE>.
</P>
<H2>echo(1)</H2>
<UL>
<LI><A HREF="https://www.in-ulm.de/~mascheck/various/echo+printf/">Variations in echo implementations</A></LI>
</UL>
<P>
Don't use <CODE>echo(1)</CODE>, use <CODE>printf(1)</CODE>.
<CODE>printf(1)</CODE> simulates the <CODE>printf(3)</CODE> function in the C standard I/O library which has no significant variations, whereas the functionality of <CODE>echo(1)</CODE> can vary between vendors.
The following <CODE>sh(1)</CODE> program provides <CODE>echo(1)</CODE> through <CODE>printf(1)</CODE>:
</P>
<PRE>
#!/bin/sh
printf "%s" "$*"
</PRE>
<H2 ID="find">find(1)</H2>
<UL>
<LI><A HREF="https://en.wikipedia.org/wiki/Find_(Unix)">find</A> (Wikipedia</LI>
</UL>
<H2 ID="fonts">Fonts</H2>
<H2 ID="fstab">fstab</H2>
<P>See <CODE>fstab(5).</CODE></P>
<P>postmarketOS requires that the <CODE>localmount</CODE> OpenRC service be enabled for the system to read <CODE>fstab(5)</CODE>.
<P>Arch and Artix have fstab generators at <CODE>genfstab(8)</CODE> and <CODE>fstabgen(8)</CODE> respectively in their installation scripts.</P>
<H2>Linux</H2>
<UL>
<LI><A HREF="http://tldp.yolinux.com/HOWTO/subdir/HOWTO-INDEX.html">How to Linux</A></LI>
<LI><A HREF="https://christine.website/blog/howto-usermode-linux-2019-07-07">How to Use User Mode Linux</A></LI>
<LI><A HREF="https://www.cs.cmu.edu/~awb/linux.history.html">LINUX's History</A></LI>
<LI><A HREF="https://www.kernel.org/doc/html/v4.17/index.html">The Linux Kernel documentation</A></LI>
<LI><A HREF="https://groups.google.com/g/comp.os.minix/c/wlhw16QWltI">LINUX is obsolete</A></LI>
<LI><A HREF="http://www.linuxfromscratch.org/">Linux From Scratch</A></LI>
<LI><A HREF="https://www.redhat.com/sysadmin/bios-uefi">Move your Linux from BIOS to UEFI in place</A></LI>
<LI><A HREF="https://www.collabora.com/news-and-blog/blog/2020/08/27/using-the-linux-kernel-case-insensitive-feature-in-ext4/">Using the Linux kernel's Case-insensitive feature in Ext4</A></LI>
</UL>
<H3>Audio</H3>
<P>
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 <CODE>pipewire(1)</CODE>, 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.
</P>
<H4>ALSA</H4>
<UL>
<LI><A HREF="https://wiki.alpinelinux.org/wiki/Main_Page/Adding_sound">Adding sound</A> (Alpine Linux Wiki)</LI>
<LI><A HREF="https://bbs.archlinux.org/viewtopic.php?id=256857">ALSA lib conf Evaluate error</A></LI>
<LI><A HREF="https://dev.to/setevoy/linux-alsa-lib-pcmdmixc1108sndpcmdmixopen-unable-to-open-slave-38on">ALSA lib pcm_dmix.c:1108:(snd_pcm_dmix_open) unable to open slave</A></LI>
</UL>
<P>
The Alpine wiki ("Adding sound") says to install <CODE>alsa-conf</CODE>, <CODE>alsa-lib</CODE>, and <CODE>alsa-utils</CODE>,
add yourself to the <CODE>audio</CODE> group, and then do some more configuration that I've never needed to do:
Use <CODE>alsamixer(1)</CODE> to find a working sound card (press <CODE>F6</CODE> from the first screen ALSAMixer presents)
and edit <CODE>/usr/share/alsa/alsa.conf</CODE> and change <CODE>defaults.ctl.card</CODE> and <CODE>defaults.pcm.card</CODE> to the sound card that works.
</P>
<P>
The Alpine wiki doesn't mention this but you'll need to enable the <CODE>alsa</CODE> OpenRC service and either start it or reboot.
I also installed <CODE>gstreamer</CODE> but I don't know why.
</P>
<P>
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.
</P>
<H4>OSS</H4>
<P>
Deprecated, unfortunately.
</P>
<H4>PipeWire</H4>
<UL>
<LI><A HREF="https://wiki.alpinelinux.org/wiki/PipeWire">PipeWire</A> (Alpine Linux Wiki)</LI>
<LI><A HREF="https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home">PipeWire</A> (FreeDesktop Wiki)</LI>
</UL>
<P>
Provided by the <CODE>pipewire</CODE> package on Alpine.
</P>
<PRE>
RTKit error: org.freedesktop.DBus.Error.ServiceUnknown
</PRE>
<P>
This means you need <CODE>rtkit</CODE> installed and running through your initialization system.
</P>
<H4>PulseAudio</H4>
<P>
On Alpine you'll need the <CODE>pulseaudio</CODE>, <CODE>pulseaudio-alsa</CODE>, and <CODE>alsa-plugins-pulse</CODE> packages for PulseAudio with ALSA compatibility.
Start <CODE>pulseaudio(1)</CODE> when you want audio, ideally in your <CODE>.xinitrc</CODE>.
</P>
<H3>Distribution</H3>
<P>
Linux is usually obtained as part of a software distribution put together to form a useable operating system.
</P>
<H4>Alpine</H4>
<UL>
<LI><A HREF="https://pkgs.alpinelinux.org/contents">Alpine repositories content search</A></LI>
</UL>
<H3>Always install manual pages</H3>
<H5>Always install manual pages</H5>
<P>
Alpine doesn't include man pages in program packages to save on space, instead keeping them in <CODE>[<I>package</I>]-doc</CODE> sibling packages.
To always install doc packages with program packages, <CODE>apk add docs</CODE>.
</P>
<H3>postmarketOS</H3>
<P>
postmarketOS is an Alpine-based Linux software distribution that makes configuring and using Linux easy on mobile devices.
</P>
<H4>Random MAC address generation on Wifi</H4>
<P>
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 <CODE>/etc/NetworkManager/conf.d/</CODE> you can make a file with any name that has the following:
</P>
<PRE><CODE>
[device]
wifi.scan-rand-mac-address=no
</CODE></PRE>
<P>
On a live system you can then <CODE>rc-service networkmanager restart</CODE> to restart NetworkManager and have it load the new configuration.
</P>
<H2>Arch and Artix</H2>
<H3>Bootstrapping: Installing essential packages</H3>
<H4>Arch</H4>
<P>
On Artix, use <CODE>basestrap(8)</CODE>.
On Arch, use <CODE>pacstrap(8)</CODE>.
Arch is known for using the latest versions of programs, which has given it an undeserved reputation of instability.
</P>
<H5>Bootstrapping</H5>
<P>
Use <CODE>pacstrap(8)</CODE>.
</P>
<P>
At a minimum you need <CODE>base</CODE> on both Arch and Artix.
On Artix, you need to select the initialization you want to use: <CODE>66</CODE>, <CODE>dinit</CODE>, <CODE>openrc</CODE>, <CODE>runit</CODE>, or <CODE>s6-base</CODE>.
On both Arch and Artix, select a kernel; <CODE>linux</CODE>, <CODE>linux-lts</CODE>, or another Linux configuration or fork.
Arch says you need to install <CODE>linux-firmware</CODE>, technically you don't need to do so but you should.
Artix says you need to install the appropriate elogind package (<CODE>elogind-$(<B>INIT_SYSTEM</B>)</CODE>; e.g. <CODE>elogind-66</CODE>).
This isn't necessary if you aren't using elogind, but you <I>most likely</I> want elogind.
At a minimum you need the <CODE>base</CODE> package.
Select a kernel and install the corresponding package; <CODE>linux</CODE>, <CODE>linux-lts</CODE>, or another Linux configuration or fork.
The Arch wiki says you need to install <CODE>linux-firmware</CODE>, this isn't strictly necessary but it is recommended.
Install <CODE>base-devel</CODE> if you plan on using the AUR or if you don't know what the AUR is yet.
</P>
<P>
@ -92,7 +198,7 @@ It's also a good idea to install any utilities you'll need on the bootstrapped s
Text editors, network managers or utilities, and other administration tools, for example.
Manual utilities such as <CODE>man-db</CODE> and others would also be useful.
</P>
<H3>Ubiquitous packages missing</H3>
<H5>Ubiquitous packages missing</H5>
<P>From the anals of my notes, 2021-06-04:</P>
<PRE>
Had an issue with pacman missing some ubiquitous packages (esr's `ascii`, xorg-xev, etc).
@ -127,72 +233,81 @@ Include = /etc/pacman.d/mirrorlist-arch
#Include = /etc/pacman.d/mirrorlist-arch
```
</PRE>
<H2>C Language</H2>
<H4>Artix</H4>
<UL>
<LI><A HREF="https://artixlinux.org/">Artix Linux</A></LI>
<LI><A HREF="https://en.wikipedia.org/wiki/Artix_Linux">Artix Linux</A> (Wikipedia)</LI>
</UL>
<P>
For compilation, <CODE>tcc(1)</CODE>, <CODE>gcc(1)</CODE>, and <CODE>clang(1)</CODE> are all reasonable choices depending on your needs.
Artix refers to the series of Arch derivatives which use initialization systems other than SystemD's.
</P>
<H5>Bootstrapping</H5>
<P>
On Alpine Linux, the standard library headers are in the <CODE>musl-dev</CODE> package.
</P>
<P>
In most system package managers, standard library documentation can be found in the <CODE>man-pages</CODE> and <CODE>man-pages-posix</CODE> packages.
</P>
<P>
Many Linux software distributions' system package managers have meta-packages that pull all necessities for C development as dependencies.
Alpine has <CODE>build-base</CODE> and Debian has <CODE>build-essential</CODE>.
This process differs from Arch's bootstrapping process.
Artix uses <CODE>basestrap(8)</CODE> rather than <CODE>pacstrap(8)</CODE>;
you need to select the initialization you want to use: <CODE>66</CODE>, <CODE>dinit</CODE>, <CODE>openrc</CODE>, <CODE>runit</CODE>, or <CODE>s6-base</CODE>, as a package separate from <CODE>base</CODE>;
and Artix's official wiki says you need to install the appropriate <A HREF="#logind"><CODE>elogind</CODE></A> package (<CODE>elogind-[<I>initialization system</I>]</CODE> e.g. <CODE>elogind-66</CODE>) but like <CODE>linux-firmware</CODE> though it is helpful it isn't strictly necessary.
</P>
<H2>Debian</H2>
<H4>Debian</H4>
<UL>
<LI><A HREF="https://www.debian.org/">Debian</A></LI>
<LI><A HREF="https://en.wikipedia.org/wiki/Debian">Debian</A> (Wikipedia)</LI>
</UL>
<P>
Debian is a Linux software distribution known for its stability and longevity.
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.
</P>
<H3>Ubuntu</H3>
<P>
While it's possible to use non-Linux kernels within Debian, it's uncommon and the only non-Linux option currently maintained is the GNU HURD microkernel.
</P>
<P>
<A HREF="#pkgsrc">pkgsrc</A> can be used on Debian.
</P>
<H4>postmarketOS</H4>
<P>
postmarketOS is an Alpine-based Linux software distribution that makes configuring and using Linux easy on mobile devices.
</P>
<H5>Random MAC address generation on Wifi</H5>
<P>
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 <CODE>/etc/NetworkManager/conf.d/</CODE> you can make a file with any name that has the following:
</P>
<PRE><CODE>
[device]
wifi.scan-rand-mac-address=no
</CODE></PRE>
<P>
On a live system you can then <CODE>rc-service networkmanager restart</CODE> to restart NetworkManager and have it load the new configuration.
</P>
<H4>Ubuntu</H4>
<UL>
<LI><A HREF="https://securitylab.github.com/research/Ubuntu-gdm3-accountsservice-LPE/">How to get root on Ubuntu 20.04 by pretending nobody's /home</A></LI>
</UL>
<P>
Ubuntu is a derivative of Debian.
</P>
<H2>echo(1)</H2>
<H3 ID="logind">logind</H3>
<UL>
<LI><A HREF="https://www.in-ulm.de/~mascheck/various/echo+printf/">Variations in echo implementations</A></LI>
<LI><A HREF="https://github.com/elogind/elogind">elogind</A></LI>
<LI><A HREF="https://wiki.gentoo.org/wiki/Elogind">elogind</A> (Gentoo Wiki)</LI>
<LI><A HREF="https://www.freedesktop.org/software/systemd/man/org.freedesktop.login1.html">org.freedesktop.login1</A></LI>
<LI><A HREF="https://nixos.wiki/wiki/Logind">logind</A> (NixOS Wiki)</LI>
</UL>
<P>
Don't use <CODE>echo(1)</CODE>, use <CODE>printf(1)</CODE>.
<CODE>printf(1)</CODE> simulates the <CODE>printf(3)</CODE> function in the C standard I/O library which has no significant variations, whereas the functionality of <CODE>echo(1)</CODE> can vary between vendors.
The following <CODE>sh(1)</CODE> program provides <CODE>echo(1)</CODE> through <CODE>printf(1)</CODE>:
logind (<CODE>systemd-logind.service(8)</CODE>) is a component of SystemD that exposes information about active users on the system via the org.freedesktop.login1 D-Bus interface which is used by the popular desktop environments GNOME and KDE.
It also handles <A HREF="#acpi">ACPI</A> events.
It can be configured in <CODE>logind.conf(5)</CODE>.
</P>
<P>
On systems without SystemD and with conflicting software, <CODE>elogind(8)</CODE> may be used.
</P>
<PRE>
#!/bin/sh
printf "%s" "$*"
</PRE>
<H2 ID="fonts">Fonts</H2>
<H2 ID="fstab">fstab</H2>
<P>See <CODE>fstab(5).</CODE></P>
<P>postmarketOS requires that the <CODE>localmount</CODE> OpenRC service be enabled for the system to read <CODE>fstab(5)</CODE>.
<P>Arch and Artix have fstab generators at <CODE>genfstab(8)</CODE> and <CODE>fstabgen(8)</CODE> respectively in their installation scripts.</P>
<H2>Linux</H2>
<UL>
<LI><A HREF="http://tldp.yolinux.com/HOWTO/subdir/HOWTO-INDEX.html">How to Linux</A></LI>
<LI><A HREF="https://christine.website/blog/howto-usermode-linux-2019-07-07">How to Use User Mode Linux</A></LI>
<LI><A HREF="https://www.cs.cmu.edu/~awb/linux.history.html">LINUX's History</A></LI>
<LI><A HREF="https://www.kernel.org/doc/html/v4.17/index.html">The Linux Kernel documentation</A></LI>
<LI><A HREF="https://groups.google.com/g/comp.os.minix/c/wlhw16QWltI">LINUX is obsolete</A></LI>
<LI><A HREF="http://www.linuxfromscratch.org/">Linux From Scratch</A></LI>
<LI><A HREF="https://www.redhat.com/sysadmin/bios-uefi">Move your Linux from BIOS to UEFI in place</A></LI>
<LI><A HREF="https://www.collabora.com/news-and-blog/blog/2020/08/27/using-the-linux-kernel-case-insensitive-feature-in-ext4/">Using the Linux kernel's Case-insensitive feature in Ext4</A></LI>
</UL>
<H3>Culture</H3>
<H4>Pronunciation</H4>
<UL>
<LI><A HREF="https://www.linux.org/threads/common-pronunciations-of-linux-directories-commands-etc.4445/">Common pronunciations of Linux directories, commands, etc</A></LI>
</UL>
<H4>Xenia</H4>
<H3>Xenia</H3>
<UL>
<LI><A HREF="http://yerf.metafur.org/date/1996-07-14">A hacker fox!</A></LI>
</UL>
@ -200,8 +315,6 @@ printf "%s" "$*"
Xenia was an entry for the Linux logo competition which Tux eventually won.
</P>
<H2 ID="login_manager">Login manager</H2>
<P>Use <CODE>elogind</CODE>.</P>
<H2>Make utility</H2>
<P>
@ -308,18 +421,6 @@ Configuration is in <CODE>/etc/conf.d/dmcrypt</CODE> and further configuration s
<LI><A HREF="https://en.wikipedia.org/wiki/TestDisk">TestDisk</A> (Wikipedia)</LI>
</UL>
<H2>PCI Utilities</H2>
<UL>
<LI><A HREF="https://github.com/pciutils/pciutils">pciutils/pciutils</A> (GitHub)</LI>
</UL>
<P>
Available as <CODE>sysutils/pciutils</CODE> from pkgsrc.
Supplies <CODE>lspci(8)</CODE>, <CODE>setpci(8)</CODE>, and <CODE>update-pciids(8)</CODE>.
</P>
<P>
<CODE>update-pciids(8)</CODE> is not part of the <CODE>pciutils</CODE> package in Alpine Linux repositories.
</P>
<H2>NetBSD</H2>
<UL>
<LI><A HREF="http://netbsd.org/">netbsd.org</A></LI>
@ -377,6 +478,22 @@ These leave your system open to man-in-the-middle attacks.
<LI><A HREF="https://www.unitedbsd.com/d/110-upgrading-netbsd-using-sysinst">Upgrading NetBSD using sysinst</A></LI>
</UL>
<H2>PCI Utilities</H2>
<UL>
<LI><A HREF="https://github.com/pciutils/pciutils">pciutils/pciutils</A> (GitHub)</LI>
</UL>
<P>
Available as <CODE>sysutils/pciutils</CODE> from pkgsrc.
Supplies <CODE>lspci(8)</CODE>, <CODE>setpci(8)</CODE>, and <CODE>update-pciids(8)</CODE>.
</P>
<P>
<CODE>update-pciids(8)</CODE> is not part of the <CODE>pciutils</CODE> package in Alpine Linux repositories.
</P>
<P>
NetBSD includes <CODE>pcictl(8)</CODE> which offers similar functionality.
<CODE>pcictl pci0 list</CODE> outputs roughly the same information as <CODE>lspci(8)</CODE>, though <CODE>lspci(8)</CODE> may offer slightly more detailed information.
</P>
<H2 ID="pkgsrc">pkgsrc</H2>
<UL>
<LI><A HREF="http://www.netbsd.org/docs/pkgsrc/"</A>the pkgsrc user's guide</A></LI>
@ -390,9 +507,10 @@ These leave your system open to man-in-the-middle attacks.
See <CODE>pkgtools/pkg_rolling_replace</CODE>.
</P>
<H2 ID="power">Power</H2>
<P>Much of this can be configured in the ACPI settings in your <A HREF="#login_manager">login manager</A>, provided you have one running that can do this.</P>
<P>Check out <CODE>tlp</CODE> for Thinkpads and some other Lenovo devices.</P>
<H2 ID="power">Power settings</H2>
<P>
Power is managed by <A HREF="#acpi">ACPI</A>.
</P>
<H2>SSH keys</H2>
<UL>
@ -408,6 +526,10 @@ Microsoft GitHub documentation suggests a user create a key with <CODE>ssh-keyge
This generates an <A HREF="https://en.wikipedia.org/wiki/EdDSA#Ed25519">Ed25519</A> SSH key with an e-mail address in the key comment.
</P>
<H2>Pronunciation</H2>
<UL>
<LI><A HREF="https://www.linux.org/threads/common-pronunciations-of-linux-directories-commands-etc.4445/">Common pronunciations of Linux directories, commands, etc</A></LI>
</UL>
<H2>Task management</H2>
<P><CODE>top(1)</CODE> comes with busybox, otherwise use <CODE>htop</CODE>.</P>
@ -559,55 +681,6 @@ and xsetroot as <CODE>xorg-xsetroot</CODE>.
</P>
<P>Alpine has xinput as <CODE>xinput</CODE>.</P>
<H3>Audio</H3>
<P>
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 <CODE>pipewire(1)</CODE>, 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.
</P>
<H4>ALSA</H4>
<UL>
<LI><A HREF="https://wiki.alpinelinux.org/wiki/Main_Page/Adding_sound">Adding sound</A> (Alpine Linux Wiki)</LI>
<LI><A HREF="https://bbs.archlinux.org/viewtopic.php?id=256857">ALSA lib conf Evaluate error</A></LI>
<LI><A HREF="https://dev.to/setevoy/linux-alsa-lib-pcmdmixc1108sndpcmdmixopen-unable-to-open-slave-38on">ALSA lib pcm_dmix.c:1108:(snd_pcm_dmix_open) unable to open slave</A></LI>
</UL>
<P>
The Alpine wiki ("Adding sound") says to install <CODE>alsa-conf</CODE>, <CODE>alsa-lib</CODE>, and <CODE>alsa-utils</CODE>,
add yourself to the <CODE>audio</CODE> group, and then do some more configuration that I've never needed to do:
Use <CODE>alsamixer(1)</CODE> to find a working sound card (press <CODE>F6</CODE> from the first screen ALSAMixer presents)
and edit <CODE>/usr/share/alsa/alsa.conf</CODE> and change <CODE>defaults.ctl.card</CODE> and <CODE>defaults.pcm.card</CODE> to the sound card that works.
</P>
<P>
The Alpine wiki doesn't mention this but you'll need to enable the <CODE>alsa</CODE> OpenRC service and either start it or reboot.
I also installed <CODE>gstreamer</CODE> but I don't know why.
</P>
<P>
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.
</P>
<H4>OSS</H4>
<P>
Deprecated, unfortunately.
</P>
<H4>PipeWire</H4>
<UL>
<LI><A HREF="https://wiki.alpinelinux.org/wiki/PipeWire">PipeWire</A> (Alpine Linux Wiki)</LI>
<LI><A HREF="https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home">PipeWire</A> (FreeDesktop Wiki)</LI>
</UL>
<P>
Provided by the <CODE>pipewire</CODE> package on Alpine.
</P>
<PRE>
RTKit error: org.freedesktop.DBus.Error.ServiceUnknown
</PRE>
<P>
This means you need <CODE>rtkit</CODE> installed and running through your initialization system.
</P>
<H4>PulseAudio</H4>
<P>
On Alpine you'll need the <CODE>pulseaudio</CODE>, <CODE>pulseaudio-alsa</CODE>, and <CODE>alsa-plugins-pulse</CODE> packages for PulseAudio with ALSA compatibility.
Start <CODE>pulseaudio(1)</CODE> when you want audio, ideally in your <CODE>.xinitrc</CODE>.
</P>
<H3>Media</H3>
<P>
<CODE>mpv(1)</CODE> and <CODE>vlc(1)</CODE> are good options.