From: Amin Bandali Date: Mon, 21 May 2018 03:54:02 +0000 (-0400) Subject: Add more content (contact, colophon, arch on air post) X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/bndl.org/commitdiff_plain/3b86855ad9d6cb03c093b48b9a2cbc57da5ddb08?ds=sidebyside;hp=2c35d3a8bdf9546f96d4a570595d0c9908d51eb5 Add more content (contact, colophon, arch on air post) --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..89f9ac0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +out/ diff --git a/2016/11/arch-macbook-air.md b/2016/11/arch-macbook-air.md new file mode 100644 index 0000000..e6a9e46 --- /dev/null +++ b/2016/11/arch-macbook-air.md @@ -0,0 +1,281 @@ +title: Arch Linux on MacBook Air 2013 +date: 2016-11-01 +--- + +# 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][installation] or the +former [Beginner's Guide][beginners]. Rather, it mostly serves as a +small summary with a few useful notes about the gotchas. + +[installation]: https://wiki.archlinux.org/index.php/installation_guide +[beginners]: https://csdietz.github.io/arch-beginner-guide/ + +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][usb_install] page on +the Arch wiki, but the simplest one is using `dd` if you already have +access to another UNIX system. + +[usb_install]: https://wiki.archlinux.org/index.php/USB_flash_installation_media + +Warning: make sure you backup the data on +your flash drive, as `dd` will irrevocably destroy all data on it. + +Use `lsblk` to find the name (block device) of your USB drive, then +run `dd` (as root) as shown below: + +``` bash +dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync +``` + +Replace `/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). + +Use `ping` to verify that you've established a connection: + +```bash +ping archlinux.org +``` + +## Updating the system clock + +Once you're connected to the internet, make sure the system clock is accurate: + +```bash +timedatectl set-ntp true # start and enable systemd-timesyncd +``` + +You can check the service status using `timedatectl status`. + +## Partitioning + +I won't dive into partitioning and instead, I'll refer you to +the [Partitioning][partitioning] page of Arch wiki. Of the available +partitioning tools, I personally prefer `cfdisk`. + +[partitioning]: https://wiki.archlinux.org/index.php/Partitioning + +## Setting up LVM & LUKS + +I use a [LVM on LUKS][lvm_on_luks] setup, where I set up LVM on top of +the encrypted partition. + +First, let's set up the underlying encrypted partition: + +``` bash +cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 \ + --iter-time 5000 --use-urandom -y luksFormat /dev/sdaX +``` + +where `/dev/sdaX` is the partition you created in the last step +(e.g. `/dev/sda4`). For more information about the `cryptsetup` +options, see the [LUKS encryption options][luks_options]. + +[lvm_on_luks]: https://wiki.archlinux.org/index.php/Dm-crypt/Encrypting_an_entire_system#LVM_on_LUKS +[luks_options]: https://wiki.archlinux.org/index.php/Dm-crypt/Device_encryption#Encryption_options_for_LUKS_mode + +Then we open the container: + +``` bash +cryptsetup open --type luks /dev/sdaX lvm +``` + +Now it's time to use lvm and prepare the logical volume(s): + +``` bash +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 `ext4`: + +``` bash +mkfs.ext4 /dev/mapper/vg-root +``` + +## 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 (`/dev/sda1`): + +``` bash +mount /dev/mapper/vg-root /mnt +mkdir /mnt/boot +mount /dev/sda1 /mnt/boot +``` + +Finally, let's install the base system (and optionally `base-devel`): + +``` bash +pacstrap /mnt base base-devel +``` + +## Configuring the system + +Let's generate the fstab: + +``` bash +genfstab -U /mnt >> /mnt/etc/fstab +``` + +Use your favorite terminal-based editor, edit the fstab file and add +the `discard` option for the root partition to enable TRIM on the +SSD. + +Now we change root into our newly installed system and will configure +it. Adjust these according to your own setup. + +``` bash +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 +the `encrypt` and `lvm2` hooks, and make sure `keyboard` is available +before `encrypt` so you can actually type in the LUKS password when +booting. Your `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: + +``` bash +mkinitcpio -p linux +``` + +Now, install the `intel-ucode` package. We'll configure the bootloader +to enable intel microcode updates. + +``` bash +pacman -S intel-ucode +``` + +Create the `/boot/loader/loader.conf` with the following content +(adjust the timeout to your liking): + +``` +default arch +timeout 3 +``` + +Then create the entry for Arch: + +``` bash +mkdir -p /boot/loader/entries +touch /boot/loader/entries/arch.conf +``` + +Now edit `/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 +``` + +Again, `/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! + +``` bash +bootctl install +exit +umount -R /mnt +reboot +``` + +## Post-installation recommendations + +Congratulations! You now have a minimal Arch installation. + +At this point, I usually install my favorite AUR +helper, [pacaur][pacaur], then I +install the [broadcom-wl-dkms][broadcom-wl-dkms] wireless driver +and [mba6x_bl-dkms][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%. + +[broadcom-wl-dkms]: https://aur.archlinux.org/packages/broadcom-wl-dkms/ +[mba6x_bl-dkms]: https://aur.archlinux.org/packages/mba6x_bl-dkms/ + +``` bash +pacaur -S linux-headers dkms # linux-headers is required for dkms +pacaur -S broadcom-wl-dkms +pacaur -S mba6x_bl-dkms +``` + +[pacaur]: https://aur.archlinux.org/packages/pacaur/ + +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][gen_reqs] for more details. + +[gen_reqs]: https://wiki.archlinux.org/index.php/General_recommendations + +## References + +Here are some resources I've come across each with lots of useful bits +and pieces, about installing Arch on a MacBook: + +- [pandeiro/arch-on-air](https://github.com/pandeiro/arch-on-air) +- [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/) +- [Installing Archlinux on Macbook Air 2013](http://frankshin.com/installing-archlinux-on-macbook-air-2013/) +- [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/) +- [Installing (encrypted) Arch Linux on an Apple MacBook Pro](https://visual-assault.org/2016/03/05/install-encrypted-arch-linux-on-apple-macbook-pro/) +- [Installing Arch Linux on a MacBook Air 2013](http://alexeyzabelin.com/arch-on-mac) +- [Arch Linux running on my MacBook](https://medium.com/phils-thought-bubble-of-recent-stuff/arch-linux-running-on-my-macbook-2ea525ebefe3) +- [Dual boot Arch Linux on MacBook Pro Installation](http://codylittlewood.com/arch-linux-on-macbook-pro-installation/) diff --git a/_header.html b/_header.html new file mode 100644 index 0000000..0ac8879 --- /dev/null +++ b/_header.html @@ -0,0 +1,13 @@ +

