У меня проблемы с определением наиболее подходящего подхода для моего варианта использования из множества вариантов, которые предлагает qemu.
Вот что я хочу сделать:
- Все контролируетсяиз сценария bash на хосте.
- Есть гостевая виртуальная машина qemu, работающая на FreeBSD.
Ответы, которые охватывают большее количество гостевых операционных систем, очевидно более ценны, но сейчас мне нужен только FreeBSD. - Иметь команду оболочки, которая загружает гостевую виртуальную машину, захватывает выходные данные терминала, пока не появится приглашение для входа в систему, а затем завершается.
Виртуальная машина должна продолжать работать после завершения команды.
Если процесс загрузки не достигаетПри входе в систему команда оболочки должна возвращать код ошибки.
Осложнение: загрузчики Unixoid обычно показывают меню загрузки с таймером, который автоматически выбирает ядро по умолчанию для загрузки.Я оставлю это отдельным ответам, как лучше всего с этим справиться - возможно, одной командой, а может, разделить команду на две части.Ответы, которые не просто ждут загрузочного меню, предпочтительнее, потому что это ускорит работу. - Имеет команду оболочки, которая вводит имя пользователя и пароль, ждет, пока не появится командная строка, и завершится.
- Иметь команду оболочки, которая входит в командную строку, захватывает весь вывод до появления следующей командной строки и завершается.
Никакая команда не должна завершать ВМ, кроме случаев отправки гостю команды выключенияв командной строке.
Мне также нужны некоторые команды для интерактивного использования:
- Что-то, что вводит полноэкранную команду гостю, передает ввод с клавиатуры на консоль гостя и передает всевывод гостевой консоли на хост-терминал.Таким образом, я могу использовать терминал для взаимодействия с консолью.
Это помогает мне запускать сценарий, а затем проверять файлы гостевого журнала и т. Д. - Команда для принудительного завершения работы виртуальной машины.
Я уже определил множество инструментов, которые выглядят так, как будто они могут помочь, но я не слишком уверен, являются ли они действительно лучшими инструментами для работы или вообще подходят:
- Запуск виртуальной машины в фоновом режиме, очевидно, легко с использованием суффикса
&
. - Я, вероятно, могу использовать
expect
для отслеживания выходного потока и обнаружения строки с надписью "Я вижу командную строку" и "Я вижуприглашение к входу в систему ". - Существует множество опций для перенаправления эмулированной виртуальной консоли qemu на терминал.Моя главная проблема со всем этим заключается в том, что я не знаю, какие из вариантов действительно применимы.
- Я знаю, что qemu предлагает нечто, называемое «монитор», но я не знаю, что именно он делает.и применимо ли это.Я подозреваю, что он лучше всего подходит для интерактивного использования, но я не уверен, действительно ли это лучший вариант.
- Изменение размера терминала, похоже, не работает в общем виде.Тем не менее, я рад, если интерактивная команда просто устанавливает соответствующие переменные среды перед запуском гостевой команды.
Не стесняйтесь просить разъяснений в комментариях;Я до сих пор выясняю, какие вопросы задавать.