Там кто-либо предварительно создается изображение Ubuntu QEMU (32 бита) онлайн?

Я играю с QEMU. Здесь я нашел, что некоторые предварительно создали изображения ОС:

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

Но они все предназначены для 64-разрядной системы, в то время как моя система составляет 32 бита. Кто-либо знает, существует ли какое-либо 32-разрядное предварительно созданное изображение онлайн?

Таким образом, я могу непосредственно использовать их и не должным быть беспокоиться установкой.

Спасибо.

11
задан 5 October 2018 в 17:37

4 ответа

Быстрый поиск в Google показал следующее (я не пробовал ни одного из них) :

Кроме того, вы можете использовать vmbuilder (обозначаемый здесь как ubuntu-vmbuilder) для быстрого создания образов Ubuntu для KVM, VirtualBox и т. Д.

В качестве последнего средства вы можете использовать команду qemu-img для преобразования образов дисков из VirtualBox / VMware в формат, более подходящий для QEMU / KVM (это может не потребоваться: я думаю, что QEMU / KVM может работать с другими типами изображений как vdi или vmdk).

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

ПРИМЕЧАНИЕ : Если вы используете 32-битную ОС, вы не можете запускать 64-битные виртуальные машины с KVM. Но QEMU - это эмулятор, поэтому он должен позволять запускать 64-битные виртуальные машины в 32-битной операционной системе. Но производительность, вероятно, будет огромной!

0
ответ дан 5 October 2018 в 17:37

https://www.turnkeylinux.org/ существует уже целую вечность. У них есть огромный загружаемый каталог, готовые «устройства», такие как изображения в различных форматах (ova, iso, vdmk, openstack, xen). Они даже могут запустить изображение прямо в AWS для вас.

Когда я хочу начать исследовать конкретный стек или мне нужно выбить проблему, я часто загружаю их изображения, конвертирую их в cow2 и использую их.

Вы также можете получить изображения из https://app.vagrantup.com/boxes/search или https://virtualboxes.org/images/ и конвертировать их. .

0
ответ дан 5 October 2018 в 17:37

См. http://cloud-images.ubuntu.com/ , которая содержит изображения облаков, которые можно использовать с qemu / kvm.

0
ответ дан 5 October 2018 в 17:37

Этот ответ содержит подробные шаги для следующих установок:

  • облачное изображение amd64 и arm64
  • debootstrap amd64 и arm64
  • рисунок рабочего стола amd64

Все было протестировано на хосте Ubuntu 18.04, предназначающемся для 18,04 гостей.

Облачное изображение amd64

Облачные изображения Ubuntu предварительно установлены изображения, которые позволяют Вашему загружаться непосредственно, не делая обычной настольной установки системы.См. также: https://serverfault.com/questions/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.
  # https://superuser.com/questions/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.
  # https://stackoverflow.com/questions/29137679/login-credentials-of-ubuntu-cloud-server-image/53373376#53373376
  # https://serverfault.com/questions/920117/how-do-i-set-a-password-on-an-ubuntu-cloud-image/940686#940686
  # https://askubuntu.com/questions/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 в восходящем направлении.

После того, как QEMU запускается, Вам, возможно, придется совершить нападки, вводят для меню начальной загрузки для показа. Выбрать Ubuntu оттуда.

Затем начало начальной загрузки говорит:

error: no such device: root.

Press any key to continue...

но даже если Вы не нажимаете клавиши, начальная загрузка продолжается после короткого тайм-аута. Пойдите upvote этот отчет об ошибках: https://bugs.launchpad.net/cloud-images / + ошибка/1726476

Однажды загружают концы, вход в систему с:

  • имя пользователя: ubuntu
  • пароль: asdfqwer

Интернет обычно работает.

Облачное изображение arm64

TODO: Я заметил, что существует ошибка, которая иногда происходит при использовании этого: https://bugs.launchpad.net/cloud-images / + ошибка/1818197

Очень похожий на amd64, но нам нужна некоторая черная магия UEFI для него для начальной загрузки.

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 в восходящем направлении.

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
  # https://askubuntu.com/questions/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 в восходящем направлении.

Это загружается без любых systemd ошибок или предупреждений.

Теперь от терминала, войдите в систему с 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

Мы использовали nc как объяснено в https://stackoverflow.com/questions/32341518/how-to-make-an-http-get-request-manually-with-netcat/52662497#52662497, потому что:

Аналогичная версия Debian: https://unix.stackexchange.com/questions/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"

Это произвело ту же самую конфигурацию, и я верю, использовал тот же самый исходный код в качестве упакованной Ubuntu это 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-stage использование эмуляции непривилегированного режима QEMU + binfmt_misc

См. также: Для чего debootstrap - второй этапный

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

Я думаю, что это работает, когда я использую ISO, потому что модули должны быть загружены из initrd.

Я пытался использовать другие типы диска, но virtio является единственным допустимым значением для -drive if= когда -M virt, который является более нормальным типом машины в наше время.

Поэтому мы должны перекомпилировать наше собственное ядро с той включенной опцией, как объяснено здесь: При кросс-компиляции ядра, как я могу остановить его делающий из чистого каждый раз, когда я просто хочу изменить один файл?

Ubuntu devs должна повернуть эту КОНФИГУРАЦИЮ y по умолчанию! Это очень полезно!

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

# https://askubuntu.com/questions/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
  # https://askubuntu.com/questions/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.

Рисунок рабочего стола

См.: Как выполнить рабочий стол Ubuntu на QEMU?

Это действительно требует прохождения через установщика вручную, но это - самая устойчивая вещь, которую можно возможно сделать, и полностью прекрасный, если Вы просто хотите получить VM для интерактивного использования, работающего время от времени.

Для aarch64 я не добрался, настольная работа все же, возможно, внимательно наблюдают за: Как запустить Ubuntu 16.04 ARM в QEMU?

6
ответ дан 5 October 2018 в 17:37

Другие вопросы по тегам:

Похожие вопросы: