web-dev-qa-db-ja.com

Debian 8.10を介してUbuntu(18.04)をデブートストラップするときに少し問題が発生しました

私が使用しているホスティング業者は、Debian 8.10(カーネル4.9.85)をレスキューシステムとして提供しています。過去に私はこれをbootstrap Ubuntu using debootstrapここから に使用しました。

私が使用しているURLでapt-cacher-ngを使用する理由であるlocalhost:3142のインストールなど、いくつかの準備手順を使用しています( http:// localhost:3142/us.archive.ubuntu .com/ubuntu / )およびubuntu-archive-keyring

debootstrapの呼び出しは次のとおりです。

LANG=C debootstrap --keep-debootstrap-dir --verbose --include=ubuntu-server,bash-completion,Sudo,lshw,tmux,unzip,pciutils,usbutils,openssh-server,unattended-upgrades,linux-image-generic,cron --variant=minbase --Arch=$(dpkg --print-architecture) bionic /target http://localhost:3142/us.archive.ubuntu.com/ubuntu/

--verboseを追加したのは、何か問題が発生しているかどうかを確認するためであり、役に立たないためです。)

debootstrapの実行の奇妙な点は、この新しいバージョンでは、最終的にステップRetrievingValidatingおよびExtractingのみが表示されることです。 =(パッケージのサブセットの場合)ただし、セットアップされるこれらのパッケージについては何もありません。

それで、私は「申し分なく、私はxenialを使ってこれを実行したので、もう一度試してみましょう」と思い、同じルーチンが得られました。

+ debootstrap --keep-debootstrap-dir --verbose --include=ubuntu-server,bash-completion,Sudo,lshw,tmux,unzip,pciutils,usbutils,openssh-server,unattended-upgrades,linux-image-generic,cron --variant=minbase --Arch=
AMD64 xenial /target http://localhost:3142/us.archive.ubuntu.com/ubuntu/
I: Retrieving InRelease
I: Checking Release signature
I: Valid Release signature (key id 790BC7277767219C42C86F933B4FE6ACC0B21F32)
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Found additional base dependencies: acpid apport apt-utils at bcache-tools btrfs-tools busybox-initramfs byobu ca-certificates cloud-guest-utils cloud-initramfs-copymods cloud-initramfs-dyn-netconf cpio crda
cryptsetup cryptsetup-bin curl dh-python distro-info-data dmeventd dmsetup ethtool fonts-ubuntu-font-family-console gawk gcc-5-base gettext-base gir1.2-glib-2.0 git git-man gnupg gpgv grub-legacy-ec2 ifenslave i
fupdown initramfs-tools initramfs-tools-bin initramfs-tools-core iproute2 iso-codes iw klibc-utils kmod libapt-inst2.0 libapt-pkg5.0 libasn1-8-heimdal libasprintf0v5 libbsd0 libcurl3-gnutls libdbus-1-3 libdbus-g
lib-1-2 libdevmapper-event1.02.1 libdrm2 libdumbnet1 libedit2 liberror-Perl libevent-2.0-5 libexpat1 libffi6 libfuse2 libgdbm3 libgirepository-1.0-1 libglib2.0-0 libgmp10 libgnutls30 libgpm2 libgssapi-krb5-2 lib
gssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal libhogweed4 libhx509-5-heimdal libicu55 libidn11 libk5crypto3 libkeyutils1 libklibc libkrb5-26-heimdal libkrb5-3 libkrb5support0 libl
dap-2.4-2 liblvm2app2.2 liblvm2cmd2.02 liblz4-1 liblzo2-2 libmnl0 libmpdec2 libmpfr4 libmspack0 libnettle6 libnewt0.52 libnl-3-200 libnl-genl-3-200 libp11-kit0 libpci3 libperl5.22 libplymouth4 libpng12-0 libpopt
0 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libpython3-stdlib libpython3.5-minimal libpython3.5-stdlib libreadline5 libreadline6 libroken18-heimdal librtmp1 libsasl2-2 libsasl2-modules-db libsigs
egv2 libslang2 libsqlite3-0 libssl1.0.0 libstdc++6 libtasn1-6 libusb-0.1-4 libusb-1.0-0 libutempter0 libwind0-heimdal libwrap0 linux-base linux-firmware linux-image-4.4.0-21-generic linux-image-extra-4.4.0-21-ge
neric lsb-release lvm2 mdadm mime-support open-iscsi open-vm-tools openssh-client openssh-sftp-server openssl overlayroot patch Perl perl-modules-5.22 plymouth python python-apt-common python-minimal python2.7 p
ython2.7-minimal python3 python3-apport python3-apt python3-chardet python3-dbus python3-debian python3-gi python3-minimal python3-newt python3-pkg-resources python3-problem-report python3-pycurl python3-six pyt
hon3-software-properties python3.5 python3.5-minimal readline-common screen software-properties-common sosreport ubuntu-cloudimage-keyring ubuntu-keyring ucf udev update-notifier-common vim vim-common vim-runtim
e vlan wireless-regdb xfsprogs xz-utils
I: Checking component main on http://localhost:3142/us.archive.ubuntu.com/ubuntu...
I: Retrieving acpid 1:2.0.26-1ubuntu2
I: Validating acpid 1:2.0.26-1ubuntu2
[...]
I: Chosen extractor for .deb packages: dpkg-deb
I: Extracting adduser...
I: Extracting base-files...
I: Extracting base-passwd...
[...]
I: Extracting zlib1g...

