
何か見落としているのでしょうか、それとも手動パーティション分割 + preseed で指示された場所に grub を常にインストールできないのはなぜでしょうか?
私は、パーティション ディレクティブのない xubuntu 20.04.2 デスクトップ用の preseed ファイルを使用しています。「automatic-ubiquity」が起動すると、手動で sda をパーティション分割した後、/dev/sda1 を選択しても無視され、grub が /dev/sda にインストールされます。
d-i grub-installer/only_debian boolean false
および/またはpreseed に追加されますd-i grub-installer/with_other_os boolean false
。手動で sda をパーティション分割した後、/dev/sda1 を選択しても無視され、grub は /dev/sda にインストールされます。
動的に設定する方法を編み出しましたd-i grub-installer/bootdev string default
が、そのためにはライブ環境で起動し、ディスクをパーティション分割して最初にアクティブ パーティションを設定し、次に「ubiquity --automatic」を起動するか、「automatic-ubiquity」で再起動する必要があります。
d-i grub-installer/only_debian boolean false
d-i grub-installer/with_other_os boolean false
d-i grub-installer/bootdev string default
d-i partman/early_command string \
BOOTFLAG=$(lsblk -rpo PARTFLAGS,PKNAME,PATH | grep "0x80" | cut -f 3 -d ' '); \
if [ $BOOTFLAG ]; then debconf-set grub-installer/bootdev $BOOTFLAG; fi;
これをテストすると、単一のディスクを持つ VM では機能しますが、複数のディスクを持つハードウェアや USB からのインストールでは期待どおりに機能しない可能性があります。
d-i grub-installer/skip boolean true
常に無視されているようです。これを機能させる方法を再度ハックし、d-i grub-installer/bootdev string
空のままに設定しました。ただし、ubiquity/success_command に grub を手動でインストールしても機能しません。/dev/sda1 の最初のいくつかのセクターを検査すると、すべて 00 です。他のコマンドは正常に完了します。
d-i grub-installer/only_debian boolean false
d-i grub-installer/with_other_os boolean false
d-i grub-installer/bootdev string
ubiquity ubiquity/success_command string \
in-target grub-install -‑force /dev/sda1; \
echo "tmpfs /tmp tmpfs nosuid,nodev 0 0" >> /target/etc/fstab;
答え1
結局、私はこの方法をやめました。現在は空にpartman/early_command
設定し、パーティションに grub を強制的にインストールしてアクティブとしてマークしています。grub-installer/bootdev
ubiquity/success_command
/target
ちょっと見苦しいですが、動作します。sata/nvme/mbr パーティション テーブルのみ、および ext2/3/4 を使用した個別の boot/home/root パーティションでテスト済みです。
d-i grub-installer/only_debian boolean false
d-i grub-installer/with_other_os boolean false
d-i grub-installer/bootdev string
ubiquity ubiquity/success_command string \
echo 'tmpfs /tmp tmpfs nosuid,nodev 0 0' >> /target/etc/fstab ;\
worker() { grub-install --force --root-directory=/target $2 &&\
parted -s $3 -- set ${4##*-} boot on; } ;\
worker $(lsblk -lpo MOUNTPOINT,KNAME,PKNAME,PARTUUID | grep '/target ');
最終的には、GUI の選択を反映するために、ユビキタスを更新する必要があると思います。