デフォルトでは、以下に説明するようにQEMUを使用して外部chroot環境を設定しようとしています。https://www.hellion.org.uk/blog/posts/foreign-chroots-with-schroot-and-qemu/。
ホストシステムはUbuntu x86_64(Github Actions)で、arm用のDebianを実行する外部chrootがあります。
これで、aptインストールでOCamlを設定しようopam
とした後、.OCamlが見つからずopam init
失敗します。/proc/sys/kernel/overflowuid
もっと深く掘り下げてみると、/proc
そのルート刑務所の内部は完全に空でした。sudo mount -B /proc $CROSS_ROOT/proc
実行直後にスクリプトに追加しようとしましたが、debootstrap
まだ役に立ちません/proc
。まだ空です。と同じですsudo mount -t proc /proc $CROSS_ROOT/proc
。
また、チョールート監獄から飛び出した時見たがmount | grep proc
見た/proc
ことがなかったCROSS_ROOT/proc
。
私が気づいたもう1つの奇妙なことは、インストールmount
リストを表示するためにchroot刑務所の内部を実行するとmtab
見つからないというエラーメッセージが表示されることです。これは正常ですか、それともここに別の問題があることを示していますか?
私は小さなバグを排除するために$CROSS_ROOT
CIスクリプトでこれを何度も使用していましたが、debootstrap
変数が空の場合、他のエラーもたくさん発生すると思います。
/proc
なぜchroot刑務所の内部を見ることができないのですか?
答え1
debootstrap
2つのステップで実行されます。
sudo debootstrap --variant=buildd --include=fakeroot,build-essential,sudo --arch=armhf --foreign buster $CROSS_ROOT $CROSS_MIRROR
sudo chroot $CROSS_ROOT ./debootstrap/debootstrap --second-stage
インストールは、/proc
2つのステップの間ではなく2番目のステップの後に完了する必要があります。 2番目のステップが/proc
再び削除されます。 (質問で言及されたソースは、qemu-arm-static
実際には2つのステップの間に発生する必要があるchroot内にいくつかの追加の魔法を提供します。として撤回することができます。)
mountコマンドを2番目のステップに移動すると、debootstrap
chroot Jailが表示されます/proc
。