Создание загрузочного образа Debian с помощью debootstrap

Я использую rsync -az и, конечно же, он сохраняет мне время модификации. Я перепроверил это прямо сейчас.

12
10.04.2016, 05:06
2 ответа

No puedo comentar, pero su "guía" funcionó de maravilla para hacer una memoria USB Minimal Ubuntu 16. Lo único que cambié fue el debootstrap y tuve que hacer que la red funcionara manualmente(networkd).

Mi línea de arranque era:

#> sudo debootstrap --components=main,contrib,nonfree  --variant=minbase \
                    --include=linux-generic,grub-pc --arch=i386 xenial /mnt
4
27.01.2020, 19:56

Автоматическая установка Debian 9 без ошибок systemd

Эта настройка не содержит ошибок или предупреждений systemd, и в конце я получаю подключение к Интернету и оболочку.

Эта установка не идеальна, так как я не использую ядро ​​Debian, ошибки, которые я пытался объяснить в следующем разделе. Затем я просто попробовал завалявшееся у меня ядро ​​с конфигурацией на основе Buildroot , и оно сработало. Конфигурация предоставляется в этой настройке. Следовательно, возможно, что некоторые пакеты, которые полагаются на отсутствующие конфигурации ядра, не будут работать, хотя я пока не наблюдал никаких ошибок.

Аналогичная установка отлично работала с ядром Ubuntu, однако:https://askubuntu.com/questions/281763/is-there-any-prebuilt-qemu-ubuntu-image32bit-online/1081171#1081171Ядро Ubuntu должно иметь отсутствующие конфигурации по сравнению с ядром Debian. Сбои ядра Debian, вероятно, можно исправить, скомпилировав ядро ​​Debian с дополнительными параметрами, такими как CONFIG_VIRTIO_BLK=y, как я сделал для Ubuntu.

#!/usr/bin/env bash

set -eux

debootstrap_dir=debootstrap
root_filesystem=img.ext2.qcow2

sudo apt-get install \
  debootstrap \
  libguestfs-tools \
  git \
  qemu-system-x86 \
;

if [ ! -d "$debootstrap_dir" ]; then
  # Create debootstrap directory.
  # - linux-image-amd64: downloads the kernel image
  sudo debootstrap \
    --include linux-image-amd64 \
    stretch \
    "$debootstrap_dir" \
    http://deb.debian.org/debian/ \
  ;
  sudo rm -f "$root_filesystem"
fi

if [ ! -f "$root_filesystem" ]; then
  # Set root password.
  echo 'root:root' | sudo chroot "$debootstrap_dir" chpasswd

  # Remount root filesystem as rw.
  # Otherwise, systemd shows:
  #     [FAILED] Failed to start Create Volatile Files and Directories.
  # and then this leads to further failures in the network setup.
  cat << EOF | sudo tee "${debootstrap_dir}/etc/fstab"
/dev/sda / ext4 errors=remount-ro,acl 0 1
EOF

  # Network.
  # We use enp0s3 because the kernel boot prints:
  #     8139cp 0000:00:03.0 enp0s3: renamed from eth0
  # This can also be observed with:
  #     ip link show
  # Without this, systemd shows many network errors, the first of which is:
  #     [FAILED] Failed to start Network Time Synchronization.
  cat << EOF | sudo tee "${debootstrap_dir}/etc/network/interfaces.d/00mytest"
auto lo
iface lo inet loopback
auto enp0s3
iface enp0s3 inet dhcp
EOF

  # Generate image file from debootstrap directory.
  # Leave 1Gb extra empty space in the image.
  sudo virt-make-fs \
    --format qcow2 \
    --size +1G \
    --type ext2 \
    "$debootstrap_dir" \
    "$root_filesystem" \
  ;
  sudo chmod 666 "$root_filesystem"
fi

# linux_image="$(printf "${debootstrap_dir}/boot/vmlinuz-"*)"

linux_img=linux/arch/x86_64/boot/bzImage
if [ ! -f "$linux_img" ]; then
  # Build the Linux kernel.
  git clone --depth 1 --branch v4.18 git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
  cd linux
  wget https://gist.githubusercontent.com/cirosantilli/6e2f4975c1929162a86be09f839874ca/raw/6d151d231a233408a6e1b541bf4a92fd55bf5338/.config
  make olddefconfig
  make -j`nproc`
  cd -
fi

qemu-system-x86_64 \
  -append 'console=ttyS0 root=/dev/sda' \
  -drive "file=${root_filesystem},format=qcow2" \
  -enable-kvm \
  -serial mon:stdio \
  -m 2G \
  -kernel "$linux_img" \
  -device rtl8139,netdev=net0 \
  -netdev user,id=net0 \
;

Восходящий поток GitHub .

Теперь из терминала войдите в систему с помощью root/ root, а затем проверьте, работает ли Интернет, с помощью следующих команд:

printf 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | nc example.com 80
apt-get update
apt-get install hello
hello

Мы использовали nc, как объяснено в https://stackoverflow.com/questions/32341518/how-to-make-an-http-get-request-manually-with-netcat/52662497#52662497, потому что:

Протестировано на хосте Ubuntu 18.04.

Что произойдет, если я попытаюсь использовать ядро ​​Debian

TODO понять и исправить. Если я заменю приведенную выше компиляцию ядра Linux ядром Linux в пакете Debian:

linux_img="${debootstrap_dir}/boot/vmlinuz-"*

, затем происходит сбой загрузки с:

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

и пустой список для:

List of all partitions:

, поэтому диск вообще не распознается. Я также пытался использовать точно такое же ядро, которое устанавливает установщик Debian ISO , как это сделано здесь, но для Debian , и это не помогло,несмотря на то, что установка Debian ISO работала нормально с теми же параметрами QEMU (, она генерирует установку GRUB на диске с несколькими разделами, корневой из которых являетсяext4).

5
27.01.2020, 19:56

Теги

Похожие вопросы