rc.d скрипт автозапуска Virtualbox для FreeBSD

VirtualBox, QEMU, ESX/ESXi и прочия
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
nemchin
проходил мимо
Сообщения: 5
Зарегистрирован: 2010-02-22 16:04:40

rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение nemchin » 2010-10-24 22:18:50

Предлагаю всем кто использует в хозяйстве Virtualbox поделиться своим вариантом скрипта автозапуска/автоостановки. Мой вариант ниже.

/usr/local/etc/rc.d/vms:

Код: Выделить всё

#!/bin/sh

. /etc/rc.subr
BASEDIR="/usr/local/bin/"
USER="vbox_user"
name="vms"
start_cmd="${name}_start"
stop_cmd="${name}_stop"

vms_start()
{
   if [ -x ${BASEDIR}/VBoxManage ]; then
     echo "Starting virtual machines..."
     su -l ${USER} -c "${BASEDIR}/VBoxManage startvm JUPITER --type headless" >/dev/null 2>&1
     su -l ${USER} -c "${BASEDIR}/VBoxManage startvm PLUTO --type headless" >/dev/null 2>&1
   fi
}

vms_stop()
{
   if [ -x ${BASEDIR}/VBoxManage ]; then
    echo "Saving virtual machines state..."
    su -l ${USER} -c "${BASEDIR}/VBoxManage controlvm JUPITER savestate" >/dev/null 2>&1
    su -l ${USER} -c "${BASEDIR}/VBoxManage controlvm PLUTO savestate" >/dev/null 2>&1
   fi
}

load_rc_config $name
run_rc_command "$1"
+ не забыть добавить строку в /etc/rc.conf

Код: Выделить всё

...
vms_enable="YES"

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение Alex Keda » 2010-10-24 22:22:30

неуниверсально....
Убей их всех! Бог потом рассортирует...

Аватара пользователя
nemchin
проходил мимо
Сообщения: 5
Зарегистрирован: 2010-02-22 16:04:40

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение nemchin » 2010-10-25 22:43:15

Alex Keda писал(а):неуниверсально....
согласен :-)
Есть десяток путей автоматизации и жизнеоблегченья...
Но, главное, что делает скрипт - не даёт guest-машинам "упасть" при внезапном host-system shutdown.

Обновление моего скрипта /etc/rc.d/vms:

Код: Выделить всё

#!/bin/sh

# PROVIDE: vms
# REQUIRE: vboxnet
# KEYWORD: shutdown

. /etc/rc.subr
BASEDIR="/usr/local/bin/"
USER="vbox_user"
name="vms"
rcvar=${name}_enable
start_cmd="${name}_start"
stop_cmd="${name}_stop"

vms_start()
{
   if [ -x ${BASEDIR}/VBoxManage ]; then
     echo "Starting virtual machines..."
     su -l ${USER} -c "${BASEDIR}/VBoxManage startvm JUPITER --type headless" >/dev/null 2>&1
         sleep 15
         su -l ${USER} -c "${BASEDIR}/VBoxManage startvm PLUTO --type headless" >/dev/null 2>&1
   fi
}

vms_stop()
{
   if [ -x ${BASEDIR}/VBoxManage ]; then
        echo "Saving virtual machines state..."
        su -l ${USER} -c "${BASEDIR}/VBoxManage controlvm JUPITER savestate" >/dev/null 2>&1
        su -l ${USER} -c "${BASEDIR}/VBoxManage controlvm PLUTO savestate" >/dev/null 2>&1
   fi
}

load_rc_config $name
: ${vms_enable="NO"}
run_rc_command "$1"

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение hizel » 2010-10-25 22:57:24

see man rc.subr, Luke
${name}_user
User to run command as, using chroot(8). if
${name}_chroot is set, otherwise uses su(1). Only
supported after /usr is mounted.
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
gloom
лейтенант
Сообщения: 738
Зарегистрирован: 2008-03-13 16:29:12
Откуда: UA

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение gloom » 2010-10-26 0:15:14

тоже не универсальный
сделал только то что было надо прямо сейчас
#!/bin/sh
# PROVIDE: vbox
# REQUIRE: LOGIN NETWORKING SERVERS
# KEYWORD: shutdown

. /etc/rc.subr

name="vbox"
rcvar=`set_rcvar`

load_rc_config $name

: ${vbox_enable="NO"}
: ${vbox_user=""}
: ${vbox_virtual=""}

pidfile="/var/run/${name}.pid"
command="/usr/local/bin/VBoxManage"

