Как я могу использовать одно и то же окно терминала для взаимодействия с оболочкой хоста и гостевой консолью qemu? - PullRequest
0 голосов
/ 26 февраля 2019

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

Вот что я хочу сделать:

  • Все контролируетсяиз сценария bash на хосте.
  • Есть гостевая виртуальная машина qemu, работающая на FreeBSD.
    Ответы, которые охватывают большее количество гостевых операционных систем, очевидно более ценны, но сейчас мне нужен только FreeBSD.
  • Иметь команду оболочки, которая загружает гостевую виртуальную машину, захватывает выходные данные терминала, пока не появится приглашение для входа в систему, а затем завершается.
    Виртуальная машина должна продолжать работать после завершения команды.
    Если процесс загрузки не достигаетПри входе в систему команда оболочки должна возвращать код ошибки.
    Осложнение: загрузчики Unixoid обычно показывают меню загрузки с таймером, который автоматически выбирает ядро ​​по умолчанию для загрузки.Я оставлю это отдельным ответам, как лучше всего с этим справиться - возможно, одной командой, а может, разделить команду на две части.Ответы, которые не просто ждут загрузочного меню, предпочтительнее, потому что это ускорит работу.
  • Имеет команду оболочки, которая вводит имя пользователя и пароль, ждет, пока не появится командная строка, и завершится.
  • Иметь команду оболочки, которая входит в командную строку, захватывает весь вывод до появления следующей командной строки и завершается.

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

Мне также нужны некоторые команды для интерактивного использования:

  • Что-то, что вводит полноэкранную команду гостю, передает ввод с клавиатуры на консоль гостя и передает всевывод гостевой консоли на хост-терминал.Таким образом, я могу использовать терминал для взаимодействия с консолью.
    Это помогает мне запускать сценарий, а затем проверять файлы гостевого журнала и т. Д.
  • Команда для принудительного завершения работы виртуальной машины.

Я уже определил множество инструментов, которые выглядят так, как будто они могут помочь, но я не слишком уверен, являются ли они действительно лучшими инструментами для работы или вообще подходят:

  • Запуск виртуальной машины в фоновом режиме, очевидно, легко с использованием суффикса &.
  • Я, вероятно, могу использовать expect для отслеживания выходного потока и обнаружения строки с надписью "Я вижу командную строку" и "Я вижуприглашение к входу в систему ".
  • Существует множество опций для перенаправления эмулированной виртуальной консоли qemu на терминал.Моя главная проблема со всем этим заключается в том, что я не знаю, какие из вариантов действительно применимы.
  • Я знаю, что qemu предлагает нечто, называемое «монитор», но я не знаю, что именно он делает.и применимо ли это.Я подозреваю, что он лучше всего подходит для интерактивного использования, но я не уверен, действительно ли это лучший вариант.
  • Изменение размера терминала, похоже, не работает в общем виде.Тем не менее, я рад, если интерактивная команда просто устанавливает соответствующие переменные среды перед запуском гостевой команды.

Не стесняйтесь просить разъяснений в комментариях;Я до сих пор выясняю, какие вопросы задавать.

...