Próbowałem utworzyć bootowalny obraz Debiana (jessie / 8.4) przez ostatnie 2 dni i, o ile wiem, mam prawidłową procedurę, ale nie mogę poprawnie ustawić systemu plików. Jestem względnie pewien, że robię tutaj coś złego, brakuje czegoś z montażem lub /etc/fstab
( nie ma tego na moim obrazie ). Miałem nadzieję, że ktoś z pewnym doświadczeniem będzie w stanie mi pomóc / pokazać mi, czego mi brakuje.
Oto błędy, które widzę podczas uruchamiania systemu qemu-system-x86:
Jako tekst, a następnie jako zrzuty ekranu:
Błędy:
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.
Oto instrukcje, które napisałem dla siebie / kroki, które podjąłem:
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
źródło informacji o korzystaniu z --components
Upewnij się, że jądro jest zainstalowane, powinno pojawić się w
/boot
chroot, czyli/mnt/boot
z następującymi plikami: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
zainstaluj grub
grub-install --boot-directory=/mnt/boot --modules=part_msdos /dev/loop0
Skonfiguruj APT
skopiuj na apt apt
cp /etc/apt/sources.list /mnt/etc/apt/sources.list
upewnij się, że źródło cdrom jest skomentowane
dodaj linię:
deb http://ftp.debian.org/debian stable-backports main contrib non-free
Skonfiguruj chroota
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
Zamontuj poddrzewa w innym miejscu (jego zawartość jest dostępna w obu miejscach).
-t <type>
Podłączenie typu systemu plików , przy tym, mount
spróbuje automatycznie ustalić
skonfigurować dostęp szeregowy / konsolowy
edycja /etc/default/grub
:
Ustaw
GRUB_CMDLINE_LINUX=""
na:GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
Brak komentarza
GRUB_TERMINAL=console
Poniżej dodaj wiersz:
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
Dokonać config grub - To musi być zrobione w niebędącego systemd-nspawn
skorupy (czyli chroot
)
grub-mkconfig -o /boot/grub/grub.cfg
Wyjdź z chroot
exit
Posprzątaj dla chroot'ed
umount /mnt/sys
umount /mnt/dev
umount /mnt/dev/pts
umount /mnt/proc
Może sprawdzić dodatkowe mocowania za pomocą: mount | grep /mnt
a następnie odmontować je za pomocą umount
Wpisz systemd-nspawn
systemd-nspawn -D /mnt
# not you are in a special container
Ustaw hasło dla za root
pomocąpasswd
W /etc/ssh/sshd_config
Wykomentuj PermitRootLogin without-password
czytać #PermitRootLogin without-password
i włóż PermitRootLogin yes
pod nią
Teraz włącz ssh podczas uruchamiania
systemctl enable ssh
sprzątać
# 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
Sprawdź dodatkowe uchwyty z: mount | grep /mnt
Jeżeli cokolwiek jest zwracany odłącz je umount
Odzyskaj (konieczne tylko w przypadku BŁĘDU)
Jeśli coś zepsułeś lub musisz spróbować ponownie, ZMONTUJ / USTAWIENIA CHROOT na istniejących .img
:
losetup --show -f 1445.img
# prints out `/dev/loopX`, enter this on the next lin
partprobe /dev/loop0
mount /dev/loop0p1 /mnt
testowanie img
qemu-system-x86_64 -hda 1445.img -m 1024 -vnc :0
źródło
sudo debootstrap --components=main,contrib,nonfree --variant=minbase --include=linux-generic,grub-pc --arch=i386 xenial /mnt
.Odpowiedzi:
Nie mogę komentować, ale twój „przewodnik” działał cuda, tworząc minimalny dysk Ubuntu 16. Jedyne, co zmieniłem, to debootstrap i musiałem ręcznie uruchomić sieć (
networkd
).Moja linia debootstrap to:
źródło
Zachowałem to i wymyśliłem, stosunkowo prosto stąd, ale nie tylko kwestia przygotowania
/etc/fstab
, oto reszta:nie konieczne, ale dobry pomysł, aby posprzątać
skonfiguruj
/etc/fstab
- sprawdź za pomocą,mount
aby upewnić się, że masz właściwy typ systemu plikówspowoduje to przebudowanie initramfs i pozwoli na czysty rozruch
Zrób to, a maszyna uruchomi się czysta, przetestowana w QEMU, a następnie uruchomię ją teraz na sprzęcie.
źródło
Zautomatyzowana konfiguracja Debiana 9 bez błędów systemowych
Ta konfiguracja nie zawiera błędów systemowych ani ostrzeżeń, a na końcu otrzymuję połączenie internetowe i powłokę.
Ta konfiguracja po prostu nie jest idealna, ponieważ nie używam jądra Debiana. Błędy, które próbowałem wyjaśnić w dalszej części. Właśnie wtedy wypróbowałem jądro, które miałem, z konfiguracją opartą na Buildroot i działało. Konfiguracja jest dostępna w tej konfiguracji. Dlatego możliwe jest, że niektóre pakiety, które polegają na brakujących konfiguracjach jądra, zawiodą, chociaż do tej pory nie zauważyłem żadnych błędów.
Analogiczna konfiguracja działała idealnie z jądrem Ubuntu: /ubuntu/281763/is-there-any-prebuilt-qemu-ubuntu-image32bit-online/1081171#1081171 Jądro Ubuntu musi mieć brakujące konfiguracje w porównaniu do Debiana. Błędy jądra Debiana można prawdopodobnie naprawić, kompilując jądro Debiana z dodatkowymi opcjami, takimi
CONFIG_VIRTIO_BLK=y
jak zrobiłem dla Ubuntu.GitHub w górę .
Teraz z poziomu terminala zaloguj się za pomocą
root
/root
, a następnie sprawdź, czy Internet działa z następującymi poleceniami:Użyliśmy
nc
jak wyjaśniono na /programming/32341518/how-to-make-an-http-get-request-manually-with-netcat/52662497#52662497, ponieważ:wget
icurl
nie są instalowane domyślnieping
domyślnie nie działa z QEMU: Jak pingować z gościa QEMU na zewnętrzny adres URL?Testowany na hoście Ubuntu 18.04.
Co się stanie, jeśli spróbuję użyć jądra Debiana
DO ZROBIENIA zrozumieć i naprawić. Jeśli zastąpię powyższą kompilację jądra Linuksa jądrem Linuksa spakowanym w Debianie:
następnie rozruch kończy się niepowodzeniem:
i pusta lista dla:
więc dysk w ogóle nie jest rozpoznawany. Próbowałem również użyć dokładnie tego samego jądra, które instaluje instalator Debian ISO, tak jak tutaj, ale w przypadku Debiana , i to kończy się niepowodzeniem w ten sam sposób, mimo że instalacja ISO Debiana działała dobrze z tymi samymi opcjami QEMU (generuje instalację GRUB na dysku z wieloma partycjami (główną jest
ext4
).źródło
build-essentials
przed uruchomieniem skryptu. Będziesz brakujegit
,make
,bison
iflex
także mieć świadomość, że istnieje związek tu do OP github config, warto ją przeczytać przed uruchomieniem przez to ślepo, aby upewnić się, że nie uległa zmianie.