+ +

+
+cv +| +now +| +projects +| +contact +| + diff --git a/colophon.md b/colophon.md new file mode 100644 index 0000000..79721dd --- /dev/null +++ b/colophon.md @@ -0,0 +1,29 @@ +# Colophon + +This is my personal website, previous versions of which I've ran on +different domains since 2012. + +## Night mode + +To toggle night mode, click on , which is always available on the top +navigation menu. It saves its state in a browser cookie, other than +that no JavaScript is required to use this website. + +This website is generated using `ssng`, a fork of Roman Zolotarev's +[ssg][ssg], and is served by [Nginx][nginx] on [Debian][debian]. + +## Copyright and Licenses + +The source code for this site is licensed under version 3 of the [GNU +General Public License][gplv3] (see the [`COPYING`][copying] +file). The content of the posts is licensed under the [Creative +Commons BY SA][cc] license. + + +[ssg]: https://www.romanzolotarev.com/ssg.html +[nginx]: https://www.nginx.com +[debian]: https://www.debian.org +[gplv3]: https://gnu.org/licenses/gpl.html +[cc]: https://creativecommons.org/licenses/by-sa/4.0/ +[copying]: https://git.sr.ht/~aminb/aminb.org/tree/COPYING diff --git a/contact.md b/contact.md new file mode 100644 index 0000000..1cf8ee1 --- /dev/null +++ b/contact.md @@ -0,0 +1,45 @@ +title: Contact + +# Say hello! + +You can contact me via email or through my accounts on various online +platforms. + +## Contact info + +- +- , I'm a volunteer GNU webmaster +- , I'm a grad student @ UW +- gpg key: [500C 1D55 D1EC 1FED E8C0 C8DE 4E05 246A B0BF 7FFB][gpg] +- [@aminb:matrix.org][matrix] on Matrix +- aminb on [freenode][freenode] and [moznet][moznet] + +- [aminb@member.fsf.org][member.fsf] via XMPP + +## Other online places + +- [~aminb][srht] on [sr.ht][sr.ht] +- [aminb][github] on GitHub +- [aminb][gitlab] on GitLab +- [amin][keybase] on Keybase +- [aminb][lobsters] on Lobsters +- [aminb][reddit] on Reddit +- [aminban][twitter] on Twitter + + +[gpg]: http://pgp.mit.edu/pks/lookup?op=vindex&search=0x4E05246AB0BF7FFB +[matrix]: https://matrix.to/#/@aminb:matrix.org +[freenode]: https://freenode.net +[moznet]: https://wiki.mozilla.org/IRC +[pleroma]: https://soc.aminb.org/users/amin +[fediverse]: https://en.wikipedia.org/wiki/Fediverse +[member.fsf]: xmpp:aminb@member.fsf.org + +[srht]: https://git.sr.ht/%7Eaminb +[sr.ht]: https://sr.ht +[github]: https://github.com/aminb +[gitlab]: https://gitlab.com/aminb +[keybase]: https://keybase.io/amin +[lobsters]: https://lobste.rs/u/aminb +[reddit]: https://www.reddit.com/u/aminb +[twitter]: https://twitter.com/aminban diff --git a/index.md b/index.md index 7ca06bb..001b6c4 100644 --- a/index.md +++ b/index.md @@ -1,16 +1,22 @@ -
Amin Bandali
- -# Amin Bandali +

