Có bất kỳ hình ảnh QEMU Ubuntu dựng sẵn (32 bit) trực tuyến nào không?


12

Tôi đang chơi với QEMU. Ở đây tôi tìm thấy một số hình ảnh hệ điều hành dựng sẵn:

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

Nhưng tất cả chúng đều dành cho hệ thống 64 bit trong khi hệ thống của tôi là 32 bit. Có ai biết nếu có bất kỳ hình ảnh dựng sẵn 32 bit trực tuyến?

Vì vậy, tôi có thể trực tiếp sử dụng chúng và không cần bận tâm đến việc cài đặt.

Cảm ơn.


Bạn có bờ bạn chỉ có thể có một hệ điều hành 32 bit? Nó chỉ phụ thuộc vào CPU.
Alvar

@Alvar Mình không chắc lắm. Máy chủ của tôi là Fedora 12 với kernel 2.6,29. Tôi tin rằng hệ điều hành của tôi là 32 bit. Bộ xử lý là CPU Intel Core 2 Duo E8400. Tôi chỉ sử dụng lệnh "qemu-kvm -m 1024 img". Img được tải xuống từ trang web tôi đã đưa ra. Nó chỉ dừng lại ở "tải ramdisk ban đầu" ....
Hao Shen

2
Có CPU của bạn có khả năng tương thích 64 bit. Nguồn
Alvar

Câu trả lời:


11

Một tìm kiếm nhanh của Google đã tiết lộ những điều sau (Tôi chưa thử bất kỳ trong số họ) :

Ngoài ra, bạn có thể sử dụng vmbuilder (được gọi ở đây là ubuntu-vmbuilder) để nhanh chóng tạo hình ảnh Ubuntu sang KVM, VirtualBox, v.v.

Như một phương sách cuối cùng, bạn có thể sử dụng qemu-imglệnh để chuyển đổi hình ảnh đĩa từ VirtualBox / VMware sang định dạng phù hợp hơn với QEMU / KVM (điều này có thể không cần thiết: Tôi nghĩ QEMU / KVM có thể hoạt động với các loại hình ảnh khác như vdi hoặc vmdk).

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

LƯU Ý : Nếu bạn đang sử dụng HĐH 32 bit, bạn không thể chạy các máy ảo 64 bit với KVM. Nhưng QEMU là một trình giả lập, vì vậy nó sẽ cho phép bạn chạy 64 bit vm trên hệ điều hành 32 bit. Nhưng chi phí hiệu suất có thể sẽ rất lớn!


8

Câu trả lời này chứa các bước chi tiết cho các thiết lập sau:

  • hình ảnh đám mây amd64 và arm64
  • debootstrap amd64 và arm64
  • hình ảnh máy tính để bàn amd64

Tất cả đã được thử nghiệm trên máy chủ Ubuntu 18.04 nhắm vào 18.04 khách.

Hình ảnh đám mây amd64

Hình ảnh đám mây Ubuntu là hình ảnh được cài đặt sẵn cho phép bạn khởi động trực tiếp mà không cần cài đặt hệ thống máy tính để bàn thông thường. Xem thêm: /server/438611/what-are-ubfox-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 ngược dòng .

Sau khi QEMU bắt đầu, bạn có thể phải nhấn enter để menu khởi động hiển thị. Chọn Ubuntutừ đó.

Sau đó, phần khởi động cho biết:

error: no such device: root.

Press any key to continue...

nhưng ngay cả khi bạn không nhấn bất kỳ phím nào, khởi động vẫn tiếp tục sau một khoảng thời gian ngắn. Truy cập báo cáo lỗi này: https://bugs.launchpad.net/cloud-images/+orms/1726476

Khi khởi động kết thúc, đăng nhập bằng:

  • tên tài khoản: ubuntu
  • mật khẩu: asdfqwer

Internet hoạt động bình thường.

Hình ảnh đám mây arm64

TODO: Tôi nhận thấy rằng có một lỗi xảy ra đôi khi khi sử dụng lỗi này: https://bugs.launchpad.net/cloud-images/+orms/1818197

Rất giống với amd64, nhưng chúng ta cần một số ma thuật đen UEFI để nó khởi động.

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 ngược dòng .

debootstrap amd64

Không phải là một hình ảnh được tạo sẵn, nhưng nó tải xuống tất cả các gói dựng sẵn, vì vậy nó cũng nhanh, nhưng cũng có nhiều cấu hình và hữu ích hơn nhiều.

#!/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 ngược dòng .

Điều này khởi động mà không có bất kỳ lỗi systemd hoặc cảnh báo.

Bây giờ từ thiết bị đầu cuối, đăng nhập bằng root/ root, và sau đó kiểm tra xem Internet có hoạt động với các lệnh sau không:

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

Chúng tôi đã sử dụng ncnhư được giải thích tại /programming/32341518/how-to-make-an-http-get-request-manual-with-netcat/52662497#52662497 vì:

Phiên bản Debian tương tự: /unix/275429/creating-bootable-debian-image-with-debootstrap/473256#473256

Xây dựng hạt nhân của riêng bạn