start_cmd()
{
VPID=`ps -U ${vbox_user} |grep VBoxHeadless |grep ${vbox_virtual} |awk '{print $1}'`
if [ "$VPID" = "" ] ; then
echo "Starting vboxwebsrv..."
su -l ${vbox_user} -c "VBoxManage startvm --type headless ${vbox_virtual}"
echo $VPID > ${pidfile}
echo "Done."
else
echo "no start have runing service pid $VPID "
fi
}

stop_cmd()
{
VPID=`ps -U ${vbox_user} |grep VBoxHeadless |grep ${vbox_virtual} |awk '{print $1}'`
if [ "$VPID" != "" ] ; then
echo "stop vbox..."
su -l ${vbox_user} -c "VBoxManage controlvm ${vbox_virtual} acpipowerbutton"
rm -f ${pidfile}
echo "Done."
else
echo "No runing service"
fi
}

status_cmd()
{
su vb -c "VBoxManage list runningvms | grep ${vbox_virtual}"
VPID=`ps -U ${vbox_user} |grep VBoxHeadless |grep ${vbox_virtual} |awk '{print $1}'`
if [ "$VPID" != "" ] ; then
echo Service runing pid $VPID
ps axu -U ${vbox_user} |grep VBoxHeadless |grep ${vbox_virtual} |awk '{print "pid:"$2" ""%CPU:" $3" ""memMB:"$6 }'
else
echo "No runing service"
fi
}


start_cmd="start_cmd"
stop_cmd="stop_cmd"
status_cmd="status_cmd"

run_rc_command "$1"

Аватара пользователя
nemchin
проходил мимо
Сообщения: 5
Зарегистрирован: 2010-02-22 16:04:40

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение nemchin » 2010-10-26 11:04:46

gloom писал(а):su -l ${vbox_user} -c "VBoxManage controlvm ${vbox_virtual} acpipowerbutton"
Спасибо за ваш вариант!

Кстати, насчёт acpipowerbutton: на мой взгляд, уместнее savestate.
Объясню: acpipowerbutton посылает сигнал и тут же возвращается в shell. Почти 100%, что guest-машина не успеет корректно выключиться в процессе host-shutdown.
Этим я хочу сказать, что делать rc-скрипт просто чтобы заменить VBoxManage бессмысленно.
Гораздо важнее, например, корректное засыпание (завершение) guest-машин при почти полной разрядке UPS-a.

Аватара пользователя
gloom
лейтенант
Сообщения: 738
Зарегистрирован: 2008-03-13 16:29:12
Откуда: UA

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение gloom » 2010-10-26 13:01:04

ка-то не подумал насчет savestate...

надо будет как-то доделать скрипт для множества виртуалок

Костян
проходил мимо

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение Костян » 2011-06-12 18:54:49

Немного переделал скриптик.... Но вот беда- перестала определяться переменная VPID.

Код: Выделить всё

#!/bin/sh
# PROVIDE: vbox
# REQUIRE: LOGIN NETWORKING SERVERS
# KEYWORD: shutdown

. /etc/rc.subr

name="vbox"
rcvar=`set_rcvar`

load_rc_config $name

: ${vbox_enable="NO"}
: ${vbox_user="root"}
: ${vbox_virtual=""}

pidfile="/var/run/${name}.pid"
command="/usr/local/bin/VBoxManage"

start_cmd()
{
$command list vms | awk '{print $1}' > /usr/local/etc/vbox/vmlist
VMNUM=`cat /usr/local/etc/vbox/vmlist | wc -l`
n=1

while [ $n -le $VMNUM ]
do
VMNAME=`cat -n /usr/local/etc/vbox/vmlist | grep $n | awk '{print $2}'`
VPID=`ps -U ${vbox_user} | grep VBoxHeadless | grep $VMNAME | awk '{print $1}'`
echo ">$VPID<"
        if [ "$VPID" = "" ] ; then
                echo "Starting $VMNAME"
                su -l ${vbox_user} -c "$command startvm --type headless $VMNAME"
                echo $VPID > "/var/run/$VMNAME.pid"
                echo "Done. $VMNAME"
        else
                echo "VM $VMNAME already runs "
        fi
        n=`expr $n + 1`
done

}

stop_cmd()
{
$command list runningvms | awk '{print $1}' > /usr/local/etc/vbox/vmlist
VMNUM=`cat /usr/local/etc/vbox/vmlist | wc -l`
n=1

while [ $n -le $VMNUM ]
do
        VMNAME=`cat -n /usr/local/etc/vbox/vmlist | grep $n | awk '{print $2}'`
        VPID=`ps -U ${vbox_user} |grep VBoxHeadless |grep $VMNAME |awk '{print $1}'`
        echo "$VMNAME $VPID ${vbox_user} $1"
        if [ "$VPID" != "" ] ; then
                echo "stopping $VMNAME"
                su -l ${vbox_user} -c "$command controlvm $VMNAME poweroff"
                rm -f "/var/run/$VMNAME.pid"
                echo "Done. $VMNAME"
        else
                echo "No runing service"
        fi
        n=`expr $n + 1`
done
}

