chroot.sh 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-3.0-or-later
  3. while true; do
  4. passwd && break
  5. done
  6. TZuser=$(cat tzfinal.tmp)
  7. AES_NI=$(cat aes.tmp)
  8. DRIVE=$(cat drive)
  9. PVALUE=$(echo "${DRIVE}" | grep "^nvme" | sed 's/.*[0-9]/p/')
  10. # TODO: Add Selection TUI
  11. echo KEYMAP=de_CH-latin1 >/etc/vconsole.conf
  12. ln -sf /usr/share/zoneinfo/"$TZuser" /etc/localtime
  13. hwclock --systohc
  14. # TODO: Add Selection TUI
  15. echo "LANG=en_GB.UTF-8" >>/etc/locale.conf
  16. echo "en_GB.UTF-8 UTF-8" >>/etc/locale.gen
  17. locale-gen
  18. pacman --noconfirm --needed -S networkmanager
  19. systemctl enable NetworkManager
  20. ls /sys/firmware/efi/efivars && EFI=yes
  21. if [ "$EFI" = "yes" ]; then
  22. if [ "$AES_NI" = "yes" ]; then
  23. SWAP_LETTER="2"
  24. ROOT_LETTER="3"
  25. else
  26. SWAP_LETTER="2"
  27. ROOT_LETTER="4"
  28. fi
  29. else
  30. if [ "$AES_NI" = "yes" ]; then
  31. SWAP_LETTER="1"
  32. ROOT_LETTER="2"
  33. else
  34. SWAP_LETTER="1"
  35. ROOT_LETTER="3"
  36. fi
  37. fi
  38. LUKS_UUID=$(blkid -s UUID -o value /dev/"${DRIVE}${PVALUE}${ROOT_LETTER}")
  39. pacman --noconfirm --needed -S grub
  40. if [ "$AES_NI" = "yes" ]; then
  41. # AES Fully-Encrypted Root Setup (Includes Keyfile logic)
  42. dd bs=512 count=4 if=/dev/urandom of=/crypto_keyfile.bin
  43. while true; do
  44. cryptsetup luksAddKey /dev/"${DRIVE}${PVALUE}${ROOT_LETTER}" /crypto_keyfile.bin && break
  45. done
  46. chmod 000 /crypto_keyfile.bin
  47. sed -i 's|^FILES=.*|FILES=(/crypto_keyfile.bin)|' /etc/mkinitcpio.conf
  48. sed -i 's|^HOOKS=.*|HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt filesystems fsck)|' /etc/mkinitcpio.conf
  49. mkinitcpio -P
  50. sed -i "s|^GRUB_CMDLINE_LINUX=.*|GRUB_CMDLINE_LINUX=\"rd.luks.name=${LUKS_UUID}=cryptroot rd.luks.key=${LUKS_UUID}=/crypto_keyfile.bin\"|" /etc/default/grub
  51. sed -i 's/#GRUB_ENABLE_CRYPTODISK/GRUB_ENABLE_CRYPTODISK/' /etc/default/grub
  52. SWAP_CIPHER="aes-cbc-essiv:sha256"
  53. else
  54. # Adiantum Unencrypted Boot Setup (NO Keyfile logic to prevent plaintext key leak)
  55. sed -i 's|^HOOKS=.*|HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt filesystems fsck)|' /etc/mkinitcpio.conf
  56. mkinitcpio -P
  57. sed -i "s|^GRUB_CMDLINE_LINUX=.*|GRUB_CMDLINE_LINUX=\"rd.luks.name=${LUKS_UUID}=cryptroot\"|" /etc/default/grub
  58. SWAP_CIPHER="xchacha12,aes-adiantum-plain64"
  59. fi
  60. echo "swap /dev/${DRIVE}${PVALUE}${SWAP_LETTER} /dev/urandom swap,cipher=${SWAP_CIPHER},size=256" >>/etc/crypttab
  61. if [ "$EFI" = "yes" ]; then
  62. pacman --noconfirm --needed -S efibootmgr
  63. grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub /dev/"${DRIVE}" --recheck
  64. else
  65. grub-install --target=i386-pc /dev/"${DRIVE}" --recheck
  66. fi
  67. grub-mkconfig -o /boot/grub/grub.cfg
  68. # Cleanup
  69. rm drive tzfinal.tmp aes.tmp