update publications
[~bandali/bndl.org] / content / post / arch-macbook-air.md
1 +++
2 title = "Arch GNU/Linux on MacBook Air 2013"
3 date = 2016-11-01
4 aliases = ["/2016/11/arch-macbook-air"]
5 lastmod = 2018-09-03T20:15:43-04:00
6 tags = ["arch", "macbook"]
7 draft = false
8 toc = true
9 [menu.main]
10 weight = 2001
11 identifier = "arch-gnu-linux-on-macbook-air-2013"
12 +++
13
14 This post summarizes how I install and dual-boot Arch GNU/Linux with
15 Full-Disk Encryption alongside macOS. It is not meant to be a
16 replacement for the [Installation Guide](https://wiki.archlinux.org/index.php/installation%5Fguide) or the former [Beginner's Guide](https://csdietz.github.io/arch-beginner-guide/).
17 Rather, it mostly serves as a small summary with a few useful notes
18 about the gotchas.
19
20 So, make sure you understand what you type into your terminal. If you
21 don't, checking out the Arch wiki should probably be your first step.
22
23 _Note:_ you will need internet access throughout the installation and
24 the MacBook Air's WiFi doesn't work out of the box on Arch. I
25 recommend using your phone's USB Tethering (if it does support it), or
26 using an Ethernet-USB adapter.
27
28
29 ## Shrinking the macOS partition {#shrinking-the-macos-partition}
30
31 The first step I take is resizing the HFS+ macOS partition to make
32 room for the new <abbr>GNU/Linux</abbr> installation. There are plenty
33 of tutorials on how to do this using macOS's Disk Utility, so do that
34 and then come back!
35
36
37 ## Creating a bootable Arch Installer USB {#creating-a-bootable-arch-installer-usb}
38
39 There are different ways of creating a bootable Arch USB, all
40 documented on the [USB flash installation media](https://wiki.archlinux.org/index.php/USB%5Fflash%5Finstallation%5Fmedia) page on the Arch wiki,
41 but the simplest one is using `dd` if you already have access to
42 another UNIX system.
43
44 <span class="red">Warning:</span> make sure you backup the data on your flash
45 drive, as `dd` will irrevocably destroy all data on it.
46
47 Use `lsblk` to find the name (block device) of your USB drive, then
48 run `dd` (as root) as shown below:
49
50 ```bash
51 dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
52 ```
53
54 Replace `/path/to/archlinux.iso` with the path to the Arch image you
55 have downloaded, and `/dev/sdx` with your drive.
56
57
58 ## Booting up from the USB {#booting-up-from-the-usb}
59
60 After creating the install USB, reboot your laptop and hold the alt
61 key and boot into the USB.
62
63 When booting is complete and you're presented with the prompt, it's a
64 good time to make sure you're connected to the internet (see the
65 _note_ at the top of this post).
66
67 Use `ping` to verify that you've established a connection:
68
69 ```bash
70 ping archlinux.org
71 ```
72
73
74 ## Updating the system clock {#updating-the-system-clock}
75
76 Once you're connected to the internet, make sure the system clock is
77 accurate:
78
79 ```bash
80 timedatectl set-ntp true # start and enable systemd-timesyncd
81 ```
82
83 You can check the service status using `timedatectl status`.
84
85
86 ## Partitioning {#partitioning}
87
88 I won't dive into partitioning and instead, I'll refer you to the
89 [Partitioning](https://wiki.archlinux.org/index.php/Partitioning) page of Arch wiki. Of the available partitioning tools, I
90 personally prefer `cfdisk`.
91
92
93 ## Setting up LVM & LUKS {#setting-up-lvm-and-luks}
94
95 I use a [LVM on LUKS](https://wiki.archlinux.org/index.php/Dm-crypt/Encrypting%5Fan%5Fentire%5Fsystem#LVM%5Fon%5FLUKS) setup, where I set up LVM on top of the encrypted
96 partition.
97
98 First, let's set up the underlying encrypted partition:
99
100 ```bash
101 cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 \
102 --iter-time 5000 --use-urandom -y luksFormat /dev/sdaX
103 ```
104
105 where `/dev/sdaX` is the partition you created in the last step
106 (e.g. `/dev/sda4`). For more information about the `cryptsetup`
107 options, see the [LUKS encryption options](https://wiki.archlinux.org/index.php/Dm-crypt/Device%5Fencryption#Encryption%5Foptions%5Ffor%5FLUKS%5Fmode).
108
109 Then we open the container:
110
111 ```bash
112 cryptsetup open --type luks /dev/sdaX lvm
113 ```
114
115 Now it's time to use lvm and prepare the logical volume(s):
116
117 ```bash
118 pvcreate /dev/mapper/lvm
119 vgcreate vg /dev/mapper/lvm
120 lvcreate --extents +100%FREE -n root vg
121 ```
122
123 This will create a physical volume on the mapping we just opened,
124 create a volume group named `vg` on the physical volume, and create a
125 logical volume named `root` that spans the entire volume group. More
126 complex setups are possible thanks to the great flexibility of lvm.
127
128 We now format the logical volume with `ext4`:
129
130 ```bash
131 mkfs.ext4 /dev/mapper/vg-root
132 ```
133
134
135 ## Installing the base system {#installing-the-base-system}
136
137 Let's mount the logical volume, make a directory for the mount point
138 of the boot partition, and mount the boot partition (`/dev/sda1`):
139
140 ```bash
141 mount /dev/mapper/vg-root /mnt
142 mkdir /mnt/boot
143 mount /dev/sda1 /mnt/boot
144 ```
145
146 Finally, let's install the base system (and optionally `base-devel`):
147
148 ```bash
149 pacstrap /mnt base base-devel
150 ```
151
152
153 ## Configuring the system {#configuring-the-system}
154
155 Let's generate the fstab:
156
157 ```bash
158 genfstab -U /mnt >> /mnt/etc/fstab
159 ```
160
161 Use your favorite terminal-based editor, edit the fstab file and add
162 the `discard` option for the root partition to enable TRIM on the SSD.
163
164 Now we change root into our newly installed system and will configure
165 it. Adjust these according to your own setup.
166
167 ```bash
168 arch-chroot /mnt /bin/bash
169 passwd # set the root password
170 echo myhostname > /etc/hostname # set the hostname
171 ln -s /usr/share/zoneinfo/Canada/Eastern /etc/localtime # time zone
172 hwclock --systohc --utc # write system clock to hardware clock (UTC)
173 useradd -m -G wheel -s /bin/bash myuser # create myuser
174 passwd myuser # set the password for myuser
175 echo "myuser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/myuser
176 # uncomment en_US.UTF-8 UTF-8 and other needed locales in /etc/locale.gen
177 locale-gen
178 echo LANG=en_US.UTF-8 > /etc/locale.conf
179 export LANG=en_US.UTF-8
180 ```
181
182 Then adjust the initramfs hooks in `/etc/mkinitcpio.conf` and enable
183 the `encrypt` and `lvm2` hooks, and make sure `keyboard` is available
184 before `encrypt` so you can actually type in the LUKS password when
185 booting. Your `HOOKS` line should look similar to this:
186
187 ```nil
188 HOOKS="base udev autodetect modconf block keyboard encrypt lvm2 filesystems fsck"
189 ```
190
191 After adjusting the hooks, build the initramfs:
192
193 ```bash
194 mkinitcpio -p linux
195 ```
196
197 Now, install the `intel-ucode` package. We'll configure the bootloader
198 to enable intel microcode updates.
199
200 ```bash
201 pacman -S intel-ucode
202 ```
203
204 Create the `/boot/loader/loader.conf` with the following content
205 (adjust the timeout to your liking):
206
207 ```nil
208 default arch
209 timeout 3
210 ```
211
212 Then create the entry for Arch:
213
214 ```bash
215 mkdir -p /boot/loader/entries
216 touch /boot/loader/entries/arch.conf
217 ```
218
219 Now edit `/boot/loader/entries/arch.conf` to specify the Arch entry:
220
221 ```nil
222 title Arch GNU/Linux
223 linux /vmlinuz-linux
224 initrd /intel-ucode.img
225 initrd /initramfs-linux.img
226 options cryptdevice=/dev/sdaX:vg:allow-discards root=/dev/mapper/vg-root rw
227 ```
228
229 Again, `/dev/sdaX` is the partition you created in the [partitioning](#partitioning)
230 step as the underlying encrypted partition.
231
232 Finally, install the bootloader, exit the chroot, umount and reboot!
233
234 ```bash
235 bootctl install
236 exit
237 umount -R /mnt
238 reboot
239 ```
240
241
242 ## Post-installation recommendations {#post-installation-recommendations}
243
244 Congratulations! You now have a minimal Arch installation.
245
246 At this point, I usually install my favorite AUR helper, [pacaur](https://aur.archlinux.org/packages/pacaur/), then
247 I install the [broadcom-wl-dkms](https://aur.archlinux.org/packages/broadcom-wl-dkms/) wireless driver and [mba6x\_bl-dkms](https://aur.archlinux.org/packages/mba6x%5Fbl-dkms/)
248 backlight driver to fix the post suspend/resume issue where three's no
249 brightness after waking up from suspend, and the only available
250 brightness would be 100%.
251
252 ```bash
253 pacaur -S linux-headers dkms # linux-headers is required for dkms
254 pacaur -S broadcom-wl-dkms
255 pacaur -S mba6x_bl-dkms
256 ```
257
258 Then, I'd like to install
259
260 - input, graphics, and sound drivers,
261 - a desktop environment (I prefer Xfce or LXQt),
262 - a display manager for login screen (lightdm or sddm), and
263 - a network manager (NetworkManager or ConnMan).
264
265 Check out the [General recommendations](https://wiki.archlinux.org/index.php/General%5Frecommendations) for more details.
266
267
268 ## References {#references}
269
270 Here are some resources I've come across each with lots of useful bits
271 and pieces, about installing Arch on a MacBook:
272
273 - [pandeiro/arch-on-air](https://github.com/pandeiro/arch-on-air)
274 - [Arch Linux on MacBook Pro Retina 2014 with DM-Crypt, LVM and suspend to disk](https://loicpefferkorn.net/2015/01/arch-linux-on-macbook-pro-retina-2014-with-dm-crypt-lvm-and-suspend-to-disk/)
275 - [Installing Archlinux on Macbook Air 2013](http://frankshin.com/installing-archlinux-on-macbook-air-2013/)
276 - [Arch Linux Installation with OS X on Macbook Air (Dual Boot)](http://panks.me/posts/2013/06/arch-linux-installation-with-os-x-on-macbook-air-dual-boot/)
277 - [Installing (encrypted) Arch Linux on an Apple MacBook Pro](https://visual-assault.org/2016/03/05/install-encrypted-arch-linux-on-apple-macbook-pro/)
278 - [Installing Arch Linux on a MacBook Air 2013](http://alexeyzabelin.com/arch-on-mac)
279 - [Arch Linux running on my MacBook](https://medium.com/phils-thought-bubble-of-recent-stuff/arch-linux-running-on-my-macbook-2ea525ebefe3)
280 - [Dual boot Arch Linux on MacBook Pro Installation](http://codylittlewood.com/arch-linux-on-macbook-pro-installation/)
281
282 [//]: # "Exported with love from a post written in Org mode"
283 [//]: # "- https://github.com/kaushalmodi/ox-hugo"