[wip] add wip index page and table of contents for posts
[~bandali/bndl.org] / content-org / aminb.org
... / ...
CommitLineData
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
17I'm a [[/uw][graduate student]] in the [[https://watform.uwaterloo.ca][WatForm]] group at University of Waterloo,
18supervised by [[https://cs.uwaterloo.ca/~nday/][Dr. Nancy Day]]. I'm interested in using formal methods,
19especially 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
32My academic {{{abbr(CV)}}} is available as [[/cv.pdf][cv.pdf]],
33and an outdated professional resume is available as [[/resume.pdf][resume.pdf]] as
34well.
35
36I'm interested in functional programming and functional languages,
37type systems, and formal methods in general. I love writing Haskell
38and I'm looking into Rust and Lean as well. Feel free to [[/contact][drop me a
39line]] 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
64This post summarizes how I install and dual-boot Arch GNU/Linux with
65Full-Disk Encryption alongside macOS. It is not meant to be a
66replacement 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]].
67Rather, it mostly serves as a small summary with a few useful notes
68about the gotchas.
69
70So, make sure you understand what you type into your terminal. If you
71don't, checking out the Arch wiki should probably be your first step.
72
73/Note:/ you will need internet access throughout the installation and
74the MacBook Air's WiFi doesn't work out of the box on Arch. I
75recommend using your phone's USB Tethering (if it does support it), or
76using an Ethernet-USB adapter.
77
78*** Shrinking the macOS partition
79
80The first step I take is resizing the HFS+ macOS partition to make
81room for the new {{{abbr(GNU/Linux)}}} installation. There are plenty
82of tutorials on how to do this using macOS's Disk Utility, so do that
83and then come back!
84
85*** Creating a bootable Arch Installer USB
86
87There are different ways of creating a bootable Arch USB, all
88documented on the [[https://wiki.archlinux.org/index.php/USB_flash_installation_media][USB flash installation media]] page on the Arch wiki,
89but the simplest one is using =dd= if you already have access to
90another UNIX system.
91
92{{{span(red,Warning:)}}} make sure you backup the data on your flash
93drive, as =dd= will irrevocably destroy all data on it.
94
95Use =lsblk= to find the name (block device) of your USB drive, then
96run =dd= (as root) as shown below:
97
98#+begin_src bash
99dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
100#+end_src
101
102Replace =/path/to/archlinux.iso= with the path to the Arch image you
103have downloaded, and =/dev/sdx= with your drive.
104
105*** Booting up from the USB
106
107After creating the install USB, reboot your laptop and hold the alt
108key and boot into the USB.
109
110When booting is complete and you're presented with the prompt, it's a
111good time to make sure you're connected to the internet (see the
112/note/ at the top of this post).
113
114Use =ping= to verify that you've established a connection:
115
116#+begin_src bash
117ping archlinux.org
118#+end_src
119
120*** Updating the system clock
121
122Once you're connected to the internet, make sure the system clock is
123accurate:
124
125#+begin_src bash
126timedatectl set-ntp true # start and enable systemd-timesyncd
127#+end_src
128
129You can check the service status using =timedatectl status=.
130
131*** Partitioning
132:PROPERTIES:
133:CUSTOM_ID: partitioning
134:END:
135
136I 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
138personally prefer =cfdisk=.
139
140*** Setting up LVM & LUKS
141
142I 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
143partition.
144
145First, let's set up the underlying encrypted partition:
146
147#+begin_src bash
148cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 \
149 --iter-time 5000 --use-urandom -y luksFormat /dev/sdaX
150#+end_src
151
152where =/dev/sdaX= is the partition you created in the last step
153(e.g. =/dev/sda4=). For more information about the =cryptsetup=
154options, see the [[https://wiki.archlinux.org/index.php/Dm-crypt/Device_encryption#Encryption_options_for_LUKS_mode][LUKS encryption options]].
155
156Then we open the container:
157
158#+begin_src bash
159cryptsetup open --type luks /dev/sdaX lvm
160#+end_src
161
162Now it's time to use lvm and prepare the logical volume(s):
163
164#+begin_src bash
165pvcreate /dev/mapper/lvm
166vgcreate vg /dev/mapper/lvm
167lvcreate --extents +100%FREE -n root vg
168#+end_src
169
170This will create a physical volume on the mapping we just opened,
171create a volume group named =vg= on the physical volume, and create a
172logical volume named =root= that spans the entire volume group. More
173complex setups are possible thanks to the great flexibility of lvm.
174
175We now format the logical volume with =ext4=:
176
177#+begin_src bash
178mkfs.ext4 /dev/mapper/vg-root
179#+end_src
180
181*** Installing the base system
182
183Let's mount the logical volume, make a directory for the mount point
184of the boot partition, and mount the boot partition (=/dev/sda1=):
185
186#+begin_src bash
187mount /dev/mapper/vg-root /mnt
188mkdir /mnt/boot
189mount /dev/sda1 /mnt/boot
190#+end_src
191
192Finally, let's install the base system (and optionally =base-devel=):
193
194#+begin_src bash
195pacstrap /mnt base base-devel
196#+end_src
197
198*** Configuring the system
199
200Let's generate the fstab:
201
202#+begin_src bash
203genfstab -U /mnt >> /mnt/etc/fstab
204#+end_src
205
206Use your favorite terminal-based editor, edit the fstab file and add
207the =discard= option for the root partition to enable TRIM on the SSD.
208
209Now we change root into our newly installed system and will configure
210it. Adjust these according to your own setup.
211
212#+begin_src bash
213arch-chroot /mnt /bin/bash
214passwd # set the root password
215echo myhostname > /etc/hostname # set the hostname
216ln -s /usr/share/zoneinfo/Canada/Eastern /etc/localtime # time zone
217hwclock --systohc --utc # write system clock to hardware clock (UTC)
218useradd -m -G wheel -s /bin/bash myuser # create myuser
219passwd myuser # set the password for myuser
220echo "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
222locale-gen
223echo LANG=en_US.UTF-8 > /etc/locale.conf
224export LANG=en_US.UTF-8
225#+end_src
226
227Then adjust the initramfs hooks in =/etc/mkinitcpio.conf= and enable
228the =encrypt= and =lvm2= hooks, and make sure =keyboard= is available
229before =encrypt= so you can actually type in the LUKS password when
230booting. Your =HOOKS= line should look similar to this:
231
232#+begin_src
233HOOKS="base udev autodetect modconf block keyboard encrypt lvm2 filesystems fsck"
234#+end_src
235
236After adjusting the hooks, build the initramfs:
237
238#+begin_src bash
239mkinitcpio -p linux
240#+end_src
241
242Now, install the =intel-ucode= package. We'll configure the bootloader
243to enable intel microcode updates.
244
245#+begin_src bash
246pacman -S intel-ucode
247#+end_src
248
249Create the =/boot/loader/loader.conf= with the following content
250(adjust the timeout to your liking):
251
252#+begin_src
253default arch
254timeout 3
255#+end_src
256
257Then create the entry for Arch:
258
259#+begin_src bash
260mkdir -p /boot/loader/entries
261touch /boot/loader/entries/arch.conf
262#+end_src
263
264Now edit =/boot/loader/entries/arch.conf= to specify the Arch entry:
265
266#+begin_src
267title Arch GNU/Linux
268linux /vmlinuz-linux
269initrd /intel-ucode.img
270initrd /initramfs-linux.img
271options cryptdevice=/dev/sdaX:vg:allow-discards root=/dev/mapper/vg-root rw
272#+end_src
273
274Again, =/dev/sdaX= is the partition you created in the [[#partitioning][partitioning]]
275step as the underlying encrypted partition.
276
277Finally, install the bootloader, exit the chroot, umount and reboot!
278
279#+begin_src bash
280bootctl install
281exit
282umount -R /mnt
283reboot
284#+end_src
285
286*** Post-installation recommendations
287
288Congratulations! You now have a minimal Arch installation.
289
290At this point, I usually install my favorite AUR helper, [[https://aur.archlinux.org/packages/pacaur/][pacaur]], then
291I 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]]
292backlight driver to fix the post suspend/resume issue where three's no
293brightness after waking up from suspend, and the only available
294brightness would be 100%.
295
296#+begin_src bash
297pacaur -S linux-headers dkms # linux-headers is required for dkms
298pacaur -S broadcom-wl-dkms
299pacaur -S mba6x_bl-dkms
300#+end_src
301
302Then, 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
309Check out the [[https://wiki.archlinux.org/index.php/General_recommendations][General recommendations]] for more details.
310
311*** References
312
313Here are some resources I've come across each with lots of useful bits
314and 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:
334Results from static site search implemented using /Fusejs/, /jquery/
335and /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: