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