В прошлой статье мы разобрали как устанавливать VirtualBox
в CentOS. В этой разберем как сделать автостарт созданных виртуальных
машин вместе со стартом операционной системы CentOS. Это может оказаться
полезным, если произошла перезагрузка сервера в момент когда вас нет на
месте и вы вручную не имеете возможности их запустить. Мне это
требуется именно по этому, мой сервер по ряду причин должен
перезагружаться раз в неделю, так как мне лень это делать самому, я
написал скрипт, и каждое воскресенье в 12 ночи сервер сам
перезагружается. Ну и чтобы в понедельник в ручную не мне не запускать
все виртуалки я реализовал автостарт виртуальных машин.
А сделал я это следующим образом:
Если вы создавали отдельно пользователя
для управления виртуальных машин, как это сделал я, то первое что надо
сделать это зайти в систему именно под его учетной записью. (Хочу
обратить внимание что для работы скрипта автозапуска виртуальных машин
пользователь должен не иметь пароля.)
Теперь создадим виртуальную машину допустим с Windows XP. (Важно
создавать виртуальную машину, именно от пользователя для которого будим
делать автостарт). Ну представим что создали, установили на нее XP,
настроили там все как нам требуется, не забыли в Windows разрешить
удаленное подключение к раб столу, чтобы было удобно в дальнейшем ее
администрировать. Теперь нам необходимо реализовать автостарт этой
виртуальной машины, делать мы это будим так:
Запускаем терминал, и заходи в него с правами администратора:
Далее создаем файл скрипт запуска виртуальной машины в /etc/init.d/
1. # touch /etc/init.d/vmsctrl
Далее изменяем права на доступ к файлу чтобы каждый пользователь мог его читать и запускать на выполнение:
1. # chmod 755 /etc/init.d/vmsctrl
Теперь скопируем в файл vmsctrl код автозвапуска виртуальных машин. Для этого откроем его в текстовом редакторе:
1. # gedit /etc/init.d/vmsctrl
Скопируем и сохраним в нем следующий код не забыв заменить в строке NAME= «vbadmin» имя пользователя vbadmin на имя вашего пользователя виртуальной машиной:
#!/bin/bash
######################################################################################
## Script for automatic control over VirtualBox virtual machines
## Copyright (C) 2012 Almir Dzinovic <almir@dzinovic.net>
## Error correction CrazySysAdmin
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 3 of the License, or (at your option) any later version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
##
## Get the full text of the GPL here: http://www.gnu.org/licenses/gpl.txt
######################################################################################
### BEGIN INIT INFO
# Provides: VBox VMs Control
# Required-Start: $local_fs $network $syslog
# Required-Stop:
# Default-Start: 2 3 5
# Default-Stop: 0 6
# Short-Description: Starts or stops VirtualBox VMs
# Description: Starts or stops VirtualBox virtual machines
### END INIT INFO
# vmsctrl Starts or stops VirtualBox VMs.
#
# chkconfig: 235 99 05
# description: Starts or stops VirtualBox virtual machines.
# config: /etc/default/vmsctrl.conf
. /lib/lsb/init-functions
DESC="VirtualBox VMs control script"
NAME="vbadmin"
. /etc/default/virtualbox
VMACHINES=$(su - "$NAME" -c "vboxmanage list vms | awk '{ print \$NF }' | sed -e 's/[{}]//g'")
case "$1" in
start)
echo -n $"Starting virtual machines "
# Starting virtual machines
for i in $VMACHINES
do
su - "$NAME" -c "vboxmanage startvm $i --type headless &> /dev/null"
done
[ $? -eq 0 ] && log_success_msg || \
log_failure_msg
;;
stop)
echo -n $"Powering off virtual machines "
# Powering off virtual machines
for i in $VMACHINES
do
su - "$NAME" -c "vboxmanage controlvm $i poweroff &> /dev/null"
done
[ $? -eq 0 ] && log_success_msg || \
log_failure_msg
;;
restart)
echo -n $"Power cycling virtual machines "
# Power cycling virtual machines
for i in $VMACHINES
do
su - "$NAME" -c "vboxmanage controlvm $i reset &> /dev/null"
done
[ $? -eq 0 ] && log_success_msg || \
log_failure_msg
;;
*)
echo $"Usage: "$0" {start|stop|restart}"
exit 1
;;
esac
exit $?
Теперь создадим соответствующую службу для запуска:
1. # chkconfig --add vmsctrl
Проверим работоспособность скрипта:
1. # /etc/init.d/vmsctrl start
Результатом выполнения команды должен стать успешный запуск
виртуальной машины с Windows XP. Если не стартует, то стоит проверить
существует ли в системе вообще какие либо зарегистрированные виртуальные
машины (Команду необходимо выполнять от имени пользователя виртуальной
машины):
Если результатом выполнения команды окажется пустота, то
соответственной зарегистрированных виртуальных машин нет, и вы где то,
что то, накасячили… Так что, если что пишите в коменты.
Осталось самое малое, скрыть пользователя виртуальных машин,
что бы он не отображался при старте системы. (Не обязательно делать, но
желательно, в основном из за того что эта учетка без пароля) Делается
это командой:
1. # usermod -u 999 vbadmin
На этом все, за сим я откланиваюсь.
P.S.
Команд по управлению скриптом всего 3, объяснять что они делают я думаю не требуется:
1. # /etc/init.d/vmsctrl start
2. # /etc/init.d/vmsctrl stop
3. # /etc/init.d/vmsctrl restart
|