Как запустить VM на начальной загрузке и завершение работы на остановке VM?

Длинная короткая история...

Я должен был установить маленькое приложение для сервера, работающее в VM на одном из ПК этой компании. Оба компьютера выполняют Windows XP (с унаследованными программными обеспечениями, таким образом обновление не возможно), и покупка дополнительного ПК ограничена в данный момент. Так, я преобразовал Windows хоста на одном из них в VM и установил Lubuntu. Затем импортированный приложение для сервера и все хорошо работают; все почти очевидно для пользователя, за исключением запуска и подстрелило процессы.

Проблема

Я задавался вопросом, как я мог запустить обоих VMs на запуске хоста, затем завершить работу ПК когда выстрелы Windows XP VM вниз? Прямо сейчас рабочие делают это вручную, но я хотел бы автоматизировать этот процесс.

Требования

  1. Lubuntu нужно настроить пользователя для входа в систему на запуске-> сделанный!
  2. Приложение для сервера VM должно запуститься при входе в систему-> не уверенный
  3. VM Windows XP должен запуститься при входе в систему-> не уверенный
  4. Приложение для сервера VM должен сохранить состояние и быть закрыт автоматически, когда машина Windows XP завершается->, не знают
  5. Lubuntu должен завершить работу, когда все VM приостанавливаются/закрываются.-> не знают

Система работает на Lubuntu 14.04 с VirtualBox 4.3.x.

4
задан 10 November 2014 в 18:55

3 ответа

Вы могли настроить сценарий Init.d/Systemd как этот:

#! /bin/sh
# /etc/init.d/vbox

#Edit these variables! VMUSER=VMAdmin VMNAME="cdb62186-7c30-4c25-a0b0-e4a32cfb0504" BASEFOLDER=/home/VMAdmin/path/to/backups/

case "$1" in
    start)
        echo "Starting VirtualBox VM..."
        sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
        ;;
    reset)
        echo "Resetting VirtualBox VM..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
        ;;
    stop)
        echo "Saving state of Virtualbox VM..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
        ;;
    shutdown)
        echo "Shutting down Virtualbox VM..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
        ;;
    status)
        sudo -H -u $VMUSER VBoxManage list vms -l | grep -e ^"$VMNAME": -e ^State | sed s/\ \ //g | cut -d: -f2-
        ;;
    backup)
        echo ""
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton

        echo "Waiting for VM "$VMNAME" to poweroff..."
        until $(sudo -H -u $VMUSER VBoxManage showvminfo --machinereadable "$VMNAME" | grep -q ^VMState=.poweroff.)
        do
          sleep 1
        done

        FILENAME=$(date +"%Y_%m_%d-%T")
        echo "Backing up Virtualbox VM to '$BASEFOLDER$FILENAME'..."
        sudo -H -u $VMUSER VBoxManage clonevm "$VMNAME" --options keepallmacs --name $FILENAME --basefolder $BASEFOLDER

        echo "Restarting VirtualBox VM..."
        sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
        echo ""
        ;;
    *)
        echo "Usage: sudo service vbox {start|stop|status|shutdown|reset|backup}"
        exit 1
        ;; esac

exit 0

Обратите внимание на то, что я получил тот сценарий отсюда: https://superuser.com/questions/789653/init-d-control-script-for-virtualbox-vm

проверьте команды в до установки сценария, затем протестируйте каждую функциональность. Необходимо будет поместить его в/etc/init.d каталог и работать chmod +x на нем, чтобы заставить его работать. Тогда пройдите и протестируйте функциональность его. После того, как удовлетворенный, выполненный:

sudo update-rc.d vbox defaults 99 01

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

3
ответ дан 17 November 2019 в 13:54

Я пошел бы с комбинацией крон задание и использование vboxmanage с помощью сценариев удара.

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

сценарий должен посмотреть что-то как:

#!/bin/bash

vboxmanage startvm "Server App VM name"
vboxmanage startvm "Windows XP VM name"
crontab ~/check_vms_and_shutdown_job.txt

Скажем, мы сохраняем его как start_vms_and_cronjob.sh. Помните к chmod +x это, таким образом, это может быть на самом деле выполнено.

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

*/5 * * * * ~/check_vms_and_shutdown.sh

Этот файл должен иметь новую строку в конце строки (нажмите Enter перед сохранением;)), Что делает этот файл, то, что он описывает задание крона, которое выполняется каждые 5 минут, и он выполняет сценарий удара.

Теперь, что такое этот check_vms_and_shutdown.sh сценарий, который Вы могли бы спросить? Ну, вот самое главное. Это должно сказать:

#!/bin/bash

if vboxmanage list runningvms | grep "Windows XP VM name"
then
    echo "Windows XP still running."
else
    echo "Windows XP shut down. Shutting down the rest."
    vboxmanage controlvm "Server App VM name" savestate
    crontab -r 
    shutdown -h now
fi

