[wip] add wip index page and table of contents for posts
[~bandali/bndl.org] / content-org / aminb.org
1 #+title: sources of aminb.org's pages and posts
2
3 #+hugo_base_dir: ..
4 #+seq_todo: TODO DRAFT DONE
5 #+property: header-args :eval never-export
6 #+options: author:nil
7
8 #+macro: abbr @@html:<abbr>$1</abbr>@@
9 #+macro: span @@html:<span class="$1">$2</span>@@
10
11 * Home
12 :PROPERTIES:
13 :EXPORT_HUGO_SECTION: /
14 :EXPORT_FILE_NAME: _index
15 :END:
16
17 I'm a [[/uw][graduate student]] in the [[https://watform.uwaterloo.ca][WatForm]] group at University of Waterloo,
18 supervised by [[https://cs.uwaterloo.ca/~nday/][Dr. Nancy Day]]. I'm interested in using formal methods,
19 especially type systems, to help make software more reliable.
20
21 * Pages
22 :PROPERTIES:
23 :EXPORT_HUGO_SECTION: /
24 :EXPORT_HUGO_MENU: :menu topnav
25 :END:
26
27 ** CV
28 :PROPERTIES:
29 :EXPORT_FILE_NAME: cv
30 :END:
31
32 My academic {{{abbr(CV)}}} is available as [[/cv.pdf][cv.pdf]],
33 and an outdated professional resume is available as [[/resume.pdf][resume.pdf]] as
34 well.
35
36 I'm interested in functional programming and functional languages,
37 type systems, and formal methods in general. I love writing Haskell
38 and I'm looking into Rust and Lean as well. Feel free to [[/contact][drop me a
39 line]] if you like to geek out about any of the above.
40
41 ** TODO Now
42
43 ** TODO Projects
44
45 ** TODO Contact
46
47 * Posts
48 :PROPERTIES:
49 :EXPORT_HUGO_SECTION: post
50 :EXPORT_HUGO_MENU: :menu main
51 :EXPORT_HUGO_AUTO_SET_LASTMOD: t
52 :END:
53
54 ** Arch GNU/Linux on MacBook Air 2013 :arch:macbook:
55 :PROPERTIES:
56 :EXPORT_FILE_NAME: arch-macbook-air
57 :EXPORT_DATE: 2016-11-01
58 :EXPORT_OPTIONS: ^:{}
59 :EXPORT_HUGO_MENU: :menu main
60 :EXPORT_HUGO_ALIASES: /2016/11/arch-macbook-air
61 :EXPORT_HUGO_CUSTOM_FRONT_MATTER: :toc true
62 :END:
63
64 This post summarizes how I install and dual-boot Arch GNU/Linux with
65 Full-Disk Encryption alongside macOS. It is not meant to be a
66 replacement for the [[https://wiki.archlinux.org/index.php/installation_guide][Installation Guide]] or the former [[https://csdietz.github.io/arch-beginner-guide/][Beginner's Guide]].
67 Rather, it mostly serves as a small summary with a few useful notes
68 about the gotchas.
69
70 So, make sure you understand what you type into your terminal. If you
71 don't, checking out the Arch wiki should probably be your first step.
72
73 /Note:/ you will need internet access throughout the installation and
74 the MacBook Air's WiFi doesn't work out of the box on Arch. I
75 recommend using your phone's USB Tethering (if it does support it), or
76 using an Ethernet-USB adapter.
77
78 *** Shrinking the macOS partition
79
80 The first step I take is resizing the HFS+ macOS partition to make
81 room for the new {{{abbr(GNU/Linux)}}} installation. There are plenty
82 of tutorials on how to do this using macOS's Disk Utility, so do that
83 and then come back!
84
85 *** Creating a bootable Arch Installer USB
86
87 There are different ways of creating a bootable Arch USB, all
88 documented on the [[https://wiki.archlinux.org/index.php/USB_flash_installation_media][USB flash installation media]] page on the Arch wiki,
89 but the simplest one is using =dd= if you already have access to
90 another UNIX system.
91
92 {{{span(red,Warning:)}}} make sure you backup the data on your flash
93 drive, as =dd= will irrevocably destroy all data on it.
94
95 Use =lsblk= to find the name (block device) of your USB drive, then
96 run =dd= (as root) as shown below:
97
98 #+begin_src bash
99 dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
100 #+end_src
101
102 Replace =/path/to/archlinux.iso= with the path to the Arch image you
103 have downloaded, and =/dev/sdx= with your drive.
104
105 *** Booting up from the USB
106
107 After creating the install USB, reboot your laptop and hold the alt
108 key and boot into the USB.
109
110 When booting is complete and you're presented with the prompt, it's a
111 good time to make sure you're connected to the internet (see the
112 /note/ at the top of this post).
113
114 Use =ping= to verify that you've established a connection:
115
116 #+begin_src bash
117 ping archlinux.org
118 #+end_src
119
120 *** Updating the system clock
121
122 Once you're connected to the internet, make sure the system clock is
123 accurate:
124
125 #+begin_src bash
126 timedatectl set-ntp true # start and enable systemd-timesyncd
127 #+end_src
128
129 You can check the service status using =timedatectl status=.
130
131 *** Partitioning
132 :PROPERTIES:
133 :CUSTOM_ID: partitioning
134 :END:
135
136 I won't dive into partitioning and instead, I'll refer you to the
137 [[https://wiki.archlinux.org/index.php/Partitioning][Partitioning]] page of Arch wiki. Of the available partitioning tools, I
138 personally prefer =cfdisk=.
139
140 *** Setting up LVM & LUKS
141
142 I use a [[https://wiki.archlinux.org/index.php/Dm-crypt/Encrypting_an_entire_system#LVM_on_LUKS][LVM on LUKS]] setup, where I set up LVM on top of the encrypted
143 partition.
144
145 First, let's set up the underlying encrypted partition:
146
147 #+begin_src bash
148 cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 \
149 --iter-time 5000 --use-urandom -y luksFormat /dev/sdaX
150 #+end_src
151
152 where =/dev/sdaX= is the partition you created in the last step
153 (e.g. =/dev/sda4=). For more information about the =cryptsetup=
154 options, see the [[https://wiki.archlinux.org/index.php/Dm-crypt/Device_encryption#Encryption_options_for_LUKS_mode][LUKS encryption options]].
155
156 Then we open the container:
157
158 #+begin_src bash
159 cryptsetup open --type luks /dev/sdaX lvm
160 #+end_src
161
162 Now it's time to use lvm and prepare the logical volume(s):
163
164 #+begin_src bash
165 pvcreate /dev/mapper/lvm
166 vgcreate vg /dev/mapper/lvm
167 lvcreate --extents +100%FREE -n root vg
168 #+end_src
169
170 This will create a physical volume on the mapping we just opened,
171 create a volume group named =vg= on the physical volume, and create a
172 logical volume named =root= that spans the entire volume group. More
173 complex setups are possible thanks to the great flexibility of lvm.
174
175 We now format the logical volume with =ext4=:
176
177 #+begin_src bash
178 mkfs.ext4 /dev/mapper/vg-root
179 #+end_src
180
181 *** Installing the base system
182
183 Let's mount the logical volume, make a directory for the mount point
184 of the boot partition, and mount the boot partition (=/dev/sda1=):
185
186 #+begin_src bash
187 mount /dev/mapper/vg-root /mnt
188 mkdir /mnt/boot
189 mount /dev/sda1 /mnt/boot
190 #+end_src
191
192 Finally, let's install the base system (and optionally =base-devel=):
193
194 #+begin_src bash
195 pacstrap /mnt base base-devel
196 #+end_src
197
198 *** Configuring the system
199
200 Let's generate the fstab:
201
202 #+begin_src bash
203 genfstab -U /mnt >> /mnt/etc/fstab
204 #+end_src
205
206 Use your favorite terminal-based editor, edit the fstab file and add
207 the =discard= option for the root partition to enable TRIM on the SSD.
208
209 Now we change root into our newly installed system and will configure
210 it. Adjust these according to your own setup.
211
212 #+begin_src bash
213 arch-chroot /mnt /bin/bash
214 passwd # set the root password
215 echo myhostname > /etc/hostname # set the hostname
216 ln -s /usr/share/zoneinfo/Canada/Eastern /etc/localtime # time zone
217 hwclock --systohc --utc # write system clock to hardware clock (UTC)
218 useradd -m -G wheel -s /bin/bash myuser # create myuser
219 passwd myuser # set the password for myuser
220 echo "myuser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/myuser
221 # uncomment en_US.UTF-8 UTF-8 and other needed locales in /etc/locale.gen
222 locale-gen
223 echo LANG=en_US.UTF-8 > /etc/locale.conf
224 export LANG=en_US.UTF-8
225 #+end_src
226
227 Then adjust the initramfs hooks in =/etc/mkinitcpio.conf= and enable
228 the =encrypt= and =lvm2= hooks, and make sure =keyboard= is available
229 before =encrypt= so you can actually type in the LUKS password when
230 booting. Your =HOOKS= line should look similar to this:
231
232 #+begin_src
233 HOOKS="base udev autodetect modconf block keyboard encrypt lvm2 filesystems fsck"
234 #+end_src
235
236 After adjusting the hooks, build the initramfs:
237
238 #+begin_src bash
239 mkinitcpio -p linux
240 #+end_src
241
242 Now, install the =intel-ucode= package. We'll configure the bootloader
243 to enable intel microcode updates.
244
245 #+begin_src bash
246 pacman -S intel-ucode
247 #+end_src
248
249 Create the =/boot/loader/loader.conf= with the following content
250 (adjust the timeout to your liking):
251
252 #+begin_src
253 default arch
254 timeout 3
255 #+end_src
256
257 Then create the entry for Arch:
258
259 #+begin_src bash
260 mkdir -p /boot/loader/entries
261 touch /boot/loader/entries/arch.conf
262 #+end_src
263
264 Now edit =/boot/loader/entries/arch.conf= to specify the Arch entry:
265
266 #+begin_src
267 title Arch GNU/Linux
268 linux /vmlinuz-linux
269 initrd /intel-ucode.img
270 initrd /initramfs-linux.img
271 options cryptdevice=/dev/sdaX:vg:allow-discards root=/dev/mapper/vg-root rw
272 #+end_src
273
274 Again, =/dev/sdaX= is the partition you created in the [[#partitioning][partitioning]]
275 step as the underlying encrypted partition.
276
277 Finally, install the bootloader, exit the chroot, umount and reboot!
278
279 #+begin_src bash
280 bootctl install
281 exit
282 umount -R /mnt
283 reboot
284 #+end_src
285
286 *** Post-installation recommendations
287
288 Congratulations! You now have a minimal Arch installation.
289
290 At this point, I usually install my favorite AUR helper, [[https://aur.archlinux.org/packages/pacaur/][pacaur]], then
291 I install the [[https://aur.archlinux.org/packages/broadcom-wl-dkms/][broadcom-wl-dkms]] wireless driver and [[https://aur.archlinux.org/packages/mba6x_bl-dkms/][mba6x_bl-dkms]]
292 backlight driver to fix the post suspend/resume issue where three's no
293 brightness after waking up from suspend, and the only available
294 brightness would be 100%.
295
296 #+begin_src bash
297 pacaur -S linux-headers dkms # linux-headers is required for dkms
298 pacaur -S broadcom-wl-dkms
299 pacaur -S mba6x_bl-dkms
300 #+end_src
301
302 Then, I'd like to install
303
304 - input, graphics, and sound drivers,
305 - a desktop environment (I prefer Xfce or LXQt),
306 - a display manager for login screen (lightdm or sddm), and
307 - a network manager (NetworkManager or ConnMan).
308
309 Check out the [[https://wiki.archlinux.org/index.php/General_recommendations][General recommendations]] for more details.
310
311 *** References
312
313 Here are some resources I've come across each with lots of useful bits
314 and pieces, about installing Arch on a MacBook:
315
316 - [[https://github.com/pandeiro/arch-on-air][pandeiro/arch-on-air]]
317 - [[https://loicpefferkorn.net/2015/01/arch-linux-on-macbook-pro-retina-2014-with-dm-crypt-lvm-and-suspend-to-disk/][Arch Linux on MacBook Pro Retina 2014 with DM-Crypt, LVM and suspend to disk]]
318 - [[http://frankshin.com/installing-archlinux-on-macbook-air-2013/][Installing Archlinux on Macbook Air 2013]]
319 - [[http://panks.me/posts/2013/06/arch-linux-installation-with-os-x-on-macbook-air-dual-boot/][Arch Linux Installation with OS X on Macbook Air (Dual Boot)]]
320 - [[https://visual-assault.org/2016/03/05/install-encrypted-arch-linux-on-apple-macbook-pro/][Installing (encrypted) Arch Linux on an Apple MacBook Pro]]
321 - [[http://alexeyzabelin.com/arch-on-mac][Installing Arch Linux on a MacBook Air 2013]]
322 - [[https://medium.com/phils-thought-bubble-of-recent-stuff/arch-linux-running-on-my-macbook-2ea525ebefe3][Arch Linux running on my MacBook]]
323 - [[http://codylittlewood.com/arch-linux-on-macbook-pro-installation/][Dual boot Arch Linux on MacBook Pro Installation]]
324
325 * Meta
326 ** Search
327 :PROPERTIES:
328 :EXPORT_HUGO_SECTION: /
329 :EXPORT_FILE_NAME: search
330 :EXPORT_HUGO_LAYOUT: search
331 :EXPORT_HUGO_OUTPUTS: html json
332 :EXPORT_HUGO_CUSTOM_FRONT_MATTER: :sitemap '((priority . 0.1))
333 :END:
334 Results from static site search implemented using /Fusejs/, /jquery/
335 and /mark.js/. -- [[https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae][Source]]
336
337 * COMMENT Local Variables :ARCHIVE:
338 # Local Variables:
339 # org-hugo-footer: "\n\n[//]: # \"Exported with love from a post written in Org mode\"\n[//]: # \"- https://github.com/kaushalmodi/ox-hugo\""
340 # End: