Önceden oluşturulmuş QEMU Ubuntu resmi (32bit) çevrimiçi var mı?


12

QEMU ile oynuyorum. Burada önceden oluşturulmuş bazı işletim sistemi görüntüleri buldum:

http://docs.openstack.org/trunk/openstack-compute/admin/content/starting-images.html

Ama hepsi benim sistemim 32 bit iken 64 bitlik bir sistem içindir. Çevrimiçi 32 bit önceden oluşturulmuş görüntü olup olmadığını bilen var mı?

Böylece doğrudan kullanabilirim ve kurulumla uğraşmak zorunda kalmam.

Teşekkürler.


Sadece 32 bit işletim sistemine sahip olabileceğiniz kıyı mı? Sadece CPU'ya bağlı.
Alvar

@Alvar Tam emin değilim. Ev sahibim 2.6.29 çekirdekli Fedora 12. İşletim sistemimin 32 bit olduğuna inanıyorum. İşlemci Intel Core 2 Duo CPU E8400'dür. Sadece "qemu-kvm -m 1024 img" komutunu kullanıyorum. Img verdiğim web sitesinden indiriliyor. Sadece "ilk ramdisk yükleniyor" durdu ....
Hao Shen

2
Evet, CPU'nuz 64 bit uyumluluğa sahiptir. Kaynak
Alvar

Yanıtlar:


11

Hızlı bir Google araması aşağıdakileri ortaya çıkardı (hiçbirini denemedim) :

Ayrıca, hızlı bir şekilde KVM, VirtualBox, vb. İçin Ubuntu görüntüleri oluşturmak için vmbuilder (burada adı geçen ubuntu-vmbuilder) kullanabilirsiniz.

Son çare olarak, qemu-imgVirtualBox / VMware'den disk görüntülerini QEMU / KVM için daha uygun bir biçime dönüştürmek için komutu kullanabilirsiniz (bu gerekli olmayabilir: QEMU / KVM, vdi veya vmdk gibi diğer görüntü türleriyle çalışabilir).

$ qemu-img convert -f [vdi|vmdk|...] -O qcow2 OriginalImage NewImage

NOT : 32 bit işletim sistemi kullanıyorsanız, 64 bit sanal makineleri KVM ile çalıştıramazsınız. Ancak QEMU bir emülatördür, bu yüzden 32bit işletim sisteminde 64bit vm çalıştırmanıza izin vermelidir. Ancak performans yükü muhtemelen çok büyük olacak!


10

Bu yanıt aşağıdaki kurulumlar için ayrıntılı adımlar içerir:

  • bulut görüntü amd64 ve arm64
  • debootstrap amd64 ve arm64
  • masaüstü resmi amd64

Tümü, 18.04 konukları hedefleyen bir Ubuntu 18.04 ana bilgisayarında test edildi.

Bulut Görüntüsü AMD64

Ubuntu bulut görüntüleri, normal masaüstü sistem kurulumunu yapmadan doğrudan önyükleme yapmanıza izin veren önceden yüklenmiş görüntülerdir. Ayrıca bakınız: /server/438611/what-are-ubuntu-cloud-images

#!/usr/bin/env bash

sudo apt-get install cloud-image-utils qemu

# This is already in qcow2 format.
img=ubuntu-18.04-server-cloudimg-amd64.img
if [ ! -f "$img" ]; then
  wget "https://cloud-images.ubuntu.com/releases/18.04/release/${img}"

  # sparse resize: does not use any extra space, just allows the resize to happen later on.
  # /superuser/1022019/how-to-increase-size-of-an-ubuntu-cloud-image
  qemu-img resize "$img" +128G
fi

user_data=user-data.img
if [ ! -f "$user_data" ]; then
  # For the password.
  # /programming/29137679/login-credentials-of-ubuntu-cloud-server-image/53373376#53373376
  # /server/920117/how-do-i-set-a-password-on-an-ubuntu-cloud-image/940686#940686
  # /ubuntu/507345/how-to-set-a-password-for-ubuntu-cloud-images-ie-not-use-ssh/1094189#1094189
  cat >user-data <<EOF
#cloud-config
password: asdfqwer
chpasswd: { expire: False }
ssh_pwauth: True
EOF
  cloud-localds "$user_data" user-data
fi

qemu-system-x86_64 \
  -drive "file=${img},format=qcow2" \
  -drive "file=${user_data},format=raw" \
  -device rtl8139,netdev=net0 \
  -enable-kvm \
  -m 2G \
  -netdev user,id=net0 \
  -serial mon:stdio \
  -smp 2 \
  -vga virtio \
;

GitHub akış yukarı .

QEMU başladıktan sonra, önyükleme menüsünün gösterilmesi için enter tuşuna basmanız gerekebilir. UbuntuOradan seçin .

Sonra, önyüklemenin başlangıcı şöyle diyor:

error: no such device: root.

Press any key to continue...

ancak herhangi bir tuşa basmasanız bile, önyükleme kısa bir zaman aşımından sonra devam eder. Bu hata raporunu oylayın: https://bugs.launchpad.net/cloud-images/+bug/1726476

Önyükleme tamamlandığında, ile giriş yapın:

  • Kullanıcı adı: ubuntu
  • parola: asdfqwer

İnternet normal çalışıyor.

Bulut görüntüsü arm64

YAPILACAKLAR: Bunu kullanırken bazen meydana gelen bir hata olduğunu fark ettim: https://bugs.launchpad.net/cloud-images/+bug/1818197

AMD64'e çok benzer, ancak önyükleme yapabilmesi için biraz UEFI kara büyüsüne ihtiyacımız var.

sudo apt-get install cloud-image-utils qemu-system-arm qemu-efi

# Get the image.
img=ubuntu-18.04-server-cloudimg-arm64.img
if [ ! -f "$img" ]; then
  wget "https://cloud-images.ubuntu.com/releases/18.04/release/${img}"
  qemu-img resize "$img" +128G
fi

# For the password.
user_data=user-data.img
if [ ! -f "$user_data" ]; then
  cat >user-data <<EOF
#cloud-config
password: asdfqwer
chpasswd: { expire: False }
ssh_pwauth: True
EOF
  cloud-localds "$user_data" user-data

  # Use the EFI magic. Picked up from:
  # https://wiki.ubuntu.com/ARM64/QEMU
  dd if=/dev/zero of=flash0.img bs=1M count=64
  dd if=/usr/share/qemu-efi/QEMU_EFI.fd of=flash0.img conv=notrunc
  dd if=/dev/zero of=flash1.img bs=1M count=64
fi

qemu-system-aarch64 \
  -M virt \
  -cpu cortex-a57 \
  -device rtl8139,netdev=net0 \
  -m 4096 \
  -netdev user,id=net0 \
  -nographic \
  -smp 4 \
  -drive "if=none,file=${img},id=hd0" \
  -device virtio-blk-device,drive=hd0 \
  -drive "file=${user_data},format=raw" \
  -pflash flash0.img \
  -pflash flash1.img \
;

GitHub akış yukarı .

debootstrap amd64'tür

Önceden oluşturulmuş bir görüntü değil, önceden oluşturulmuş tüm paketleri indirir, bu yüzden hızlıdır, ancak daha yapılandırılabilir ve kullanışlıdır.

#!/usr/bin/env bash

set -eux

debootstrap_dir=debootstrap
root_filesystem=debootstrap.ext2.qcow2

sudo apt-get install \
  debootstrap \
  libguestfs-tools \
  qemu-system-x86 \
;

if [ ! -d "$debootstrap_dir" ]; then
  # Create debootstrap directory.
  # - linux-image-generic: downloads the kernel image we will use under /boot
  # - network-manager: automatically starts the network at boot for us
  sudo debootstrap \
    --include linux-image-generic \
    bionic \
    "$debootstrap_dir" \
    http://archive.ubuntu.com/ubuntu \
  ;
  sudo rm -f "$root_filesystem"
fi

linux_image="$(printf "${debootstrap_dir}/boot/vmlinuz-"*)"

if [ ! -f "$root_filesystem" ]; then
  # Set root password.
  echo 'root:root' | sudo chroot "$debootstrap_dir" chpasswd

  # Remount root filesystem as rw.
  cat << EOF | sudo tee "${debootstrap_dir}/etc/fstab"
/dev/sda / ext4 errors=remount-ro,acl 0 1
EOF

  # Automaticaly start networking.
  # Otherwise network commands fail with:
  #     Temporary failure in name resolution
  # /ubuntu/1045278/ubuntu-server-18-04-temporary-failure-in-name-resolution/1080902#1080902
  cat << EOF | sudo tee "$debootstrap_dir/etc/systemd/system/dhclient.service"
[Unit]
Description=DHCP Client
Documentation=man:dhclient(8)
Wants=network.target
Before=network.target
[Service]
Type=forking
PIDFile=/var/run/dhclient.pid
ExecStart=/sbin/dhclient -4 -q
[Install]
WantedBy=multi-user.target
EOF
  sudo ln -sf "$debootstrap_dir/etc/systemd/system/dhclient.service" \
    "${debootstrap_dir}/etc/systemd/system/multi-user.target.wants/dhclient.service"

  # Why Ubuntu, why.
  # https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725
  sudo chmod +r "${linux_image}"

  # 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

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_image}" \
  -device rtl8139,netdev=net0 \
  -netdev user,id=net0 \
;

GitHub akış yukarı .

Bu herhangi bir systemd hatası veya uyarısı olmadan önyükleme yapar.

Ş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 :

Benzer Debian sürümü: /unix/275429/creating-bootable-debian-image-with-debootstrap/473256#473256

Kendi çekirdeğinizi oluşturun

Burada olduğumuz için:

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git
cd ubuntu-bionic
# Tag matches the working kernel that debootstrap downloaded for us.
git checkout Ubuntu-4.15.0-20.21
fakeroot debian/rules clean
debian/rules updateconfigs
fakeroot debian/rules build-generic
linux_image="$(pwd)/debian/build/build-generic/arch/x86_64/boot/bzImage"

Bu tam olarak aynı yapılandırmayı üretti ve aşağıdaki gibi debootstrapindirilen paketlenmiş Ubuntu ile aynı kaynak kodunu kullandığına inanıyorum : 11.04 çekirdek .config dosyasını nereden alabilirim?

Sonra ben ile yamalı:

diff --git a/init/main.c b/init/main.c
index b8b121c17ff1..542229349efc 100644
--- a/init/main.c
+++ b/init/main.c
@@ -516,6 +516,8 @@ asmlinkage __visible void __init start_kernel(void)
        char *command_line;
        char *after_dashes;

+ pr_info("I'VE HACKED THE LINUX KERNEL!!!");
+
        set_task_stack_end_magic(&init_task);
        smp_setup_processor_id();
        debug_objects_early_init();

ve yeniden oluşturun:

fakeroot debian/rules build-generic

ve önyükleme sırasında mesajımı yazdırdı:

I'VE HACKED THE LINUX KERNEL!!!

Yeniden oluşturma çok hızlı değildi, bu yüzden belki daha iyi bir komut var? Sadece söylemesini bekledim:

Kernel: arch/x86/boot/bzImage is ready  (#3)

ve koşuya devam ettiler.

debootstrap kolu64

Prosedür amd64 ile benzerdi, ancak aşağıdaki farklarla:

1)

İki aşama yapmalıyız debootstrap:

  • önce --foreignpaketleri indirmek için
  • sonra QEMU statikini chroot
  • paket kurulumunu --second-stageQEMU kullanıcı modu öykünmesi +binfmt_misc

Ayrıca bakınız: Debootstrap nedir - için ikinci aşama

2) varsayılan çekirdek önyüklemesi sonunda aşağıdakilerle başarısız olur:

[    0.773665] Please append a correct "root=" boot option; here are the available partitions:
[    0.774033] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

Boş bölüm listesi, eksik seçeneği biraz denedikten sonra disk sürücüsünde ciddi bir hata olduğunu gösterir:

CONFIG_VIRTIO_BLK=y

Sanırım ISO'yu kullandığımda işe yarıyor çünkü modüller initrd'den yüklenmeli.

Diğer disk türlerini kullanmaya çalıştım, ama virtio -drive if=ne zaman için geçerli olan tek değerdir -M virtki bu günümüzde daha sağlıklı bir makine türüdür.

Bu nedenle, burada açıklandığı gibi, bu seçeneği etkinleştirerek kendi çekirdeğimizi yeniden derlemeliyiz: Çekirdeği çapraz derlerken, sadece bir dosyayı değiştirmek istediğimde temizlemesini nasıl durdurabilirim?

Ubuntu geliştiricileri bu CONFIG'i yvarsayılan olarak çevirmelidir ! Bu çok kullanışlı!

YAPILACAKLAR: ağ çalışmıyor, hata mesajı:

root@ciro-p51:~# systemctl status dhclient.service
root@ciro-p51:~# cat f
● dhclient.service - DHCP Client
   Loaded: loaded (/etc/systemd/system/dhclient.service; enabled; vendor preset: enabled)
   Active: failed (Result: protocol) since Sun 2018-01-28 15:58:42 UTC; 2min 2s ago
     Docs: man:dhclient(8)
  Process: 171 ExecStart=/sbin/dhclient -4 -q (code=exited, status=0/SUCCESS)

Jan 28 15:58:40 ciro-p51 systemd[1]: Starting DHCP Client...
Jan 28 15:58:42 ciro-p51 dhclient[171]: No broadcast interfaces found - exiting.
Jan 28 15:58:42 ciro-p51 systemd[1]: dhclient.service: Can't open PID file /var/run/dhclient.pid (yet?) after start: No such file or directory
Jan 28 15:58:42 ciro-p51 systemd[1]: dhclient.service: Failed with result 'protocol'.
Jan 28 15:58:42 ciro-p51 systemd[1]: Failed to start DHCP Client.

İşte tam otomatik komut dosyası:

#!/usr/bin/env bash

# /ubuntu/281763/is-there-any-prebuilt-qemu-ubuntu-image32bit-online/1081171#1081171

set -eux

debootstrap_dir=debootstrap
root_filesystem=debootstrap.ext2.qcow2

sudo apt-get install \
  gcc-aarch64-linux-gnu \
  debootstrap \
  libguestfs-tools \
  qemu-system-aarch64 \
  qemu-user-static \
;

if [ ! -d "$debootstrap_dir" ]; then
  sudo debootstrap \
    --arch arm64 \
    --foreign \
    bionic \
    "$debootstrap_dir" \
    http://ports.ubuntu.com/ubuntu-ports \
  ;
  sudo mkdir -p "${debootstrap_dir}/usr/bin"
  sudo cp "$(which qemu-aarch64-static)" "${debootstrap_dir}/usr/bin"
  sudo chroot "$debootstrap_dir" /debootstrap/debootstrap --second-stage
  sudo rm -f "$root_filesystem"
fi

linux_image="$(printf "${debootstrap_dir}/boot/vmlinuz-"*)"

if [ ! -f "$root_filesystem" ]; then
  # Set root password.
  echo 'root:root' | sudo chroot "$debootstrap_dir" chpasswd

  # Remount root filesystem as rw.
  cat << EOF | sudo tee "${debootstrap_dir}/etc/fstab"
/dev/sda / ext4 errors=remount-ro,acl 0 1
EOF

  # Automaticaly start networking.
  # Otherwise network commands fail with:
  #     Temporary failure in name resolution
  # /ubuntu/1045278/ubuntu-server-18-04-temporary-failure-in-name-resolution/1080902#1080902
  cat << EOF | sudo tee "${debootstrap_dir}/etc/systemd/system/dhclient.service"
[Unit]
Description=DHCP Client
Documentation=man:dhclient(8)
Wants=network.target
Before=network.target

[Service]
Type=forking
PIDFile=/var/run/dhclient.pid
ExecStart=/sbin/dhclient -4 -q

[Install]
WantedBy=multi-user.target
EOF
  sudo ln -sf "${debootstrap_dir}/etc/systemd/system/dhclient.service" \
    "${debootstrap_dir}/etc/systemd/system/multi-user.target.wants/dhclient.service"

  # Why Ubuntu, why.
  # https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725
  sudo chmod +r "${linux_image}"

  # 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

