Notes on OS intalls
git clone
Log | Files | Refs | LICENSE

commit 7934770dd8616a8ded9fa804e189b7bad1b44f8d
parent 8a881f0af6a55faaf845a5db8bdf6f66c7c1b962
Author: Chris Bracken <>
Date:   Fri,  1 Oct 2021 12:42:44 -0700

Add Debian install guide

Working around Ubuntu's default desktop environment by installing the
server distro has become more work than just installing Debian.
Years ago, I switched to using Ubuntu Server for a Linux desktop because
it had better driver and firmware support at the time. That seems to
have resolved itself, and it's less effort to just install a
stripped-down Debian these days.

Diffstat: | 309+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 309 insertions(+), 0 deletions(-)

diff --git a/ b/ @@ -0,0 +1,309 @@ +Debian install with UEFI boot +============================= + +This provides a basic rundown of process of a minimal Debian Linux install with +the following setup: + + * UEFI boot + * LVM filesystem + * Sway WM using Wayland + +This guide assumes a wired ethernet connection and a working DHCP server. + + +Create USB boot disk +-------------------- + +Download an install image from, then write it to a +disk using `dd`. Reboot the machine to be imaged and use the machine's BIOS +features to boot from the USB drive in UEFI mode. + + +Walk through the Debian installer +--------------------------------- + +Rough notes for installer (TODO: fill this out): +* When prompted to partition the disk, select to use the whole disk with LVM. +* When prompted to verify the LVM partitioning, adjust the space allocated to + each volume, partition, as necessary. +* When prompted for which service to install, select none. Install the OpenSSH + server if desired. + +Reboot the machine. + +Verify the machine booted into UEFI mode: + + ls /sys/firmware/efi/efivars + +If the directory does not exist, the system is likely booted in BIOS mode. You +will want to enter BIOS and enable UEFI boot, then reboot from the USB drive in +UEFI mode and restart installation. + +Next, we'll apply any immediate updates and remove any leftover unnecessary +packages from the install process. + + sudo apt upgrade + sudo apt autoremove + sudo apt clean + +Next we'll purge any leftover config files from any removed packages: + + dpkg -l | grep '^rc '| awk '{print $2}' | xargs sudo dpkg -P + + +Disable password/challenge-response ssh +--------------------------------------- + +Edit `/etc/ssh/sshd_config` to set the following: + + PubkeyAuthentication yes + PasswordAuthentication no + ChallengeResponseAuthentication no + +Then restart sshd with: + + systemctl restart ssh + + +Install additional shells +------------------------- + + apt install zsh zsh-doc + + +Configure filesystem support +---------------------------- + +Next, we'll set up automounting USB disks. Since many of these are FAT32 format, +we'll also install tools for dealing with dos partitions: + + apt install udisks2 udisks2-doc + apt install dosfstools + +We'll also add support for mounting NFS partitions: + + apt install nfs-common + + +Generate localisations +---------------------- + +Edit `/etc/locales.gen` and uncomment locales that we care about. + + en_CA.UTF-8 + fr_CA.UTF-8 + ja_JP.UTF-8 + +Then, regenerate the localisation files. + + locale-gen + + +Get audio working +----------------- + +Install and configure pulseaudio: + + apt install pulseaudio pulseaudio-utils + +I've noticed that every time I install, the default output seems to be muted. +You can check this and unmute with: + + pacmd list-sinks + pacmd set-sink-mute 0 no + + +Install useful packages +----------------------- + +Since `vim` is far nicer to work in than `ed`, `ex`, or `vim`, we'll install +it first: + + apt install vim + +Support for zip archives is handy: + + apt install zip unzip + +Next, terminal multiplexing support via tmux: + + apt install tmux + +Next, compilers and development tools: + + apt install gcc g++ gdb binutils + apt install clang lld lldb + apt install python3 + apt install golang + apt install rustc rust-doc cargo cargo-doc + apt install nasm + apt install generate-ninja ninja-build + apt install cmake cmake-doc + apt install meson + apt install scdoc + +And, source control: + + apt install git tig + +For a GUI environment, we install Sway, an i3-like Wayland-based window manager: + + apt install sway sway-backgrounds # Sway: Use noto fonts if prompted + apt install swayidle swaylock # Screen lock support + apt install xwayland x11-xserver-utils # Xwayland support + apt install alacritty # terminal + apt install grim jq slurp libnotify-bin wl-clipboard # screenshots + apt install wofi # app launcher (dmenu alternative) + apt install mako-notifier # notifications + +Next, install some additional Western and Japanese fonts: + + apt install fonts-liberation + apt install fonts-ipafont + apt install fonts-noto + +Add some media players: + + apt install sxiv + apt install mpv + apt install cmus + +Add chat clients: + + # Install Signal from + apt install weechat weechat-doc + +Add web/gopher/gemini browsers: + + apt install firefox-esr + apt install w3m + apt install lynx + apt install amfora # Debian 12 or later + +Add useful utilities: + + apt install pass # GPG-based password maanger + apt install mc # Command-line file manager + apt install apt-file # List files in apt packages + + +Install Japanese input support +------------------------------ + +fcitx5 is the IME frontend for Japanese input, while mozc provides the candidate +selection backend. Install all the required packags: + + apt install fcitx5-mozc + +Note that as of summer 2021, the Wayland IME protocol is still unstable. fcitx5 +only has partial integration with the sway window manager on Wayland. Under +Xwayland, it works fine. + + +Install mutt email client +------------------------- + +Install mutt: + + apt install mutt + +Install msmtp for SMTP sending and ca-certificates for TLS: + + apt install msmtp + apt install ca-certificates + +Install notmuch for search/indexing: + + apt install notmuch-mutt + +Install HTML-to-text support and URL handling: + + apt install w3m urlscan + +Install isync (also known as mbsync): + + apt install isync + +Install abook for address book support: + + apt install abook + + +Configure NFS +------------- + +By default, NFS assumes identical user and group IDs on the client and server. +NFSv4 can be configured to use `idmapd` to map user IDs between client and +server, but this requires a little bit of legwork up front on the server and all +clients. + +On both the client and server, edit `/etc/idmapd.conf` ensure the domain line is +set consistently across both: +``` +Domain = +``` + +With the default security mechanism, [idmapd][idmapping] support is disabled. +You can verify this by running: +```sh +cat /sys/module/nfs/parameters/nfs4_disable_idmapping +cat /sys/module/nfsd/parameters/nfs4_disable_idmapping +``` + +To re-enable ID mapping, you can manually `echo N` into each of those files as +root to temporarily re-enable it until next boot. To make these changes +permanent across re-boots, edit `/etc/modprobe.d/nfs.conf` to contain: +``` +options nfs nfs4_disable_idmapping=0 +options nfsd nfs4_disable_idmapping=0 +``` + +Note that, as noted in the [idmapd][idmapping] section of the NFS wiki, it is +_not_ necessary to run the nfs-imapd systemd service since there's already a +newer ID mapper built-in. You can see this by running: +```sh +dmesg | grep id_resolver +``` + +Finally, we edit `/etc/fstab` to add the new mounts and make them user-mountable: +``` +# Filesystem Mountpoint Type Options Dump Pass +servername:/path/to/directory /path/to/mountpoint nfs rw,nfsvers=4,_netdev,user,noauto 0 0 +``` + +``` +systemctl start nfs-idmapd +``` + +[idmapping]: + + +HP printer support +------------------ + +Next, we'll configure [CUPS][cups_guide] printer support for HP printers, +mostly since that's what I have. + + apt install cups hplip + doas vi /etc/sane.d/dll.d/hplip # uncomment or add hpaio + +Start the CUPS printer daemon: + + doas systemctl enable cups.service + +Add the printer: + + doas hp-setup -i # PPD files under /usr/share/ppd/HP/ + +Alternatively list the ZeroConf printers, then add one: + + lpinfo --include-schemes dnssd -v + lpadmin -E \ # Enable + -p "HP_Color_LaserJet" \ # Printer name + -D "HP Color LaserJet MFP M277dw" \ # Description + -v "dnssd://HP%20Color%20LaserJet..." \ # URL + -m everywhere # Model + +The model 'everywhere' is used for all printers produced after about 2009. + +[cups_guide]: