T2linux archlinux install

From wikinotes

Instructions to install Archlinux on a macbook pro with a T2 cpu.

Documentation

t2linux install docs https://wiki.t2linux.org/distributions/arch/installation/
arch install https://wiki.archlinux.org/title/Installation_guide#Set_the_console_keyboard_layout
systemd boot https://wiki.archlinux.org/title/Systemd-boot

Safety Net

Using the dedicated GPU 100% of the time produces lots of heat, and wasted battery life when you don't need it.
Defaulting to the dedicated graphics has been known to prevent MacOS from being able to boot.
Since Partition settings are locked into MacOS (and I'm uncertain whether I could boot from a USB),
it would be prudent to enable ssh in your MacOS install).

# MacOS
(apple) > System Preferences:
  - Security & Privacy:
    - Privacy Tab:
      - Full Disk Access:
        - +: Applications/Utilities/Terminal
# MacOS
sudo systemsetup -setremotelogin on

# you probably also want to harden your /etc/ssh/sshd_config...

Install Media

Download install media

raw (out of date) https://dl.t2linux.org/archlinux/iso/index.html
w/ wifi drivers https://github.com/t2linux/archiso-t2/releases
diskutil list
diskutil unmountDisk /dev/disk2
dd if=path/to/archlinux-version-x86_64.iso of=/dev/rdisk2 bs=1m

Partition Setup

You can't change the partition scheme from outside of macos unfortunately.

- macbook, start bootcamp (preinstalled)
  - drag slider for size (deletes apfs snapshots?)

- disk utility
  - create a partition (any format) for your linux install

- restart, holding cmd+r
  - Utilities > Startup Security Utility:
    - [x] No Security
    - [x] Allow booting from external media

- restart, holding opt
  - you don't need to connect to wifi in bootloader
  - boot from EFI

Base Install

NOTE:

Use the wifi-enabled ISO, spoke with devs and wired kernel is outdated

Boot from USB

- Turn on macbook, holding 'opt' key
- boot from the orange drive

(archiso) wlan setup

iwctl
 device list
 station wlan0 scan
 station wlan0 get-networks
 station wlan0 connect ${SSID}

ping archlinux.org

(archiso) format && baseinstall

timedatectl set-ntp true

pacman -Sy
# pacman-key --refresh-keys

fdisk -l                  # find disk/partition
mkfs.ext4 /dev/nvme0n1p3  # format partition as ext4

mount /dev/nvme0n1p3 /mnt       # your install
mkdir -p /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot  # reuse macbook's EFI paritition

# if necesary, copy/modify /etc/pacman.conf to /mnt/pacman.conf
# and use: `pacstrap -C /mnt/pacman.conf`
pacstrap /mnt \
  base base-devel                           `# base packages/build-tools` \
  linux-t2 linux-t2-headers linux-t2-docs   `# t2-kernel` \
  efivar efibootmgr dosfstools              `# tools to manage efi` \
  linux-firmware dkms \
  apple-bcm-wifi-firmware \
  iwd networkmanager netstat-nat net-tools \
  neovim git openssh man-db

genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt

(chroot) Add t2linux repo

cat << EOF >> /etc/pacman.conf
[mbp]
Server = https://dl.t2linux.org/archlinux/$repo/$arch
EOF

# you'll also likely want to enable 'multilib' repo

pacman -Syy

(chroot) Base Settings

ln -sf /usr/share/zoneinfo/America/Toronto /etc/localtime
hwclock --systohc
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
echo "fog" > /etc/hostname
mkinitcpio -P
passwd

(chroot) Bootloader

cat << EOF > /boot/loader/loader.conf
default archlinux
timeout 1
EOF

# find PARTUUID of 'archlinux' install partition
# (not EFI partition, not UUID)
blkid

cat << EOF > /boot/loader/entries/archlinux.conf
title Arch Linux
linux vmlinuz-linux-t2
initrd initramfs-linux-t2.img
# no quotes around PARTUUID
options intel_iommu=on iommu=pt pcie_ports=compat root=PARTUUID=${PARTUUID} rw
EOF

# if you cannot write /boot, use --no-variables
bootctl install

systemctl mask systemd-boot-system-token

# remount efivars as read-only (or kernel panic)
# USE EITHER: (1 works for me)
#    echo efivarfs /sys/firmware/efi/efivars efivarfs ro,remount,nofail 0 0 >> /etc/fstab
# OR
#    add 'efi=noruntime' to options in '/boot/loader/entries/archlinux.conf'

Reboot

- exit && reboot
- hold 'option' while booting to choose boot
- after selection, wait for timeout (choosing with enter seems to fail)

Debugging Boot Issues

# from archiso, specify the journal of your chroot
journalctl --directory=/var/log/journal