J'ai essayé de créer une image de Debian bootable (Jessie/8.4) depuis 2 jours et autant que je sache, j'ai la procédure, mais je ne peux pas obtenir le système de fichiers. Je suis relativement sûr que je fais quelque chose de mal ici, manque quelque chose avec montage ou /etc/fstab
( Il n'y en a pas dans mon image). J'espérais que quelqu'un avec une certaine expérience serait capable de m'aider/me montrer ce que je manque.
Voici les erreurs que je vois comme je démarre dans Qemu-System-X86:
Comme texte, puis comme les captures d'écran réelles:
fsck: error 2 (No such file or directory) while executing fsck.ext2 for /dev/sda1
fsck exited with status code 8
[FAILED] Failed to start Load/Save Random Seed
See `systemctl status systemd-random-seed.service` for details.
[FAILED] Failed to start Various fixups to make systemd work better on Debian.
See `systemctl status debian-fixup.service` for details.
...
[FAILED] Failed to start Update UTMP about System Boot/Shutdown.
See `systemctl status systemd-update-utmp.service` for details.
[DEPEND] Dependency failed for Update UTMP about System Runlevel Changes.
Voici les instructions que j'ai écrites pour moi-même/étapes que j'ai prises:
cd ~
mkdir debootstrap
cd debootstrap/
# get newest
wget http://ftp.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.80_all.deb
ar -x debootstrap_1.0.80_all.deb
zcat /root/debootstrap/data.tar.gz | tar xv
apt-get install parted
# 1.5Gbytes
dd if=/dev/zero of=1445.img bs=1024 count=1 seek=1536k
parted -s 1445.img -- mklabel msdos mkpart primary 1m 1.5g toggle 1 boot
losetup --show -f 1445.img
# prints out `/dev/loopX`, enter this on the next lin
partprobe /dev/loop0
# only have to make the filesytem once --> if you are troubleshooting steps, do not redo this line
mkfs -t ext2 /dev/loop0p1
mount /dev/loop0p1 /mnt
debootstrap --verbose --components=main,contrib,non-free \
--include=firmware-realtek,linux-image-AMD64,grub-pc,ssh,vim \
--exclude=nano \
--Arch AMD64 jessie /mnt http://ftp.us.debian.org/debian
Source pour des informations sur l'utilisation --Components
Assurez-vous que le noyau est installé, il devrait apparaître/boot
dans le chroot, c'est-à-dire/mnt/boot
avec les fichiers suivants:
initrd.img-3.16.0-4-AMD64
vmlinuz-3.16.0-4-AMD64
config-3.16.0-4-AMD64
System.map-3.16.0-4-AMD64
installer grub
grub-install --boot-directory=/mnt/boot --modules=part_msdos /dev/loop0
Configurer apt
copier sur les sources APT
cp /etc/apt/sources.list /mnt/etc/apt/sources.list
assurez-vous que la source CDROM est commentée
ajouter la ligne:
deb http://ftp.debian.org/debian stable-backports main contrib non-free
mount --bind /dev/pts /mnt/dev/pts
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /dev /mnt/dev
# if you want your pushprofilesettings
cp ~/.bashrc /mnt/root/
cp ~/.vimrc /mnt/root/
# chroot -- enter the system as if it were thy own
chroot /mnt /bin/bash
export HOME=/root
export LC_ALL=C
export LANG=C.UTF-8
export TERM=xterm-256color
mount
à partir demontage homme :
[.____] --bind
Remonter un sous-arbre ailleurs (son contenu est disponible dans les deux endroits).
[.____] -t <type>
Montage du système de fichiers type, avec ceci, mount
_ tentera de déterminer automatiquement
éditer /etc/default/grub
:
Régler GRUB_CMDLINE_LINUX=""
à:
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
Définir GRUB_TERMINAL=console
Sous, ajouter la ligne:
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --Word=8 --parity=no --stop=1"
Faire la configuration grub - ceci[[~ # ~] doit [~ # ~] être fait dans un non -systemd-nspawn
Shell (cela signifiechroot
)
grub-mkconfig -o /boot/grub/grub.cfg
exit
umount /mnt/sys
umount /mnt/dev
umount /mnt/dev/pts
umount /mnt/proc
peut vérifier les montages supplémentaires avec:mount | grep /mnt
puis les démonter avecumount
systemd-nspawn -D /mnt
# not you are in a special container
Définissez le mot de passe pour root
avec passwd
Dans /etc/ssh/sshd_config
commenter PermitRootLogin without-password
lire #PermitRootLogin without-password
et insérer PermitRootLogin yes
dessous
Activez maintenant ssh sur le démarrage
systemctl enable ssh
# this is needed to clean up both chroot and systemd-nspawn -D /mnt
# once this is run you can not do systemd-nspawn either so wait until you are entirely done
exit
umount /mnt
losetup -d /dev/loop0
Vérifier les montages supplémentaires avec:mount | grep /mnt
Si[~ # ~] n'importe quoi [~ # ~ ~] est retourné, démontez-les avecumount
Si vous avez cassé quelque chose ou que vous avez besoin de réessayer, re-montage/configuration chroot sur existant .img
:
losetup --show -f 1445.img
# prints out `/dev/loopX`, enter this on the next lin
partprobe /dev/loop0
mount /dev/loop0p1 /mnt
qemu-system-x86_64 -hda 1445.img -m 1024 -vnc :0
Gardé dessus et le figuré, relativement droit en avant d'ici, mais pas seulement une question de mise en place /etc/fstab
, voici le reste:
pas nécessaire mais une bonne idée de nettoyer les choses
apt-get autoclean
mettre en place /etc/fstab
- Vérifiez avec mount
pour vous assurer que vous êtes sur le type de fichier de fichiers droit
echo "/dev/sda1 / ext4 defaults,errors=remount-ro 0 1" > /etc/fstab
Cela reconstruira les Initiramfs et lui permettra de démarrer propre
update-initramfs -u -k all
Faites cela et la machine à nettoyer, testée à QEMU, puis je l'utilise maintenant sur le matériel.
Configuration automatisée de Debian 9 sans erreur SystemD
Cette configuration n'a aucune erreur ou avertissements SystemD, et je reçois la connexion Internet et une coquille à la fin.
Cette configuration n'est tout simplement pas parfaite car je n'utilise pas le noyau Debian, les erreurs lorsque j'ai essayé d'expliquer dans une section ultérieure. J'ai ensuite juste essayé un noyau que j'avais couché, avec configuration basé sur un buildroot et cela a fonctionné. La configuration est fournie dans cette configuration. Par conséquent, il est possible que certains paquets qui s'appuient sur des configurations de noyau manquants échoueront, bien que je n'ai pas observé d'erreurs jusqu'à présent.
Une configuration analogue a parfaitement fonctionné avec le noyau Ubuntu: https://askabuntu.com/questions/281763/is-There-an-prebuilt-qemu-online/1081171#1081171 le Le noyau Ubuntu doit avoir les configurations manquantes comparées aubian. Les échecs du noyau Debian peuvent probablement être fixés en compilant le noyau Debian avec des options supplémentaires telles que CONFIG_VIRTIO_BLK=y
Comme je l'ai fait pour 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 \
;
Maintenant, à partir du terminal, connectez-vous avec root
/root
, puis vérifiez que Internet fonctionne avec les commandes suivantes:
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
Nous avons utilisé nc
comme expliqué à - https://stackoverflow.com/questions/32341518/how-to-make-an-http-get-request-manuellement-with-netcat/52662497#52662497 parce que:
wget
et curl
ne sont pas installés par défautping
ne fonctionne pas de QEMU par défaut: Comment ping de l'invité QEMU à une URL externe?Testé sur un hôte Ubuntu 18.04.
Que se passe-t-il si j'essaie d'utiliser le noyau Debian
TODO comprendre et résoudre. Si je remplace la compilation du noyau Linux ci-dessus avec le noyau Linux emballagé Debian:
linux_img="${debootstrap_dir}/boot/vmlinuz-"*
puis la démarrage échoue avec:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
et une liste vide pour:
List of all partitions:
donc, le disque n'est pas reconnu du tout. J'ai également essayé d'utiliser exactement le même noyau que l'installateur ISO debian est installé comme ici, mais pour Debian , et il échoue de la même manière, même si l'installation ISO debian a fonctionné bien avec la même chose Options QEMU (il génère GRUB Installer sur un disque avec plusieurs partitions, la racine en train d'être ext4
).
Je ne peux pas commenter, mais votre "guide" a travaillé des merveilles pour faire une minute minimale Ubuntu 16. Les seules choses que j'ai changées étaient les dégoûts et je devais obtenir manuellement la mise en réseau de travail (networkd
).
Ma ligne de dégoottrap était:
#> Sudo debootstrap --components=main,contrib,nonfree --variant=minbase \
--include=linux-generic,grub-pc --Arch=i386 xenial /mnt