これが奇妙な理由は、以前はセットアップステージが問題なく機能していたためです。しかし、今は黙ってスキップされます!?古いdebootstrapバージョンは、Bionic Beaver(Ubuntu 18.04)を知らないため、機能しません。

問題になる可能性があると思ったことが2つありました。

  1. カーネルバージョンの不一致:Ubuntu 18.04では4.15、Debian 8.10では4.9.85。
  2. libcバージョンの不一致:2.27-3ubuntu1対2.19-18 + deb8u10。

...でもどちらの場合でも、debootstrapからの何らかのエラーメッセージが表示されます。また、xenial(Ubuntu 16.04)についても、同じ不一致を予期する必要はありません。しかし、エラーは表示されません。代わりに、重要なセットアップ手順がスキップされ、/targetへのchroot/bin/bashコマンドで実行しようとすると、

# LANG=en_US.UTF-8 chroot /target /bin/bash
groups: cannot find name for group ID 0
I have no name!@rescue:/#

少し掘り下げても/etc/passwdは表示されません。 /dev/procおよび/sys/targetにバインドマウントされます。

bootstrap DebianレスキューシステムのUbuntuを正常に実行するために、この問題のトラブルシューティングを行うにはどうすればよいですか?アーキテクチャがホストとターゲットに一致するため、セットアップステップの実行を妨げているものは何ですか?

NB:最近のカーネルで起動できません。または、そのようなことを達成する唯一の方法は、最初になんらかのローカルレスキューシステムをインストールすることです。


私が使用しているソフトウェア

$ debootstrap --version
debootstrap 1.0.95ubuntu1
$ uname -a
Linux rescue 4.9.85 #2 SMP Thu Mar 1 08:06:18 CET 2018 x86_64 GNU/Linux

ubuntu-archive-keyringもインストールしました。


他に何を試しましたか

私はまた、--foreigndebootstrapに渡してみました。これは原因表示されている動作ですが、実行可能ファイル/debootstrap/debootstrapも残しておく必要があります。 --second-stage。しかし、私が見ているのとまったく同じ動作を示しますが、なし--foreignコマンドラインスイッチですが、ターゲットファイルシステムには、ブートストラップを完了するための/debootstrap/debootstrapがありません。

さらに、jessie-backportsからdebootstrapをこの方法でインストールして使用しようとしました:apt-get install -t jessie-backports debootstrapdebootstrap 1.0.89~bpo8+1として識別されます)。次に、/usr/share/debootstrap/scripts/bionic/usr/share/debootstrap/scripts/gutsyにリンクします。

6
0xC0000022L

わかりました。 debootstrapの呼び出しは、実際に1の終了コードを返すことによって失敗を示していました。いくつかのコマンドをチェーンしてサブシェルを使用していたため、失敗しました。

それがわかったら、debootstrapで発生している問題を見つける必要がありました。 /debootstrap/debootstrap.log(ターゲット内)からは明らかではありませんでしたが、後から明らかです。 debootstrapを内省する必要がありました。そのために、/usr/sbin/debootstrapを介して明示的に/bin/sh -xシェルスクリプトを呼び出し(トレースをオンにするため)、出力は実際に/debootstrap/debootstrap.logの内部(ターゲット内)で確認できます。私の場合、このトレースエントリと出力に示されているように、問題はmknodでした。

+ mknod -m 666 /target/dev/null c 1 3
mknod: '/target/dev/null': File exists

これは、/dev/proc/sysをターゲットにマウントしたことによって発生しましたp front(何かが機能した過去!)。

新しいdebootstrapバージョンでは、これは無条件に失敗するようです。 mknodを呼び出すそれぞれの関数は、setup_devices_simpleから/usr/share/debootstrap/functionsです。

1.0.591.0.89~bpo8+1(およびそれ以降のバージョン)のdebootstrapスクリプトを比較してわかった注目すべき変更の1つは、関数setup_devicesの呼び出しが関数second_stage_installから(gutsyスクリプトの)関数first_stage_installに移動したことです。 。この関数は、バリアントfakechrootを実行するか、「外部」カーネルで実行していない限り、setup_devices_simpleを呼び出すため、mknodが以前よりもかなり早く呼び出されます。

これが以前に失敗しなかった理由は、以前は.tgzファイル内に保持されて所定の場所に展開されていたデバイスでしたが、現在debootstrapmkdnodを直接使用するためです。

7
0xC0000022L