Vì chúng tôi ở đây:

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"

Điều này tạo ra cùng một cấu hình chính xác và tôi tin rằng đã sử dụng cùng một mã nguồn giống như Ubuntu được đóng gói được debootstraptải xuống như được giải thích tại: Tôi có thể lấy tệp .config kernel ở đâu?

Sau đó, tôi vá nó bằng:

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

và xây dựng lại:

fakeroot debian/rules build-generic

và nó đã in thông điệp của tôi trong khi khởi động:

I'VE HACKED THE LINUX KERNEL!!!

Việc xây dựng lại không phải là rất nhanh, vì vậy có lẽ có một lệnh tốt hơn? Tôi chỉ chờ nó nói:

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

và đã đi trước với việc chạy.

debootstrap arm64

Quy trình này tương tự như amd64, nhưng có những khác biệt sau:

1)

Chúng ta phải làm hai giai đoạn debootstrap:

  • đầu tiên --foreignchỉ cần tải xuống các gói
  • sau đó chúng tôi cài đặt tĩnh QEMU vào chroot
  • sau đó chúng tôi thực hiện cài đặt gói bằng --second-stagecách sử dụng mô phỏng chế độ người dùng QEMU +binfmt_misc

Xem thêm: Debootstrap là gì - giai đoạn thứ hai để

2) khởi động kernel mặc định ở cuối với:

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

Danh sách phân vùng trống cho biết có lỗi nghiêm trọng với trình điều khiển đĩa, sau một chút thử tùy chọn bị thiếu là:

CONFIG_VIRTIO_BLK=y

Tôi nghĩ rằng nó hoạt động khi tôi sử dụng ISO vì các mô-đun phải được tải từ initrd.

Tôi đã cố gắng sử dụng các loại đĩa khác, nhưng virtio là giá trị hợp lệ duy nhất -drive if=khi nào -M virt, đó là loại máy saner hiện nay.

Do đó, chúng ta phải biên dịch lại kernel của riêng mình với tùy chọn đó được bật, như đã giải thích ở đây: Khi biên dịch chéo kernel, làm thế nào tôi có thể ngăn chặn nó làm sạch mỗi khi tôi chỉ muốn sửa đổi một tệp?

Các nhà phát triển Ubuntu nên biến CONFIG này ytheo mặc định! Nó rất là hữu ích!

TODO: mạng không hoạt động, thông báo lỗi là:

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.

Đây là kịch bản hoàn toàn tự động:

#!/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 ngược dòng .

Hình ảnh máy tính để bàn

Xem: Làm thế nào để chạy máy tính để bàn Ubuntu trên QEMU?

Nó đòi hỏi phải đi qua trình cài đặt một cách thủ công, nhưng đó là điều ổn định nhất bạn có thể làm và hoàn toàn ổn nếu bạn chỉ muốn có một VM để sử dụng tương tác thỉnh thoảng chạy.

Đối với aarch64, tôi chưa làm cho máy tính để bàn hoạt động nhưng có thể để mắt tới: Làm cách nào để chạy Ubuntu 16.04 ARM trong QEMU?


1
Tôi đã sửa đổi tập lệnh của bạn một chút: gist.github.com/lnyng/8342947a1d5455303fd8730c9ca35da0 Thay đổi chính là tạo một đơn vị systemd dhclient để tránh cài đặt trình quản lý mạng, yêu cầu nhiều thư viện liên quan đến giao diện người dùng (khoảng 300 + MB cho cài đặt của tôi).
lyang

@lyang cảm ơn! Bạn đã cho phép tôi không học systemd đúng cách một lần nữa :-)
Ciro Santilli 新疆 心 心 事件

@lyang khi tôi dùng thử arm64 như đã giải thích trong câu trả lời được cập nhật, tôi nhận được lỗi : dhclient.service: Can't open PID file /var/run/dhclient.pid (yet?) after start: No such file or directory, có manh mối nào không? Sau khi khởi động tôi có thể touch /var/run/a.
Ciro Santilli 心 心

Có vẻ là một lỗi cho phép. Có thể thay đổi đường dẫn pid đến những nơi khác như /tmp/dhclient.pid? Hoặc chỉ loại bỏ nó hoàn toàn nếu chúng ta không thực sự quan tâm đến việc giết quá trình đó ...
lyang


0

https://www.turnkeylinux.org/ đã có từ rất lâu đời. Họ có một danh mục khổng lồ có thể tải xuống, "thiết bị" giống như hình ảnh ở nhiều định dạng (ova, iso, vdmk, openstack, xen). Họ thậm chí có thể khởi chạy một hình ảnh ngay trong AWS cho bạn.

Khi tôi muốn bắt đầu khám phá một ngăn xếp cụ thể hoặc cần loại bỏ một vấn đề, tôi thường xuyên sẽ tải xuống hình ảnh của họ, chuyển đổi nó thành cow2 và sử dụng nó.

Bạn cũng có thể lấy hình ảnh từ https://app.vagrantup.com/boxes/search hoặc https://virtualboxes.org/images/ và chuyển đổi chúng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.