Installing Arch on Frame.work
on frame.work
- Motivation
- Hardware Setup
- Installation
- Troubleshooting and Recovery
- Next up
- Switching between Ubuntu and Arch
Motivation Permalink
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 Permalink
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 Permalink
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 Permalink
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 Permalink
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 listreturnedwlan0station wlan0 scandoesn’t appear to do anything but…station wlan0 get-networksthen lists the available wifi networksstation wlan0 connect MyWifiNetworkName(obviously not my real wifi name) then asks you for the Wifi passworddevice wlan0 showconfirms everything looks okstation wlan0 showconfirms you are connected. If it says connecting, wait a moment.exit
Confirm you have wifi by running ping archlinux.org.
Setup NTP Permalink
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 Permalink
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 Permalink
Run fdisk /dev/sda. (in my case).
- use
mif you need help - use
pto print the current partitions and confirm you are on the correct partitions - use
dto delete the only partition currently on the drive - use
nto create a new partition and specify the size of at least 260mb. I did+512M. - use
tto change the partition type toEFI - use
nto 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
tto change the partition type toLinux swap - use
nto create another partition. Let it take the remaining space. - use
tto change the partition type. The installation guide said to make itLinux roothowever the labels were all cut off on the frame.work display due to the screen size. I ended up using thelinuxalias from the bottom of the screen, though I am pretty sure that was not the correct one. Seems to have worked though. - use
vto verify that everything is ok; andpif you want to review it. - use
wto write the changes to disk
Our partitions are:
- EFI : /dev/sda1
- swap : /dev/sda2
- root : /dev/sda3
Format the Drive Permalink
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 Permalink
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 Permalink
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 Permalink
arch-chroot /mnt
Set your locale Permalink
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.genand uncommenten_US.UTF-8 UTF8nano /etc/locale.confand addLANG=en_US.UTF-8
Setup your hostname Permalink
nano /etc/hostnameand add a single line that is your new hostnamemyhostnameor whatever
Then add entries to /etc/hosts:
127.0.0.1 localhost
::1 localhost
127.0.1.1 myhostname.localdomain myhostname
Init ramdisk Permalink
mkinitcpio -P
Set a root password Permalink
passwd
Install grub Permalink
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/grubboot/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 Permalink
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 Permalink
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 Permalink
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.servicesystemctl 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 Permalink
Install, customize, configure.
Switching between Ubuntu and Arch Permalink
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.

