Installing Arch on Frame.work
on frame.work
- Motivation
- Hardware Setup
- Installation
- Troubleshooting and Recovery
- Next up
- Switching between Ubuntu and Arch
Motivation
As I mentioned in frame.work: First Impressions, my intention with the frame.work laptop was to multiboot - not with multiple OSes on a single drive, but with swappable drives.
To that end, the internal NVME is being used to store my work directory (git repos, etc) - which TBH, is where the speed needs to be since that is where all the builds are.
The individual OS drives are on swappable (in this case) 250gb modules.
I am also using Ventoy on a USB-A stick for OS installation.
I had installed Ubuntu 21.04 on the first 250gb module. I’ve been using that for about a month, and it has been working out really well.
Now, for the second module. I have decided to install Arch. For this I was using archlinux-2021.08.01-x86_64.iso
. I know
it’s a month out of date, but I forgot to download a newer iso.
Like last time, I would normally use ZFS for my filesystem; however, for a single external USB drive I decided not to do that.
Hardware Setup
This was the easy part.
- Unplug the power. Is that necessary? No clue, but it seemed like a good idea.
- Remove the 250gb Ubuntu module.
- Insert a new blank 250gb module.
- Insert the Ventoy USB.
- Re-attach power. This step wasn’t strickly necessary as I was at 100% power but I prefer to do OS installs while plugged in.
- Turn on the power.
During the initial bootup, the Ventoy USB was detected. I selected the archlinux iso and away we went.
Installation
In theory, I was following the official installation guide, however I did not have a secondary computer in front of me at the time. As such, I just took a few notes before doing the above steps and took a go of it.
Verify EFI
First, I wanted to make sure I was booted into EFI mode.
ls /sys/firmware/efi/efivars
I saw a directory of files, so… we’re good.
Setup Wifi
ip link
This reported that my wifi device was wlan0
.
rfkill list
This reported that nothing was soft or hard blocked.
iwctl
This puts you into the iwd
interactive configuration.
device list
returnedwlan0
station wlan0 scan
doesn’t appear to do anything but…station wlan0 get-networks
then lists the available wifi networksstation wlan0 connect MyWifiNetworkName
(obviously not my real wifi name) then asks you for the Wifi passworddevice wlan0 show
confirms everything looks okstation wlan0 show
confirms you are connected. If it says connecting, wait a moment.exit
Confirm you have wifi by running ping archlinux.org
.
Setup NTP
timedatectl set-ntp true
timedatectl status
While you are here, it’s a good time to figure out the correct terminology for your timezone.
It might seem obvious, but You aren’t going to be selecting “Los Angeles”, for example, like you would in Ubuntu.
You can run timedatactl list-timezones
to find the right one. For me it was “US/Pacific”.
Find the Drive
Running lsblk
will show you a list of drives. In my case, it showed a 64gb, 250gb and a 500gb.
- The 64gb was the Ventoy USB
- THe 500gb was the NVME
- The 250gb was the new drive and already contained a FAT partition
In my case, the 250gb drive was sda
(with sda1
already defined).
Partition the Drive
Run fdisk /dev/sda
. (in my case).
- use
m
if you need help - use
p
to print the current partitions and confirm you are on the correct partitions - use
d
to delete the only partition currently on the drive - use
n
to create a new partition and specify the size of at least 260mb. I did+512M
. - use
t
to change the partition type toEFI
- use
n
to create another partition. Size should be roughly (memory + 2GB). I have 64gb so I did+70GB
. I has debated not doing a swap partition, but if I wanted to hibernate down the road, I didn’t want to have to re-format my drive. - use
t
to change the partition type toLinux swap
- use
n
to create another partition. Let it take the remaining space. - use
t
to change the partition type. The installation guide said to make itLinux root
however the labels were all cut off on the frame.work display due to the screen size. I ended up using thelinux
alias from the bottom of the screen, though I am pretty sure that was not the correct one. Seems to have worked though. - use
v
to verify that everything is ok; andp
if you want to review it. - use
w
to write the changes to disk
Our partitions are:
- EFI : /dev/sda1
- swap : /dev/sda2
- root : /dev/sda3
Format the Drive
First the EFI partition:
mkfs.fat -F32 /dev/sda1
Then the swap partition:
mkswap /dev/sda2
And finally the root partition:
mkfs.ext4 /dev/sda3
Mount the Drive
First, we mount the root partition
mount /dev/sda3 /mnt
Then we need to create a place to mount the EFI and mount it.
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
Finally, enable the swap
swapon /dev/sda2
Initializing the System
Review /etc/pacman.d/mirrorlist
and make sure it looks reasonable.
pacstrap /mnt base linux linux-firmware nano man-db man-pages texinfo grub efibootmgr intel-ucode iwd
In my case, I forgot iwd
which prevented the new system from being able to connect to the network. See Troubleshooting and Recovery.
Generate the fstab:
genfstab -U /mnt >> /mnt/etc/fstab
Review /mnt/etc/fstab
and make sure it looks reasonable.
Chroot
arch-chroot /mnt
Set your locale
Based on our earlier timedatectl
query.
ln -sf /usr/share/zoneinfo/US/Pacific /etc/location
Set the hardware clock to UTC
hwclock --systohc
nano /etc/locale.gen
and uncommenten_US.UTF-8 UTF8
nano /etc/locale.conf
and addLANG=en_US.UTF-8
Setup your hostname
nano /etc/hostname
and add a single line that is your new hostnamemyhostname
or whatever
Then add entries to /etc/hosts
:
127.0.0.1 localhost
::1 localhost
127.0.1.1 myhostname.localdomain myhostname
Init ramdisk
mkinitcpio -P
Set a root password
passwd
Install grub
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --removable
Note that /boot
is technically /mnt/boot
from earlier. You are inside the chroot.
The bootloader id of grub
will create (at later steps):
/boot/EFI/grub
boot/grub/x86_64-efi/
/boot/grub/grub.cfg
I didn’t originally include --removable
but the drive would not show up in the UEFI bootloader after switching OSes.
Modify /etc/default/grub
if needed.
grub-mkconfig -o /boot/grub/grub.cfg
Microcode
There was a note on the Arch wiki about making some changes to the kernel configuration to support the microcode. As I didn’t have the wiki in front of me during this process, I’ll probably need to go back and revisit that.
Exiting chroot
exit
umount -R /mnt
reboot
At this stage, remove install media and login as root.
You’ll want to continue with General recommendation. I still need to do that myself.
Troubleshooting and Recovery
The first time through, I did not include the iwd
package. I could not access dhcp, nmcli, iwctl, anything.
I also couldn’t install any packages.
So what do you do?
- Reboot onto the live iso. On this step, I had to go into the BIOS as the frame.work didn’t seem to allow me to default to the removable USB or reorder the boot entries – just check or uncheck them. To reorder them, you need to use the
+
/-
buttons while highlighting the item in non-Auto mode. Thanks to lbkNhubert for the solution. - Run the Mount the Drive steps
- Run
arch-chroot /mnt
pacman -S iwd
- Run the Exiting chroot steps
- If you unchecked the boot entry in the BIOS, make sure to re-enable it.
Once I was back into the system, I was able to run iwctl
using the same Setup Wifi steps I did during the installer process.
One caveat was that systemd-resolve.service
was not running.
I needed to uncomment the DNS entry in /etc/systemd/resolved.conf
and add some values to it. I just copied the fallback.
Then restart the services:
systemctl restart systemd-resolved.service
systemctl restart iwd.service
It’s still not always working on bootup - which I’ll need to look into. Running those two systemctl
lines after startup does get wifi working though.
Next up
Install, customize, configure.
Switching between Ubuntu and Arch
When I went to swap the Arch drive with the Ubuntu one, the BIOS didn’t see any drives. I tried rebooting multiple times.
The --removable
on grub-install should help with that, however I am not sure that is a long term solution. Maybe I need to modify the grub configuration. Also, maybe I need to do a similar fix for Ubuntu.