[guide]: подключение к виртуальной локальной машине через vt220

Модератор: Модераторы разделов

Аватара пользователя
olecya
Сообщения: 651
ОС: debian, fedora (i3-wm)

[guide]: подключение к виртуальной локальной машине через vt220

Сообщение olecya »

С управлением виртуальными машинами через libvirt можно подключатся через последовательный порт командой:

Код: Выделить всё

console 1
Номер по списку выданный командой list или ввести имя виртуалки. Перед этим необходимо в гостевых машинах активировать сервис.
В дебиан стартуем:

Код: Выделить всё

sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service
Во FreeBSD записываем в файл /boot/loader.conf строчку:

Код: Выделить всё

console="comconsole"
На целевой машине я пользуюсь оконным менеджером i3 который по умолчанию разворачивает эмулятор терминала на весь экран. Да можно по нажатию перевести окно в плавающий режим которое примет размер 24x80 и будет соответствовать выводу гостевой машины, но я уже отвыкла от такого размера терминала. Создаю скрипт в гостевом дебиане (не исполняемый!) файл /etc/profile.d/serial_console.sh:

Код: Выделить всё

#if [ "$TERM" = vt220 ]; then
    #stty rows 35 cols 127
    stty -F /dev/ttyS0 cols 127
    stty -F /dev/ttyS0 rows 35
#fi
Вполне возможно эти строчки можно прописать в файле юнита.
Комментарии остались от чернового варианта, ну чтобы было заодно видно в какой переменной определен тип терминала.
Я не знаю как FreeBSD удается подстраивать свой вывод, но с ней на удивление проблем нет, только не менять размер окна после подключения.

Теперь о главном.
Понадобилось мне несколько дней назад запустить виртуалку с подключением через последовательный порт чисто в qemu-kvm без библиотеки либвирт. Я нашла вариант и он, я подозреваю, точно такой, каким я подключаюсь к виртуальным машинам в сетевом эмуляторе GNS3 через telnet. В скрипте запуска машины записываю(после установки убрала cdrom):

Код: Выделить всё

#!/bin/bash
/usr/bin/qemu-kvm -m 512 -hda /home/nez/Projects/qemu/Deb.qcow2 \
-net nic,model=virtio -net tap,ifname=tap0,script=no,downscript=no \
-display none -serial telnet:localhost:4321,server,nowait

#-boot c (-cdrom /path/to/iso/debian.iso) start from cdrom
#-boot d (-hda)start from disk
То-есть последняя строчка назначает порт вывода(любой на выбор) - 4321.
Ну а дальше просто:

Код: Выделить всё

telnet localhost 4321
и 2 раза Enter
Кстати в выводе допустимых моделей:

Код: Выделить всё

qemu-kvm -net nic,model=help
Нет virtio, есть virtio-net-pci, но qemu понимает.
Заодно дополняю всеми действиями, что я делала если кто вознамерится повторить:
Создала образ диска:

Код: Выделить всё

qemu-img create -f qcow2 Deb.qcow2 5G
Создаю интерфейс tap0 и подключаю его в мост:

Код: Выделить всё

ip tuntap add dev tap0 mode tap 
ip link set dev tap0 up
ip link set tap0 master virbr0
У меня два моста, один от либвирт virbr0, другой докеровский. Чтобы либвиртовский стартовал при включении отдельно от либвиртд подняла сервис на целевой машине:

Код: Выделить всё

sudo systemctl start virtnetworkd.service
sudo systemctl enable virtnetworkd.service
Добавила себя в группы:

Код: Выделить всё

gpasswd -a nez qemu
gpasswd -a nez kvm
P.S. Буду благодарна за исправления или дополнения
Последний раз редактировалось olecya 25.12.2021 18:44, всего редактировалось 1 раз.
Спасибо сказали:

Аватара пользователя
Aliech
Сообщения: 629
Статус: дилетант широкого профиля
ОС: Gentoo arm64 musl hardened

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение Aliech »

Qemu, если что, сразу умеет в свой sdl-интерфейс serial выводить. Если что. Вдруг пропустили вариант.
С уважением, Zerg
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 651
ОС: debian, fedora (i3-wm)

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение olecya »

