Debootstrap ile önyüklenebilir Debian görüntüsü oluşturma


13

Son 2 gündür önyüklenebilir bir debian (jessie / 8.4) görüntüsü oluşturmaya çalışıyorum ve prosedürün doğru olduğunu söyleyebildiğim kadarıyla dosya sistemini doğru alamıyorum. Ben nispeten emin ben burada bir şey yanlış yapıyor montaj ile bir şeyler eksik veya olduğumu duyuyorum /etc/fstab( benim görüntüde bir tane değil ). Biraz tecrübesi olan birisinin bana yardım edebileceğini / eksik olduğumu gösterebileceğini umuyordum.

İşte qemu-system-x86 içine önyükleme yaptığımda gördüğüm hatalar:

Metin olarak ve ardından gerçek ekran görüntüleri olarak:

Hatalar:

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.

resim açıklamasını buraya girin resim açıklamasını buraya girin

İşte kendim için yazdığım talimatlar / attığım adımlar:

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

bileşenlerinin kullanımı hakkında bilgi kaynağı

  • Çekirdeğin kurulduğundan emin olun /boot , kroot içinde, yani aşağıdaki dosyalarla birlikte görünmelidir /mnt/boot :

    • 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
  • grub yükle

    grub-install --boot-directory=/mnt/boot --modules=part_msdos /dev/loop0
    
  • APT'yi kur

    • apt kaynakları üzerinden kopyala

      cp /etc/apt/sources.list /mnt/etc/apt/sources.list
      
    • cdrom kaynağının yorumlandığından emin olun

    • satırı ekle:

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

Bir chroot ayarlayın

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 dan adam montaj :
--bind Remount bir alt ağacı başka bir yerde (içeriği her iki yerde de mevcuttur).
-t <type>Dosya sistemi türünün bağlanması , bununla birlikte, mountotomatik olarak

seri / konsol erişimini ayarla

düzenleme /etc/default/grub:

  1. Şuna ayarla GRUB_CMDLINE_LINUX="":

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

  3. Altına, satırı ekleyin:

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

Grub yapılandırma yap - Bu GEREKİR olmayan bir yapılabilir systemd-nspawnkabuk (yani araçlar chroot )

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

Chroot'tan çık

exit

Chrooted için temizleyin

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

Ek bağlar için kontrol edebilir: mount | grep /mnt ve daha sonra bunları kaldırmak umount

Systemd-nspawn girin

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

İçin şifre ayarlayın rootilepasswd

In /etc/ssh/sshd_configdışarı yorumun PermitRootLogin without-passwordokumak #PermitRootLogin without-passwordve insert PermitRootLogin yesaltındaki

Şimdi başlangıçta ssh'yi etkinleştirin

systemctl enable ssh

Temizlemek

# 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

mount | grep /mnt Aşağıdaki ek montaj parçalarını kontrol edin: HERHANGİ BİR şey iade edilirse , umount