# Build the Linux kernel.
linux_image="$(pwd)/linux/debian/build/build-generic/arch/arm64/boot/Image"
if [ ! -f "$linux_image" ]; then
  git clone --branch Ubuntu-4.15.0-20.21 --depth 1 git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git linux
  cd linux
patch -p1 << EOF
diff --git a/debian.master/config/config.common.ubuntu b/debian.master/config/config.common.ubuntu
index 5ff32cb997e9..8a190d3a0299 100644
--- a/debian.master/config/config.common.ubuntu
+++ b/debian.master/config/config.common.ubuntu
@@ -10153,7 +10153,7 @@ CONFIG_VIDEO_ZORAN_ZR36060=m
 CONFIG_VIPERBOARD_ADC=m
 CONFIG_VIRTIO=y
 CONFIG_VIRTIO_BALLOON=y
-CONFIG_VIRTIO_BLK=m
+CONFIG_VIRTIO_BLK=y
 CONFIG_VIRTIO_BLK_SCSI=y
 CONFIG_VIRTIO_CONSOLE=y
 CONFIG_VIRTIO_INPUT=m
EOF
  export ARCH=arm64
  export $(dpkg-architecture -aarm64)
  export CROSS_COMPILE=aarch64-linux-gnu-
  fakeroot debian/rules clean
  debian/rules updateconfigs
  fakeroot debian/rules DEB_BUILD_OPTIONS=parallel=`nproc` build-generic
  cd -
fi

qemu-system-aarch64 \
  -append 'console=ttyAMA0 root=/dev/vda rootfstype=ext2' \
  -device rtl8139,netdev=net0 \
  -drive "file=${root_filesystem},format=qcow2" \
  -kernel "${linux_image}" \
  -m 2G \
  -netdev user,id=net0 \
  -serial mon:stdio \
  -M virt,highmem=off \
  -cpu cortex-a57 \
  -nographic \
;

GitHub Yukarı Akışı .

Masaüstü resmi

Bkz: Ubuntu masaüstünü QEMU'da nasıl çalıştırırım?

Yükleyiciyi manuel olarak geçirmeyi gerektirir, ancak zaman zaman çalışan etkileşimli kullanım için bir VM almak istiyorsanız, yapabileceğiniz en kararlı şeydir ve tamamen iyidir.

Aarch64 için, masaüstünü henüz çalışmadım belki de aşağıdakilere dikkat edin: QEMU'da Ubuntu 16.04 ARM nasıl çalıştırılır?


1
Komut dosyanızı biraz değiştirdim : gist.github.com/lnyng/8342947a1d5455303fd8730c9ca35da0 Ana değişiklik, birçok UI ile ilgili kütüphaneleri (kurulumum için yaklaşık 300 + MB) gerektiren bir dhclient systemd birimi oluşturmaktır.
lyang

@ lyang teşekkürler! Bir kez daha
systemd'i öğrenmeme izin verdin

@ lyang Güncellenmiş cevap açıklandığı gibi arm64 için denediğimde, hatayı alıyorum: dhclient.service: Can't open PID file /var/run/dhclient.pid (yet?) after start: No such file or directoryherhangi bir ipucu? Önyüklemeden sonra yapabilirim touch /var/run/a.
Ciro Santilli 法轮功 23 审查 六四 事件 法轮功

Bir izin hatası gibi görünüyor. Belki pid yolunu /tmp/dhclient.pid gibi başka yerlere değiştirmek? Ya da eğer bu işlemi gerçekten öldürmeyi umursamıyorsak tamamen kaldır ...
lyang


0

https://www.turnkeylinux.org/ uzun zamandır var. Çok sayıda formatta (ova, iso, vdmk, openstack, xen) görüntüler gibi büyük bir katalog indirilebilir, hazır "cihaz" var. Hatta sizin için AWS'de bir görüntü bile başlatabilirler.

Belirli bir yığını keşfetmeye başlamak istediğimde veya bir problemi ortadan kaldırmak istediğimde, sık sık görüntülerini indireceğim, bir cow2'ye dönüştüreceğim ve kullanacağım.

Ayrıca https://app.vagrantup.com/boxes/search veya https://virtualboxes.org/images/ adresinden resim alabilir ve bunları dönüştürebilirsiniz.

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.