Aliech
Я помню конечно -no graphic и -console по-моему, сейчас появилась новая опция stdio, но исходя из моего опыта постоянно там что-то сбивалось и я не могла понять что. Наверное из-за устаревшей библиотеки sdl и вставлять из буфера обмена не получится
Добавлено (22:02):
А вот сейчас попробовала, выкинула все кроме -nographic эмулируется окно, ввожу логин, в ответ:

Код: Выделить всё

Debian GNU/Linux 11 deb ttyS0

deb login: nez
bash: nez: command not found...
По ssh подключаюсь, чтобы выключить.

И вот так command not found...
-display none -serial stdio

Графика sdl просто не управляемая и любой вирт-вьюир это отстой. Сразу вспоминается русская пословица:
"Отмерь микрометром, отчерти мелом и отруби топором"
Нет, самый удобный способ это или сериал телнет или протокол ssh
Спасибо сказали:

Аватара пользователя
Aliech
Сообщения: 629
Статус: дилетант широкого профиля
ОС: Gentoo arm64 musl hardened

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение Aliech »

olecya писала:
24.12.2021 21:17
Aliech
Я помню конечно -no graphic и -console по-моему, сейчас появилась новая опция stdio, но исходя из моего опыта постоянно там что-то сбивалось и я не могла понять что. Наверное из-за устаревшей библиотеки sdl и вставлять из буфера обмена не получится
Добавлено (24.12.2021 22:02):
А вот сейчас попробовала, выкинула все кроме -nographic эмулируется окно, ввожу логин, в ответ:

Код: Выделить всё

Debian GNU/Linux 11 deb ttyS0

deb login: nez
bash: nez: command not found...
По ssh подключаюсь, чтобы выключить.

И вот так command not found...
-display none -serial stdio

Графика sdl просто не управляемая и любой вирт-вьюир это отстой. Сразу вспоминается русская пословица:
"Отмерь микрометром, отчерти мелом и отруби топором"
Нет, самый удобный способ это или сериал телнет или протокол ssh
Во-первых, qemu всегда шёл с sdl'кой. И в той sdl'ке "по-дефолту" были доступны ЧЕТЫРЕ консоли:
1. графическая;
2. qemu-monitor;
3. serial0;
4. parapllel0.

Для переключения между теми консолями использовался хоткей ctr+alt+номер_консоли. Теперь же, в новом графонии, даже есть панель меню, откуда можно View => serial0 сделать. И даже включить отображение консолей как табов.

И всегда (в 2008ом году точно было можно уже) можно было указать 'stdio' как значение для ключей -monitor/-serial/-parallel, чтобы "убрать" их из sdl'ки и направить на stdin/stdout терминала, через который запустили qemu.

Единственное, что наблюдаю вынос sdl из основного пакета в Debian. Может у вас тоже графон ментейнеры вынесли в отдельный пакет?

Я проверил. УМВР. Гость запущен так:

Код: Выделить всё

qemu-system-x86_64 -M q35 -m 1G -cdrom Образы\ дисков/debian-bullseye-textlive_2021072300.hybrid.iso
и serial0 доступна из sdl.

При запуске как

Код: Выделить всё

qemu-system-x86_64 -M q35 -m 1G -cdrom Образы\ дисков/debian-bullseye-textlive_2021072300.hybrid.iso -serial stdio
доступно serial0 через родительский терминал.

Ядро в госте запущено с '-console=ttyS0,115200'.
С уважением, Zerg
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 651
ОС: debian, fedora (i3-wm)

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение olecya »

Aliech
Похоже надо в грубе опцию ядра прописывать для гостя
И когда я запускаю с опцией
-nographic -serial pty
получаю строчку
(qemu) char device redirected to /dev/pts/2 (label serial0)
Добавлено (00:45):
Если я убираю все опции и открывается дефолтное окно vga, то все пункты меню на месте:
VGA
compatmonitor0
serial0
parallel0

