
chroot されたシステムで起動するように Grub メニュー エントリを設定したい (既存のシステムにあまり触れないように、chroot された debootstrap をインストールしました)。
現在、私はこれを達成するために次のことを行っています:
chroot環境内にlinux-imageと関連製品をインストールする
通常の動作ではなく、システムに chroot するために initramfs を手動で再マスターします。
rootmnt=$rootmnt/root/squeeze
...
#exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console
exec chroot ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console
3. /boot/grub.cfg にエントリを追加します。
menuentry 'Chrooted debian Squeeze' {
...
linux /root/squeeze/boot/vmlinuz root=... rw
initrd /root/squeeze/boot/initrd-chroot
}
動作しますが、セットアップが簡単ではなく、initrd を変更するたびに手動でハッキングする必要があります。どうすればもっとうまくできるでしょうか?
答え1
私も同じ問題に遭遇し、結局これを書いている異なるシステム (現在は Debian、Ubuntu) 間で問題なく動作するようにするには:
スクリプトを実行してmake_chroot_initrd
、既存のイメージから chroot 対応の新しい initrd イメージを作成します。
# ./make_chroot_initrd /chroot/trusty/boot/initrd.img-3.13.0-32-generic
making new initrd: /chroot/trusty/boot/initrd.img-3.13.0-32-generic.chroot
新しいイメージは、chroot=
ブート パラメータを処理できる点を除いてまったく同じになります。
grub2をブートローダーとして使用すると、次のエントリを追加できます/boot/grub/grub.cfg
:
(または、より良い方法/etc/grub.d/40_custom
)
menuentry "ubuntu trusty, (linux 3.13.0-32) (chroot)" {
insmod ext2 # or whatever you're using ...
set root='(hd0,7)' # partition containing the chroot
set chroot='/chroot/trusty' # chroot path
linux $chroot/boot/vmlinuz-3.13.0-32-generic root=/dev/sda7 chroot=$chroot rw
initrd $chroot/boot/initrd.img-3.13.0-32-generic.chroot
}
(ファイル/パーティションを自分のものに合わせて変更してください)
システム全体のインストール
満足したら、変更を永続的にすることができます
(initramfs-tools パッケージがアップグレードされるまで)。chroot
されたシステムの場合:
# cd /usr/share/initramfs-tools
# cp -pdrv . ../initramfs-tools.orig # backup
# patch -p1 < path_to/boot_chroot/initrd.patch
# rm *.orig */*.orig
# update-initramfs -u
今後は、通常の initrd イメージが chroot ブートをサポートするようになります。
同期が取れなくなる可能性のある別の initrd.chroot を使用する必要はありません。
見るブート_chroot詳細については。
答え2
なぜ run-init から chroot に切り替えたのですか? そうすべきではありません。run-init は initramfs ルート内のすべてを削除し、$rootmnt に chroot します。その動作を維持する必要があります。
毎回 initramfs を手動で再構築しなくても済むようにするには、/usr/share/initramfs-tools にある init スクリプトのマスター コピーを編集します。少なくとも initramfs-tools パッケージをアップグレードするまでは、これで問題が解決するはずです。
恒久的な解決策としては、init スクリプトにパッチを適用して、rootmnt に何かを追加するブート引数を認識できるようにし、そのパッチを Debian に組み込むために送信します。その後、その方法でブートする必要があるエントリの引数を grub に追加できます。