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. Estou relativamente certo de que estou fazendo algo errado aqui, perdendo algo com a montagem ou /etc/fstab
( não há uma na minha imagem ). Eu esperava 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, em seguida, 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.
Aqui estão as instruções que eu escrevi para mim / as etapas que eu tomei:
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
fonte de informações sobre o uso de --components
Verifique se o kernel está instalado, ele deve aparecer
/boot
dentro do chroot, ou seja,/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 grub
grub-install --boot-directory=/mnt/boot --modules=part_msdos /dev/loop0
Configurar o APT
copiar sobre as fontes apt
cp /etc/apt/sources.list /mnt/etc/apt/sources.list
verifique se a fonte cdrom está 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
from man mount :
--bind
remonte uma subárvore em outro lugar (seu conteúdo está disponível nos dois lugares).
-t <type>
A montagem do tipo de sistema de arquivos , com isso, mount
tentará determinar automaticamente
configurar acesso serial / console
editar /etc/default/grub
:
Defina
GRUB_CMDLINE_LINUX=""
como:GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
Descomentar
GRUB_TERMINAL=console
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 - isso DEVE ser feito em um não- systemd-nspawn
shell (isso significa chroot
)
grub-mkconfig -o /boot/grub/grub.cfg
Chroot de saída
exit
Limpar para chroot'ed
umount /mnt/sys
umount /mnt/dev
umount /mnt/dev/pts
umount /mnt/proc
Pode verificar montagens adicionais com: mount | grep /mnt
e depois desmontá-las com umount
Digite systemd-nspawn
systemd-nspawn -D /mnt
# not you are in a special container
Defina a senha para root
compasswd
No /etc/ssh/sshd_config
comentário PermitRootLogin without-password
para ler #PermitRootLogin without-password
e inserir PermitRootLogin yes
abaixo
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 devolvida, desmonte-as com umount
Recuperar (necessário apenas em ERRO)
Se você quebrou algo, ou precisa tentar novamente, RE-MOUNT / SETUP CHROOT nos existentes .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
fonte
sudo debootstrap --components=main,contrib,nonfree --variant=minbase --include=linux-generic,grub-pc --arch=i386 xenial /mnt
.Respostas:
Não posso comentar, mas o seu "guia" fez maravilhas para criar um pendrive mínimo do Ubuntu 16. As únicas coisas que mudei foram o debootstrap e tive que colocar manualmente a rede em funcionamento (
networkd
).Minha linha debootstrap era:
fonte
Manteve-se e descobriu-o, relativamente direto daqui, mas não apenas uma questão de criação
/etc/fstab
, aqui está o resto:não é necessário, mas uma boa idéia para limpar as coisas
configuração
/etc/fstab
- verifique commount
para garantir que você está no tipo certo de sistema de arquivosisso reconstruirá o initramfs e permitirá que ele seja inicializado limpo
Faça isso e a máquina inicializará limpa, testada no QEMU e eu estou executando agora no hardware.
fonte
Configuração automatizada do Debian 9 sem erros no systemd
Essa configuração não possui nenhum erro ou aviso do sistema, e eu recebo a conexão com a Internet e um shell no final.
Essa configuração não é perfeita, pois não estou usando o kernel do Debian, erros quando tentei explicar em uma seção posterior. Tentei então um kernel que eu tinha por aí, com a configuração baseada no Buildroot e funcionou. A configuração é fornecida nesta configuração. Portanto, é possível que alguns pacotes que dependem de configurações ausentes do kernel falhem, embora eu não tenha observado nenhum erro até agora.
No entanto, uma configuração análoga funcionou perfeitamente com o kernel do Ubuntu: /ubuntu/281763/is-there-any-prebuilt-qemu-ubuntu-image32bit-online/1081171#1081171 O kernel do Ubuntu deve ter as configurações ausentes comparado ao Debian. As falhas do kernel do Debian provavelmente podem ser corrigidas compilando o kernel do Debian com opções extras, como
CONFIG_VIRTIO_BLK=y
eu fiz no Ubuntu.GitHub upstream .
Agora, no terminal, efetue login com
root
/root
e verifique se a Internet funciona com os seguintes comandos:Usamos
nc
como explicado em /programming/32341518/how-to-make-an-http-get-request-manually-with-netcat/52662497#52662497 porque:wget
ecurl
não são instalados por padrãoping
não funciona no QEMU por padrão: Como executar ping do convidado do QEMU em um URL externo?Testado em um host Ubuntu 18.04.
O que acontece se eu tentar usar o kernel Debian
TODO entender e corrigir. Se eu substituir a compilação do kernel Linux acima pelo kernel Linux empacotado Debian:
a inicialização falhará com:
e uma lista vazia para:
portanto, o disco não está sendo reconhecido. Eu também tentei usar exatamente o mesmo kernel que o instalador ISO do Debian instala, como feito aqui, mas para o Debian , e falha da mesma maneira, mesmo que a instalação do Debian ISO funcione bem com as mesmas opções QEMU (gera instalação do GRUB em um disco com várias partições, sendo a raiz
ext4
).fonte
build-essentials
antes de executar o script. Você vai estar ausentegit
,make
,bison
eflex
também estar conscientes que existe um link aqui para configuração OP github, você pode querer lê-lo completamente antes de executá-lo cegamente para ter certeza que não mudou.