Kurtar (yalnızca HATA'da gerekli)

Bir şeyi kırdıysanız veya tekrar denemeniz gerekiyorsa, mevcut durumda RE-MOUNT / SETUP CHROOT .img :

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

img testi

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

Şimdi muhtemelen @ 505e06b2'nin cevap yorumu silindi: "Rehberiniz" Minimal Ubuntu 16 thumbdrive'ı yapmak için harikalar yarattı. Ben değiştirdiğim tek şey debootstrap vardı ve el ile ağ çalışma (networkd) almak zorunda kaldı. Benim debootstrap hattı oldu: sudo debootstrap --components=main,contrib,nonfree --variant=minbase --include=linux-generic,grub-pc --arch=i386 xenial /mnt.
peterh - Monica'yı

Yanıtlar:


4

Yorum yapamam, ama "kılavuz" Minimal Ubuntu 16 thumbdrive yapmak için harikalar çalıştı. Ben değiştirdiğim tek şey debootstrap vardı ve el ile ağ çalışma ( networkd) almak zorunda kaldı .

Benim debootstrap hattım:

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

1
Eğer Eğer doğrulamak Bu kılavuza, sonra 50 civarında temsilcisi olsun, en kısa sürede 4-5 cevapları yazmak ve sonra onu yorum yapmak mümkün olacaktır. Mesajınızı silinmek üzere işaretlemiyorum, çünkü çok değerli, ama yapmalıyım, çünkü bu gerçekten bir cevap değil. Böylece, diğerleri muhtemelen yapacak. Ama bu 50 temsilciyi çok yakında alabilirsiniz. 3-4 önemsiz soruya cevap verin ve yarın sahip olacaksınız ...
peterh - Monica'yı eski haline getirin

Burada yeni başlayan bir çok Linuxçumuz var, onlara yardım etmek roket benzeri bir destek artırmanın kolay bir yoludur. Diğer SE siteleri o kadar kolay değil.
peterh - Monica'yı

4

Ona baktım ve anlayın, nispeten düz bir şekilde buradan, ama sadece bir kurulum meselesi değil /etc/fstab, gerisi:

gerekli değil ama işleri temizlemek için iyi bir fikir

apt-get autoclean

kurulum /etc/fstab- mountdoğru dosya sistemi türünde olduğunuzdan emin olmak için kontrol edin

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

Bu, initramfs'i yeniden oluşturacak ve temiz önyükleme yapmasına izin verecektir

update-initramfs -u -k all

Bunu yapın ve makine temiz, QEMU'da test edildi ve sonra şu anda donanımda çalıştırıyorum.


4

Herhangi bir systemd hatası olmadan otomatik Debian 9 kurulumu

Bu kurulumda herhangi bir systemd hatası veya uyarısı yok ve sonunda İnternet bağlantısı ve bir kabuk alıyorum.

Bu kurulum sadece Debian çekirdeği kullanmıyorum gibi mükemmel değil, daha sonraki bir bölümde açıklamaya çalıştığım hatalar. Daha sonra Buildroot tabanlı yapılandırmayla etrafta yatan bir çekirdeği denedim ve işe yaradı. Yapılandırma bu kurulumda sağlanır. Bu nedenle, şimdiye kadar herhangi bir hata gözlemlememiş olmama rağmen, eksik çekirdek yapılandırmalarına dayanan bazı paketlerin başarısız olması mümkündür.

Benzer bir kurulum Ubuntu çekirdeği ile mükemmel bir şekilde çalıştı: /ubuntu/281763/is-there-any-prebuilt-qemu-ubuntu-image32bit-online/1081171#1081171 Ubuntu çekirdeğinde eksik yapılandırmalar bulunmalıdır Debian'a kıyasla. Debian çekirdeği hataları, Debian çekirdeğini CONFIG_VIRTIO_BLK=yUbuntu için yaptığım gibi ekstra seçeneklerle derleyerek giderilebilir .

#!/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 akış yukarı .

Şimdi terminalden root/ ile giriş yapın rootve ardından İnternet'in aşağıdaki komutlarla çalışıp çalışmadığını kontrol edin:

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

Https://stackoverflow.com/questions/32341518/how-to-make-an-http-get-request-manually-with-netcat/52662497#52662497 adresindenc açıklandığı gibi kullandık :

Bir Ubuntu 18.04 ana bilgisayarında test edildi.

Debian çekirdeğini kullanmaya çalışırsam ne olur?

TODO anlıyor ve düzeltiyor. Yukarıdaki Linux çekirdek derlemesini Debian paketlenmiş Linux çekirdeği ile değiştirirsem:

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

sonra önyükleme başarısız olur:

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

ve aşağıdakiler için boş bir liste:

List of all partitions:

böylece disk hiç tanınmıyor. Ayrıca Debian ISO yükleyicisinin burada yapılanlarla aynı şekilde Debian için yüklediği aynı çekirdeği kullanmaya çalıştım ve Debian ISO yüklemesi aynı QEMU seçenekleriyle iyi çalışsa bile (GRUB yüklemesi oluşturuyor) aynı şekilde başarısız oluyor birden çok bölümlü bir diskte, kök olan ext4).


Herkes bunu yeni bir Ubuntu kurulumunda yapıyorsa build-essentials, betiği çalıştırmadan önce de kurmanız gerekir . Sen eksik kalacaktır git, make, bisonve flex aynı zamanda OP github yapılandırmasına için buraya bir bağlantı vardır farkında, bunu körü körüne emin değişmedi yapmak çalıştırmadan önce aracılığıyla okuyabilirsiniz.
GPPK
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.