dockerでdebootstrap --fakechrootを使用した2番目のステップは失敗します(/lib/ld-linux-armhf.so.3:そのファイルまたはディレクトリはありません)。

dockerでdebootstrap --fakechrootを使用した2番目のステップは失敗します(/lib/ld-linux-armhf.so.3:そのファイルまたはディレクトリはありません)。

Dockerコンテナに外部chrootを設定しようとしています。スクリプトの抜粋:

apt-get -y install debootstrap fakechroot fakeroot qemu-user-static binfmt-support
mkdir -p $CROSS_ROOT
fakechroot fakeroot -s .fakeroot.state debootstrap --variant=fakechroot --include=fakeroot,build-essential,ca-certificates,debian-archive-keyring,git,sudo --arch=${CROSS_ARCH} --foreign ${CROSS_RELEASE} $CROSS_ROOT $CROSS_MIRROR
mkdir -p $CROSS_ROOT/usr/bin
ln /usr/bin/qemu-*-static $CROSS_ROOT/usr/bin/
fakechroot fakeroot -i .fakeroot.state -s .fakeroot.state chroot $CROSS_ROOT /debootstrap/debootstrap --second-stage

Debian Buster/armhf の場合、最後の行は次のエラーメッセージで失敗します。

/lib/ld-linux-armhf.so.3: No such file or directory

ただし、ls -la $CROSS_ROOT/lib/ld-linux-*最後の行の前に挿入すると、ライブラリファイルが見つかります。

lrwxrwxrwx 1 root root 30 Mar 15  2022 /opt/chroot/armhf/lib/ld-linux-armhf.so.3 -> arm-linux-gnueabihf/ld-2.28.so

リンク先も存在します。

-rwxr-xr-x 1 root root 105840 Mar 15  2022 /opt/chroot/armhf/lib/arm-linux-gnueabihf/ld-2.28.so

ですから、図書館は当然必要なところにあるのです。ここに何の問題があり、どうすればよいですか?

ベストアンサー1

Webの一部のソースによると、fakechroot一貫して動作しません。これは失敗を説明する可能性があります。また、Dockerコンテナ内で実行される問題がないため、fakechroot必要ありませんchroot。 (私が知っている限り、GitLab CIランチャーは無許可モードで実行されます。)

一方、一部の特権タスク(mountやmountなど)は、権限のないDockerコンテナで失敗する可能性があるため、これはfakeroot必要なようです。/sys/proc

これはまた、一般を選択できることを意味します--variant(これ以外は、fakechroot環境で実行されないとエラーが発生しますfakechroot)。

だからあきらめてfakechroot--variantのものを使ってくださいfakechroot(私の場合はbuilddビルドシステムを設定しているので)。次の方法は機能し、debootstrapエラーなしで少なくとも2つのステップを完了します。

apt-get -y install debootstrap fakechroot fakeroot qemu-user-static binfmt-support
mkdir -p $CROSS_ROOT
fakeroot -s .fakeroot.state debootstrap --variant=buildd --include=fakechroot,fakeroot,build-essential,ca-certificates,debian-archive-keyring,git,sudo --arch=${CROSS_ARCH} --foreign ${CROSS_RELEASE} $CROSS_ROOT $CROSS_MIRROR
mkdir -p $CROSS_ROOT/usr/bin
ln /usr/bin/qemu-*-static $CROSS_ROOT/usr/bin/
fakeroot -i .fakeroot.state -s .fakeroot.state chroot $CROSS_ROOT /debootstrap/debootstrap --second-stage --verbose

一部のパッケージも前の例と比較して変更されました。これが実際に必要かどうかは調べていません。

おすすめ記事