我使用的主机提供了 Debian 8.10(内核 4.9.85)作为救援系统。过去我一直用它来引导 Ubuntudebootstrap
从这里。
我正在使用一些准备步骤,例如安装,这就是我正在使用的 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
在于,在这个新版本中我最终只看到了步骤检索中,证实和提取(对于软件包的子集)但没有任何关于正在设置的这些软件包的信息。
所以我对自己说“好吧,我用 做了这个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)。
我认为有两件事可能是个问题:
- 内核版本差异:Ubuntu 18.04 中为 4.15,Debian 8.10 中为 4.9.85。
- libc 版本差异:2.27-3ubuntu1 与 2.19-18+deb8u10。
...但无论哪种情况,我都希望从debootstrap
.同样对于xenial
(Ubuntu 16.04)我不应该期待同样的差异。但我没有看到任何错误,而是跳过了重要的设置步骤,并尝试进入chroot
with/target
命令/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
.
我该如何解决这个问题,以便从所述 Debian 救援系统成功引导 Ubuntu?该架构与主机和目标相匹配,那么是什么阻止了安装步骤的运行呢?
注意:我无法启动到更新的内核。或者更确切地说,实现类似目标的唯一方法是首先安装某种本地救援系统。
我正在使用的软件
$ 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
。
我还尝试过什么
我也尝试传递--foreign
给debootstrap
,这应该原因我所看到的行为,但还应该留下一个可执行文件/debootstrap/debootstrap
,然后我可以使用--second-stage
.然而,虽然它表现出与我所看到的完全相同的行为没有命令--foreign
行切换后,没有/debootstrap/debootstrap
在目标文件系统中完成引导。
此外,我尝试通过以下方式安装它debootstrap
来使用:(它标识为)。然后链接到.jessie-backports
apt-get install -t jessie-backports debootstrap
debootstrap 1.0.89~bpo8+1
/usr/share/debootstrap/scripts/bionic
/usr/share/debootstrap/scripts/gutsy
答案1
好吧,我想通了。的调用debootstrap
确实通过返回退出代码 1 来指示失败。由于我链接多个命令并使用子 shell 的方式,我错过了这一点。
一旦我弄清楚了这一点,我就必须找出debootstrap
遇到的问题。从(目标内部)来看,这一点并不明显/debootstrap/debootstrap.log
,尽管事后看来确实如此。所以我需要反省debootstrap
。为此,/usr/sbin/debootstrap
通过/bin/sh -x
(打开跟踪)显式调用 shell 脚本,并且实际上可以在内部/debootstrap/debootstrap.log
(目标内部)看到输出。就我而言,问题mknod
如以下跟踪条目和输出所示:
+ mknod -m 666 /target/dev/null c 1 3
mknod: '/target/dev/null': File exists
这又是由我安装/dev
并/proc
进入/sys
目标引起的预先(一些东西曾经工作过在过去!)。
在新debootstrap
版本中,这似乎无条件失败。相应的函数调用mknod
来自setup_devices_simple
./usr/share/debootstrap/functions
通过比较和(以及后续版本)debootstrap
的脚本,我看到的一个显着变化是函数的调用从函数转移到(脚本的)函数 。除非进行变体或在“外部”内核上运行,否则该函数会调用,因此会比以前更早地调用。1.0.59
1.0.89~bpo8+1
setup_devices
second_stage_install
first_stage_install
gutsy
setup_devices_simple
fakechroot
mknod
之前之所以没有失败,似乎是因为过去设备保存在 .tgz 文件中并解压到位,而现在直接debootstrap
使用。mkdnod