Hello there,

+Amin Bandali +
I'm a graduate student in the [WatForm][watform] group at University of Waterloo, supervised by [Dr. Nancy Day][nday]. I’m interested in using formal methods, especially type systems, to help make software more reliable. ---- +## Recent writings + + - [Arch Linux on MacBook Air 2013](/2016/11/arch-macbook-air "November 1, 2016") +## Talks & presentations + +- TODO + [watform]: https://watform.uwaterloo.ca [nday]: https://cs.uwaterloo.ca/~nday/ diff --git a/ssng b/ssng index 8ea78e2..b14383b 100755 --- a/ssng +++ b/ssng @@ -24,6 +24,7 @@ : "${RSS_AUTHOR:=amin@aminb.org}" : "${RSS_DESCRIPTION:=Personal website}" : "${COPYRIGHT_FROM_YEAR:=2016}" +: "${DOCS:=out}" ########################################################################## @@ -41,9 +42,9 @@ RSS_FILE="$TEMP_DIR/rss.xml" RSS_URL="$SERVER_PROTO://$SERVER_NAME/rss.xml" SITEMAP="$TEMP_DIR/sitemap.xml" -ANNOUNCEMENT_FILE="$PWD/announcement.html" -FOOTER_FILE="$PWD/footer.html" -HEADER_FILE="$PWD/header.html" +ANNOUNCEMENT_FILE="$PWD/_announcement.html" +FOOTER_FILE="$PWD/_footer.html" +HEADER_FILE="$PWD/_header.html" [ -f "$ANNOUNCEMENT_FILE" ] && ANNOUNCEMENT_TEXT=$(cat "$ANNOUNCEMENT_FILE") [ -f "$HEADER_FILE" ] && @@ -56,8 +57,10 @@ EOF [ -f "$FOOTER_FILE" ] && FOOTER=$(cat "$FOOTER_FILE") || FOOTER=$(cat << EOF -Copyright $COPYRIGHT_YEAR–$(date +%Y) -$WEBSITE_TITLE +Copyright $COPYRIGHT_FROM_YEAR–$(date +%Y) +$WEBSITE_TITLE +| +colophon EOF ) @@ -92,7 +95,7 @@ copy_to_document_root() { md_to_html() { find "$TEMP_DIR" -type f -name '*.md'| while read -r file; do - lowdown -D html-skiphtml -d metadata \ + lowdown -D html-skiphtml -D html-head-ids \ "$file" > "${file%\.md}.html" && rm "$file" done @@ -202,12 +205,13 @@ echo "$sitemap"| /index.html) title='Home' head_title="$WEBSITE_TITLE" - header__home='' + ;; + /contact.html) + head_title="Contact | $WEBSITE_TITLE" ;; *) title="${line#*====}" - head_title="$title - $WEBSITE_TITLE" - header__home="$HEADER" + head_title="$title | $WEBSITE_TITLE" ;; esac # merge page with html template @@ -238,14 +242,11 @@ echo "$sitemap"|
$announcement -
-
$header__home
-
- -
-
-
$article
- +
+$HEADER +
+
$article
+
diff --git a/styles.css b/styles.css index 021d73c..ddc6032 100644 --- a/styles.css +++ b/styles.css @@ -17,11 +17,12 @@ html { } .light-off-button { - display: block; + cursor: pointer; + vertical-align: middle; } .light-off-button, --.light-off-button-inline { +.light-off-button-inline { color: #888888; -webkit-user-select: none; user-select: none; @@ -82,8 +83,8 @@ html { border-bottom: 1px solid #357edd; } -.light-off:checked ~ .page a { - color: #ddddb6; +.light-off:checked ~ .page a, .light-off:checked ~ header a { + color: #ddddb6 !important; border-bottom: 1px solid #aaaa96; } @@ -131,41 +132,48 @@ html { border-bottom: 1px solid #888888; } +.clear { clear: both; } +#hello { float: left; line-height: 50px; } -.header, -.footer { +#aminb { font-size: 0.9em; } + +header, +footer { color: #888888; - padding: 2em 1em 1em 1em; + padding: 1em; margin: 0 auto; - max-width: 32em; + max-width: 34em; } -.footer a { - color: #888888; - border-bottom: 1px solid #cccccc; -} +header { padding: 2em 1em 0em 1em; } + +header h2 { display: inline; } -.header__left { - width: 50%; - float: left; - text-align: left; +header a { border: none !important; color: #888 !important; } + +header h2 a { color: #3a89c9 !important; } + +header .bar { + color: #ccc; + font-size: 12pt; + vertical-align: bottom; + padding-left: 1px; + padding-right: 1px; } -.header__right { - width: 50%; - float: right; - text-align: right; +footer a { + color: #888888 !important; + border-bottom: 1px solid #cccccc !important; } .article { - clear: both; line-height: 1.6em; margin: 0 auto; - padding: 2em 1em; - max-width: 32em; + padding: 1em; + max-width: 34em; } .article h1, @@ -177,24 +185,18 @@ html { } .article h1 { - font-size: 2.8em; - margin-top: 1em; + font-size: 1.6em; } .article h2 { font-size: 1.2em; - margin-top: 3em; + padding: 0.25em 0; } .article p { margin: 1em 0; } -.article li code, -.article p code { - font-weight: 700; -} - .article p img { margin: 1em 0; width: 100%;} @@ -205,10 +207,11 @@ html { } .article ul { padding: 0; + margin: 0.3em 0 0 1.6em; } .article ul li { - list-style: none; + /* list-style: none; */ } .article li { @@ -267,9 +270,16 @@ font-size: 0.7em; .article .picture__avatar { margin: 0; - height: 6em; - width: 6em; - border-radius: 6em; + height: 64px; + width: 64px; + border-radius: 50%; + float: right; +} + +@media only screen and (min-width: 570px) { + .picture__avatar { + margin-right: 3em !important; + } } .article .quote { @@ -291,17 +301,21 @@ font-size: 0.7em; } +.article code { + background-color: #f5f5f5; + padding: 1px 3px; +} .article code, .article pre { - font-family: "Menlo", "DejaVu Sans Mono", monospace; + font-family: "DejaVu Sans Mono", monospace; font-size: 0.9em; line-height: 1.5em; margin: 0; } .article pre { - background-color: #eeeeee; + background-color: #f5f5f5; color: #232323; margin: 0 -1em; overflow-x: auto;