Есть у одних моих клиентов хитрая программа, защита которой привязана к аппаратной части пк. Мы посадили эту программу на виртуальную машину virtualbox, а виртуалбокс установили на один из виндовых серверов. Все бы ничего, но при перезагрузке физического сервера приходилось логиниться на него, запускать виртуальную машину и оставлять все это добро работать в терминальной сессии. Неудобно.
Оказалось, что можно запросто организовать автоматический запуск виртуальных машин при загрузке сервера через VirtualboxVmService. Качаем программу отсюда http://sourceforge.net/projects/vboxvmservice/ Инсталлируем, чуть подправляем конфиг, перезагружаемся — и все работает (в идеале).
Нюанс: у нас установлен Virtualbox устаревшей версии. При попытке старта созданной программой службы мы получили в логе VBoxVmService.log сообщение:
Error creating VirtualBox instance! rc = 0x80004002
Погуглил. Наткнулся на предложение обновить версию VirtualboxVmService в соответствии с версией самого виртуалбокса. Догадался, что у нас с точностью до наоборот: для старой версии виртуалбокса нужен старый VirtualboxVmService. Скачал устаревшую версию и все заработало с полпинка!
Документация на VirtualboxVmService.
На всякий случай приведу перевод документации текущей версии 4.1
##############################################################################
#
# ЧАСТЬ 1 — SETUP
#
##############################################################################
Шаг 1.
Убедитесь что Virtualbox установлен и ваши виртуальные машины могут стартовать с помощью менеджера virtualbox без каких либо проблем. Выключите виртуальные машины и закройте VirtualBox Manager.
ВАЖНО: Если вы хотите управлять вашей виртуальной машиной с помощью VRDP, Включите поддержку удаленного монитора в настройках display settings и определите соответствующий порт для каждой виртуальной машины индивидуально (т.е 3010 для Vm0, 3020 для Vm1, и т.д). Не используйте для этих целей стандартный порт 3389!
Шаг 2.
Скачайте и распакуйте последний релиз VBoxVmService в c:\vms.
Шаг 3
Откройте VBoxVmService.ini в любом текстовом редакторе и отредактируйте под ваши нужды. Этот файл содержит пример установки с двумя виртуальными машинами.
Ключ / Значение Описание
——————————————————————————
[Settings]
ServiceName=VBoxVmService Имя службы
RunAsUser=DomainName\UserName Имя пользователя под которым сервис будет стартовать. Процесс службы залогинится под этим пользователем. Если пользователь принадлежит к встроенному домену (т.е локальный) вы должны определить как .\UserName.
UserPassword=xxxxxxxx ДОЛЖЕН БЫТЬ ОПРЕДЕЛЕН! УСТАНОВИТЕ INI ФАЙЛУ ДОСТУП НА ЧТЕНИЕ ТОЛЬКО ДЛЯ ВАС И СИСТЕМЫ
VBOX_USER_HOME=C:\Users\YOUR_NAME_HERE\.VirtualBox Путь к дирректории .VirtualBox для вашего профиля. Она обычно располагается в персональной папке пользователя.
RunWebService=no Стартовать или нет VBoxWebSrv.exe, VirtualBox HTTP веб сервер автоматически. Может быть «yes» или «no». Оставьте ее в «no» если вы не знаете что это.
PauseShutdown=5000 Параметр используется для замедления выключения компьютера чтобы предотвратить крах виртуальной машины при выключении или перезагрузке. (5000=5 секунд) Заметте что Windows имеет ограниченя как долго контроллер сервиса будет ждать когда система перезагрузится. Лимит времени определен в переменной WaitToKillServiceTimeout в следующей ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control. Ваше значение PauseShutdown не должно превышать это значение в реестре.
[Vm0]
VmName=ubuntu Имя для запуска VM (Чуствительно к регистру!)
ShutdownMethod=savestate Метод выключения («savestate», или «acpipowerbutton»). Когда используется «savestate», состояние машины сохраняется и может быть возобновлено когда она старует в следующий раз. Когда используется «acpipowerbutton» , VM просто выключится. Если ваша VM долго выключается рекомендуется использовать savestate, который завершает намного быстрее.
AutoStart=yes Будет или нет VM стартовать автоматически когда VBoxVmService работает. По умолчанию установлено в «yes».
[Vm1]
VmName=winxp Как в можете видеть значения ниже почти повторяются для каждой [VmX]-секции файла
ShutdownMethod=acpipowerbutton
AutoStart=no Эта VM не будет стартовать автоматически.
##############################################################################
#
# ЧАСТЬ II — INSTALLATION
#
##############################################################################
Шаг 1. (для WINXP / SERVER2003) Запустите CMD (Командная строка) из вашего старт меню.
Шаг 1. (для VISTA / SERVER2008 / WIN7) Кликните правой кнопкой мыши по CMD (командная строка) и выберете «Запуск от имени администратора» в контекстном меню.
Step 2. Инсталируйте сервис. В терминальном окне наберите:
cd C:\vms [ENTER]
VmServiceControl.exe -i [ENTER]
Шаг 3. Перезагрузите вашу систему.
Если все сделано правильно, вы сможете подключиться к вашей VM с помощью VRDP клиента (или ssh клиента, если вы сконфигурировали ssh сервер внутри вашей VM). Если нет то обратитесь к секции TROUBLESHOOTING которая расположена ниже для отладки.
##############################################################################
#
# ЧАСТЬ III — UNINSTALL
#
##############################################################################
Шаг 1. (для WINXP / SERVER2003) Запустите CMD (Командная строка) из вашего старт меню.
Шаг 1. (для VISTA / SERVER2008 / WIN7) Кликните правой мышкой по CMD (Командная строка) и выберете «Run as Administrator» из контекстного меню.
Шаг 2.[/b] Остановите VBoxVmService сервис. Внутри терминального окна наберите:
cd C:\vms [ENTER]
VmServiceControl.exe -k [ENTER]
Замечание: вы можете также остановить сервис из консоли управления компьютером.
Шаг 3. Удалите сервис . продолжайте в терминальном окне набирать:
VmServiceControl.exe -u [ENTER]
Шаг 4. Удалите директорию с программой(В этом примере «c:\vms»).
Шаг 5. Вы удалили VBoxVmService из вашей системы.
##############################################################################
#
# ЧАСТЬ IV — TROUBLESHOOTING
#
##############################################################################
Если сервис не поднимает вашу VM как вы хотите, попробуйте следующее:
Осторожно перепроверьте настройки которые вы сделали в «VBoxVmService.ini».
Уменьшите количество ваших виртуальных машин до одной (= только [Settings] и секция [Vm0] в вашем ini файле) в вашем ini файле , для отладки
Переключитесь в командную строку, cd в VBoxVmService директорию и наберите:
VmServiceControl.exe -su 0 [ENTER]
чтобы поднять VM которую вы определили в секции [Vm0] файла «VBoxVmService.ini».
Если вы успешно подняли VM, вы увидите в диспетчере задач запущенный процесс «VBoxHeadless.exe» под определенным пользователем
Комманда:
VmServiceControl.exe -sd 0 [ENTER]
может быть использована для проверки вывода во время падения процесса[Vm0]. После этого, не должно быть запущенного «VBoxHeadless.exe» процесса. В дополнении, вы должны увидеть то что процесс «VBoxSVC.exe» завершится в скором времени после успешного завершения «VBoxHeadless.exe».
И команда:
VmServiceControl.exe -st 0 [ENTER]
может быть использована для проверки статуса целевой VM [Vm0].
Читайте лог файл!
Если вы видите «Could not find a registered machine named…», проверьте переменную среды VBOX_USER_HOME которая должна быть корректно установлена.
Если вы сделали ошибку в VBOX_USER_HOME, какбы то ни было, исправление ее в VBoxVmService.ini не достаточно. Потому что значения были записаны в переменные среды во время инсталляции. Вы должны открыть Панель управления->Система->Расширенные настройки системы->Дополнительно-Переменные среды, и пофиксить их здесь. Пожалуйста также убедитесь что VBOX_USER_HOMЕ установлена как системная переменная, а не как пользовательская.
После установки и каждый раз когда вы изменяете VBOX_USER_HOME, требеется перезагрузка системы для того чтобы VBoxVmService работал корректно.
Если проблема не устранена, опишите ее здесь на форуме, может кто и поможет.
Огромное спасибо за статью! Всё завелось без проблем.
Пожалуйста! Нахожу решения сам и делюсь с другими, чего и Вам желаю. Нашел сам — помоги коллеге!
Если статья оказалась полезной — поставьте на нее ссылочку где-нибудь у себя в блоге или контакте ;-)
все процессы работают в системе (Win server 2008r2) в трее значок показывает что гостевая ос запущена (WinXP), но сама гостевая ос не отображается на экране.
Так и должно быть: мы же запускаем его в режиме службы, чтобы все работало и не мешалось. Виртуалка крутится, а чтобы увидеть рабочий стол нужно прицепиться к ней через RDP.
Приветствую!
Windows server 2008 R2.
Все делаю по инструкции.
В ответ на команду VmServiceControl.exe — дает Крокозябру.
В ответ на команду VmServiceControl.exe -su 0 дает «Could not find a registered machine named…»
Но путь в параметре VBOX_USER_HOME указан верно.
Панель управления->Система->Расширенные настройки системы->Дополнительно-Переменные среды — Здесь тоже значение переменной верно.
Как быть в этой ситуации?
я перенес папку настроек VirtualBox в папку с простым путём без пробелов и кирилицы — типа C:\vbox\.VirtualBox и после ребута всё заработало
зы. юзаю сабжи версии 5
привет, подскажи как ты пренастроил путь к этой папке, гденемогу найти что и как
привет, подскажи как ее перенести, не могу найти что и как :(
Всё работало до тех пор, пока мне не понадобилась вторая виртуалка.
Сделал две отдельные службы для двух машин.
Работает с одним косяком. При загрузке хоста одна машина поднимается, вторая нет. Захожу на хост и перезапускаю службу второй машины, после чего и она запускается.
Есть решение? Например паузу куда-нибудь прописать при запуске?
Вроде у меня есть сервер с двумя виртуальными машинами. Посмотрю в понедельник, как там все устроено и расскажу в деталях.
попровьте ссылку на VBoxVmService — https://sourceforge.net/projects/vboxvmservice/
за статью большое спасибо, и кстати параметр
RunWebService=no
крайне полезная вещь! добавив к нему phpVirtualBox — https://sourceforge.net/projects/phpvirtualbox/
получаем удобнейшее управление виртуалками через браузер — хоть с мобилы =)))
исправьте плиз RunWebService=no на RunWebService =))) поторопился =)))
да, блин, рано радовался — всё запустилось, но состояние работы виртуалок нигде не видно — ни в GUI (об этом честно предупреждают в гайде), ни даже (что самое обидное) в веб-консоли (phpvirtualbox)… phpvirtualbox к службе подключается, и показывается всё, кроме того, что виртуалки запущены… пичалька… будет рыть дальше…
кароче нарыл — надо, чтоб служба VboxVmService запускалась с юзерским аккаунтом, кстати, через ini-файл это не сработало, видать для 5-й версии убрали эти параметры, с чем я согласен — это несекурно, держать пасс в простом тексте… так что из консоли windows меняем запуск службы с системного, на юзерские и вуаля — всё запускает хедлесом и рулиццо из веб-морды! кайф!
Спасибо большое! В пятой версии в конфиге нужно поправить только имя виртуальной машины и все.
Народ, может я чего не понял в сути вопроса, но я просто создаю ярлык виртуальной машины и ставлю ярлык в автозапуск.
Добрый день!
Сделал запуск через службу, все работает!
Только, как сделать запуск ОС с автоматическим подключенным USB — устройством (в моем случаи eToken) .
При запуске ОС виде службы, я воздействовать не могу на виртуальную машину(подключить USB-устройства), как быть?
У меня проблема.
Если система запущена из VBox, то по RDP подключается. Порт в настройках стоит 5001.
А если система запущена через службу VBoxVmService, то по RDP подлючается только с локального ПК, с удаленных отказывается.
Настройки VBoxVmService такие:
[Settings]
VBOX_USER_HOME=C:\Users\user\.VirtualBox
RunWebService=no
PauseShutdown=5000
[Vm0]
VmName=Microsoft Windows 10 Pro 14393.103 x86 PIP
ShutdownMethod=savestate
AutoStart=yes
VrdpPort=5001
PauseShutdown=5000
Настроил rdp машины на 3010 порт (пробовал и на 5001).
Если вм запущена из vbox, то по rdp можно подключиться и с локального пк и с удаленного. А если вм работает через VirtualboxVmService, то с локального пк подключается, а с удаленного нет.
не подскажете как быть? вроде все перепробовал
Установил все по тексту. Но запускается автоматом только одна машина из 5. Притом, что все параметры одинаковые. Уже голову сломал. Везде автостарт =yes
На W2008R2 — все ок. На w2012R2 — такая проблема. В логе просто пишет — vm… — is powered off
Перестало работать на версии 6.ххх Virtualbox
Да, перестало