status_cmd()
{
su vb -c "VBoxManage list runningvms | grep ${vbox_virtual}"
VPID=`ps -U ${vbox_user} |grep VBoxHeadless |grep ${vbox_virtual} |awk '{print $1}'`
if [ "$VPID" != "" ] ; then
        echo Service runing pid $VPID
        ps axu -U ${vbox_user} |grep VBoxHeadless |grep ${vbox_virtual} |awk '{print "pid:"$2" ""%CPU:" $3" ""memMB:"$6 }'
else
        echo "No runing service"
fi
}


start_cmd="start_cmd"
stop_cmd="stop_cmd"
status_cmd="status_cmd"

run_rc_command "$1"


З.Ы.: сильно плиз не кричите... это мой первый опыт... :)

Аватара пользователя
dekloper
ст. лейтенант
Сообщения: 1331
Зарегистрирован: 2008-02-24 15:43:19
Откуда: давно здесь сидим..
Контактная информация:

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение dekloper » 2011-06-13 15:16:40

nemchin писал(а): Кстати, насчёт acpipowerbutton: на мой взгляд, уместнее savestate.
Объясню: acpipowerbutton посылает сигнал
кстати, да, иной "гость" может просто покласть на этот сигнал (если это КД, к примеру, или политики там внутре хитрые могут быть..)
ТОВАгИЩИ! БгАТЬЯ И СЕСТгЫ! ДОЛОЙ гАВНОДУШИЕ!

Аватара пользователя
EARL
мл. сержант
Сообщения: 85
Зарегистрирован: 2010-05-24 9:05:18
Откуда: Тамбов

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение EARL » 2011-08-11 22:08:36

Мой скрипт автозапуска virtualbox

Код: Выделить всё

#!/bin/sh
#
# PROVIDE: vbox
# REQUIRE: DAEMON
#

. /etc/rc.subr

name="vbox"
rcvar=${name}_enable

load_rc_config $name
: ${name}_enable="NO"
: ${name}_user=""
: ${name}_virtual=""

BASEDIR="/usr/local/bin/"
pidfile="/var/run/${name}.pid"

start_cmd=vbox_start
stop_cmd=vbox_stop

vbox_start()
{
    echo "Starting vbox machines..."
    for vbox in $(eval echo \${${name}_virtual});
    do
        user=$(eval echo \${${name}_user})
        pid=`ps -U ${user} | grep VBoxHeadless | grep ${vbox} | awk '{ print $1; }'`
        if [ "$pid" = "" ]; then
            echo "Starting $vbox..."
            if [ $(eval echo \${${name}_${vbox}_vnc}) = "YES" ]; then
                port=$(eval echo \${${name}_${vbox}_vncport})
                pass=$(eval echo \${${name}_${vbox}_vncpass})
                su -l $(eval echo \${${name}_user}) -c "${BASEDIR}/VBoxHeadless --startvm $vbox --vnc --vncport $port --vncpass $pass > /dev/null 2>&1 &"
            else
                su -l $(eval echo \${${name}_user}) -c "${BASEDIR}/VBoxManage startvm $vbox --type headless > /dev/null 2>&1"
            fi
        else
            echo "$vbox already running? (PID=$pid)."
        fi
    done
}

vbox_stop()
{
    echo "Stopping vbox machines..."
    for vbox in $(eval echo \${${name}_virtual});
    do
        echo "Stopping $vbox...";
        su -l $(eval echo \${${name}_user}) -c "${BASEDIR}/VBoxManage controlvm $vbox savestate > /dev/null 2>&1"
    done
}

run_rc_command $1
Если выполнить reboot или shutdown -p now, например, то машины не сохраняют своё состояние. Вопрос:
1. Почему?
2. Можно ли исправить и как?

Аватара пользователя
DrCash
проходил мимо
Сообщения: 8
Зарегистрирован: 2009-02-16 10:58:53

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение DrCash » 2012-04-18 19:43:32

Да да люди помогите с этим.

