summaryrefslogtreecommitdiff
path: root/guides/sysadmin/machines
diff options
context:
space:
mode:
Diffstat (limited to 'guides/sysadmin/machines')
-rw-r--r--guides/sysadmin/machines/README.org2
-rw-r--r--guides/sysadmin/machines/hirondell/install.org231
-rw-r--r--guides/sysadmin/machines/hirondell/maintenance.org294
-rw-r--r--guides/sysadmin/machines/little-buster/README.org8
-rw-r--r--guides/sysadmin/machines/little-buster/fonts.md49
-rw-r--r--guides/sysadmin/machines/little-buster/install.org132
-rw-r--r--guides/sysadmin/machines/little-buster/maintenance.org58
-rw-r--r--guides/sysadmin/machines/little-buster/package-management.md42
-rw-r--r--guides/sysadmin/machines/my-little-tumbleweed/README.org2
-rw-r--r--guides/sysadmin/machines/my-little-tumbleweed/maintenance.org153
-rw-r--r--guides/sysadmin/machines/my-little-tumbleweed/notifications.org52
11 files changed, 1023 insertions, 0 deletions
diff --git a/guides/sysadmin/machines/README.org b/guides/sysadmin/machines/README.org
new file mode 100644
index 0000000..9e35cac
--- /dev/null
+++ b/guides/sysadmin/machines/README.org
@@ -0,0 +1,2 @@
+Notes that are specific to a particular machine… or at least, started
+that way.
diff --git a/guides/sysadmin/machines/hirondell/install.org b/guides/sysadmin/machines/hirondell/install.org
new file mode 100644
index 0000000..20a749b
--- /dev/null
+++ b/guides/sysadmin/machines/hirondell/install.org
@@ -0,0 +1,231 @@
+* Step-by-step recap (Bullseye)
+** Setup keyboard
+Turn CapsLock key into Control (cf. keyboard(5)):
+- add =ctrl:nocaps= to =XKBOPTIONS= in =/etc/default/keyboard=
+- run =udevadm trigger --subsystem-match=input --action=change=
+- run =setupcon= in a TTY
+** Install stuff
+*** Distro-provided packages
+#+begin_src sh
+packages=(
+ # To clone & update dotfiles.
+ git
+ # Look & feel.
+ elementary-xfce-icon-theme greybird-gtk-theme
+ # Enable volume management with Thunar.
+ gvfs-backends gvfs-fuse
+ # System monitoring.
+ htop powertop wavemon
+ # Documentation:
+ # - info pages,
+ gcc-doc make-doc tar-doc info
+ # - manpages,
+ manpages-dev manpages-posix manpages-posix-dev
+ # - text & HTML pages.
+ git-doc python3-doc
+ # Writing helpers.
+ aspell-fr verbiste wordnet
+ # CLI helpers.
+ mlocate ripgrep vim
+ # Fonts.
+ fonts-noto-color-emoji
+ # Miscellaneous applications.
+ ffmpeg gimp pandoc terminator vlc
+)
+sudo apt install ${packages[@]}
+#+end_src
+*** Latest and greatest
+**** Firefox
+- download most recent release from from <https://www.mozilla.org>
+- unpack it =$SOMEWHERE=
+- make sure everyone can find it:
+
+#+begin_src sh
+$ sudo update-alternatives --install $(which x-www-browser) x-www-browser \
+ ${SOMEWHERE}/firefox/firefox 1
+$ sudo update-alternatives --set x-www-browser ${SOMEWHERE}/firefox/firefox
+$ ln -s ${SOMEWHERE}/firefox/firefox ~/.local/bin/
+#+end_src
+
+- paste backuped profile into =~/.mozilla/firefox/${profile}=
+**** Symbola
+- grab the archive from <http://users.teilar.gr/~g1951d/>
+- drop the TTF files in =~/.local/share/fonts=
+- run =fc-cache -fv=
+**** youtube-dl
+#+begin_src sh
+$ sudo apt install python3-pip
+$ pip3 install --user youtube-dl
+#+end_src
+** Setup dotfiles
+*** Clone versioned dotfiles
+- create new SSH key for GitLab
+- follow instructions in dotfiles README
+*** Tweak non-versioned dotfiles
+- set EMAIL in =.profile=
+- add =~/.local/bin= to PATH
+- copy =.profile= to =.xsessionrc=
+- in =.bashrc=
+ - enable globstar and autocd
+ - uncomment grep and ls aliases
+ - source =~/.bash_prompt=
+** Setup Emacs
+- clone from Savannah
+- =apt build-dep emacs=
+- =apt install libgconf2-dev libwebkit2gtk-4.0-dev=
+ (optional build dependencies for ≥27)
+- comment out .emacs below =(load custom-file)=
+#+begin_src elisp
+(package-refresh-contents)
+(package-install-selected-packages)
+#+end_src
+** Setup XFCE
+*** Appearance
+**** Style
+Greybird-dark
+**** Icons
+elementary Xfce darker
+**** Fonts
+- Rendering
+ - [X] Enable anti-aliasing
+ - Hinting: Slight
+ - Sub-pixel order: RGB (trusting the [[http://www.lagom.nl/lcd-test/subpixel.php][Lagom LCD test pages]])
+*** File Manager
+**** View
+- Side Pane: Tree
+- View as Detailed List
+*** Panel
+**** Top panel
+***** Items
+****** Whisker Menu
+****** Window Buttons
+****** Separator
+****** Workspace Switcher
+****** Separator
+****** Status Tray Plugin
+****** PulseAudio Plugin
+****** Power Manager Plugin
+- Show label: None
+****** Notification Plugin
+****** Separator
+****** Clock
+**** Bottom panel
+Delete.
+*** Window Manager
+**** Keyboard
+- Move window to previous workspace: Shift+Super+Left
+- Move window to next workspace: Shift+Super+Right
+- Tile window to the left: Super+Left
+- Tile window to the right: Super+Right
+- Show desktop: Super+D
+*** Window Manager Tweaks
+**** Accessibility
+- [X] Hide title of windows when maximized
+**** Compositor
+- [ ] Show shadows under…
+*** Terminal
+**** General
+- Scrolling
+ - [ ] Scroll on output
+ - Scrollbar is: Disabled
+ - [X] Unlimited scrollback
+**** Appearance
+- Font
+ - [X] Use system font
+- Opening New Windows
+ - [ ] Display menubar in new windows
+**** Advanced
+- Shortcuts
+ - [X] Disable all menu access keys (such as Alt+f) /for readline/
+ - [X] Disable menu shortcut key (F10 by default) /for htop &
+ wavemon/
+ - [X] Disable help window shortcut key (F1 by default) /for htop &
+ wavemon/
+- Misc
+ - [X] Automatically copy selection to clipboard
+*** Keyboard
+**** Application shortcuts
+- emacs: Super+E
+- exo-open --launch FileManager: Super+F
+- exo-open --launch TerminalEmulator: Super+T
+- exo-open --launch WebBrowser: Super+W
+- xfce4-popup-whiskermenu: Alt+F1
+- xfce4-screenshooter: Print
+- xfce4-screenshooter --fullscreen: Shift+Print
+- xfce4-screenshooter --region: Control+Print
+- xfce4-screenshooter --window: Super+Print
+- xfce4-session-logout: Super+X
+- xflock4: Super+L
+*** Mouse and Touchpad
+**** Devices
+- =… Touchpad=
+ - Touchpad
+ - [X] Tap touchpad to click
+*** Power Manager
+**** System
+- On battery / Plugged in
+ - When laptop lid is closed: Suspend
+*** Removable Drives and Media
+**** Storage
+- [X] Mount removable drives when hot-plugged
+- [X] Mount removable media when inserted
+
+** Setup more stuff
+*** lightdm
+Show my account on startup:
+#+begin_src conf
+# /usr/share/lightdm/lightdm.conf.d/99_custom.conf
+[Seat:*]
+greeter-hide-users=false
+#+end_src
+*** system groups
+#+begin_src sh
+groups=(
+ adm # Access /var/log journals.
+ dialout # Sync my phone.
+)
+for g in ${groups[@]}
+do
+ sudo adduser ${USER} ${g}
+done
+#+end_src
+* Live reactions (Buster)
+** groundwork
+Using instructions from <https://wiki.debian.org/Firmware>.
+*** Get netinst image from <https://www.debian.org/CD/netinst/>
+*** Get firmware archive from <https://cdimage.debian.org/cdimage/unofficial/non-free/firmware/stable/current/>
+So that the installer can use the wireless network card. Extract all
+.deb files to a top-level =firmware= folder on a USB key.
+*** Shrink the MS partition
+Had to "optimize the disk", otherwise some free space remained
+unavailable.
+** installer
+Everything went smoothly:
+- if the USB key holding the firmware isn't plugged in, the installer
+ requests it, otherwise it finds the firmware automatically;
+- Secure Boot supported transparently;
+- dual-booting too.
+** package repositories
+Non-free repositories automatically added during the installation,
+because of the WiFi firmware I presume.
+** kernel issues
+*** i915/glk_dmc_ver1_04.bin
+kern.log:
+#+begin_quote
+i915 0000:00:02.0: firmware: failed to load i915/glk_dmc_ver1_04.bin (-2)
+#+end_quote
+apt install firmware-misc-nonfree seems to quiet that down.
+*** i2c_hid_get_input: incomplete report
+kern.log:
+#+begin_quote
+i2c_hid i2c-MSFT0001:00: i2c_hid_get_input: incomplete report (14/65535)
+#+end_quote
+About one message for every half-second spent touching the touchpad.
+
+"Solved" with:
+#+begin_src sh
+$ apt install -t buster-backports \
+ linux-image-amd64 \
+ firmware-iwlwifi \
+ firmware-misc-nonfree
+#+end_src
diff --git a/guides/sysadmin/machines/hirondell/maintenance.org b/guides/sysadmin/machines/hirondell/maintenance.org
new file mode 100644
index 0000000..1e44459
--- /dev/null
+++ b/guides/sysadmin/machines/hirondell/maintenance.org
@@ -0,0 +1,294 @@
+* Config
+** samba server
+- I want most of my music on my laptop.
+- I want to access it from my desktop.
+- I want anyone on my home network to access it too.
+- I am too lazy to remove the Windows partition from my laptop, so
+ that partition sits mostly empty, eating 50% of the disk space.
+
+Therefore, the only sensible move is to run Samba on the laptop,
+serving a folder on my Linux partition with a symlink to the Windows
+partition.
+
+Chosen =/etc/smb.conf= excerpts:
+
+#+begin_src conf
+[global]
+allow insecure wide links = yes
+
+[sambo]
+comment = Files yours truly is sharing with you.
+path = /home/[…user…]/Public/smb
+browseable = yes
+read only = yes
+guest ok = yes
+wide links = yes
+#+end_src
+
+Then:
+
+#+begin_src sh
+# Mount Windows disk.
+udisksctl mount --block-device /dev/disk/by-label/OS
+# Symlink it from shared directory.
+ln -s /media/[…user…]/OS/Music ~/Public/smb/
+#+end_src
+
+On the desktop side:
+#+begin_src sh
+sudo mount.cifs //hirondell.local/sambo […somewhere…] \
+ -o guest,uid=$(id -u),gid=$(id -g)
+#+end_src
+* Upgrades
+** Bookworm
+*** research
+**** [[https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html#non-free-split][Release notes § Issues to be aware of]]
+***** minutiae
+- ~sed s/non-free/non-free-firmware/~
+- =youtube-dl= ⇒ =yt-dlp=
+- clear =GRUB_DISABLE_OS_PROBER=
+***** System logs ([[https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html#changes-to-system-logging][ref]])
+1. ~apt-mark auto rsyslog ; apt autoremove~
+2. double-check that journalctl config saves to persistent storage
+3. finally learn ~journalctl~
+***** Reduced accessibility from GTK 3⇒4 transition ([[https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html#gnome-has-reduced-accessibility-support-for-screen-readers][ref]])
+Not a huge deal for me (though [[https://github.com/transmission/transmission/discussions/5065][other aspects]] of the transition are
+irksome), but [[https://tech.lgbt/@xogium/110507457689374019][dang]].
+***** "Externally-managed" Python installation ([[https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html#python3-pep-668][ref]])
+1. inventory & clear out stuff installed with ~pip install --user~
+2. upgrade
+3. install =pipx=
+4. reinstall
+***** VLC support for VA-API disabled ([[https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html#vlc-ffmpeg-5][ref]])
+- [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1021601][Debian bug#1021601]] =vlc: VAAPI hardware acceleration no more available=
+- [[https://code.videolan.org/videolan/vlc/-/issues/26772][VLC#26772]] =VAAPI is disabled with ffmpeg5 on vlc-3x=
+ - "we won't support full FFmpeg5 in 3.0" ([[https://code.videolan.org/videolan/vlc/-/issues/26772#note_316827][ref]])
+- [[https://code.videolan.org/videolan/vlc/-/merge_requests/1245][VLC!1245]] =[VLC3] Support FFmpeg 5.0 (except for VAAPI)=
+ - "it seems that the VAAPI part is far from trivial and requires
+ invasive changes (contrary to the other fixes)" ([[https://code.videolan.org/videolan/vlc/-/merge_requests/1245#note_302474][ref]])
+- user reports: [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1021664][2022-10]], [[https://old.reddit.com/r/debian/comments/z5ectb/vlc_delaying_frames_on_a_fresh_debian_12_install/][2022-11]], [[https://old.reddit.com/r/debian/comments/119x7tr/debian_12_bookworm_no_hw_acceleration_in_vlc_h264/][2023-02]], [[https://old.reddit.com/r/debian/comments/14u38mm/video_choppy_in_vlc_but_not_totem/][2023-07]]
+
+No idea how much that will affect little =hirondell=. If push comes
+to shove, I guess I can either
+- build VLC 4,
+- learn mpv.
+***** systemd naming for Xen network interfaces ([[https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html#xen-network][ref]])
+=eth0= changes to =enX0=. No idea if my VPS is impacted or not; it
+does have an interface named =eth0=, and that name also shows up in
+=/etc/network/interfaces=.
+***** Known severe bugs ([[https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html#rc-bugs][ref]])
+- [[https://bugs.debian.org/1036041][bug#1036041]]: =upgrade-reports: Dell XPS 9550 fails to boot after
+ bullseye to bookworm upgrade - grub/bios interaction bug?=
+*** VPS
+**** =/etc/cloud/cloud.cfg=
+My local version has these two lines:
+#+begin_src
+mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
+manage_etc_hosts: true
+#+end_src
+No idea if this is OVH-specific. No idea if I want them. Let's trust
+"the package maintainer" 😐
+**** =/etc/ssh/sshd_config=
+OK, note to self: *never* choose "do a 3-way merge". Thought that
+would be something along the lines of Emacs's Ediff; instead…
+#+begin_quote
+Merging changes into the new version
+#+end_quote
+/Mind giving a couple more details on that "merge" mate?/
+
+OK,
+
+- =/usr/share/openssh/sshd_config= has the new stock config,
+- =/etc/ssh/sshd_config.ucf-old= has the /previous/ *local* config
+- ~diff -u {/usr/shared/openssh,/etc/ssh}/sshd_config~ suggests that
+ the ✨magic merge✨ did TRT; the only differences are
+ - stuff I remember changing in (=PermitRootLogin=,
+ =PasswordAtuhentication=)
+ - a spurious whitespace-only hunk on =Subsystem sftp= (the
+ =/usr/share= version uses tabs; the =/etc= version ended up with a
+ single space)
+**** Removing obsolete stuff
+Erm, why does ~apt purge '~c'~ says
+#+begin_quote
+The following packages were automatically installed and are no longer required:
+[…] nginx-core nginx-full […]
+#+end_quote
+
+😨
+
+#+begin_src
+$ dpkg -S $(sudo which nginx)
+nginx: /usr/sbin/nginx
+$ apt depends nginx
+[…]
+ Replaces: nginx-core (<< 1.22.1-6~)
+ Replaces: nginx-extras (<< 1.22.1-6~)
+ Replaces: nginx-light (<< 1.22.1-6~)
+#+end_src
+
+Ah.
+***** Rsyslog
+Refuses to disappear. The doc says ~apt-mark auto~ followed by ~apt
+autoremove~ should remove it, but that does not seem to be happening
+(~autoremove~ does not find anything to remove). The =rsyslog=
+service is still up & running, and watches =syslog.socket= to
+re-activate itself 😕
+
+Decided to explicitly ~apt remove~ it on the advice of [[https://blog.frehi.be/2023/06/04/upgrading-from-debian-11-bullseye-to-debian-12-bookworm/][this gentleman]].
+*** Laptop
+**** non-free & non-free-firmware
+#+begin_quote
+Assuming the =non-free= component was only added to the APT
+sources-list to install firmware,
+#+end_quote
+#+begin_example
+$ apt list '?narrow(?installed, ?section(non-free))'
+Listing... Done
+doc-rfc-experimental/oldstable,oldstable,now 20201128-1 all [installed,automatic]
+doc-rfc-fyi-bcp/oldstable,oldstable,now 20201128-1 all [installed,automatic]
+doc-rfc-informational/oldstable,oldstable,now 20201128-1 all [installed,automatic]
+doc-rfc-misc/oldstable,oldstable,now 20201128-1 all [installed,automatic]
+doc-rfc-old-std/oldstable,oldstable,now 20201128-1 all [installed,automatic]
+doc-rfc-others/oldstable,oldstable,now 20201128-1 all [installed,automatic]
+doc-rfc-std-proposed/oldstable,oldstable,now 20201128-1 all [installed,automatic]
+doc-rfc-std/oldstable,oldstable,now 20201128-1 all [installed,automatic]
+doc-rfc/oldstable,oldstable,now 20201128-1 all [installed]
+firmware-iwlwifi/oldstable,oldstable,now 20210315-3 all [installed]
+firmware-misc-nonfree/oldstable,oldstable,now 20210315-3 all [installed]
+gcc-10-doc/oldstable,oldstable,now 10.2.0-1 all [installed,automatic]
+gdb-doc/oldstable,oldstable,now 10.1-1 all [installed]
+make-doc/oldstable,oldstable,now 4.3-2 all [installed]
+manpages-posix-dev/oldstable,oldstable,now 2017a-2 all [installed]
+manpages-posix/oldstable,oldstable,now 2017a-2 all [installed]
+tar-doc/oldstable,oldstable,now 1.34-1 all [installed]
+#+end_example
+Will be keeping =non-free= in addition to =non-free-firmware= then 🫣
+**** Fallout
+***** GRUB
+#+begin_src sh
+sudo sed -i \
+ s/'^#GRUB_DISABLE_OS_PROBER=false'/'GRUB_DISABLE_OS_PROBER=false'/ \
+ /etc/default/grub
+sudo update-grub
+#+end_src
+
+***** PEP 668
+#+begin_src sh
+# Before upgrade: keep calm…
+pip uninstall $(pip freeze --user | cut -d= -f1)
+# After upgrade: … carry on.
+sudo apt install pipx
+pipx install yt-dlp
+#+end_src
+
+***** VLC
++Seems fine? No choppiness observed on a 2k@24FPS video from yt-dlp+
+
+Is choppy as all hell on /some/ videos, not sure which kind nor why;
+could not be bothered discerning the patterns. Learned me an mpv for
+great good.
+**** Goodies
+- The [[#random-lag][random lag I had been observing since 5.8]] seems gone 🥳
+- =libtree-sitter-dev= is new enough for Emacs; can get rid of my
+ =/usr/local= version.
+* Hiccups
+** impromptu IBus
+Installing [[https://zoom.us/][Zoom]]'s Debian package somehow enabled IBus[fn:: AFAICT
+because ibus recommends im-config, and the latter autostarts the
+former by default], which unconditionally set my keyboard to English
+for some reason[fn:: Before properly running ~apt install
+./zoom_amd64.deb~, I had mistakenly run ~dpkg -i zoom_amd64.deb~,
+which failed because of missing dependencies. Perhaps apt omitted
+some post-installation configuration hooks because the first dpkg run
+had left an error marker somewhere?]. Remediation steps taken:
+
+1. Tweak IBus preferences, unset shortcuts (Emacs has a better
+ interface for searching/inserting Unicode characters), check "use
+ system defaults" for the keyboard layout.
+
+2. Go on a hunt for whoever spawns ibus-daemon(1); AFAICT it's
+ im-launch(1), which can be told not to use IBus through im-config
+ (which eventually just writes ~run_im none~ in =~/.xinputrc=).
+
+3. Eventually, maybe I should just uninstall im-config.
+** random lag
+*** DONE diagnosing
+Since… a few days? weeks? one month? everything randomly becomes
+"choppy":
+
+- typing (Emacs, Terminator, Firefox): I can type in a bunch of words,
+ sit back, wait a few seconds, then watch the words finally write
+ themselves letter by letter.
+- launching programs: ~while time $aprogram ; do sleep 0.5 ; done~,
+ where ~aprogram~ just starts then exits, shows wildly varying times.
+- scrolling a PDF with the touchpad (Evince): the pages stay stuck for
+ a few seconds, then the reader jumps to the new location; the mouse
+ pointer does change during this delay, as text and whitespace
+ (invisibly) scroll by.
+
+I can't remember changing anything recently, nor seeing any scary
+update passing by. journalctl, htop and dmesg do not show any obvious
+suspects. Some things I considered:
+
+- Disabling some services e.g. tor or speech-dispatcher ⇒ no effect.
+- Uninstalling xserver-xorg-video-intel ⇒ no effect.
+- Upgrading systemd from backports ⇒ no effect.
+- htop sometimes shows pulseaudio acting up despite no application
+ playing or recording sound?
+- Maybe I should try reinstalling Debian's stable kernel?
+ - Luckily 5.7 was not uninstalled when upgrading to 5.8; booting on
+ 5.7 solves all of the "choppiness" issues listed above.
+
+Now to pinpoint what's wrong with 5.8…
+*** TODO fixing
+Found a way to "quantify" the problem; asked around on the
+debian-kernel mailing list, to no avail.
+
+- [[https://lists.debian.org/debian-kernel/2020/11/msg00084.html][2020-11]] - original report that 5.8 from backports triggers the
+ issue: "wait for 5.9 to be available from backports or even 5.10"
+ (LTS for the next Debian stable version)
+- [[https://lists.debian.org/debian-kernel/2020/12/msg00040.html][2020-12]] - quick report that 5.9 from backports does not improve
+ things: 🦗
+- [[https://lists.debian.org/debian-kernel/2021/02/msg00231.html][2021-02]] - quick report that 5.10 from backports does not improve
+ things *✨with scripts & numbers✨*: 🦗
+
+#+begin_quote
+ for ((i=0; i<100; i++)); do
+ time -p terminator -x 'bash -c exit'
+ done &> time-$(uname -r)
+
+ grep $mode time-$(uname -r) | sort -k2
+
+Where $mode is either real, user or sys. Here are the extrema:
+
+ real user sys
+ min max min max min max
+5.7 0.44 0.48 0.29 0.35 0.02 0.08
+5.10 0.47 3.30 0.31 2.87 0.02 0.30
+5.10-after-suspend 0.46 0.50 0.30 0.36 0.03 0.08
+
+Averages & standard deviations:
+
+ real user sys
+5.7 0.454±0.006 0.322±0.013 0.046±0.013
+5.10 0.961±0.607 0.559±0.518 0.074±0.052
+5.10-after-suspend 0.469±0.005 0.332±0.012 0.050±0.011
+
+These results feel consistent with the stutter I observe: 5.7 and
+5.10-after-suspend have roughly the same performance, while
+freshly-booted 5.10 is overall very jittery: terminator startup is twice
+as slow on average, with 100× more variance.
+
+
+Some more stats, eyeballed from /proc/cpuinfo and
+/sys/devices/system/cpu/cpufreq/policy*/scaling_governor:
+
+ idle frequency CPU governor
+5.7 < 800 MHz powersave
+5.10 > 1900 MHz ondemand
+5.10 (after suspend) < 900 MHz ondemand
+#+end_quote
+
+- [[https://lists.debian.org/debian-kernel/2021/08/msg00278.html][2021-08]] - quick report that 5.10 from a fresh bullseye install does
+ not improve things: 🦗
+- 2023-08 - bookworm upgrade to 6.1: problem solved 🤷
diff --git a/guides/sysadmin/machines/little-buster/README.org b/guides/sysadmin/machines/little-buster/README.org
new file mode 100644
index 0000000..3d6cd54
--- /dev/null
+++ b/guides/sysadmin/machines/little-buster/README.org
@@ -0,0 +1,8 @@
+Aka =nc10-laptop=. A hand-me-down Samsung NC10 I used from 2016
+to 2020. Served valiantly; probably still works, but have been afraid
+to boot it since the fan started to [[https://bugs.gnu.org/45705#41][sound like]] it is trying to open a
+gateway to Hellas Planitia.
+
+Initially went with Bunsenlabs, then vanilla Debian/XFCE during a
+reinstall. Fairly low-end, no SSD, but tiny & cute; a perfectly
+serviceable travel companion.
diff --git a/guides/sysadmin/machines/little-buster/fonts.md b/guides/sysadmin/machines/little-buster/fonts.md
new file mode 100644
index 0000000..30e7739
--- /dev/null
+++ b/guides/sysadmin/machines/little-buster/fonts.md
@@ -0,0 +1,49 @@
+Fonts I find useful, plus messy configuration details.
+
+# Symbola
+
+Symbola seems to cover most characters I care about (although it does
+not handle fancy emoji ligatures), and new versions are released
+fairly soon after each revision of the Unicode standard.
+
+Since distributions may not include the latest version, I often get it
+directly from [the author's website](http://users.teilar.gr/~g1951d/).
+
+# Installing fonts with Fontconfig
+
+Gee, it sure is convenient to be able to install new fonts simply by
+dropping them in `~/.fonts` and running `fc-cache`!
+
+`/etc/fonts/fonts.conf`:
+
+ <!-- the following element will be removed in the future -->
+ <dir>~/.fonts</dir>
+
+😨
+
+Bunsenlabs symlinks `~/.fonts` to `~/.local/share/fonts`, but this
+path is not mentioned anywhere in `/etc/fonts`. What's the deal?
+
+`/etc/fonts/fonts.conf`:
+
+ <dir prefix="xdg">fonts</dir>
+
+fonts-conf(5):
+
+> ## `<DIR PREFIX="DEFAULT">`
+>
+> This element contains a directory name which will be scanned for
+> font files to include in the set of available fonts. If 'prefix' is
+> set to "xdg", the value in the `XDG_DATA_HOME` environment variable
+> will be added as the path prefix. please see XDG Base Directory
+> Specification for more details.
+
+[XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html):
+
+> `$XDG_DATA_HOME` defines the base directory relative to which user
+> specific data files should be stored. If `$XDG_DATA_HOME` is either
+> not set or empty, a default equal to `$HOME`/.local/share should be
+> used.
+
+Seems legit then.
+
diff --git a/guides/sysadmin/machines/little-buster/install.org b/guides/sysadmin/machines/little-buster/install.org
new file mode 100644
index 0000000..18bfda7
--- /dev/null
+++ b/guides/sysadmin/machines/little-buster/install.org
@@ -0,0 +1,132 @@
+* installer
+Touchpad is not recognized, for some reason.
+* first boot
+#+BEGIN_QUOTE
+A start job is running for Load AppArmor profiles
+#+END_QUOTE
+Disappeared after ≈30s 🤷
+
+Wooh touchpad works! Although the sensitivity is a bit low.
+*NB: solved below.*
+
+Wifi LED is on, whatever that means.
+
+Brightness function keys do not work on the login screen.
+
+Using default XFCE config to get four workspaces.
+
+Brightness and sound function keys work! 🙌
+
+Touchpad click and scroll do not work.
+*NB: solved below.*
+
+Wifi function key does not work.
+
+Battery life seems somewhat shorter than with Bunsenlabs, even after
+applying all powertop tricks in the book.
+* apt install (1/n)
+git greybird-gtk-theme elementary-xfce-icon-theme emacs
+
+git suggests git-doc: why of course, good idea!
+
+emacs suggests emacs-common-non-dfsg: right, what was that again?
+Documentation, IIRC? What does APT have to say?
+
+#+BEGIN_EXAMPLE
+$ apt show emacs-common-non-dfsg
+Package: emacs-common-non-dfsg
+State: not a real package (virtual)
+N: Can't select candidate version from package emacs-common-non-dfsg as it has no candidate
+N: Can't select versions from package 'emacs-common-non-dfsg' as it is purely virtual
+N: No packages found
+#+END_EXAMPLE
+
+… What does https://packages.debian.org/emacs-common-non-dfsg say?
+
+#+BEGIN_QUOTE
+*[non-free]*
+#+END_QUOTE
+
+[[https://www.debian.org/vote/2006/vote_001][Oh.]] Well then,
+
+#+begin_src sh
+$ sudo sed -ri 's/^([^#].+ main)$/\1 contrib non-free/' /etc/apt/sources.list
+$ # While in there…
+$ sudo sed -ri 's/^(deb|deb-src) http:/\1 https:/' /etc/apt/sources.list
+#+end_src
+
+What now?
+
+#+BEGIN_EXAMPLE
+$ sudo apt update
+[…]
+Err:4 https://security.debian.org/debian-security buster/updates Release
+ Certificate verification failed: The certificate is NOT trusted. The certificate issuer is unknown. The name in the certificate does not match the expected. Could not handshake: Error in the certificate verification. [IP: 217.196.149.233 443]
+[…]
+E: The repository 'https://security.debian.org/debian-security buster/updates Release' no longer has a Release file.
+N: Updating from such a repository can't be done securely, and is therefore disabled by default.
+N: See apt-secure(8) manpage for repository creation and user configuration details.
+#+END_EXAMPLE
+
+🤨
+
+#+begin_src sh
+$ sudo sed -ri 's/security\.debian\.org/deb.debian.org/' /etc/apt/sources.list
+#+end_src
+
+[[https://wiki.debian.org/SourcesList#Example_sources.list][🤷]]
+
+* tweak dotfiles
+Set EMAIL in .profile; copy .profile to .xsessionrc (AFAICT XFCE does
+not read ~/.config/environment.d) to get PATHs.
+
+In .bashrc, enable globstar and autocd, uncomment grep and ls aliases,
+source personal .bash_prompt.
+
+Fun fact! git can guess user.email from $EMAIL and user.name from the
+[[https://en.wikipedia.org/wiki/Gecos_field][GECOS field]].
+* apt install (2/n)
+#+BEGIN_QUOTE
+E: Package 'gcc-doc' has no installation candidate
+#+END_QUOTE
+gcc-doc is only available in /backports/?
+* configure XFCE
+** Mouse and Touchpad
+- Move sliders a bit to no avail, restore defaults.
+- Google around.
+- Why do my XFCE settings not have this "Touchpad" tab?
+- apt install xserver-xorg-input-synaptics
+- Log out and in again.
+- Woah the pointer is much faster now.
+- And the "Touchpad" tab is here now!
+🎉
+** Panels
+Remove bottom panel: I'd rather remember a few Super-… shortcuts to
+launch these applications rather than waste all this vertical space.
+** Appearance
+*** Style
+Greybird
+
+Patch the xfwm-tabwin style to prevent the mouse from screwing with
+Alt-Tab:
+
+#+begin_src diff
+diff -u /usr/share/themes/Greybird/gtk-2.0/gtkrc.bkp /usr/share/themes/Greybird/gtk-2.0/gtkrc
+--- /usr/share/themes/Greybird/gtk-2.0/gtkrc.bkp
++++ /usr/share/themes/Greybird/gtk-2.0/gtkrc
+@@ -897,8 +897,8 @@
+
+ bg[NORMAL] = shade (0.15, @text_color)
+ bg[ACTIVE] = shade (0.65, @selected_bg_color)
+- bg[PRELIGHT] = shade (0.75, @selected_bg_color)
+- bg[SELECTED] = shade (0.55, @bg_color)
++ bg[PRELIGHT] = shade (0.55, @bg_color)
++ bg[SELECTED] = shade (0.75, @selected_bg_color)
+
+ fg[NORMAL] = shade (0.8, @base_color)
+ fg[ACTIVE] = @base_color
+#+end_src
+* configure more stuff
+** lightdm
+Debian [[https://wiki.debian.org/LightDM#Enable_user_list][hides the list of users]] on the login screen; Bunsenlabs [[https://github.com/BunsenLabs/bunsen-configs/blob/9.6-1/lightdm.conf.d/50_bunsen.conf][enables
+it]] and I kind of like it (fewer keystrokes, and a cute avatar).
diff --git a/guides/sysadmin/machines/little-buster/maintenance.org b/guides/sysadmin/machines/little-buster/maintenance.org
new file mode 100644
index 0000000..bdee12a
--- /dev/null
+++ b/guides/sysadmin/machines/little-buster/maintenance.org
@@ -0,0 +1,58 @@
+* Configuration
+** Bunsenlabs
+*** Keyboard
+Cf. keyboard(5):
+
+- add =ctrl:nocaps= in =/etc/default/keyboard=
+- run =udevadm trigger --subsystem-match=input --action=change=
+- run =setupcon= in a TTY
+
+*** Desktop
+**** Conky
+- see dotfiles
+
+**** ClipIt
+- disable hotkeys
+
+**** Openbox
+***** =rc.xml=
+- comment A-m and A-r out
+- undecorate all windows:
+
+#+begin_src xml
+<application class="*">
+ <decor>no</decor>
+</application>
+#+end_src
+
+***** WM preferences
+- appearance: uncheck "windows retain a border when undecorated"
+- desktops: 4
+
+**** tint2
+- remove launcher and exit panel items
+- add date (time2)
+
+**** Calendar
+Make weeks begin on Monday by using the British locale:
+
+- uncomment =en_GB.UTF-8 UTF-8= in /etc/locale.gen
+- =sudo locale-gen=
+- =force_lang = en_GB.utf8= in =~/.config/gsimplecal/config=
+
+* Hiccups
+** fix xfce4-terminal opening links with firefox-esr
+** fix Thunar opening images with Firefox instead of Ristretto
+** fix Ristretto thumbnails
+** fix Ethernet after suspend
+Workaround:
+#+begin_src sh
+$ sudo modprobe -r sky2 && sudo modprobe -i sky2
+#+end_src
+References:
+- https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1841304
+- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=895378
+- https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1798921
+- https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1809843
+- https://askubuntu.com/questions/1029620/ubuntu-18-04-lts-sky2-ethernet-stops-working-after-system-resume-from-suspend
+- https://bbs.archlinux.org/viewtopic.php?id=234725
diff --git a/guides/sysadmin/machines/little-buster/package-management.md b/guides/sysadmin/machines/little-buster/package-management.md
new file mode 100644
index 0000000..6906253
--- /dev/null
+++ b/guides/sysadmin/machines/little-buster/package-management.md
@@ -0,0 +1,42 @@
+Here are some things that I do often enough that I want to remember
+how to do them properly, yet rarely enough that I will probably forget
+this stuff if I do not write it down.
+
+# Package managers
+
+## APT
+
+Add deb-src repositories to get:
+
+- `changelog`
+- `build-dep`
+- `source`
+
+# Installing stuff under `$HOME`
+
+E.g. pandoc (compiled from source tarball with stack because there is
+no 32-bit release) and ripgrep:
+
+- programs:
+ - install in `~/.local/bin`
+ - add this folder to `$PATH` (in `.profile` and `.xsessionrc`)
+
+- manpages:
+ - install in `~/.local/share/man/man1`
+ - in `~/.manpath`:
+
+ MANPATH_MAP ~/.local/bin ~/.local/share/man
+
+ - run `mandb --user-db`
+
+- bash completion scripts:
+ - install in `~/.local/share/bash-completion`
+ - in `~/.bash_completion` (sourced by
+ `/usr/share/bash-completion/bash_completion`):
+
+ ``` bash
+ for f in ~/.local/share/bash-completion/*
+ do
+ [ -f "$f" ] && . "$f"
+ done
+ ```
diff --git a/guides/sysadmin/machines/my-little-tumbleweed/README.org b/guides/sysadmin/machines/my-little-tumbleweed/README.org
new file mode 100644
index 0000000..eaf440e
--- /dev/null
+++ b/guides/sysadmin/machines/my-little-tumbleweed/README.org
@@ -0,0 +1,2 @@
+A hand-me-down desktop I used during the latter Tens, until 2021. My
+first experience with Tumbleweed, Plasma, and {{{wow(Linux gaming)}}}.
diff --git a/guides/sysadmin/machines/my-little-tumbleweed/maintenance.org b/guides/sysadmin/machines/my-little-tumbleweed/maintenance.org
new file mode 100644
index 0000000..fb011d2
--- /dev/null
+++ b/guides/sysadmin/machines/my-little-tumbleweed/maintenance.org
@@ -0,0 +1,153 @@
+* Post-installation setup
+** System settings
+*** Workspace Behavior
+- Virtual Desktops
+ - 1 row, 4 desktops
+*** Window Management
+- Task Switcher
+ - Visualization: Thumbnail Grid
+*** Shortcuts
+**** Applications
+- Dolphin: disable =Meta+E=; add =Meta+F=
+- Konsole: disable =Ctrl+Alt+T=; add =Meta+T=
+- KRunner: disable =Alt+Space=
+**** System Settings
+- KWin
+ - Active Window Demanding Attention: disable =Ctrl+Alt+A=
+ - Maximize Window: =Meta+Up=
+ - Switch to Next Desktop: =Ctrl+Alt+Right=
+ - Switch to Previous Desktop: =Ctrl+Alt+Left=
+ - Walk Through Windows of Current Application: disable =Alt+`=
+ - Walk Through Windows of Current Application (Reverse): disable =Alt+~=
+ - Window to Desktop /n/: =Ctrl+Alt+n=
+- Plasma
+ - Enable Clipboard Actions: disable =Ctrl+Alt+X=
+ - Manually Invoke Action on Current Clipboard: disable =Ctrl+Alt+R=
+- Session Management
+ - Lock Session: disable =Ctrl+Alt+L=; add =Meta+X=
+*** Input devices
+- Keyboard
+ - Layouts
+ - Alternative shortcut: unset
+ - Variant: French (legacy, alt.)
+ - Advanced
+ - [X] Configure keyboard options
+ - [X] Caps Lock behavior: Make Caps Lock an additional Ctrl
+** Bottom panel
+- Configure Pager
+ - [X] Show application icons on window outlines
+- Unpin all applications
+- Replace "Icon-only Task Manager" with "Task Manager"
+** Dotfiles
+*** =.profile=
+#+begin_src sh
+if test -d ~/.local/bin
+then
+ export PATH=~/.local/bin:${PATH}
+fi
+
+unset PAGER # breaks Python REPL in Emacs.
+#+end_src
+** TODO Unset root password
+Following instructions from [[https://en.opensuse.org/SDB:Administer_with_sudo][the support database]]:
+- with ~visudo~, uncomment the ~%wheel ALL=(ALL) ALL~ line
+- ~sudo usermod -aG wheel $USER~
+- with ~visudo~, comment out ~Defaults targetpw~ and ~ALL ALL=(ALL)
+ ALL~
+- YaST still insists on getting the root password…
+*** Fix eager ~sudo passwd -d root~
+- boot on install media
+- start rescue mode
+- locate partition with ~lsblk~
+- ~mount $PARTITION /mnt/disk~
+- ~cp /mnt/disk/etc/shadow- /mnt/disk/etc/shadow~
+** Global keyboard settings
+#+begin_src sh
+$ sudo localectl set-x11-keymap fr pc105 latin9 ctrl:nocaps
+#+end_src
+To set this for TTYs: see [[./console.org]].
+** Applications
+*** Firefox
+- Clear =browser.newtabpage.pinned=
+- Set =widget.use-xdg-desktop-portal.file-picker= to 1 to get Plasma's
+ file picker
+*** VLC & codecs
+#+begin_src sh
+$ sudo zypper addrepo http://download.videolan.org/pub/vlc/SuSE/Tumbleweed VLC
+$ sudo zypper modifyrepo --refresh VLC
+$ sudo zypper install --from VLC ffmpeg vlc vlc-codecs
+#+end_src
+NB: there's a lot of prompting going on in that last command; maybe
+=--allow-vendor-change= could help.
+** Drivers
+*** Load X-Box gamepad drivers automatically
+- comment out any blacklisting of =xpad= in =/etc/modprobe.d=
+ (e.g. xboxdrv installs =/etc/modprobe.d/50-xpad.conf=)
+ - if installed, make sure the xboxdrv service is disabled
+- ~sudo tee /etc/modules-load.d/xpad.conf <<< xpad~
+* Upgrades
+** Fix broken Nvidia drivers
+Reinstall Nvidia kernel module:
+#+begin_src sh
+$ sudo zypper in -f nvidia-gfxG05-kmp-default
+#+end_src
+** Make space for large upgrades
+libc and compilers upgrades sometimes fail midway through because
+there is no space left. An easy way to reclaim some space is to
+delete some filesystem snapshots:
+#+begin_src sh
+$ sudo snapper list
+$ sudo snapper delete $start-$end
+#+end_src
+** Fix conflicts with VLC repo
+Sometimes this VLC repository will stop providing a package it used
+to, e.g. because it now ships an upgraded version (and the version
+number is somehow part of the package name).
+
+In that case, we need to help =zypper= figure out what to do:
+#+begin_src sh
+$ sudo zypper dist-upgrade --auto-agree-with-licenses
+# …
+Computing distribution upgrade...
+
+Problem: problem with the installed libliveMedia97-2021.08.23-58.7.x86_64
+ Solution 1: install libliveMedia97-2021.08.23-1.2.x86_64 from vendor openSUSE
+ replacing libliveMedia97-2021.08.23-58.7.x86_64 from vendor VideoLAN Project (http://www.videolan.org)
+ Solution 2: keep obsolete libliveMedia97-2021.08.23-58.7.x86_64
+
+Choose from above solutions by number or cancel [1/2/c/d/?] (c): d
+Problem: problem with the installed libliveMedia97-2021.08.23-58.7.x86_64
+Detailed information:
+ the installed libliveMedia97-2021.08.23-58.7.x86_64 does not belong to a distupgrade repository and must be replaced
+ Solution 1: install libliveMedia97-2021.08.23-1.2.x86_64 from vendor openSUSE
+ replacing libliveMedia97-2021.08.23-58.7.x86_64 from vendor VideoLAN Project (http://www.videolan.org)
+ Solution 2: keep obsolete libliveMedia97-2021.08.23-58.7.x86_64
+
+Choose from above solutions by number or cancel [1/2/c/d/?] (c): 1
+Resolving dependencies...
+Computing distribution upgrade...
+# …
+The following package is going to be downgraded:
+ libliveMedia97
+
+The following package is going to change vendor:
+ libliveMedia97 VideoLAN Project (http://www.videolan.org) -> openSUSE
+
+The following 6 NEW packages are going to be installed:
+ … libliveMedia102 …
+# …
+#+end_src
+
+In this instance, I went looking at the [[http://download.videolan.org/pub/vlc/SuSE/Tumbleweed/x86_64/][VLC repository]] to figure out
+what was going on; searching for "libliveMedia" revealed that the
+repository now shipped libliveMedia102 and no longer included
+libliveMedia97.
+
+I went with solution 1 (switch to openSUSE's libliveMedia97), but
+maybe solution 2 was the right one? E.g. maybe after "computing [the]
+distribution upgrade", zypper would have realized that nobody needs
+97 anymore, so it could be removed; could be I accidentally set 97 to
+"manually installed" with solution 1?
+
+🤷
+
diff --git a/guides/sysadmin/machines/my-little-tumbleweed/notifications.org b/guides/sysadmin/machines/my-little-tumbleweed/notifications.org
new file mode 100644
index 0000000..5d8ee62
--- /dev/null
+++ b/guides/sysadmin/machines/my-little-tumbleweed/notifications.org
@@ -0,0 +1,52 @@
+* Fixing dual Plasma/Xfce installations
+Plasma and Xfce both define the ~org.freedesktop.Notifications~ D-BUS
+service. That leads to all kinds of fun ([[https://bugs.kde.org/show_bug.cgi?id=381693][KDE bug]]; [[https://bugzilla.redhat.com/show_bug.cgi?id=484945][Red Hat bug]]); on my
+machine, it causes Plasma sessions to use xfce4-notifyd instead of
+Plasma's own notification mechanism.
+
+[[https://kevinlocke.name/bits/2020/04/12/resolving-desktop-notifications-dbus-service-conflicts/][Kevin Locke]] explains how to solve the issue by defining a third
+~org.freedesktop.Notifications~ service in a higher-priority user
+directory, which runs a command that will determine the current
+desktop environment and start the appropriate notification daemon. In
+~~/.local/share/dbus-1/services/org.freedesktop.Notifications.service~:
+
+#+begin_src conf-desktop
+[D-BUS Service]
+Name=org.freedesktop.Notifications
+Exec=/bin/sh -c "~/.local/lib/meta-notify"
+#+end_src
+
+This gentleman suggests relying on the ~XDG_SESSION_DESKTOP~ variable
+to find out which DE is running; unfortunately, for some reason if I
+log into Plasma first, then into Xfce, this variable (as well as
+~XDG_CURRENT_DESKTOP~ and ~DESKTOP_SESSION~) keeps saying "KDE" when
+the script runs.
+
+(I think this might be caused by Xfce's [[https://gitlab.xfce.org/atomsymbol/xfce4-session/-/blob/xfce4-session-4.14.2/scripts/xinitrc.in.in#L19][xinitrc]] not setting these
+variables if they are not empty, but they *are* set when I look at
+them in a shell once logged in, so… 🤷)
+
+Thus my version of ~~/.local/lib/meta-notify~ falls back on the window
+managers:
+
+#+begin_src sh
+#!/bin/sh
+
+wm=$(wmctrl -m | grep '^Name:' | cut -f2- -d' ')
+
+case ${wm} in
+ KWin)
+ exec /usr/bin/plasma_waitforname org.freedesktop.Notifications
+ ;;
+ Xfwm4)
+ exec dbus-send --session \
+ --dest=org.freedesktop.systemd1 \
+ /org/freedesktop/DBus \
+ org.freedesktop.systemd1.Activator.ActivationRequest \
+ string:xfce4-notifyd.service
+ ;;
+ *)
+ /usr/bin/logger -t $(basename "$0") Unknown window manager \"${wm}\"
+ exit 1
+esac
+#+end_src