chroot から Linux システムを起動する: これを行うより良い方法はありますか?

chroot から Linux システムを起動する: これを行うより良い方法はありますか?

chroot されたシステムで起動するように Grub メニュー エントリを設定したい (既存のシステムにあまり触れないように、chroot された debootstrap をインストールしました)。

現在、私はこれを達成するために次のことを行っています:

  1. chroot環境内にlinux-imageと関連製品をインストールする

  2. 通常の動作ではなく、システムに 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 に追加できます。

関連情報