क्या कोई पूर्वनिर्मित QEMU Ubuntu छवि (32 बिट) ऑनलाइन है?


12

मैं क्यूईएमयू के साथ खेल रहा हूं। यहाँ मुझे कुछ पूर्वनिर्मित OS चित्र मिले:

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

लेकिन वे सभी 64-बिट सिस्टम के लिए हैं, जबकि मेरा सिस्टम 32 बिट का है। क्या किसी को पता है कि कोई 32-बिट पूर्वनिर्मित छवि ऑनलाइन है?

इसलिए मैं सीधे उनका उपयोग कर सकता हूं और स्थापना के साथ परेशान करने की आवश्यकता नहीं है।

धन्यवाद।


क्या आप किनारे हैं आप केवल एक 32-बिट ऑपरेटिंग सिस्टम हो सकता है? यह केवल सीपीयू पर निर्भर करता है।
अलवर

@ आलवार मुझे पूरा यकीन नहीं है। मेरा मेजबान Fedora 12 कर्नेल 2.6.29 के साथ है। मेरा मानना ​​है कि मेरा ओएस 32 बिट है। प्रोसेसर इंटेल कोर 2 डुओ सीपीयू E8400 है। मैं बस "qemu-kvm -m 1024 img" कमांड का उपयोग करता हूं। Img मुझे दी गई वेबसाइट से डाउनलोड किया गया है। यह बस "प्रारंभिक रामडिस्क लोड करने" पर रुक गया ....
हाओ शेन

2
हाँ आपके CPU में 64-बिट संगतता है। स्रोत
अलवर

जवाबों:


11

एक त्वरित Google खोज ने निम्नलिखित खुलासा किया (मैंने उनमें से कोई भी प्रयास नहीं किया है) :

इसके अलावा, आप केवीएम , वर्चुअलबॉक्स इत्यादि केubuntu-vmbuilder लिए जल्दी से उबंटू चित्र बनाने के लिए वमबर्स्टल (यहां वर्णित ) का उपयोग कर सकते हैं ।

अंतिम उपाय के रूप में, आप qemu-imgवर्चुअलबॉक्स / वीएमवेयर से डिस्क छवियों को QEMU / KVM के अनुकूल प्रारूप में परिवर्तित करने के लिए कमांड का उपयोग कर सकते हैं (इसकी आवश्यकता नहीं हो सकती है: मुझे लगता है कि QEMU / KVM अन्य छवि प्रकार जैसे vdi या mmdk के साथ काम कर सकता है)।

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

नोट : यदि आप 32 बिट OS का उपयोग कर रहे हैं तो आप KVM के साथ 64 बिट वर्चुअल मशीन नहीं चला सकते। लेकिन क्यूईएमयू एक एमुलेटर है, इसलिए आपको 32 बिट ऑपरेटिंग सिस्टम पर 64 बिट वीएम को चलाने देना चाहिए। लेकिन प्रदर्शन ओवरहेड शायद बहुत बड़ा होगा!


10

इस उत्तर में निम्नलिखित सेटअपों के लिए विस्तृत चरण हैं:

  • क्लाउड छवि amd64 और arm64
  • debootstrap amd64 और arm64
  • डेस्कटॉप छवि amd64

सभी को 18.04 मेहमानों के लक्षित उबंटू 18.04 होस्ट पर परीक्षण किया गया था।

क्लाउड इमेज amd64

उबंटू क्लाउड छवियां पूर्व-स्थापित छवियां हैं जो आपके डेस्कटॉप को सामान्य डेस्कटॉप सिस्टम इंस्टॉलेशन किए बिना सीधे बूट करने की अनुमति देती हैं। इसे भी देखें: /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 \
;

गिटहब ऊपर

QEMU शुरू होने के बाद, आपको बूट मेन्यू दिखाने के लिए एंटर मारना पड़ सकता है। Ubuntuवहां से सेलेक्ट करें ।

फिर, बूट की शुरुआत कहती है:

error: no such device: root.

Press any key to continue...

लेकिन अगर आप कोई कुंजी नहीं दबाते हैं, तो भी थोड़े समय के बाद बूट जारी रहता है। इस बग रिपोर्ट पर जाएं : https://bugs.launchpad.net/cloud-images/+bug/1726476

एक बार बूट खत्म होने के बाद, लॉगिन करें:

  • उपयोगकर्ता नाम: ubuntu
  • कुंजिका: asdfqwer

इंटरनेट सामान्य रूप से काम करता है।

क्लाउड इमेज आर्म 64

TODO: मैंने देखा कि इसका उपयोग करते समय कभी-कभी एक बग होता है: https://bugs.launchpad.net/cloud-images/+bug/1818197

बहुत कुछ amd64 के समान है, लेकिन हमें बूट करने के लिए कुछ यूईएफआई काले जादू की आवश्यकता है।

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 \
;

गिटहब ऊपर

debootstrap amd64

पूर्व-निर्मित छवि नहीं है, लेकिन यह सभी पूर्व-निर्मित पैकेज डाउनलोड करता है, इसलिए यह तेज़ भी है, लेकिन बहुत अधिक कॉन्फ़िगर करने योग्य और उपयोगी भी है।

#!/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 \
;

गिटहब ऊपर

यह बिना किसी सिस्टम त्रुटि या चेतावनी के बूट करता है।

अब टर्मिनल से root/ के साथ लॉगिन करें root, और फिर जांचें कि इंटरनेट निम्नलिखित कमांड के साथ काम करता है:

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

हमने /programming/32341518/how-to-make-an-http-get-request-manually-with-netcat/52662497#53462497nc पर बताया क्योंकि:

एनालॉग डेबियन संस्करण: /unix/275429/creating-bootable-debian-image-with-debootstrap/473256#473256

अपनी खुद की गिरी बनाएँ

चूंकि हम यहां हैं:

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"

इससे सटीक समान कॉन्फिगरेशन का उत्पादन हुआ और मेरा मानना ​​है कि पैक किए गए उबंटू के समान सटीक स्रोत कोड का उपयोग किया गया, जिसे इस प्रकार debootstrapसमझाया गया है: मुझे 11.04 कर्नेल .config फ़ाइल कहां मिल सकती है?

फिर मैंने इसके साथ समझौता किया:

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();

और पुनर्निर्माण:

fakeroot debian/rules build-generic

और इसने बूट के दौरान मेरा संदेश छापा:

I'VE HACKED THE LINUX KERNEL!!!

पुनर्निर्माण हालांकि बहुत तेज नहीं था, इसलिए शायद एक बेहतर कमान है? मैंने इसके कहने का इंतज़ार किया:

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

और रन के साथ आगे बढ़ गया।

debootstrap arm64

प्रक्रिया amd64 एक के समान थी, लेकिन निम्नलिखित अंतरों के साथ:

1)

हमें एक दो चरण करना चाहिए debootstrap:

  • पहले --foreignसिर्फ पैकेज डाउनलोड करने के लिए
  • तब हम QEMU को स्थैतिक में स्थापित करते हैं chroot
  • तब हम --second-stageQEMU उपयोगकर्ता मोड एमुलेशन + का उपयोग करके पैकेज इंस्टॉलेशन करते हैंbinfmt_misc

यह भी देखें: डेबूटस्ट्रैप क्या है - सेकेंड-स्टेज के लिए

2) डिफ़ॉल्ट कर्नेल बूट अंत में विफल रहता है:

[    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)

खाली विभाजन सूची इंगित करती है कि डिस्क चालक के साथ एक गंभीर त्रुटि है, लापता विकल्प की कोशिश करने के बाद थोड़ा सा है:

CONFIG_VIRTIO_BLK=y

मुझे लगता है कि यह तब काम करता है जब मैं आईएसओ का उपयोग करता हूं क्योंकि मॉड्यूल को initrd से लोड होना चाहिए।

मैंने अन्य डिस्क प्रकारों का उपयोग करने की कोशिश की, लेकिन सेंसियो केवल -drive if=तब के लिए वैध मूल्य है -M virt, जो आजकल सैनर मशीन प्रकार है।

इसलिए हमें उस विकल्प के साथ हमारे अपने कर्नेल को फिर से जोड़ना होगा, जैसा कि यहाँ बताया गया है: जब कर्नेल को क्रॉस-कंपाइल कर रहा है, तो मैं हर बार जब मैं सिर्फ एक फाइल को संशोधित करना चाहता हूं, तो इसे साफ करने से कैसे रोक सकता हूं?

उबंटू देवों yको डिफ़ॉल्ट रूप से इस CONFIG को चालू करना चाहिए ! यह बहुत उपयोगी है!

TODO: नेटवर्क काम नहीं कर रहा है, त्रुटि संदेश है:

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.

यहाँ पूरी तरह से स्वचालित स्क्रिप्ट है:

#!/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 \
;

गिटहब अपस्ट्रीम

डेस्कटॉप छवि

देखें: QEMU पर Ubuntu डेस्कटॉप कैसे चलाएं?

यह मैन्युअल रूप से इंस्टॉलर के माध्यम से जाने की आवश्यकता है, लेकिन यह सबसे स्थिर चीज है जो आप संभवतः कर सकते हैं, और पूरी तरह से ठीक है यदि आप केवल समय-समय पर चलने वाले इंटरैक्टिव उपयोग के लिए एक वीएम प्राप्त करना चाहते हैं।

Anarch64 के लिए, मैंने अभी तक काम कर रहे डेस्कटॉप को प्राप्त नहीं किया है, हो सकता है कि इसके लिए नज़र रखें: QEMU में Ubuntu 16.04 ARM कैसे चलाएं?


1
मैंने आपकी स्क्रिप्ट को थोड़ा संशोधित किया: gist.github.com/lnyng/8342947a1d5455303fd8730c9ca35da0 मुख्य परिवर्तन नेटवर्क प्रबंधक स्थापित करने से बचने के लिए एक dhclient systemd इकाई का निर्माण करना है, जिसमें कई UI से संबंधित पुस्तकालयों (मेरी स्थापना के लिए लगभग 300 + एमबी) की आवश्यकता होती है।
l:

@ एलंग धन्यवाद! आपने मुझे एक बार फिर
सिस्टमड को

@lyang जब मैंने इसे अपडेट किए गए उत्तर में समझाया arm64 के लिए कोशिश की, तो मुझे त्रुटि मिलती है:, dhclient.service: Can't open PID file /var/run/dhclient.pid (yet?) after start: No such file or directoryकोई सुराग? बूट के बाद मैं करने में सक्षम हूं touch /var/run/a
सिरो सेंटिल्ली 冠状 病毒 iro i 法轮功 '

अनुमति त्रुटि प्रतीत होता है। शायद / pmp/dhclient.pid जैसी अन्य जगहों पर pid पथ को बदलना? या बस इसे पूरी तरह से हटा दें अगर हम वास्तव में उस प्रक्रिया को मारने के लिए परवाह नहीं करते हैं ...
लिआंग

0

Http://cloud-images.ubuntu.com/ पर देखें जिसमें क्लाउड छवियां शामिल हैं जिनका उपयोग qemu / kvm के साथ किया जा सकता है।


1
फिर आप उन चित्रों का उपयोग कैसे करते हैं? अधिक सटीक: आप कैसे लॉग इन करते हैं?
फ्रेडरिक नॉर्ड

आप क्लाउड-
इनिट के

0

https://www.turnkeylinux.org/ उम्र भर के लिए रहा है। उनके पास एक विशाल कैटलॉग डाउनलोड करने योग्य है, प्रीमियर "उपकरण" जैसे कई स्वरूपों में चित्र (ओवा, आईएसओ, वीडीएमके, ओपनस्टैक, एक्सईएन)। वे आपके लिए AWS में भी एक छवि लॉन्च कर सकते हैं।

जब मैं एक विशेष स्टैक की खोज शुरू करना चाहता हूं या किसी समस्या को खत्म करने की आवश्यकता है, तो मैं अक्सर उनकी छवियों को डाउनलोड करूंगा, इसे काउ 2 में बदलूंगा और इसका उपयोग करूंगा।

आप https://app.vagrantup.com/boxes/search या https://virtualboxes.org/images/ से भी चित्र ले सकते हैं और उन्हें रूपांतरित भी कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.