Теперь, что это делает, который это проверит, существует ли выполнение виртуальной машины XP. Если это не будет, это тогда прикажет, чтобы виртуальная машина приложений сервера сохранила, это - состояние. После этого cronjob будет удален и системное закрытие. Помните к chmod +x, и здесь мы также поместили файл в домашнюю папку пользователя.

Для удобства и лучшего использования на цели Вы могли бы также хотеть выполнить virtualboxes , бездисплейный и иметь их использование быть сделанными через удаленный дисплей.

Теперь добавляют start_vms_and_cronjob.sh в Ваши приложения запуска, и Вы должны быть установлены.

Поэтому, что мы имеем, вот:

  • , Когда система запускается, виртуальные машины запущены сценарием оболочки, и новое задание крона (выполняющий сценарий оболочки) создается из txt файла правила задания крона.
  • За каждые 5 минут прогоны задания крона сценарий, который проверяет, работает ли виртуальная машина XP все еще и если не это сохранит другую виртуальную машину, удалит задание крона и завершит работу системы.

Hope это помогает Вам настроить, в чем Вы нуждаетесь.

3
ответ дан 17 November 2019 в 13:54

Это шаги для достижения обрисованных в общих чертах задач. Гостя VM с серверным приложением назовут "ServerApp", машиной Windows "WindowsXP" ниже. Замените их их настоящими именами.

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

  1. Создают пользователя для выполнения виртуальной машины.
  2. Установка гостевые дополнения к гостю
  3. Переключатель к полному экрану с Хост + F при выполнении VM.
  4. Определяют пользовательскую сессию Lubuntu на хосте:

    • Создают файл в /usr/share/xsessions и называют его, например, WindowsVM.desktop со следующим содержанием:

      [Desktop Entry]
      Name=WindowsXP # or any other sensible name
      Comment=Custom Xsession running a VM 
      Exec=/etc/X11/Xsession
      
    • Делают этот исполняемый файл файла. Эта сессия будет звонить ~/.xsession на входе в систему.

  5. Создают исполняемый сценарий запуска сессии, названный ~/.xsession в ДОМЕ вышеупомянутого пользователя:

    #! /bin/bash
    
    /usr/bin/lxsession -s Lubuntu LXDE &
    VBoxManage startvm "ServerApp" --type headless
    VBoxManage startvm "WindowsXP"
    VBoxManage guestproperty set RUNNING 1 --flags TRANSIENT
    VBoxManage guestproperty wait "WindowsXP" RUNNING
    VBoxManage controlvm "SeverApp" savestate
    dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
    
  6. Выбирают пользовательскую сессию в 4. на входе в систему.

хитрый бит должен получить гостевое свойство RUNNING (или любое другое имя, которое мы выбираем), удаленный из виртуальной машины, поскольку это не является таким образом переходным, как спецификации предлагают. К сожалению, это переживет завершение работы/выключение питания виртуальной машины.

Мы поэтому должны добавить следующую команду с помощью VBoxcontrol.exe (установленный с гостевыми дополнениями) к гостевому Windows в конце его стандартной программы завершения работы (или из сценария завершения работы мы помещаем там):

VBoxControl.exe guestproperty set RUNNING

Это тогда завершится эти wait состояние для продолжения сохранение "ServerAPP" тогда выключения питания хост.

альтернатива этому запуск Приложения Windows на госте для ожидания этого приложения для завершения, прежде чем мы завершим работу машин и выключения питания хост. Тогда мы заменили бы два set guestproperty команды в сценарии строкой, подобной этому:

VBoxManage --nologo guestcontrol "WindowsXP" execute --image "C:\\full\\path\\to\\program.exe" --username <windowsuser> --password <password> --wait-exit --wait-stdout

Видят Руководство VirtualBox для ограничений, и для получения дальнейшей информации о том, как настроить это для учетной записи passwordless в Windows.

<час>

Команды сценария на шаге 5. объясненный:

  • /usr/bin/lxsession -s Lubuntu LXDE
    запускает сессию Lubuntu (замена любым другим настроила Xsession если применимо)

  • VBoxManage startvm "ServerApp --type headless"
    , запускает виртуальную машину, запускающую Приложение для сервера в бездисплейном режиме (т.е. никакой дисплей)

  • VBoxManage startvm "WindowsXP"
    запускает виртуальную машину, запускающую Windows (полный экран или любое другое разрешение, как определено на последнем выполнении)

  • VBoxManage guestproperty set "WindowsXP" RUNNING 1 --flags TRANSIENT
    наборы свойство RUNNING для машины Windows, которой можно управлять от гостя, ОС

  • VBoxManage guestproperty wait "WindowsXP" RUNNING
    ожидает свойства RUNNING, которое будет удалено из гостевого Windows

  • VBoxManage controlvm "SeverApp" savestate
    , завершает Приложение для сервера, VM в savestate

  • dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" \
    /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
    завершает хост Lubuntu (состояние выключения питания) без взаимодействия с пользователем.

3
ответ дан 17 November 2019 в 13:54

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

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