Эльбрус/qemu: различия между версиями
м (→qemu-system-e2k: +-device scsi-cd) |
м (qemu >= 7.2.0-alt4.e2kv6) |
||
(не показано 13 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
Аппаратная виртуализация (kvm) есть только на [[эльбрус/архитектура|v6]]; для v3+ (v2+?) потихоньку пилят paravirt. | |||
<s>Пока нет виртуализованного [[эльбрус/пнс|бута]] -- приходится вытаскивать из образа ядро с initrd и подсовывать вручную.</s> | |||
= qemu-system-e2k = | = qemu-system-e2k = | ||
== установка == | |||
p10_e2k (ядро 5.10, qemu 7.2): | |||
# apt-get install qemu seavgabios | |||
<!-- исправлено в 7.2.0-alt3.E2K.2 09.11.2023 // mike@ | |||
{{note|может потребоваться ручное копирование {{path|/usr/share/qemu/keymaps/}} из {{pkg|qemu-common}} для x86 в случае {{pkg|qemu-common 7.2.0-alt3.E2K.0.e2kv6}}}} | |||
--> | |||
== образ жёсткого диска == | |||
Пример запуска системы с [http://elbrus.ivk.ru/pub/ALTLinux/images/Sisyphus/rescue/ образа жёсткого диска] (qemu >= 7.2.0-alt4.e2kv6 научился kernel/initrd брать из образа; ядро здесь 5.10-1.23 на хосте и в "коробочке"; сериалка в терминалке): | |||
$ qemu-system-e2k -m 4G -vga std -display none -nographic -object iothread,id=iothread0 -drive if=none,id=drive0,file=$HOME/qemu/alt-rescue-20240711-e2kv6.img,format=raw,cache=none,aio=native -device virtio-blk-pci,iothread=iothread0,drive=drive0 -netdev bridge,id=n1,br=vmbr0 -device virtio-net-pci,netdev=n1,mac=52:54:00:00:01:01 | |||
(далее можно сделать {{cmd|sed -i 's,console=tty0 ,,' /boot/boot.conf}} для получения вывода загрузки в COM-консоль) | |||
$ qemu-system-e2k -m 4G -vga std -display none -object iothread,id=iothread0 -drive if=none,id=drive0,file=$HOME/qemu/20231108/alt-rescue-10.2-20231108-e2kv6.img,format=raw,cache=none,aio=native -device virtio-blk-pci,iothread=iothread0,drive=drive0 -kernel ~/qemu/20231108/image -initrd ~/qemu/20231108/initrd.img -append "console=ttyS0 hardreset root=UUID=7c32e7aa-e2bf-40eb-9457-e51b085aa6a5" -serial stdio | |||
и с инсталятором (графика через {{cmd|vncviewer 127.0.0.1:5900}}): | |||
$ qemu-system-e2k -m 4G -vga virtio -drive id=cdrom0,if=none,format=raw,readonly=on,file=$HOME/qemu/20231108/slinux-10.2-20231108-e2kv6.iso -device virtio-scsi-pci,id=scsi0 -device scsi-cd,bus=scsi0.0,drive=cdrom0 -kernel ~/qemu/20231108/live-image.0 -initrd ~/qemu/20231108/live-initrd.img -append "fastboot live automatic=method:cdrom lang=ru_RU" | |||
<!-- | |||
Пример запуска системы с образа жёсткого диска (ядро 5.4-5.9 на хосте и в "коробочке", в последнем случае требуется вариант mcst-def ради расширенного набора модулей virtio; см. тж. mcst#7476): | Пример запуска системы с образа жёсткого диска (ядро 5.4-5.9 на хосте и в "коробочке", в последнем случае требуется вариант mcst-def ради расширенного набора модулей virtio; см. тж. mcst#7476): | ||
$ qemu-system-e2k -m 4G -vga std -display none -object iothread,id=iothread0 -drive if=none,id=drive0,file=$HOME/qemu/alt-rescue-20220929-e2kv6.img,format=raw,cache=none,aio=native -device virtio-blk-pci,iothread=iothread0,drive=drive0 -kernel ~/qemu/20220929/image -initrd ~/qemu/20220929/initrd.img -append "console=ttyS0 hardreset root=UUID=3d6fa1c7-2871-42ec-938f-de5c1d991df6" -serial stdio | $ qemu-system-e2k -m 4G -vga std -display none -object iothread,id=iothread0 -drive if=none,id=drive0,file=$HOME/qemu/alt-rescue-20220929-e2kv6.img,format=raw,cache=none,aio=native -device virtio-blk-pci,iothread=iothread0,drive=drive0 -kernel ~/qemu/20220929/image -initrd ~/qemu/20220929/initrd.img -append "console=ttyS0 hardreset root=UUID=3d6fa1c7-2871-42ec-938f-de5c1d991df6" -serial stdio | ||
и с livecd: | и с livecd (при наличии <tt>-vga virtio</tt> лучше применять его): | ||
$ qemu-system-e2k -m 4G -vga std -display none -drive id=cdrom0,if=none,format=raw,readonly=on,file=$HOME/qemu/alt-p10-wmaker-sysv-20220928-e2kv6.iso -device virtio-scsi-pci,id=scsi0 -device scsi-cd,bus=scsi0.0,drive=cdrom0 -kernel ~/qemu/live-image.0 -initrd ~/qemu/live-initrd.img -append " | $ qemu-system-e2k -m 4G -vga std -display none -drive id=cdrom0,if=none,format=raw,readonly=on,file=$HOME/qemu/alt-p10-wmaker-sysv-20220928-e2kv6.iso -device virtio-scsi-pci,id=scsi0 -device scsi-cd,bus=scsi0.0,drive=cdrom0 -kernel ~/qemu/live-image.0 -initrd ~/qemu/live-initrd.img -append "fastboot live automatic=method:cdrom stagename=live lowmem" -serial stdio | ||
--> | |||
сеть (см. тж. [[etcnet#bridge]] и [[PVE#Настройка_сетевой_подсистемы]]; ''eth5'' ниже -- пример имени опорного интерфейса моста vmbr0): | |||
# echo "TYPE=eth" > /etc/net/ifaces/''eth5''/options | |||
# mkdir -p /etc/net/ifaces/vmbr0 | |||
# cat > /etc/net/ifaces/vmbr0/options << EOF | |||
BOOTPROTO=static | |||
TYPE=bri | |||
HOST=''eth5'' | |||
CONFIG_WIRELESS=no | |||
CONFIG_IPV4=yes | |||
# cat > /etc/net/ifaces/vmbr0/ipv4address << EOF | |||
10.2.0.1/24 | |||
EOF | |||
# mkdir -p /etc/qemu | |||
# echo "allow vmbr0" >> /etc/qemu/bridge.conf | |||
$ ... -netdev bridge,id=n1,br=vmbr0 -device virtio-net-pci,netdev=n1,mac=52:54:<u>00:12:34:56</u> | |||
В запущенной виртуалке можно сконфигурировать, скажем, 10.2.0.14/24 на полученный сетевой интерфейс и обмениваться пакетами с системой-хозяином. | |||
Запуская вторую виртуалку с сетью, не забудьте дать ей свой MAC (52:54:xx:xx:xx:xx) во избежание конфликтов на мосту с сопутствующими таймаутами. | |||
= qemu-user-e2k = | = qemu-user-e2k = | ||
На x86 можно воспользоваться [http://git.mentality.rip/OpenE2K/qemu-e2k qemu-e2k] от сообщества, который, по словам сотрудника МЦСТ, "эмулирует что-то напоминающее архитектуру эльбрус" (при этом для ряда практических задач уже вполне пригоден). | На x86 можно воспользоваться программным эмулятором [http://git.mentality.rip/OpenE2K/qemu-e2k qemu-e2k] от сообщества, который, по словам сотрудника МЦСТ, "эмулирует что-то напоминающее архитектуру эльбрус" (при этом для ряда практических задач уже вполне пригоден). | ||
== I == | |||
Краткая [http://t.me/qemu_e2k/15381 вводная] от разработчиков (тест подразумевает доступность кроссового lcc): | |||
<pre> | |||
$ git clone --depth=1 -b e2k https://git.mentality.rip/OpenE2K/qemu-e2k.git | |||
$ cd qemu-e2k | |||
$ mkdir build | |||
$ cd build | |||
$ ../configure --target-list=e2k-linux-user --static --disable-capstone --disable-werror | |||
$ nice ninja | |||
$ sudo cp qemu-e2k /usr/local/bin | |||
$ cat hello.c | |||
#include <stdio.h> | |||
int main(int argc, char *argv[]) { | |||
const char *name = argc > 1 ? argv[1] : "world"; | |||
printf("Hello, %s!\n", name); | |||
return 0; | |||
} | |||
$ lcc -O2 -static hello.c -o hello-e2k | |||
$ qemu-e2k hello-e2k $USER | |||
Hello, denis! | |||
# setup binfmt | |||
$ cat /etc/binfmt.d/qemu-e2k.conf | |||
:qemu-e2k:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xaf\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k:OC | |||
:qemu-e2k-old:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x31\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k:OC | |||
:qemu-e2k32:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xaf\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k32:OC | |||
:qemu-e2k32-old:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x31\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k32:OC | |||
$ ./hello-e2k $USER | |||
Hello, denis! | |||
</pre> | |||
[http://t.me/qemu_e2k/15382 Можно] собрать без <tt>static</tt>, если не планируется запускать что-то в chroot. Можно добавить <tt>e2k32-linux-user</tt> в <tt>--target-list</tt> для запуска 32-битных программ, но особого смысла в них нет. :) | |||
Ещё [http://t.me/qemu_e2k/15386 можно] в {{path|/usr/gnemul}} создать символическую ссылку на chroot в cross-lcc, или на реальный chroot от Эльбрусов. | |||
$ readlink -f /usr/gnemul/qemu-e2k/ | |||
/opt/mcst/lcc-1.26.14.e2k-v4.5.4/fs | |||
Это чтобы не прописывать окружения <tt>QEMU_LD_PREFIX</tt> или {{cmd|qemu-e2k -L /opt/mcst/..../fs}}. | |||
== II == | |||
Более подробная [http://t.me/e2k_fans/993 инструкция] от сообщества -- точнее, Артёма Солопия (@entityfx): | |||
Сборка QEMU e2k (не является эмуляцией всего компьютера, а только исполнения приложений) и использование с chroot контейнером ALT Linux e2k. | |||
Пример сборки и запуска в Alt Linux (Подойдёт любой ваш любимый дистрибутив). | |||
Установите необходимые пакеты для сборки Qemu: | |||
<pre> | |||
apt-get install gcc | |||
apt-get install glibc-devel-static | |||
apt-get install glib2-devel | |||
apt-get install glib2-devel-static | |||
apt-get install libpcre2-devel | |||
apt-get install libpcre2-devel-static | |||
apt-get install zlib-devel | |||
apt-get install ninja-build | |||
</pre> | |||
Склонируйте qemu-e2k: | |||
git clone --depth=1 -b e2k-v8.1.3 https://git.mentality.rip/OpenE2K/qemu-e2k.git | |||
Сконфигурируйте и соберите qemu-e2k (static): | |||
../configure --target-list=e2k-linux-user --static --disable-capstone --disable-werror | |||
nice ninja | |||
Распаковка контейнера chroot с Alt e2k (либо другой e2k Linux). | |||
Создать директорию в корне, например: | |||
sudo mkdir /alt-e2k-chroot | |||
Получите архив tar c контейнером e2k (Elbrus OS, Alt Linux, ...) | |||
Распакуйте tar c контейнером: | |||
sudo tar xf alt-e2k-chroot.tar.xz -C /alt-e2k-chroot | |||
Скопируйте исполняемый файл qemu в контейнер chroot: | |||
sudo cp qemu-e2k/build/qemu-e2k /alt-e2k-chroot/usr/local/bin | |||
Смонтируйте директории в контейнер chroot: | |||
<pre> | |||
sudo mount --rbind /dev /alt-e2k-chroot/dev | |||
sudo mount --make-rslave /alt-e2k-chroot/dev | |||
sudo mount --rbind /sys /alt-e2k-chroot/sys | |||
sudo mount --make-rslave /alt-e2k-chroot/sys | |||
sudo mount --rbind /tmp /alt-e2k-chroot/tmp | |||
sudo mount -t proc /proc /alt-e2k-chroot/proc | |||
</pre> | |||
Выполните скрипт binfmt из qemu-e2k: | |||
sudo ./qemu-e2k/scripts/qemu-binfmt-conf.sh /usr/local/bin | |||
Запуск эмулятора контейнера с bash: | |||
sudo chroot /alt-e2k-chroot /bin/bash | |||
[https://wiki.qemu.org/Hosts/Linux#QEMU_on_Linux_hosts Дополнительная инструкция] | |||
{{Category navigation|title=E2K|category=E2K|sortkey=*}} | {{Category navigation|title=E2K|category=E2K|sortkey=*}} |
Текущая версия от 23:05, 27 сентября 2024
Аппаратная виртуализация (kvm) есть только на v6; для v3+ (v2+?) потихоньку пилят paravirt.
Пока нет виртуализованного бута -- приходится вытаскивать из образа ядро с initrd и подсовывать вручную.
qemu-system-e2k
установка
p10_e2k (ядро 5.10, qemu 7.2):
# apt-get install qemu seavgabios
образ жёсткого диска
Пример запуска системы с образа жёсткого диска (qemu >= 7.2.0-alt4.e2kv6 научился kernel/initrd брать из образа; ядро здесь 5.10-1.23 на хосте и в "коробочке"; сериалка в терминалке):
$ qemu-system-e2k -m 4G -vga std -display none -nographic -object iothread,id=iothread0 -drive if=none,id=drive0,file=$HOME/qemu/alt-rescue-20240711-e2kv6.img,format=raw,cache=none,aio=native -device virtio-blk-pci,iothread=iothread0,drive=drive0 -netdev bridge,id=n1,br=vmbr0 -device virtio-net-pci,netdev=n1,mac=52:54:00:00:01:01
(далее можно сделать sed -i 's,console=tty0 ,,' /boot/boot.conf для получения вывода загрузки в COM-консоль)
$ qemu-system-e2k -m 4G -vga std -display none -object iothread,id=iothread0 -drive if=none,id=drive0,file=$HOME/qemu/20231108/alt-rescue-10.2-20231108-e2kv6.img,format=raw,cache=none,aio=native -device virtio-blk-pci,iothread=iothread0,drive=drive0 -kernel ~/qemu/20231108/image -initrd ~/qemu/20231108/initrd.img -append "console=ttyS0 hardreset root=UUID=7c32e7aa-e2bf-40eb-9457-e51b085aa6a5" -serial stdio
и с инсталятором (графика через vncviewer 127.0.0.1:5900):
$ qemu-system-e2k -m 4G -vga virtio -drive id=cdrom0,if=none,format=raw,readonly=on,file=$HOME/qemu/20231108/slinux-10.2-20231108-e2kv6.iso -device virtio-scsi-pci,id=scsi0 -device scsi-cd,bus=scsi0.0,drive=cdrom0 -kernel ~/qemu/20231108/live-image.0 -initrd ~/qemu/20231108/live-initrd.img -append "fastboot live automatic=method:cdrom lang=ru_RU"
сеть (см. тж. etcnet#bridge и PVE#Настройка_сетевой_подсистемы; eth5 ниже -- пример имени опорного интерфейса моста vmbr0):
# echo "TYPE=eth" > /etc/net/ifaces/eth5/options # mkdir -p /etc/net/ifaces/vmbr0 # cat > /etc/net/ifaces/vmbr0/options << EOF BOOTPROTO=static TYPE=bri HOST=eth5 CONFIG_WIRELESS=no CONFIG_IPV4=yes # cat > /etc/net/ifaces/vmbr0/ipv4address << EOF 10.2.0.1/24 EOF
# mkdir -p /etc/qemu # echo "allow vmbr0" >> /etc/qemu/bridge.conf
$ ... -netdev bridge,id=n1,br=vmbr0 -device virtio-net-pci,netdev=n1,mac=52:54:00:12:34:56
В запущенной виртуалке можно сконфигурировать, скажем, 10.2.0.14/24 на полученный сетевой интерфейс и обмениваться пакетами с системой-хозяином.
Запуская вторую виртуалку с сетью, не забудьте дать ей свой MAC (52:54:xx:xx:xx:xx) во избежание конфликтов на мосту с сопутствующими таймаутами.
qemu-user-e2k
На x86 можно воспользоваться программным эмулятором qemu-e2k от сообщества, который, по словам сотрудника МЦСТ, "эмулирует что-то напоминающее архитектуру эльбрус" (при этом для ряда практических задач уже вполне пригоден).
I
Краткая вводная от разработчиков (тест подразумевает доступность кроссового lcc):
$ git clone --depth=1 -b e2k https://git.mentality.rip/OpenE2K/qemu-e2k.git $ cd qemu-e2k $ mkdir build $ cd build $ ../configure --target-list=e2k-linux-user --static --disable-capstone --disable-werror $ nice ninja $ sudo cp qemu-e2k /usr/local/bin $ cat hello.c #include <stdio.h> int main(int argc, char *argv[]) { const char *name = argc > 1 ? argv[1] : "world"; printf("Hello, %s!\n", name); return 0; } $ lcc -O2 -static hello.c -o hello-e2k $ qemu-e2k hello-e2k $USER Hello, denis! # setup binfmt $ cat /etc/binfmt.d/qemu-e2k.conf :qemu-e2k:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xaf\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k:OC :qemu-e2k-old:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x31\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k:OC :qemu-e2k32:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xaf\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k32:OC :qemu-e2k32-old:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x31\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k32:OC $ ./hello-e2k $USER Hello, denis!
Можно собрать без static, если не планируется запускать что-то в chroot. Можно добавить e2k32-linux-user в --target-list для запуска 32-битных программ, но особого смысла в них нет. :)
Ещё можно в /usr/gnemul создать символическую ссылку на chroot в cross-lcc, или на реальный chroot от Эльбрусов.
$ readlink -f /usr/gnemul/qemu-e2k/ /opt/mcst/lcc-1.26.14.e2k-v4.5.4/fs
Это чтобы не прописывать окружения QEMU_LD_PREFIX или qemu-e2k -L /opt/mcst/..../fs.
II
Более подробная инструкция от сообщества -- точнее, Артёма Солопия (@entityfx):
Сборка QEMU e2k (не является эмуляцией всего компьютера, а только исполнения приложений) и использование с chroot контейнером ALT Linux e2k. Пример сборки и запуска в Alt Linux (Подойдёт любой ваш любимый дистрибутив).
Установите необходимые пакеты для сборки Qemu:
apt-get install gcc apt-get install glibc-devel-static apt-get install glib2-devel apt-get install glib2-devel-static apt-get install libpcre2-devel apt-get install libpcre2-devel-static apt-get install zlib-devel apt-get install ninja-build
Склонируйте qemu-e2k:
git clone --depth=1 -b e2k-v8.1.3 https://git.mentality.rip/OpenE2K/qemu-e2k.git
Сконфигурируйте и соберите qemu-e2k (static):
../configure --target-list=e2k-linux-user --static --disable-capstone --disable-werror nice ninja
Распаковка контейнера chroot с Alt e2k (либо другой e2k Linux).
Создать директорию в корне, например:
sudo mkdir /alt-e2k-chroot
Получите архив tar c контейнером e2k (Elbrus OS, Alt Linux, ...)
Распакуйте tar c контейнером:
sudo tar xf alt-e2k-chroot.tar.xz -C /alt-e2k-chroot
Скопируйте исполняемый файл qemu в контейнер chroot:
sudo cp qemu-e2k/build/qemu-e2k /alt-e2k-chroot/usr/local/bin
Смонтируйте директории в контейнер chroot:
sudo mount --rbind /dev /alt-e2k-chroot/dev sudo mount --make-rslave /alt-e2k-chroot/dev sudo mount --rbind /sys /alt-e2k-chroot/sys sudo mount --make-rslave /alt-e2k-chroot/sys sudo mount --rbind /tmp /alt-e2k-chroot/tmp sudo mount -t proc /proc /alt-e2k-chroot/proc
Выполните скрипт binfmt из qemu-e2k:
sudo ./qemu-e2k/scripts/qemu-binfmt-conf.sh /usr/local/bin
Запуск эмулятора контейнера с bash:
sudo chroot /alt-e2k-chroot /bin/bash