@@ -204,6 +204,7 @@ function check_variables() {
204
204
check_variables_value " HOOKS" " $HOOKS "
205
205
check_variables_boolean " UKI" " $UKI "
206
206
check_variables_list " BOOTLOADER" " $BOOTLOADER " " auto grub refind systemd efistub" " true" " true"
207
+ check_variables_boolean " SECURE_BOOT" " $SECURE_BOOT "
207
208
check_variables_list " CUSTOM_SHELL" " $CUSTOM_SHELL " " bash zsh dash fish" " true" " true"
208
209
check_variables_list " DESKTOP_ENVIRONMENT" " $DESKTOP_ENVIRONMENT " " gnome kde xfce mate cinnamon lxde i3-wm i3-gaps deepin budgie bspwm awesome qtile openbox leftwm dusk" " false" " true"
209
210
check_variables_list " DISPLAY_MANAGER" " $DISPLAY_MANAGER " " auto gdm sddm lightdm lxdm" " true" " true"
@@ -316,6 +317,10 @@ function check_facts() {
316
317
if [ " $BIOS_TYPE " == " bios" ]; then
317
318
check_variables_list " BOOTLOADER" " $BOOTLOADER " " grub" " true" " true"
318
319
fi
320
+
321
+ if [ " $SECURE_BOOT " == " true" ]; then
322
+ check_variables_list " BOOTLOADER" " $BOOTLOADER " " grub refind systemd" " true" " true"
323
+ fi
319
324
}
320
325
321
326
function prepare() {
@@ -802,7 +807,7 @@ function mkinitcpio_configuration() {
802
807
fi
803
808
804
809
if [ " $UKI " == " true" ]; then
805
- mkdir -p " ${MNT_DIR} $ESP_DIRECTORY /EFI/linux"
810
+ mkdir -p " ${MNT_DIR}${ ESP_DIRECTORY} /EFI/linux"
806
811
807
812
mkinitcpio_preset " linux"
808
813
if [ -n " $KERNELS " ]; then
@@ -1140,9 +1145,9 @@ ALL_microcode=(/boot/*-ucode.img)
1140
1145
1141
1146
PRESETS=('default' 'fallback')
1142
1147
1143
- default_uki="$ESP_DIRECTORY /EFI/linux/archlinux-$KERNEL .efi"
1148
+ default_uki="${ ESP_DIRECTORY} /EFI/linux/archlinux-$KERNEL .efi"
1144
1149
1145
- fallback_uki="$ESP_DIRECTORY /EFI/linux/archlinux-$KERNEL -fallback.efi"
1150
+ fallback_uki="${ ESP_DIRECTORY} /EFI/linux/archlinux-$KERNEL -fallback.efi"
1146
1151
fallback_options="-S autodetect"
1147
1152
EOT
1148
1153
}
@@ -1229,6 +1234,15 @@ function bootloader() {
1229
1234
1230
1235
CMDLINE_LINUX=$( trim_variable " $CMDLINE_LINUX " )
1231
1236
1237
+ if [ " $SECURE_BOOT " == " true" ]; then
1238
+ curl --output PreLoader.efi https://blog.hansenpartnership.com/wp-uploads/2013/PreLoader.efi
1239
+ curl --output HashTool.efi https://blog.hansenpartnership.com/wp-uploads/2013/HashTool.efi
1240
+ md5sum PreLoader.efi > PreLoader.efi.md5
1241
+ md5sum HashTool.efi > HashTool.efi.md5
1242
+ echo " 4f7a4f566781869d252a09dc84923a82 PreLoader.efi" | md5sum -c -
1243
+ echo " 45639d23aa5f2a394b03a65fc732acf2 HashTool.efi" | md5sum -c -
1244
+ fi
1245
+
1232
1246
case " $BOOTLOADER " in
1233
1247
" grub" )
1234
1248
bootloader_grub
@@ -1265,21 +1279,26 @@ function bootloader_grub() {
1265
1279
echo " "
1266
1280
echo " # alis"
1267
1281
echo " GRUB_DISABLE_SUBMENU=y"
1268
- }>> " ${MNT_DIR} " /etc/default/grub
1282
+ }>> " ${MNT_DIR} " /etc/default/grub
1269
1283
1270
1284
if [ " $BIOS_TYPE " == " uefi" ]; then
1271
1285
pacman_install " efibootmgr"
1272
- arch-chroot " ${MNT_DIR} " grub-install --target=x86_64-efi --bootloader-id=grub --efi-directory=" $ESP_DIRECTORY " --recheck
1273
- # arch-chroot "${MNT_DIR}" efibootmgr --create --disk $DEVICE --part $PARTITION_BOOT_NUMBER --loader /EFI/grub/grubx64.efi --label "GRUB Boot Manager" --verbose
1286
+ arch-chroot " ${MNT_DIR} " grub-install --target=x86_64-efi --bootloader-id=grub --efi-directory=" ${ESP_DIRECTORY} " --recheck
1274
1287
fi
1275
1288
if [ " $BIOS_TYPE " == " bios" ]; then
1276
1289
arch-chroot " ${MNT_DIR} " grub-install --target=i386-pc --recheck " $DEVICE "
1277
1290
fi
1278
1291
1279
- arch-chroot " ${MNT_DIR} " grub-mkconfig -o " $BOOT_DIRECTORY /grub/grub.cfg"
1292
+ arch-chroot " ${MNT_DIR} " grub-mkconfig -o " ${BOOT_DIRECTORY} /grub/grub.cfg"
1293
+
1294
+ if [ " $SECURE_BOOT " == " true" ]; then
1295
+ cp {PreLoader,HashTool}.efi " ${MNT_DIR}${ESP_DIRECTORY} /EFI/grub"
1296
+ cp " ${ESP_DIRECTORY} /EFI/grub/grubx64.efi" " ${MNT_DIR}${ESP_DIRECTORY} /EFI/systemd/loader.efi"
1297
+ arch-chroot " ${MNT_DIR} " efibootmgr --unicode --disk " $DEVICE " --part 1 --create --label " Arch Linux (PreLoader)" --loader " /EFI/grub/PreLoader.efi"
1298
+ fi
1280
1299
1281
1300
if [ " $VIRTUALBOX " == " true" ]; then
1282
- echo -n " \EFI\grub\grubx64.efi" > " ${MNT_DIR} $ESP_DIRECTORY /startup.nsh"
1301
+ echo -n " \EFI\grub\grubx64.efi" > " ${MNT_DIR}${ ESP_DIRECTORY} /startup.nsh"
1283
1302
fi
1284
1303
}
1285
1304
@@ -1288,9 +1307,15 @@ function bootloader_refind() {
1288
1307
arch-chroot " ${MNT_DIR} " refind-install
1289
1308
1290
1309
arch-chroot " ${MNT_DIR} " rm /boot/refind_linux.conf
1291
- arch-chroot " ${MNT_DIR} " sed -i ' s/^timeout.*/timeout 5/' " $ESP_DIRECTORY /EFI/refind/refind.conf"
1292
- arch-chroot " ${MNT_DIR} " sed -i ' s/^#scan_all_linux_kernels.*/scan_all_linux_kernels false/' " $ESP_DIRECTORY /EFI/refind/refind.conf"
1293
- # arch-chroot "${MNT_DIR}" sed -i 's/^#default_selection "+,bzImage,vmlinuz"/default_selection "+,bzImage,vmlinuz"/' "$ESP_DIRECTORY/EFI/refind/refind.conf"
1310
+ arch-chroot " ${MNT_DIR} " sed -i ' s/^timeout.*/timeout 5/' " ${ESP_DIRECTORY} /EFI/refind/refind.conf"
1311
+ arch-chroot " ${MNT_DIR} " sed -i ' s/^#scan_all_linux_kernels.*/scan_all_linux_kernels false/' " ${ESP_DIRECTORY} /EFI/refind/refind.conf"
1312
+ # arch-chroot "${MNT_DIR}" sed -i 's/^#default_selection "+,bzImage,vmlinuz"/default_selection "+,bzImage,vmlinuz"/' "${ESP_DIRECTORY}/EFI/refind/refind.conf"
1313
+
1314
+ if [ " $SECURE_BOOT " == " true" ]; then
1315
+ cp {PreLoader,HashTool}.efi " ${ESP_DIRECTORY} /EFI/refind"
1316
+ cp " ${ESP_DIRECTORY} /EFI/refind/refind_x64.efi" " ${MNT_DIR}${ESP_DIRECTORY} /EFI/refind/loader.efi"
1317
+ arch-chroot " ${MNT_DIR} " efibootmgr --unicode --disk " $DEVICE " --part 1 --create --label " Arch Linux (PreLoader)" --loader " /EFI/refind/PreLoader.efi"
1318
+ fi
1294
1319
1295
1320
if [ " $UKI " == " false" ]; then
1296
1321
bootloader_refind_entry " linux"
@@ -1329,6 +1354,12 @@ When = PostTransaction
1329
1354
Exec = /usr/bin/systemctl restart systemd-boot-update.service
1330
1355
EOT
1331
1356
1357
+ if [ " $SECURE_BOOT " == " true" ]; then
1358
+ cp {PreLoader,HashTool}.efi " ${ESP_DIRECTORY} /EFI/systemd"
1359
+ cp " ${ESP_DIRECTORY} /EFI/systemd/systemd-bootx64.efi" " ${MNT_DIR}${ESP_DIRECTORY} /EFI/systemd/loader.efi"
1360
+ arch-chroot " ${MNT_DIR} " efibootmgr --unicode --disk " $DEVICE " --part 1 --create --label " Arch Linux (PreLoader)" --loader " /EFI/systemd/PreLoader.efi"
1361
+ fi
1362
+
1332
1363
if [ " $UKI " == " true" ]; then
1333
1364
cat << EOT > "${MNT_DIR}${ESP_DIRECTORY} /loader/loader.conf"
1334
1365
# alis
@@ -1343,7 +1374,7 @@ default archlinux.conf
1343
1374
editor 0
1344
1375
EOT
1345
1376
1346
- arch-chroot " ${MNT_DIR} " mkdir -p " $ESP_DIRECTORY /loader/entries/"
1377
+ arch-chroot " ${MNT_DIR} " mkdir -p " ${ ESP_DIRECTORY} /loader/entries/"
1347
1378
1348
1379
bootloader_systemd_entry " linux"
1349
1380
if [ -n " $KERNELS " ]; then
@@ -1433,15 +1464,15 @@ function bootloader_efistub_entry() {
1433
1464
local MICROCODE=" "
1434
1465
1435
1466
if [ " $UKI " == " true" ]; then
1436
- arch-chroot " ${MNT_DIR} " efibootmgr --disk " $DEVICE " --part 1 --create --label " Arch Linux ($KERNEL fallback)" --loader " EFI\linux\archlinux-$KERNEL -fallback.efi" --unicode --verbose
1437
- arch-chroot " ${MNT_DIR} " efibootmgr --disk " $DEVICE " --part 1 --create --label " Arch Linux ($KERNEL )" --loader " EFI\linux\archlinux-$KERNEL .efi" --unicode --verbose
1467
+ arch-chroot " ${MNT_DIR} " efibootmgr --unicode -- disk " $DEVICE " --part 1 --create --label " Arch Linux ($KERNEL fallback)" --loader " EFI\linux\archlinux-$KERNEL -fallback.efi" --unicode --verbose
1468
+ arch-chroot " ${MNT_DIR} " efibootmgr --unicode -- disk " $DEVICE " --part 1 --create --label " Arch Linux ($KERNEL )" --loader " EFI\linux\archlinux-$KERNEL .efi" --unicode --verbose
1438
1469
else
1439
1470
if [ -n " $INITRD_MICROCODE " ]; then
1440
1471
local MICROCODE=" initrd=\\ $INITRD_MICROCODE "
1441
1472
fi
1442
1473
1443
- arch-chroot " ${MNT_DIR} " efibootmgr --disk " $DEVICE " --part 1 --create --label " Arch Linux ($KERNEL )" --loader /vmlinuz-" $KERNEL " --unicode " $CMDLINE_LINUX $CMDLINE_LINUX_ROOT rw $MICROCODE initrd=\initramfs-$KERNEL .img" --verbose
1444
- arch-chroot " ${MNT_DIR} " efibootmgr --disk " $DEVICE " --part 1 --create --label " Arch Linux ($KERNEL fallback)" --loader /vmlinuz-" $KERNEL " --unicode " $CMDLINE_LINUX $CMDLINE_LINUX_ROOT rw $MICROCODE initrd=\initramfs-$KERNEL -fallback.img" --verbose
1474
+ arch-chroot " ${MNT_DIR} " efibootmgr --unicode -- disk " $DEVICE " --part 1 --create --label " Arch Linux ($KERNEL )" --loader /vmlinuz-" $KERNEL " --unicode " $CMDLINE_LINUX $CMDLINE_LINUX_ROOT rw $MICROCODE initrd=\initramfs-$KERNEL .img" --verbose
1475
+ arch-chroot " ${MNT_DIR} " efibootmgr --unicode -- disk " $DEVICE " --part 1 --create --label " Arch Linux ($KERNEL fallback)" --loader /vmlinuz-" $KERNEL " --unicode " $CMDLINE_LINUX $CMDLINE_LINUX_ROOT rw $MICROCODE initrd=\initramfs-$KERNEL -fallback.img" --verbose
1445
1476
fi
1446
1477
}
1447
1478
0 commit comments