Сериал переключается и работает в графическом окне. Но чтобы вывод в консоль никак. И прописываю "console=tty0 console=ttys0,115200", обновляю груб, никак. Мусор какой-то на консоль выдает и даже не логиниться. Ладно возьму пока тайм аут, иначе с дома выгонят :(
Добавлено (01:08):
Aliech писал:
24.12.2021 23:24
в 2008ом
Посмотрела свои записи, действительно это я запускала виртуалку через либвирт но в графике sdl (2015г).
Помню уже тогда была пометка на опцию --sdl как depricated. Чтобы разово запустить приходилось прописывать в xml конфиге:

Код: Выделить всё

<graphics type='sdl' display=':0' xauth='/var/run/gdm3/auth-for-nez-UqUBN5/database'/>
Я тогда дружила только с дебиан, а в нем путь к файлу в переменной XAUTHORITY менялся с каждой сессией. Потом я нашла еще один костыль, отключала охрану в иксах: Нафига мне это было надо, я не помню :)
Спасибо сказали:

Аватара пользователя
Aliech
Сообщения: 629
Статус: дилетант широкого профиля
ОС: Gentoo arm64 musl hardened

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение Aliech »

olecya писала:
24.12.2021 23:57
И когда я запускаю с опцией
-nographic -serial pty
получаю строчку
(qemu) char device redirected to /dev/pts/2 (label serial0)
А зачем -serial pty передали? Зачем -nographic? Не надо указывать опции, программе, если не понимаешь, зачем ты это делаешь.

'-nograpic' вам потушил окно sdl'а, а qemu-monitor стал выводится в терминал;
'-serial pty' вам направил ttyS0 машины в /dev/pts/2 (о чём вас qemu и уведомил), так почему вы его ждёте в консоли, когда надо брать minicom и отправляться работать с /dev/pts/2?
olecya писала:
24.12.2021 23:57
Помню уже тогда была пометка на опцию --sdl как depricated. Чтобы разово запустить приходилось прописывать в xml конфиге:
SDL для libvirt'а может и deprecated (я вообще не припомню, чтобы libvirt позволял что-то иное, кроме vnc и spice), но почему это он должен быть deprecated для qemu? qemu != libvirt.
С уважением, Zerg
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 651
ОС: debian, fedora (i3-wm)

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение olecya »

Aliech писал:
25.12.2021 03:40
так почему вы его ждёте в консоли, когда надо брать minicom и отправляться работать с /dev/pts/2?
Спасибо, попробую
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 651
ОС: debian, fedora (i3-wm)

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение olecya »

Aliech писал:
25.12.2021 03:40
qemu != libvirt.
Не читайте между строчек.
Aliech писал:
25.12.2021 03:40
А зачем -serial pty передали? Зачем -nographic? Не надо указывать опции, программе, если не понимаешь, зачем ты это делаешь.

Потому что пробую -display none -serial mon:stdio и так -nographic -serial mon:stdio .
Стандартный ввод вывод не подключается правильно:

Код: Выделить всё

Debian GNU/Linux 11 deb ttyS0

deb login: nez
bash: nez: command not found...
Пробую -display none -serial stdio , тоже самое.
Никаких ошибок, в стд при запуске и в подключаемой консоли, Вот только на целевой машине уже в журнале:

Код: Выделить всё

Dec 25 08:49:45 wu gnome-terminal-[3670]: g_object_ref: assertion 'G_IS_OBJECT (object)' failed
Dec 25 08:49:45 wu gnome-terminal-[3670]: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
Dec 25 08:49:53 wu gnome-terminal-[3670]: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
Поэтому и пытаюсь от бессилия нащупать хоть какую-то работающую конфигурацию без графики. Потому что работать с консольной виртуалкой черз такую графику можно только если нет другого доступа для восстановления аварийной системы.
В предыдущем своем опыте, несколько лет назад я также натыкалась на эти же проблемы и так и не победила их с qemu, а либвиртовская эпопея с sdl то же имела место в тот же период времени, просто за давностью уже не так точно помню все детали. Поэтому изначально и не хотела больше лезть на эти грабли и нашла обходной, очень удобный путь с telnet и пост этот результат прежних многочасовых поисков тоже.

