# 1. shim-signedパッケージの導入

paruまたはyayコマンドでaurから、shim-signedパッケージをインストールします。

```
esp=/boot/efi

paru -S shim-signed
sudo mv ${esp}/EFI/boot/bootx64.efi ${esp}/EFI/boot/grubx64.efi
sudo cp /usr/share/shim-signed/shimx64.efi ${esp}/EFI/boot/bootx64.efi
sudo cp /usr/share/shim-signed/mmx64.efi ${esp}/EFI/boot/
```

ブートローダーshimを登録します。
espの場所にあわせてください。私の環境では、--disk /dev/sda --part 1でした。
後で、BIOSの設定でブートローダーとしてShimを設定しましょう。
```
sudo efibootmgr --unicode --disk /dev/sdX --part Y --create --label "Shim" --loader /EFI/boot/bootx64.efi
```

 

# 2. grubを必要なモジュールを含めてインストール

 

セキュアブート用のgrubを手動でインストールします。

```sh:grub-efi-install.sh
#!/bin/bash

esp=/boot/efi
platform=$(uname -m)

CD_MODULES="
    all_video
    boot
    btrfs
    cat
    chain
    configfile
    echo
    efifwsetup
    efinet
    ext2
    fat
    font
    gettext
    gfxmenu
    gfxterm
    gfxterm_background
    gzio
    halt
    help
    hfsplus
    iso9660
    jpeg
    keystatus
    loadenv
    loopback
    linux
    ls
    lsefi
    lsefimmap
    lsefisystab
    lssal
    memdisk
    minicmd
    normal
    ntfs
    part_apple
    part_msdos
    part_gpt
    password_pbkdf2
    png
    probe
    reboot
    regexp
    search
    search_fs_uuid
    search_fs_file
    search_label
    sleep
    smbios
    squash4
    test
    true
    video
    xfs
    zfs
    zfscrypt
    zfsinfo
    "

# Platform-specific modules
case $platform in
    x86_64|i386)
    CD_MODULES="$CD_MODULES
    cpuid
    play
    tpm
    "
    ;;
esac

GRUB_MODULES="$CD_MODULES
    cryptodisk
    gcry_arcfour
    gcry_blowfish
    gcry_camellia
    gcry_cast5
    gcry_crc
    gcry_des
    gcry_dsa
    gcry_idea
    gcry_md4
    gcry_md5
    gcry_rfc2268
    gcry_rijndael
    gcry_rmd160
    gcry_rsa
    gcry_seed
    gcry_serpent
    gcry_sha1
    gcry_sha256
    gcry_sha512
    gcry_tiger
    gcry_twofish
    gcry_whirlpool
    luks
    lvm
    mdraid09
    mdraid1x
    raid5rec
    raid6rec
        "

sudo grub-install --target=x86_64-efi --efi-directory=$esp --modules="${GRUB_MODULES}" --sbat /usr/share/grub/sbat.csv
```

```
chmod u+x grub-efi-install.sh
sudo cp grub-efi-install.sh /usr/local/bin/
```
 

# 3. MOK(Machine Owner Key)を用意して、署名する。

sbsigntoolsとmokutilをインストールしておきます。

```
sudo pacman -S sbsigntools mokutil
```

```
# MOKの作成
openssl req -newkey rsa:4096 -nodes -keyout MOK.key -new -x509 -sha256 -days 3650 -subj "/CN=my Machine Owner Key/" -out MOK.crt
openssl x509 -outform DER -in MOK.crt -out MOK.cer
sudo mkdir -p /etc/secureboot/
sudo cp MOK.* /etc/secureboot/

# 署名
sudo sbsign --key MOK.key --cert MOK.crt --output ${esp}/EFI/Manjaro/grubx64.efi ${esp}/EFI/Manjaro/grubx64.efi
sudo sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-6.0-x86_64 /boot/vmlinuz-6.0-x86_64
sudo cp -a $esp/EFI/Manjaro/grubx64.efi $esp/EFI/boot/grubx64.efi
sudo mokutil --import MOK.cer
```

# 4. カーネルの自動署名

インストール済みのカーネルについては、手動で署名しておく。
```
/usr/bin/find /boot/ -maxdepth 1 -name 'vmlinuz-*' |xargs -I{} /usr/bin/sh -c 'if ! /usr/bin/sbverify --list {} 2>/dev/null | /usr/bin/grep -q "signature certificates" - ;then /usr/bin/sbsign --key MOK.key --cert MOK.crt --output {} {} ;fi'
```

Pacmanフックでカーネルインストールや更新時に自動で署名する。
```txt:/etc/pacman.d/hooks/999-sign_kernel_for_secureboot.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = linux
Target = linux-lts
Target = linux-hardened
Target = linux-zen

[Action]
Description = Signing kernel with Machine Owner Key for Secure Boot
When = PostTransaction
Exec = /usr/bin/find /boot/ -maxdepth 1 -name 'vmlinuz-*' |xargs -I{} /usr/bin/sh -c 'if ! /usr/bin/sbverify --list {} 2>/dev/null | /usr/bin/grep -q "signature certificates" - ;then /usr/bin/sbsign --key /etc/secureboot/MOK.key --cert /etc/secureboot/MOK.crt --output {} {} ;fi'
Depends = sbsigntools
Depends = findutils
Depends = grep
```

# 5. Grubの自動署名

Pacmanフックでgrubインストール、更新時に自動で署名する。
```txt:/etc/pacman.d/hooks/999-sign_grub_for_secureboot.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = grub

[Action]
Description = Signing grub with Machine Owner Key for Secure Boot
When = PostTransaction
Exec = /usr/local/bin/grub-efi-install.sh && /usr/bin/sbsign --key /etc/secureboot/MOK.key --cert /etc/secureboot/MOK.crt --output /boot/efi/EFI/Manjaro/grubx64.efi /boot/efi/EFI/Manjaro/grubx64.efi && cp -a /boot/efi/EFI/Manjaro/grubx64.efi /boot/efi/EFI/boot/grubx64.efi
Depends = sbsigntools
```

### 参考サイト

[セキュアブート - ArchWiki](https://wiki.archlinux.jp/index.php/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88)