Arch Linux on MacBook Air 2013
This post summarizes how I install and dual-boot Arch Linux with Full-Disk Encryption alongside macOS. It is not meant to be a replacement for the Installation Guide or the former Beginner’s Guide. Rather, it mostly serves as a small summary with a few useful notes about the gotchas.
So, make sure you understand what you type into your terminal. If you don’t, checking out the Arch wiki should probably be your first step.
Note: you will need internet access throughout the installation and the MacBook Air’s WiFi doesn’t work out of the box on Arch Linux. I recommend using your phone’s USB Tethering (if it does support it), or using an Ethernet-USB adapter.
Shrinking the macOS partition
The first step I take is resizing the HFS+ macOS partition to make room for the new GNU/Linux installation. There are plenty of tutorials on how to do this using macOS’s Disk Utility, so do that and then come back!
Creating a bootable Arch Linux Installer USB
There are different ways of creating a bootable Arch Linux USB, all
documented on the USB flash installation media page on
the Arch wiki, but the simplest one is using
dd if you already have
access to another UNIX system.
Warning: make sure you backup the data on
your flash drive, as
dd will irrevocably destroy all data on it.
lsblk to find the name (block device) of your USB drive, then
dd (as root) as shown below:
dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
/path/to/archlinux.iso with the path to the Arch image you
have downloaded, and
/dev/sdx with your drive.
Booting up from the USB
After creating the install USB, reboot your laptop and hold the alt key and boot into the USB.
When booting is complete and you’re presented with the prompt, it’s a good time to make sure you’re connected to the internet (see the note at the top of this post).
ping to verify that you’ve established a connection:
Updating the system clock
Once you’re connected to the internet, make sure the system clock is accurate:
timedatectl set-ntp true # start and enable systemd-timesyncd
You can check the service status using
I won’t dive into partitioning and instead, I’ll refer you to
the Partitioning page of Arch wiki. Of the available
partitioning tools, I personally prefer
Setting up LVM & LUKS
I use a LVM on LUKS setup, where I set up LVM on top of the encrypted partition.
First, let’s set up the underlying encrypted partition:
cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 \ --iter-time 5000 --use-urandom -y luksFormat /dev/sdaX
/dev/sdaX is the partition you created in the last step
/dev/sda4). For more information about the
options, see the LUKS encryption options.
Then we open the container:
cryptsetup open --type luks /dev/sdaX lvm
Now it’s time to use lvm and prepare the logical volume(s):
pvcreate /dev/mapper/lvm vgcreate vg /dev/mapper/lvm lvcreate --extents +100%FREE -n root vg
This will create a physical volume on the mapping we just opened,
create a volume group named
vg on the physical volume, and create a
logical volume named
root that spans the entire volume group. More
complex setups are possible thanks to the great flexibility of lvm.
We now format the logical volume with
Installing the base system
Let’s mount the logical volume, make a directory for the mount point
of the boot partition, and mount the boot partition (
mount /dev/mapper/vg-root /mnt mkdir /mnt/boot mount /dev/sda1 /mnt/boot
Finally, let’s install the base system (and optionally
pacstrap /mnt base base-devel
Configuring the system
Let’s generate the fstab:
genfstab -U /mnt >> /mnt/etc/fstab
Use your favorite terminal-based editor, edit the fstab file and add
discard option for the root partition to enable TRIM on the
Now we change root into our newly installed system and will configure it. Adjust these according to your own setup.
arch-chroot /mnt /bin/bash passwd # set the root password echo myhostname > /etc/hostname # set the hostname ln -s /usr/share/zoneinfo/Canada/Eastern /etc/localtime # time zone hwclock --systohc --utc # write system clock to hardware clock (UTC) useradd -m -G wheel -s /bin/bash myuser # create myuser passwd myuser # set the password for myuser echo "myuser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/myuser # uncomment en_US.UTF-8 UTF-8 and other needed locales in /etc/locale.gen locale-gen echo LANG=en_US.UTF-8 > /etc/locale.conf export LANG=en_US.UTF-8
Then adjust the initramfs hooks in
/etc/mkinitcpio.conf and enable
lvm2 hooks, and make sure
keyboard is available
encrypt so you can actually type in the LUKS password when
HOOKS line should look similar to this:
HOOKS="base udev autodetect modconf block keyboard encrypt lvm2 filesystems fsck"
After adjusting the hooks, build the initramfs:
mkinitcpio -p linux
Now, install the
intel-ucode package. We’ll configure the bootloader
to enable intel microcode updates.
pacman -S intel-ucode
/boot/loader/loader.conf with the following content
(adjust the timeout to your liking):
default arch timeout 3
Then create the entry for Arch:
mkdir -p /boot/loader/entries touch /boot/loader/entries/arch.conf
/boot/loader/entries/arch.conf to specify the Arch entry:
title Arch Linux linux /vmlinuz-linux initrd /intel-ucode.img initrd /initramfs-linux.img options cryptdevice=/dev/sdaX:vg:allow-discards root=/dev/mapper/vg-root rw
/dev/sdaX is the partition you created in the
Partitioning step as the underlying encrypted partition.
Finally, install the bootloader, exit the chroot, umount and reboot!
bootctl install exit umount -R /mnt reboot
Congratulations! You now have a minimal Arch installation.
At this point, I usually install my favorite AUR helper, pacaur, then I install the broadcom-wl-dkms wireless driver and mba6x_bl-dkms backlight driver to fix the post suspend/resume issue where three’s no brightness after waking up from suspend, and the only available brightness would be 100%.
pacaur -S linux-headers dkms # linux-headers is required for dkms pacaur -S broadcom-wl-dkms pacaur -S mba6x_bl-dkms
Then, I’d like to install
- input, graphics, and sound drivers,
- a desktop environment (I prefer Xfce or LXQt),
- a display manager for login screen (lightdm or sddm), and
- a network manager (NetworkManager or ConnMan).
Check out the General recommendations for more details.
Here are some resources I’ve come across each with lots of useful bits and pieces, about installing Arch on a MacBook:
- Arch Linux on MacBook Pro Retina 2014 with DM-Crypt, LVM and suspend to disk
- Installing Archlinux on Macbook Air 2013
- Arch Linux Installation with OS X on Macbook Air (Dual Boot)
- Installing (encrypted) Arch Linux on an Apple MacBook Pro
- Installing Arch Linux on a MacBook Air 2013
- Arch Linux running on my MacBook
- Dual boot Arch Linux on MacBook Pro Installation