「まだext4使ってるの?」Ubuntu Server 23.10をroot on ZFS、LUKS暗号化、TPM自動復号でインストールする
Ubuntu Server 23.10をroot on ZFS(/
をZFS上に置くこと)、LUKS(ディスク暗号化)、TPMによる自動復号、という構成でインストールする方法についての記事です。
前置き
「Linuxのrootファイルシステムは簡素なext4であるべき」と、つい最近まで思っていました。
昨今の潤沢なリソースにおいてはルートファイルシステムでもCopy on Writeなファイルシステムの利便性を享受してもいいのでは?
Copy on Writeなファイルシステムなら、操作ミスによるファイル消失で時間を無駄にすることも少なくなるのでは?
…と思っていたら、なんとmacOSではいつの間にAPFSなるものを採用しており、ファイルシステムレベルでのスナップショットを気持ちよく使えるではありませんか……!
同じことが自由なLinuxで出来ないはずはないのでは?
そこでroot on ZFSです。
また、クライアント向けOSなWindowsやmacOSでは無意識のうちにフルディスク暗号化が為されるこの時代、
システムが平文保存で許されるでしょうか。
そこまでの機密データなんか持っていないと思うかもしれませんが、
ブラウザのCookie、クライアント証明書、SSH鍵、VPNプロファイル、等に対してもそう言えるでしょうか。保護されるべきデータは無意識のうちに存在するのではないでしょうか。
そこでLUKSです。ZFSそのものにも暗号化機能を備わっているのですが、TPMによる自動復号等を加味するとLUKSのほうが好都合なので、今回はLUKS+ZFSの構成を選びました。
Clevisの設定を行うことで、WindowsのBitLocker同様、起動途中にパスワードを求められることはなくシステムが起動します。
ということで、root on ZFSをするメリットを列挙していきます。
- スナップショット機能がある
- rmコマンド誤爆した際にextundeleteに祈る必要無し
- Ubuntuならzsysにより自動スナップショットやガベージコレクションが可能
- パーティションとディレクトリの間のような存在、「データセット」を気軽に切れる
- /homeなどを/から分離する際、ext4だと事前に容量を指定する必要がありストレージ使用効率が悪くなるが、ZFSデータセットなら大丈夫
- zfs send/recvによるバックアップ機能
- LXDやDockerのストレージドライバとしてそのまま使用可能
- 似たような機能を持っているbtrfsと比べて風向きが良さそう
ZFSといえば多大なリソースを持ちたくさんのディスクを備えたサーバーで使うファイルシステムというイメージがあるかもしれませんが、
単一ディスクで使用しても十分なメリットを感じています。
dedupや圧縮のような癖のある機能を使わなければ、Intel N100のような非力なマシンでも支障なく運用できています。
一応デメリットも示します。
- ライセンスの関係上、Linux kernelにマージされることはない
- btrfsに対してZFSの欠点ではあるがユーザーが意識することは基本的に無いかと
- 高機能かつステートを持っているファイルシステムであり、シンプルさに欠ける
- ファイルシステム側でmountpointを持っている等
- プールの操作やデータセットの操作など、mountコマンドだけで済むext4と比べて複雑
- 体感的にCPUやRAMをさほど食っている感じはしないが、最低でもRAM8GBくらいはあった方が良いかと
- OpenZFS自体は成熟しているがroot on ZFSはまだ実験的
- ZFS起因でデータ飛ぶことは多分無いが、ブート時にGRUBやinitramfsでコケることはあるかも
- root on ZFSはインストーラーでサポートされておらず、インストールが全て手動になるので非常に面倒
特に最後の項目について、この記事で完結できるように説明していきます。
普通のUbuntuのインストールというとインストーラーに任せてほとんどEnterキーを押すだけで済むかと思いますが、
現状のroot on ZFSは手動でのインストールが必要なので、初めは数時間程度を覚悟して臨んでください。
また、この記事は以下のOpenZFS公式ドキュメントをほとんどなぞった内容なので、そちらも参照することを推奨します。
しかし、バージョンの違いからかそのまま実行したところ後に時限爆弾的に起動不可能になったので、この記事ではその点も記載します。
Ubuntu 22.04 Root on ZFS — OpenZFS documentation
ここまで読んだ方なら、きっとroot on ZFSを試したくなったと思います。
前置きが長くなりましたが、始めましょう。
大体コピペで出来るようには書いたつもりですが、内容をよく考えて操作してください。
準備
まず、Ubuntu Server 23.10のインストーラーisoをダウンロードしUSBメモリ等に焼きます。
root on ZFSはインストール後のトラブルシューティングが必要になることもありますが、
インストーラーisoにzfsutils-linuxが含まれていなくていちいち面倒くさいので、以下の手順での永続化をおすすめします。
永続書き込み可能なUbuntuのインストーラーUSBメモリを標準ツールだけで作る
LiveUSBを作ったら起動しインストーラーを途中まで進めてネットワーク設定を行うことでインターネットに接続し、
済んだら右上のHelpのところからシェルに入ります。
この時点で/etc/ssh/sshd_config
をPermitRootLogin yes
にしつつ
/root/.ssh/authorized_keys
に公開鍵を追加するなどしてクライアント機からsshで入れるようにし、
コマンドのコピペをできるようにすることをおすすめします。
一時的とはいえ、くれぐれもセキュリティに気をつけてください。
まず、必要なパッケージをインストールします。記事中のvimは全てお好みのエディタに置き換えてください。
apt install --yes debootstrap gdisk zfsutils-linux vim
systemctl stop zed
インストール
パーティション作成
まず、インストール対象のディスクのIDを調べます。fdisk等も併用し、くれぐれも間違えないようにしてください。
ls -l /dev/disk/by-id/
判明したら$DISK
にファイルパスを代入します。nvme-TEAM_TM8FP4004T_123456
は自分の環境に置き換えてください。
DISK=/dev/disk/by-id/nvme-TEAM_TM8FP4004T_123456
パーティションテーブルを抹消し、EFI System Partition
とbpool
(/boot
を収めるZFS Pool)とrpool
(/
を収めるZFS Pool)用のパーティションを切ります。
swapは作りませんが、ZFS上にswapを置くと非常に良くないらしいので必要と思うならばこの時点でswap用のパーティションを切るべきだと思います。(OpenZFS公式ドキュメントを参照)
wipefs -a $DISK
sgdisk -n1:1M:+512M -t1:EF00 $DISK
sgdisk -n2::+2G -t2:BE00 $DISK
sgdisk -n3:: -t3:8309 $DISK
bpool
を作ります。非常に大量のfeatureを明示的にdisabledにしていますが、OpenZFS公式ドキュメントに倣ってこれを怠ると後にzsysctl save state
をしたときなのか何なのか、何らかのfeatureが起こされることでGRUBから読めなくなり無事死亡します。(しました)
ちなみに、そうなった場合は一旦別のところにvmlinuzとinitrdを別のUSBメモリ等に置いてGRUBのプロンプトを操作したり起動オプションを弄ったりすれば起動できますので、そのように起動可能な状態を確保しつつLiveUSBからbpool
を正しく切り直すのが良いと思います。
また、そんな地雷を抱えるくらいなら/boot
はext4でと思うかもしれませんが、/etc/grub.d/10_linux_zfs
としては対応していない構成なので、それはそれであまりおすすめできません。
compression=off
は個人的な好みです。OpenZFS公式ドキュメントによればcompression=lz4
と指示されていますが、
ディスクの読み書きでCPUパワーを使うことに賞賛できないため、offにしました。
zpool create \
-o ashift=12 \
-o autotrim=on \
-o cachefile=/etc/zfs/zpool.cache \
-o compatibility=grub2 \
-o feature@extensible_dataset=disabled \
-o feature@bookmarks=disabled \
-o feature@filesystem_limits=disabled \
-o feature@large_blocks=disabled \
-o feature@large_dnode=disabled \
-o feature@sha512=disabled \
-o feature@skein=disabled \
-o feature@edonr=disabled \
-o feature@userobj_accounting=disabled \
-o feature@encryption=disabled \
-o feature@project_quota=disabled \
-o feature@obsolete_counts=disabled \
-o feature@bookmark_v2=disabled \
-o feature@redaction_bookmarks=disabled \
-o feature@redacted_datasets=disabled \
-o feature@bookmark_written=disabled \
-o feature@livelist=enabled \
-o feature@zstd_compress=disabled \
-o feature@zilsaxattr=disabled \
-o feature@head_errlog=disabled \
-o feature@blake3=disabled \
-o feature@vdev_zaps_v2=disabled \
-o feature@zpool_checkpoint=enabled \
-O devices=off \
-O acltype=posixacl -O xattr=sa \
-O compression=off \
-O normalization=formD \
-O relatime=on \
-O canmount=off -O mountpoint=/boot -R /mnt -f \
bpool ${DISK}-part2
次に、rpool
のためのLUKSパーティションを作ります。
cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha256 ${DISK}-part3
YES
と入力しEnterを押します。その後、設定したいパスワードを入力します。(もちろん長い方が良いものの、何度か入力させられるので長すぎるのも考えどころ)
cryptsetup luksOpen ${DISK}-part3 luks1
先ほど設定したパスワードを入力してLUKSを解錠します。
rpool
を作ります。bpool
同様、compression=off
は個人的な好みです。
zpool create \
-o ashift=12 \
-o autotrim=on \
-O acltype=posixacl -O xattr=sa -O dnodesize=auto \
-O compression=off \
-O normalization=formD \
-O relatime=on \
-O canmount=off -O mountpoint=/ -R /mnt \
rpool /dev/mapper/luks1
初めのデータセットを切ります。
zfs create -o canmount=off -o mountpoint=none rpool/ROOT
zfs create -o canmount=off -o mountpoint=none bpool/BOOT
/
のデータセットを切ります。
OpenZFS公式ドキュメントに従うとrpool/ROOT/ubuntu_abc123
みたいな感じで後ろにUUIDが付くのですが、
個人的には不要だと思うので入れません。
zfs create -o mountpoint=/ \
-o com.ubuntu.zsys:bootfs=yes \
-o com.ubuntu.zsys:last-used=$(date +%s) rpool/ROOT/ubuntu
/boot
のデータセットを切ります。
zfs create -o mountpoint=/boot bpool/BOOT/ubuntu
/
以下のいろいろなディレクトリのデータセットを切ります。
zfs create -o com.ubuntu.zsys:bootfs=no -o canmount=off \
rpool/ROOT/ubuntu/usr
zfs create -o com.ubuntu.zsys:bootfs=no -o canmount=off \
rpool/ROOT/ubuntu/var
zfs create rpool/ROOT/ubuntu/var/lib
zfs create rpool/ROOT/ubuntu/var/log
zfs create rpool/ROOT/ubuntu/var/spool
zfs create -o canmount=off -o mountpoint=/ \
rpool/USERDATA
zfs create -o com.ubuntu.zsys:bootfs-datasets=rpool/ROOT/ubuntu \
-o canmount=on -o mountpoint=/root \
rpool/USERDATA/root
chmod 700 /mnt/root
zfs create rpool/ROOT/ubuntu/var/cache
zfs create rpool/ROOT/ubuntu/var/tmp
chmod 1777 /mnt/var/tmp
zfs create rpool/ROOT/ubuntu/var/lib/apt
zfs create rpool/ROOT/ubuntu/var/lib/dpkg
切りすぎると却って管理が煩雑になるとは思いますが、上記までは問答無用で切ることを強くおすすめします。
zfs create rpool/ROOT/ubuntu/usr/local
zfs create rpool/ROOT/ubuntu/var/lib/docker
zfs create rpool/ROOT/ubuntu/var/snap
上記もほとんどのユーザーは切った方が利便性が高いと思います。
tmpfs等を工面します。
mkdir /mnt/run
mount -t tmpfs tmpfs /mnt/run
mkdir /mnt/run/lock
切ったデータセットを確認します。
root@ubuntu-server:~# zfs list
NAME USED AVAIL REFER MOUNTPOINT
bpool 684K 1.75G 96K /mnt/boot
bpool/BOOT 192K 1.75G 96K none
bpool/BOOT/ubuntu 96K 1.75G 96K /mnt/boot
rpool 2.34M 3.60T 96K /mnt
rpool/ROOT 1.35M 3.60T 96K none
rpool/ROOT/ubuntu 1.26M 3.60T 128K /mnt
rpool/ROOT/ubuntu/usr 192K 3.60T 96K /mnt/usr
rpool/ROOT/ubuntu/usr/local 96K 3.60T 96K /mnt/usr/local
rpool/ROOT/ubuntu/var 968K 3.60T 96K /mnt/var
rpool/ROOT/ubuntu/var/cache 96K 3.60T 96K /mnt/var/cache
rpool/ROOT/ubuntu/var/lib 392K 3.60T 104K /mnt/var/lib
rpool/ROOT/ubuntu/var/lib/apt 96K 3.60T 96K /mnt/var/lib/apt
rpool/ROOT/ubuntu/var/lib/docker 96K 3.60T 96K /mnt/var/lib/docker
rpool/ROOT/ubuntu/var/lib/dpkg 96K 3.60T 96K /mnt/var/lib/dpkg
rpool/ROOT/ubuntu/var/log 96K 3.60T 96K /mnt/var/log
rpool/ROOT/ubuntu/var/snap 96K 3.60T 96K /mnt/var/snap
rpool/ROOT/ubuntu/var/spool 96K 3.60T 96K /mnt/var/spool
rpool/ROOT/ubuntu/var/tmp 96K 3.60T 96K /mnt/var/tmp
rpool/USERDATA 192K 3.60T 96K /mnt
rpool/USERDATA/root 96K 3.60T 96K /mnt/root
root@ubuntu-server:~#
Ubuntuインストール
debootstrap
にてUbuntuの最小システムをインストールします。manticは23.10です。
sshで入っている場合、切れても大丈夫なようにtmux等を使うことをおすすめします。
debootstrap mantic /mnt
少々時間が掛かるので、食事か入浴か睡眠をしましょう。
終わったら進みます。
mkdir /mnt/etc/zfs
cp /etc/zfs/zpool.cache /mnt/etc/zfs/
好きなhostnameをつけてください。
hostname YOUR-HOSTNAME
hostname > /mnt/etc/hostname
echo -e "127.0.0.1\\tYOUR-HOSTNAME" >> /mnt/etc/hosts
netplanにてネットワーク設定を書きます。(割愛)
vim /mnt/etc/netplan/00-config.yaml
aptリポジトリの設定を書きます。OpenZFS公式ドキュメントは随分と簡素でしたが、ここでは通常のインストールに合わせた内容を記載します。
vim /mnt/etc/apt/sources.list
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://archive.ubuntu.com/ubuntu/ mantic main restricted
# deb-src http://archive.ubuntu.com/ubuntu/ mantic main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://archive.ubuntu.com/ubuntu/ mantic-updates main restricted
# deb-src http://archive.ubuntu.com/ubuntu/ mantic-updates main restricted
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://archive.ubuntu.com/ubuntu/ mantic universe
# deb-src http://archive.ubuntu.com/ubuntu/ mantic universe
deb http://archive.ubuntu.com/ubuntu/ mantic-updates universe
# deb-src http://archive.ubuntu.com/ubuntu/ mantic-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://archive.ubuntu.com/ubuntu/ mantic multiverse
# deb-src http://archive.ubuntu.com/ubuntu/ mantic multiverse
deb http://archive.ubuntu.com/ubuntu/ mantic-updates multiverse
# deb-src http://archive.ubuntu.com/ubuntu/ mantic-updates multiverse
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://archive.ubuntu.com/ubuntu/ mantic-backports main restricted universe multiverse
# deb-src http://archive.ubuntu.com/ubuntu/ mantic-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ mantic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu/ mantic-security main restricted
deb http://security.ubuntu.com/ubuntu/ mantic-security universe
# deb-src http://security.ubuntu.com/ubuntu/ mantic-security universe
deb http://security.ubuntu.com/ubuntu/ mantic-security multiverse
# deb-src http://security.ubuntu.com/ubuntu/ mantic-security multiverse
いよいよ、まずはchroot
で入ります。
mount --make-private --rbind /dev /mnt/dev
mount --make-private --rbind /proc /mnt/proc
mount --make-private --rbind /sys /mnt/sys
chroot /mnt /usr/bin/env DISK=$DISK bash --login
chroot環境内
無事chroot
で入ることに成功しましたら、chrootの中で以下に進みます。
apt update
dpkg-reconfigure locales tzdata console-setup
ja_jp.UTF-8、Asia/Tokyo、UTF-8 に設定しましたが、各自の環境に合わせてください。
お好きなエディタを入れます
apt install vim
LUKSのための設定をします。
apt install cryptsetup
echo luks1 /dev/disk/by-uuid/$(blkid -s UUID -o value ${DISK}-part3) \
none luks,discard,initramfs > /etc/crypttab
EFI System Partitionを作ります。
apt install dosfstools
mkdosfs -F 32 -s 1 -n EFI ${DISK}-part1
mkdir /boot/efi
echo /dev/disk/by-uuid/$(blkid -s UUID -o value ${DISK}-part1) \
/boot/efi vfat defaults 0 0 >> /etc/fstab
mount /boot/efi
mkdir /boot/efi/grub /boot/grub
echo /boot/efi/grub /boot/grub none defaults,bind 0 0 >> /etc/fstab
mount /boot/grub
UEFI向けのGRUBパッケージをインストールします。
apt install \
grub-efi-amd64 grub-efi-amd64-signed linux-image-generic \
shim-signed zfs-initramfs zsys
まさかWindowsとのデュアルブートなどという曲芸はしていないと思うので消します。
apt purge os-prober
とりあえずrootログインが必要なのでパスワードを設定します。
インストール終了後に削除するので深く考えなくて大丈夫です。
passwd
/tmp
を工面します。
cp /usr/share/systemd/tmp.mount /etc/systemd/system/
systemctl enable tmp.mount
よく分からないのですがやります。
addgroup --system lpadmin
addgroup --system lxd
addgroup --system sambashare
SSHサーバーを入れます。別に後でも大丈夫だと思います。
apt install openssh-server
bpool
の正常性を確認します。
grub-probe /boot
zfs
と出ればOKです。ダメな場合はbpool
がおかしいので作り直してください。
OKな場合、initramfsを作ります。
update-initramfs -c -k all
お好きなエディタでGRUB編集します。
vim /etc/default/grub
ここら辺は個人的な好みですが、
GRUB_CMDLINE_LINUX_DEFAULT
からquiet
splash
を消します。
GRUB_TIMEOUT_STYLE
をmenu
にします。
GRUB_TIMEOUT
は2
にします。
弄ったら忘れずに行います
update-grub
そしてgrub-installします。
grub-install --target=x86_64-efi --efi-directory=/boot/efi \
--bootloader-id=ubuntu --recheck --no-floppy
よく分からないのですが、ZFS関連のファイルを作ります。
mkdir /etc/zfs/zfs-list.cache
touch /etc/zfs/zfs-list.cache/bpool
touch /etc/zfs/zfs-list.cache/rpool
zed -F &
少し経った後、
cat /etc/zfs/zfs-list.cache/bpool
cat /etc/zfs/zfs-list.cache/rpool
この2つが空っぽでなければOKです。
zedを止めたいのでシェルに取り戻します。
fg
Ctrl-Cを押してzed -F
を止めます。
よく分からないのですが、cacheのマウントポイントを修正します。
sed -Ei "s|/mnt/?|/|" /etc/zfs/zfs-list.cache/*
chroot
から抜けます。
exit
LiveUSBでの作業終了、再起動
sync;sync;sync
mount | grep zfs | tac | awk '/\/mnt/ {print $3}' | \
xargs -i{} umount -lf {}
zpool export -a
3回syncしたのでzpool export失敗しても大丈夫なはずなので再起動します。
reboot
しばらくするとinitramfs内でLUKSのパスワードを求められるので入れると解錠されますが、
ファイルシステムをマウント出来ずinitramfsプロンプトが現れるので、
(initramfs) zpool import -f bpool
(initramfs) zpool import -f rpool
(initramfs) exit
これで起動してログインプロンプトが出るはずなので、rootログインします。
次に、ユーザーを作ります。OpenZFS公式ドキュメントではユーザーのデータセットにもUUIDを付けることになっていますが、
ユーザーにこそUUIDを付ける意義が全く分からないので、システム同様付けません。
username=YOUR_USERNAME
ROOT_DS='rpool/ROOT/ubuntu'
zfs create -o com.ubuntu.zsys:bootfs-datasets=$ROOT_DS \
-o canmount=on -o mountpoint=/home/$username \
rpool/USERDATA/${username}
adduser $username
adduser
にてパスワードを求められたら入力し、あとは適当にEnter連打するなどしてユーザーを追加します。
次に、ホームディレクトリを作ります。
cp -a /etc/skel/. /home/$username
chown -R $username:$username /home/$username
usermod -a -G adm,cdrom,dip,lpadmin,lxd,plugdev,sambashare,sudo $username
まともなUbuntuシステムをインストールし、ログアウトします。
apt dist-upgrade
apt install ubuntu-standard
exit
先ほど作ったユーザーでログイン出来るか確認し、個人的にはここら辺のタイミングでSSH鍵を仕込みます。
curlのURLは自分のGitHubアカウントIDに置き換えてください。置き換えを怠った場合、私にsshログインを許可することになります。
mkdir .ssh
sudo apt install curl
curl https://github.com/kenh0u.keys > .ssh/authorized_keys
Ubuntuの流儀に従ってrootログインを無効化し、再起動します。
sudo usermod -p '*' root
sudo reboot
再起動後、ユーザーでログインしたらLUKSヘッダーをバックアップします。
sudo cryptsetup luksHeaderBackup /dev/disk/by-id/nvme-TEAM_TM8FP4004T_123456-part3 \
--header-backup-file luks1-header.dat
これをDropboxとかにバックアップしておくと、LUKSの鍵を追加,削除する際にミスって吹っ飛ばしても復旧できるらしいです。
セキュアブート有効化
UEFI設定のセキュアブートの項目にて一旦StandardをCustomにしてリセット的なことをしてStandardに戻し、Ubuntuを起動します。
UEFI設定についてはマシン毎の差異があるため割愛します。
sudo dmesg | grep secure
[ 0.000000] secureboot: Secure boot enabled
[ 0.015544] secureboot: Secure boot enabled
こんなようなものが標準出力に出てきていればセキュアブートは有効になっているのですが、後のドライバインストールに備えてMOKを作ってUEFIに登録します。
sudo update-secureboot-policy --new-key
sudo mokutil --import /var/lib/shim-signed/mok/MOK.der
パスワードを求められるので、ほどほどなものを入力します。
sudo reboot
MOK Managerが立ち上がるのでスルーせずにMOKを登録します。
セキュアブートを煙たがる方が多いのですが、せっかく用意されているセキュリティ機能は有効にすべきと考えています。
Clevisの設定(TPMを利用してLUKS自動アンロック)
起動する度に途中でLUKSのパスワードを求められて面倒臭いと思うので、自動復号を設定します。
ただし、セキュリティレベルを下げる行為ではあるため、運用事情によっては自動復号せずdropbear-initramfs
を使用すべきかもしれませんので、
その場合はこの項はスキップしてください。
sudo apt install clevis clevis-tpm2 clevis-initramfs
sudo tpm2_getcap pcrs
TPMのpcrバンクが表示されます。
selected-pcrs:
- sha1: [ ]
- sha256: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 ]
- sha384: [ ]
- sm3_256: [ ]
よく分からないのですが、程よく先頭すぎず真ん中寄りのpcrバンクを使っておけば良いのではと思いますので、7番を使います。
sudo clevis luks bind -d /dev/disk/by-id/nvme-TEAM_TM8FP4004T_123456-part3 tpm2 '{"pcr_bank":"sha256","pcr_ids":"7"}'
LUKSパスワードを求められますので、入力すると登録されます。
一応登録状況を確認します。
sudo clevis luks list -d /dev/disk/by-id/nvme-TEAM_TM8FP4004T_123456-part3
一応改めてupdate-initramfs
しておきます。
sudo update-initramfs -u -k all
自動復号が出来るかどうか確認するため、再起動します。
sudo reboot
正しく設定出来ていればinitramfsでLUKSパスワードを入力せずに無事起動できるはずです。
Clevis設定は以上ですが、UEFIのファームウェアアップデート等でTPMのデータを吹っ飛ばした際の再登録方法を書いておきます。
まずはスロットを確認します。
sudo clevis luks list -d /dev/disk/by-id/nvme-TEAM_TM8FP4004T_123456-part3
1個しか無ければこのコマンドで消します。複数ある場合は-sをうまく指定しつつ全部消します。
sudo clevis luks unbind -d /dev/disk/by-id/nvme-TEAM_TM8FP4004T_123456-part3 -s 1
そして再登録します。
sudo clevis luks bind -d /dev/disk/by-id/nvme-TEAM_TM8FP4004T_123456-part3 tpm2 '{"pcr_bank":"sha256","pcr_ids":"7"}'
その他
セキュリティのため、unattended-upgrades
は入れた方がいいかと思います。
sudo apt install unattended-upgrades
また、折角root on ZFSしたならばzsysによる自動スナップショットも設定すべきなのですが、
ひとまずこの記事はここまでとし、以降に別記事でzsysの設定について書けたらと思います。
おわりに
ここまで読んで実際にインストールした方は、まるでGentooかのように煩雑なインストール手順に感じたのではないでしょうか。
今後のUbuntuがサーバーOSとしてだけでなくクライアントOSとしてWindowsに勝つためには、macOSがAPFSで実現しているようにCopy on Writeなファイルシステムは絶対に必要だと個人的には思うので、
このroot on ZFSが将来もっと簡単に行えるようになるといいなと思っています。
また、Ubuntu 24.04 nobleのリリースも近づいていますので、リリースされたら真っ先にroot on ZFS周りについて確認します。
記事の感想や指摘についてのリプライなど歓迎ですので、気兼ねなく送ってください。
Discussion