Criando imagem inicializável do Debian com o debootstrap

10

Eu tenho tentado criar uma imagem inicializável do debian (jessie / 8.4) nos últimos 2 dias, e até onde eu sei, tenho o procedimento correto, mas não consigo acertar o sistema de arquivos. Tenho certeza de que estou fazendo algo errado aqui, faltando algo com a montagem ou /etc/fstab ( não há um na minha imagem ). Eu estava esperando que alguém com alguma experiência pudesse me ajudar / me mostrar o que estou perdendo.

Aqui estão os erros que vejo quando estou inicializando no qemu-system-x86:

Como texto e depois como as capturas de tela reais:

Erros:

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.

Aquiestãoasinstruçõesqueescreviparamim/asetapasquetomei:

cd~mkdirdebootstrapcddebootstrap/#getnewestwgethttp://ftp.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.80_all.debar-xdebootstrap_1.0.80_all.debzcat/root/debootstrap/data.tar.gz|tarxvapt-getinstallparted#1.5Gbytesddif=/dev/zeroof=1445.imgbs=1024count=1seek=1536kparted-s1445.img--mklabelmsdosmkpartprimary1m1.5gtoggle1bootlosetup--show-f1445.img#printsout'/dev/loopX',enterthisonthenextlinpartprobe/dev/loop0#onlyhavetomakethefilesytemonce-->ifyouaretroubleshootingsteps,donotredothislinemkfs-text2/dev/loop0p1mount/dev/loop0p1/mntdebootstrap--verbose--components=main,contrib,non-free\--include=firmware-realtek,linux-image-amd64,grub-pc,ssh,vim\--exclude=nano\--archamd64jessie/mnthttp://ftp.us.debian.org/debian

fonte de informações sobre o uso de --components

  • Assegure-se de que o kernel esteja instalado, ele deve aparecer em /boot dentro do chroot, que é /mnt/boot com os seguintes arquivos:

    • 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
  • instalar o grub

    grub-install --boot-directory=/mnt/boot --modules=part_msdos /dev/loop0
    
  • Configurar o APT

    • copie sobre as fontes do apt

      cp /etc/apt/sources.list /mnt/etc/apt/sources.list
      
    • certifique-se de que a fonte de cdrom esteja comentada

    • adicione a linha:

      deb http://ftp.debian.org/debian stable-backports main contrib non-free
      

Configurar um 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 de man mount :
--bind Remount uma subárvore em outro lugar (seu conteúdo está disponível em ambos os lugares).% -t <type> Montagem do sistema de arquivos tipo , com isso, mount tentará determinar automaticamente

configuração de acesso serial / console

edite /etc/default/grub :

  1. Defina GRUB_CMDLINE_LINUX="" para:

    GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
    
  2. Descomente GRUB_TERMINAL=console

  3. Abaixo, adicione a linha:

    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    

Faça a configuração do grub - Esta DEVE ser feita em um shell que não seja systemd-nspawn (isso significa chroot )

grub-mkconfig -o /boot/grub/grub.cfg

Sair do chroot

exit

Limpar para chroot'ed

umount /mnt/sys
umount /mnt/dev
umount /mnt/dev/pts
umount /mnt/proc

Pode verificar se há montagens adicionais com: mount | grep /mnt e, em seguida, desmontá-las com umount

Digite systemd-nspawn

systemd-nspawn -D /mnt
# not you are in a special container

Defina a senha para root com passwd

Em /etc/ssh/sshd_config comente PermitRootLogin without-password para ler #PermitRootLogin without-password e insira PermitRootLogin yes abaixo dela

Agora habilite o ssh na inicialização

systemctl enable ssh

limpar

# 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

Verifique se há montagens adicionais com: mount | grep /mnt Se QUALQUER COISA for retornada, desmonte-as com umount

Recuperar (somente necessário em ERROR)

Se você quebrou alguma coisa ou precisa tentar novamente, RE-MOUNT / SETUP CHROOT em .img :

losetup --show -f 1445.img
# prints out '/dev/loopX', enter this on the next lin
partprobe /dev/loop0
mount /dev/loop0p1 /mnt

testando img

qemu-system-x86_64 -hda 1445.img -m 1024 -vnc :0
    
por ehiller 10.04.2016 / 04:06

3 respostas

4

Continuou e entendeu isso, relativamente direto daqui, mas não apenas uma questão de configurar /etc/fstab , aqui está o resto:

não é necessário, mas é uma boa ideia limpar as coisas

apt-get autoclean

configure /etc/fstab - verifique com mount para garantir que você esteja no tipo certo de sistema de arquivos

echo "/dev/sda1 / ext4 defaults,errors=remount-ro 0 1" > /etc/fstab

isso reconstruirá o initramfs e permitirá que ele seja inicializado de maneira limpa

update-initramfs -u -k all

Faça isso e a máquina inicializa, é testada no QEMU e, em seguida, eu a executo agora no hardware.

    
por 11.04.2016 / 21:02
3

Não é possível comentar, mas seu "guia" funcionou para criar um thumbdrive Minimal Ubuntu 16. As únicas coisas que eu mudei foram o debootstrap e eu tive que manualmente trabalhar em rede ( networkd ).

Minha linha de debootstrap era:

#> sudo debootstrap --components=main,contrib,nonfree  --variant=minbase \
                    --include=linux-generic,grub-pc --arch=i386 xenial /mnt
    
por 17.02.2018 / 19:44
2

Configuração automatizada do Debian 9 sem nenhum erro do systemd

Esta configuração não possui nenhum erro ou aviso de systemd, e eu recebo a conexão com a Internet e um shell no final.

Esta configuração não é perfeita, pois não estou usando o kernel do Debian, erros quando tentei ser explicado em uma seção posterior. Eu então tentei um kernel que eu tinha por aí, com configuração baseado no Buildroot e funcionou. A configuração é fornecida nesta configuração. Portanto, é possível que alguns pacotes que dependem de configurações de kernel ausentes falhem, embora eu não tenha observado nenhum erro até agora.

Uma configuração análoga funcionou perfeitamente com o kernel do Ubuntu, no entanto: link O kernel do Ubuntu deve ter as configurações ausentes em comparação com o Debian. As falhas do kernel do Debian podem ser corrigidas compilando o kernel do Debian com opções extras como CONFIG_VIRTIO_BLK=y como eu fiz para o Ubuntu.

#!/usr/bin/env bash

set -eux

debootstrap_dir=debootstrap
root_filesystem=img.ext2.qcow2

sudo apt-get install \
  debootstrap \
  libguestfs-tools \
  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 .

Agora, a partir do terminal, faça o login com root / root e verifique se a Internet funciona com os seguintes comandos:

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

Usamos nc conforme explicado em link porque:

Testado em um host do Ubuntu 18.04.

O que acontece se eu tentar usar o kernel do Debian

TODO entender e corrigir. Se eu substituir a compilação do kernel Linux acima com o kernel Linux empacotado do Debian:

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

então a inicialização falha com:

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

e uma lista vazia de:

List of all partitions:

para que o disco não seja reconhecido. Eu também tentei usar exatamente o mesmo kernel que o instalador ISO Debian instala como feito aqui, mas para o Debian , e ele falha da mesma maneira, mesmo que a instalação Debian Debian funcionasse bem com as mesmas opções do QEMU (ele gera a instalação do GRUB em um disco com múltiplas partições , a raiz sendo ext4 ).

    
por 04.10.2018 / 16:12