За миником огромнейшее приспасибо, проверить возможность, уже ради интереса. Это очень хорошая мысль, понятно что ни о каком удобстве тут речь не идет.
Спасибо сказали:

Аватара пользователя
Aliech
Сообщения: 629
Статус: дилетант широкого профиля
ОС: Gentoo arm64 musl hardened

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение Aliech »

olecya,
специально для вас проверил поведение с '-nogrpahic'. Ну раз вы уже не хотите видеть ни SDL, ни GTK интерфейсы.

Код: Выделить всё

aliech@arcturus:~$ qemu-img create Образы\ дисков/some-tests-for-olecya.img 10G -f raw
Formatting 'Образы дисков/some-tests-for-olecya.img', fmt=raw size=10737418240
aliech@arcturus:~$ qemu-system-x86_64 -enable-kvm -M q35 -m 1G -drive file=Образы\ дисков/some-tests-for-olecya.img,if=virtio,media=disk,format=raw -drive file=Образы\ дисков/debian-11.2.0-amd64-netinst.iso,if=ide,media=cdrom,format=raw -net none
aliech@arcturus:~$ qemu-system-x86_64 -enable-kvm -M q35 -m 1G -drive file=Образы\ дисков/some-tests-for-olecya.img,if=virtio,media=disk,format=raw -drive file=Образы\ дисков/debian-11.2.0-amd64-netinst.iso,if=ide,media=cdrom,format=raw -net none -nographic
SeaBIOS (version 1.14.0-2)
Booting from Hard Disk...
GRUB loading.
Welcome to GRUB!

/dev/vda1: clean, 25928/593344 files, 247692/2371072 blocks

Debian GNU/Linux 11 localhost ttyS0

localhost login: root
Password: 
Linux localhost 5.10.0-10-amd64 #1 SMP Debian 5.10.84-1 (2021-12-08) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Dec 25 11:03:56 UTC 2021 on ttyS0
root@localhost:~# cat /proc/cmdline 
BOOT_IMAGE=/boot/vmlinuz-5.10.0-10-amd64 root=UUID=d75c1b0f-8d79-4a3f-90d0-a5a6adad75a3 ro console=tty1 console=ttyS0,1t
root@localhost:~# poweroff 
root@localhost:~# [  266.250285] reboot: Power down
aliech@arcturus:~$ 
С уважением, Zerg
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 651
ОС: debian, fedora (i3-wm)

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение olecya »

Aliech
Спасибо, я попробую создать новый диск с новой системой и в raw формате, чем черт не шутит
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 651
ОС: debian, fedora (i3-wm)

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение olecya »

Получилось, единственное это выделение текста осталось:
qemu_aliech.png
Я запустила сервис serial-getty@ttyS0 и вот что он мне выдает:
serial-getty@ttyS0.service /sbin/agetty -o -p -- \u --keep-baud 115200,57600,38400,9600 ttyS0 vt220
115200 baud есть

cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.10.0-8-amd64 root=UUID=0632734c-564a-4621-9b13-6613e79b92bf ro quiet
Оно и понятно я в меню груба ничего не добавляла. В системд за это отвечает юнит инициализации.

Код: Выделить всё

echo $TERM
vt220
tty
/dev/ttyS0
Блин и первая система у меня стала загружаться, Вот что надо было? Похоже надо было оставлять в юните одну скорость 115200
НЕТ БЛИН!!!! Все дело в последней моей опции -boot. Убираешь ее и все работает. Я пользовалась ей постоянно мне казалось очень удобно выбирать загрузку и например переустанавливать систему или устанавливать на один диск две. Вот как?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 651
ОС: debian, fedora (i3-wm)

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение olecya »

С опцией -nographic -serial pty

Код: Выделить всё

(qemu) char device redirected to /dev/pts/4 (label serial0)
Вместо minicom установила screen. Подключается прекрасно:

Код: Выделить всё

screen /dev/pts/4 115200
Через minicom тоже отлично подключается, указывала Serial device: /dev/pts/4
Где искать lable serial0 непонятно
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 651
ОС: debian, fedora (i3-wm)

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение olecya »

Не выводит сообщения груба и выводит без выделения текста с опциями:

