web-dev-qa-db-fra.com

Création d'une image de Debian amorçable avec Debootstrap

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:

Les erreurs:

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.

enter image description hereenter image description here

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
      

Configurer un chroot

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

accès série Serial/console

éditer /etc/default/grub:

  1. Régler GRUB_CMDLINE_LINUX="" à:

    GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
    
  2. Définir GRUB_TERMINAL=console

  3. 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

Sortie chroot

exit

Nettoyer pour chroot'ed

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

Entrez SystemD-NSPOWN

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

nettoyer

# 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

Récupérer (seulement nécessaire par erreur)

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

tester img

qemu-system-x86_64 -hda 1445.img -m 1024 -vnc :0
14
ehiller

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.

4
ehiller

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 \
;

GitHub Upstream .

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:

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
4
505e06b2