Add post: first-time Arch setup
This commit is contained in:
parent
610a0603cb
commit
6374ca2fc8
|
@ -0,0 +1,153 @@
|
||||||
|
---
|
||||||
|
title: "Notes from a first ever Arch Linux installation"
|
||||||
|
date: 2020-06-29T16:12:37+02:00
|
||||||
|
draft: false
|
||||||
|
tags: ["linux"]
|
||||||
|
---
|
||||||
|
|
||||||
|
After four years of using Ubuntu full-time on my laptop, I felt like dropping out of the Canonical feature churn and testing out a more lightweight Linux distribution. I probably spend 90% of my computer time in either a web browser or a terminal session, and I definitely don't need [Gnome](https://arstechnica.com/information-technology/2018/05/ubuntu-18-04-the-return-of-a-familiar-interface-marks-the-best-ubuntu-in-years/), [snapd](https://techtudor.blogspot.com/2020/06/four-reasons-why-snaps-are-anti-pattern.html), or any of the other Ubuntu bells or whistles to make this a comfortable experience.
|
||||||
|
|
||||||
|
So I decided to dive in and give [Arch Linux](https://www.archlinux.org/) running [XFCE](https://xfce.org/) a try. So far I'm really liking the minimal approach and the opportunity to get a bit closer to the underlying operating system, although I can confirm that Arch features some of the annoyances of Ubuntu (spoiler: Bluetooth sucks in particular :confused:).
|
||||||
|
|
||||||
|
![XFCE4 running on Arch](/desktop.png)
|
||||||
|
|
||||||
|
Here are some notes.
|
||||||
|
|
||||||
|
## Installation of Arch
|
||||||
|
|
||||||
|
I start by flashing the [Arch ISO image](https://www.archlinux.org/download/) onto a USB drive, which then booted into Arch's live setup environment on my new box just fine.
|
||||||
|
|
||||||
|
Arch comes without a graphical installer, so a command-line installation is unavoidable. [This gist](https://gist.github.com/rfwatson/f89fdf793f996e276878dec6f2cebc0b) contains the basic instructions to set up an encrypted Arch installation using LVM on an NVME machine.
|
||||||
|
|
||||||
|
The [original Gist](https://gist.github.com/kylemanna/cde147d777d243b82a85e9ac16b85458) is updated frequently and worth checking too but at the time of writing is missing several essential packages from the `pacstrap` command, including `mkinitcpio`, `lvm2`, `dhcpcd` (seemingly essential to connect to the internet when booting from the newly-installed OS, see below) and `linux` (the Linux kernel, doh).
|
||||||
|
|
||||||
|
## Rebooting and enabling networking
|
||||||
|
|
||||||
|
Then I rebooted. Unfortunately it was immediately clear that no internet connection was available, despite it having worked fine in the live installation environment, and ethernet being physically connected.
|
||||||
|
|
||||||
|
The problem was that `dhcpcd` hadn't been installed during the `pacstrap` phase, and starting the installation from scratch seemed the easiest option. After reinstalling with `dhcpcd` included, it was necessary to:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo systemctl enable dhcpcd
|
||||||
|
sudo systemctl start dhcpcd
|
||||||
|
sudo dhcpcd eno1 # check `ip a` for interface name
|
||||||
|
```
|
||||||
|
|
||||||
|
After this, the ethernet connection immediately became available.
|
||||||
|
|
||||||
|
## Installing XFCE
|
||||||
|
|
||||||
|
XFCE is a lightweight desktop environment for Unix-y machines. Installing is trivial:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo pacman -S xfce4 xfce4-goodies xorg
|
||||||
|
```
|
||||||
|
|
||||||
|
Making XFCE start automatically on boot required two config files ([source](https://www.reddit.com/r/archlinux/comments/atyzd4/trying_to_start_xfce4_on_boot/)).
|
||||||
|
|
||||||
|
Firstly `$HOME/.xinitrc`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
exec startxfce4
|
||||||
|
```
|
||||||
|
|
||||||
|
and at the end of `.zshrc` (or `.bashrc`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
if [ $(tty) == "/dev/tty1" ]; then
|
||||||
|
startx
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: there's probably a better way to do this using systemd but I haven't figured it out yet.
|
||||||
|
|
||||||
|
## Getting Bluetooth to work
|
||||||
|
|
||||||
|
Firstly
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo pacman -S bluez bluez-utils
|
||||||
|
sudo systemctl enable bluetooth.service
|
||||||
|
sudo systemctl start bluetooth.service
|
||||||
|
```
|
||||||
|
|
||||||
|
Then run `bluetoothctl` and use the following approximate sequence of steps:
|
||||||
|
|
||||||
|
```
|
||||||
|
power on
|
||||||
|
agent on
|
||||||
|
scan on
|
||||||
|
pair <device ID>
|
||||||
|
```
|
||||||
|
|
||||||
|
Despite the underlying bluez implementation being identical, my first impressions of Bluetooth support on Arch were much better than Ubuntu and everything seemed to work just nicely. But unfortunately after a few days my Bluetooth mouse mysteriously decided to stop being detected as an input device despite seemingly being successfully paired. :scream:
|
||||||
|
|
||||||
|
For now I'm falling back to a wired mouse and I'll update this blog if I figure out what's going wrong.
|
||||||
|
|
||||||
|
## Install a web browser
|
||||||
|
|
||||||
|
:shrug:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# and/or firefox-developer-edition
|
||||||
|
sudo pacman -S firefox
|
||||||
|
```
|
||||||
|
|
||||||
|
## Getting hibernate to work
|
||||||
|
|
||||||
|
Getting hibernation to work properly on Linux has been a source of much fun in the past and this time around was no exception.
|
||||||
|
|
||||||
|
At first I experienced consistent instantaneous wakeup from hibernation. After checking `journalctl` this turned out to be caused by a PCI USB extension board that I'd damaged slightly while removing the internal packaging from the computer post-transit. After physically detaching this useless board completely from the machine, the instantaneous wakeup was fixed!
|
||||||
|
|
||||||
|
However, the box still failed to resume from hibernation, sticking on a black screen shortly after the disk encryption password phase. This required a bit more tracking down, but further careful examination of `journalctl` revealed that the open source Nouveau drivers for NVIDIA graphics cards were spewing some suspicious logs during the hibernate phase. For example:
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: ------------[ cut here ]------------
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: nouveau 0000:01:00.0: timeout
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: WARNING: CPU: 1 PID: 140 at drivers/gpu/drm/nouveau/nvkm/engine/disp/cursgv100.c:31 gv100_disp_curs_idle.isra.0+0xd7/0xf0 [nouveau]
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: Modules linked in: mousedev uhid rfcomm cfg80211 cmac algif_hash intel_rapl_msr algif_skcipher 8021q snd_sof_pci af_alg garp snd_sof_intel_byt mrp snd_sof_intel_ipc intel_rapl_common stp bnep llc snd_sof_intel_hda_common snd_soc_hdac_hda sn>
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: rfkill ecc cec apple_mfi_fastcharge snd_timer rc_core snd mei_me syscopyarea mei sysfillrect soundcore sysimgblt fb_sys_fops intel_pch_thermal ie31200_edac wmi evdev mac_hid drm crypto_user agpgart ip_tables x_tables hid_apple hid_generic >
|
||||||
|
<snip>
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: Call Trace:
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: nvkm_object_init+0x3e/0x100 [nouveau]
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: nvkm_object_init+0x6f/0x100 [nouveau]
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: nvkm_object_init+0x6f/0x100 [nouveau]
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: nvkm_object_init+0x6f/0x100 [nouveau]
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: nvkm_object_init+0x6f/0x100 [nouveau]
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: nouveau_do_resume+0x29/0xd0 [nouveau]
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: nouveau_pmops_resume+0x60/0x90 [nouveau]
|
||||||
|
Jun 29 08:16:24 rob-arch kernel: ? pci_legacy_resume+0x80/0x80
|
||||||
|
```
|
||||||
|
|
||||||
|
As with all software I would much prefer to choose the FOSS option for NVIDIA drivers if possible, but the convenience of working hibernation is too much of a pull so I did quick `sudo pacman -S nvidia` (see [here](https://wiki.archlinux.org/index.php/NVIDIA) for more details) and rebooted. This time, the box both hibernated and resumed successfully :tada:
|
||||||
|
|
||||||
|
However, be warned that hibernation and Bluetooth also didn't play well together out of the box, and Bluetooth needed restarting manually after most resumptions. I suspect the right approach would be to add systemd hooks to either `bluetoothctl power off/on` or even unload the bluetooth module during the hibernate/resume cycle. However, I didn't bother to try this yet.
|
||||||
|
|
||||||
|
### Slow mirrors
|
||||||
|
|
||||||
|
It might be random but the Pacman mirrors chosen by my system were very slow (averaging 250k/s download speed for all packages).
|
||||||
|
|
||||||
|
As per the [Arch Wiki](https://wiki.archlinux.org/index.php/Mirrors#List_by_speed), this can be fixed by installing the `pacman-contrib` package and then using the contained `rankmirrors` script:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# change country=ES to something appropriate:
|
||||||
|
curl -s "https://www.archlinux.org/mirrorlist/?country=ES&protocol=https&use_mirror_status=on" | sed -e 's/^#Server/Server/' -e '/^#/d' | rankmirrors -n 5 -
|
||||||
|
```
|
||||||
|
|
||||||
|
The output of this command can be used to replace `/etc/pacman.d/mirrorlist` (backing it up first naturally). After doing this, package download speeds average several MB/s.
|
||||||
|
|
||||||
|
### Pacman
|
||||||
|
|
||||||
|
I was slightly intimidated by Pacman after becoming so comfortable with `apt-get` over the years, but I can confirm that it quickly becomes a friend. Better still, the package support is excellent and PPAs don't exist! For example `pacman -S docker-compose` works perfectly out of the box, with no need to install or manage PPA keys Ubuntu-style.
|
||||||
|
|
||||||
|
### Other bits
|
||||||
|
|
||||||
|
A handful of other softwares that I've installed so far:
|
||||||
|
|
||||||
|
- vim
|
||||||
|
- zsh
|
||||||
|
- Docker and Docker Compose
|
||||||
|
- [alacritty](https://github.com/alacritty/alacritty) (terminal emulator written in Rust with a strong community and lots of activity - so far fast and stable)
|
||||||
|
- [asdf](https://asdf-vm.com/)
|
Binary file not shown.
After Width: | Height: | Size: 351 KiB |
Loading…
Reference in New Issue