Код: Выделить всё

-desplay none serial stdio
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:

Аватара пользователя
Aliech
Сообщения: 629
Статус: дилетант широкого профиля
ОС: Gentoo arm64 musl hardened

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение Aliech »

olecya писала:
25.12.2021 16:51
С опцией -nographic -serial pty

Код: Выделить всё

(qemu) char device redirected to /dev/pts/4 (label serial0)
Вместо minicom установила screen. Подключается прекрасно:

Код: Выделить всё

screen /dev/pts/4 115200
Через minicom тоже отлично подключается, указывала Serial device: /dev/pts/4
Где искать lable serial0 непонятно
Вы уже нашли serial0 в /dev/pts/4
С уважением, Zerg
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 651
ОС: debian, fedora (i3-wm)

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение olecya »

Aliech писал:
25.12.2021 20:22
Вы уже нашли serial0 в /dev/pts/4
Нет. Пробовала так просто указать, не сработало
Спасибо сказали:

Аватара пользователя
Aliech
Сообщения: 629
Статус: дилетант широкого профиля
ОС: Gentoo arm64 musl hardened

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение Aliech »

olecya писала:
25.12.2021 20:23
Aliech писал:
25.12.2021 20:22
Вы уже нашли serial0 в /dev/pts/4
Нет. Пробовала так просто указать, не сработало
А что вы пробовали указать? Вы же выше писали, что minicom таки "сел" успешно на устройство /dev/pts/4.
olecya писала:
25.12.2021 18:58
Не выводит сообщения груба и выводит без выделения текста с опциями:

Код: Выделить всё

-desplay none serial stdio
Ну так Grub надо попросить писать в ttyS0. Он сам не поймёт.
olecya писала:
25.12.2021 16:35
В системд за это отвечает юнит инициализации.
При указании ядру console=ttyS0,115200 systemd поставит сервис с логином на консоль. Это штатное поведение для systemd. Юнит ручками активировать не надо.

Если хочется видеть в серийной консоли "ранний" лог загрузки (до systemd, например), то за это отвечает параметр early_serial.
С уважением, Zerg
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 651
ОС: debian, fedora (i3-wm)

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение olecya »

Aliech писал:
25.12.2021 20:26
А что вы пробовали указать? Вы же выше писали, что minicom таки "сел" успешно на устройство /dev/pts/4.
вместо устройства /dev/pts/4 serial0 и в screen подставляла и в minicom прописывала. Думала может быть в директории /dev/mapper, но облазила все, не нашла.
Добавлено (20:44):
Aliech писал:
25.12.2021 20:26
Ну так Grub надо попросить писать в ttyS0. Он сам не поймёт.
Да, не меня это устраивает, в логах загрузки все равно все видно. Я просто описывала подключение.
Aliech писал:
25.12.2021 20:26
При указании ядру console=ttyS0,115200 systemd поставит сервис с логином на консоль. Это штатное поведение для systemd. Юнит ручками активировать не надо.

Если хочется видеть в серийной консоли "ранний" лог загрузки (до systemd, например), то за это отвечает параметр early_serial.
Сохраню у себя в заметках.
Спасибо сказали:

Аватара пользователя
Aliech
Сообщения: 629
Статус: дилетант широкого профиля
ОС: Gentoo arm64 musl hardened

Re: [guide]: подключение к виртуальной локальной машине через vt220

Сообщение Aliech »

olecya писала:
25.12.2021 20:41
Aliech писал:
25.12.2021 20:26
А что вы пробовали указать? Вы же выше писали, что minicom таки "сел" успешно на устройство /dev/pts/4.
вместо устройства /dev/pts/4 serial0 и в screen подставляла и в minicom прописывала. Думала может быть в директории /dev/mapper, но облазила все, не нашла.
serial0 - это то, как называется данная консоль с точки зрения qemu. Вполне понятно же написано:

Код: Выделить всё

(qemu) char device redirected to /dev/pts/4 (label serial0)

Код: Выделить всё

(qemu) символьное устройство перенаправлено в /dev/pts/4 (метка serial0)
С уважением, Zerg
Спасибо сказали: