Я использую rsync -az
и, конечно же, он сохраняет мне время модификации. Я перепроверил это прямо сейчас.
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
Автоматическая установка 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 \
;
Теперь из терминала войдите в систему с помощью 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, потому что:
wget
и curl
не установлены по умолчанию ping
не работает из QEMU по умолчанию:Как выполнить ping из гостевой системы QEMU на внешний URL?Протестировано на хосте 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
).