Проблема в следующем, команда shutdown -p now не дожидается остановки виртуалок.
Как сделать так, что бы команды в скрипте выполнялись по таймауту или после окончания предыдущего задания.
____________________________
отказоустойчивость и безопасность - это то на чем не надо экономить и надо надеяться, что это никогда не потребуется

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение Alex Keda » 2012-04-18 21:09:34

это уж скорей бага виртуалбокса...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
DrCash
проходил мимо
Сообщения: 8
Зарегистрирован: 2009-02-16 10:58:53

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение DrCash » 2012-04-18 21:36:14

наверно не совсем по русски объяснил.

Есть сервак который хост виртуальных машин. Когда в реальном серваке пишешь shutdown -p now, начинает отрабатывать скрипт - витруалки начинают выключаться но реальная машина рубится быстрее и получается, что виртуалки некорректно завершают работу.
____________________________
отказоустойчивость и безопасность - это то на чем не надо экономить и надо надеяться, что это никогда не потребуется

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение Alex Keda » 2012-04-19 14:31:34

Alex Keda писал(а):это уж скорей бага виртуалбокса...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
dmtr
ст. прапорщик
Сообщения: 545
Зарегистрирован: 2009-11-06 22:01:34
Откуда: с Ростова

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение dmtr » 2012-04-19 14:50:11

DrCash писал(а):наверно не совсем по русски объяснил.

Есть сервак который хост виртуальных машин. Когда в реальном серваке пишешь shutdown -p now, начинает отрабатывать скрипт - витруалки начинают выключаться но реальная машина рубится быстрее и получается, что виртуалки некорректно завершают работу.
а вы какой скрипт используете?
есть скрипт

Код: Выделить всё

/usr/local/etc/rc.d/vboxheadless
с ним виртуалка корректно завершается, правда у меня тока одна.
This game has no name. It will never be the same.

snorlov
подполковник
Сообщения: 3927
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение snorlov » 2012-04-19 14:52:06

Alex Keda писал(а):
Alex Keda писал(а):это уж скорей бага виртуалбокса...
Почему ты считаешь это багой виртуалбокса. А если, к примеру, в виртуалке запущен виндовый сервер, у которого стоят политики по умолчания, а там ведь неззя его выключить без логина на консоли, вот вбокс его его и срубает...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение Alex Keda » 2012-04-20 8:12:38

помоему я понял - кажись товарисч тредстартер - гвест аддишен не установил
Убей их всех! Бог потом рассортирует...

Аватара пользователя
DrCash
проходил мимо
Сообщения: 8
Зарегистрирован: 2009-02-16 10:58:53

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение DrCash » 2012-04-20 11:33:19

В общемто так, из-за шаманства с phpvirtualbox стандартные скрипты не отрабатывают. И дополнение в к причинам энного, то что в phpvirtualbox виртуалки тоже под разными пользователями. И запускаются они у меня со своего скрипта с поддержкой vnc.

Решил проблему так, запускаются виртуалки через su phpvbuser и дальше все, что надо, создаем pid а при выключение ставим в скрипт wait_for_pids <vmpid> & wait_for_pids <vmpid> ... = кол-ву виртуалок и всё отрабатывает нормально.
____________________________
отказоустойчивость и безопасность - это то на чем не надо экономить и надо надеяться, что это никогда не потребуется

Аватара пользователя
ADRE
майор
Сообщения: 2646
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение ADRE » 2012-04-26 16:59:26

через скрин всё ок. (/usr/ports/sysutils/screen)
Тухнет процесс автоматом при выключении.
Поставил проверку существования процесса и всё.
--
Только странно что в phpvirtualbox есть превью а вот vrdp запилен.
//del

Charlz_Klug_
проходил мимо

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение Charlz_Klug_ » 2012-04-26 20:37:34

ADRE писал(а): Только странно что в phpvirtualbox есть превью а вот vrdp запилен.
Имеете в виду что vrdp в VirtualBox под FreeBSD есть?

Аватара пользователя
ADRE
майор
Сообщения: 2646
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение ADRE » 2012-05-24 14:24:34

он есть, активируется проверкой лицензий. думаю при определённых условиях можно обмануть. +)
//del

Аватара пользователя
Alvares
прапорщик
Сообщения: 485
Зарегистрирован: 2008-07-10 12:48:08
Откуда: Воронеж
Контактная информация:

Re: rc.d скрипт автозапуска Virtualbox для FreeBSD

Непрочитанное сообщение Alvares » 2012-05-24 17:03:30

Дефолтный таймаут на выключение вроде как 30 сек. Потом рубится сервис. Где-то в rc.shutdown наверное можно поглядеть порядок выключения
Бог создал людей сильными и слабыми. Сэмюэл Кольт сделал их равными...