hyve, jails, QEMU, ESXi и другие решения виртуализации и изоляции, включая гибридные окружения.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
nemchin
- проходил мимо
- Сообщения: 5
- Зарегистрирован: 2010-02-22 16:04:40
Непрочитанное сообщение
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
nemchin
-
Хостинг HostFood.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
- стреляли...
- Сообщения: 35501
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2010-10-24 22:22:30
неуниверсально....
Убей их всех! Бог потом рассортирует...
Alex Keda
-
nemchin
- проходил мимо
- Сообщения: 5
- Зарегистрирован: 2010-02-22 16:04:40
Непрочитанное сообщение
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"
nemchin
-
hizel
- дядя поня
- Сообщения: 9032
- Зарегистрирован: 2007-06-29 10:05:02
- Откуда: Выборг
Непрочитанное сообщение
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.
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.
hizel
-
gloom
- лейтенант
- Сообщения: 738
- Зарегистрирован: 2008-03-13 16:29:12
- Откуда: UA
Непрочитанное сообщение
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"
gloom
-
nemchin
- проходил мимо
- Сообщения: 5
- Зарегистрирован: 2010-02-22 16:04:40
Непрочитанное сообщение
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.
nemchin
-
gloom
- лейтенант
- Сообщения: 738
- Зарегистрирован: 2008-03-13 16:29:12
- Откуда: UA
Непрочитанное сообщение
gloom » 2010-10-26 13:01:04
ка-то не подумал насчет savestate...
надо будет как-то доделать скрипт для множества виртуалок
gloom
-
Костян
- проходил мимо
Непрочитанное сообщение
Костян » 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
- Откуда: давно здесь сидим..
-
Контактная информация:
Непрочитанное сообщение
dekloper » 2011-06-13 15:16:40
nemchin писал(а):
Кстати, насчёт acpipowerbutton: на мой взгляд, уместнее savestate.
Объясню: acpipowerbutton посылает сигнал
кстати, да, иной "гость" может просто покласть на этот сигнал (если это КД, к примеру, или политики там внутре хитрые могут быть..)
ТОВАгИЩИ! БгАТЬЯ И СЕСТгЫ! ДОЛОЙ гАВНОДУШИЕ!
dekloper
-
EARL
- мл. сержант
- Сообщения: 85
- Зарегистрирован: 2010-05-24 9:05:18
- Откуда: Тамбов
Непрочитанное сообщение
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. Можно ли исправить и как?
EARL
-
DrCash
- проходил мимо
- Сообщения: 8
- Зарегистрирован: 2009-02-16 10:58:53
Непрочитанное сообщение
DrCash » 2012-04-18 19:43:32
Да да люди помогите с этим.
Проблема в следующем, команда shutdown -p now не дожидается остановки виртуалок.
Как сделать так, что бы команды в скрипте выполнялись по таймауту или после окончания предыдущего задания.
____________________________
отказоустойчивость и безопасность - это то на чем не надо экономить и надо надеяться, что это никогда не потребуется
DrCash
-
Alex Keda
- стреляли...
- Сообщения: 35501
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2012-04-18 21:09:34
это уж скорей бага виртуалбокса...
Убей их всех! Бог потом рассортирует...
Alex Keda
-
DrCash
- проходил мимо
- Сообщения: 8
- Зарегистрирован: 2009-02-16 10:58:53
Непрочитанное сообщение
DrCash » 2012-04-18 21:36:14
наверно не совсем по русски объяснил.
Есть сервак который хост виртуальных машин. Когда в реальном серваке пишешь shutdown -p now, начинает отрабатывать скрипт - витруалки начинают выключаться но реальная машина рубится быстрее и получается, что виртуалки некорректно завершают работу.
____________________________
отказоустойчивость и безопасность - это то на чем не надо экономить и надо надеяться, что это никогда не потребуется
DrCash
-
Alex Keda
- стреляли...
- Сообщения: 35501
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2012-04-19 14:31:34
Alex Keda писал(а):это уж скорей бага виртуалбокса...
Убей их всех! Бог потом рассортирует...
Alex Keda
-
dmtr
- ст. прапорщик
- Сообщения: 545
- Зарегистрирован: 2009-11-06 22:01:34
- Откуда: с Ростова
Непрочитанное сообщение
dmtr » 2012-04-19 14:50:11
DrCash писал(а):наверно не совсем по русски объяснил.
Есть сервак который хост виртуальных машин. Когда в реальном серваке пишешь shutdown -p now, начинает отрабатывать скрипт - витруалки начинают выключаться но реальная машина рубится быстрее и получается, что виртуалки некорректно завершают работу.
а вы какой скрипт используете?
есть скрипт
с ним виртуалка корректно завершается, правда у меня тока одна.
This game has no name. It will never be the same.
dmtr
-
snorlov
- подполковник
- Сообщения: 3929
- Зарегистрирован: 2008-09-04 11:51:25
- Откуда: Санкт-Петербург
Непрочитанное сообщение
snorlov » 2012-04-19 14:52:06
Alex Keda писал(а):Alex Keda писал(а):это уж скорей бага виртуалбокса...
Почему ты считаешь это багой виртуалбокса. А если, к примеру, в виртуалке запущен виндовый сервер, у которого стоят политики по умолчания, а там ведь неззя его выключить без логина на консоли, вот вбокс его его и срубает...
snorlov
-
Alex Keda
- стреляли...
- Сообщения: 35501
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2012-04-20 8:12:38
помоему я понял - кажись товарисч тредстартер - гвест аддишен не установил
Убей их всех! Бог потом рассортирует...
Alex Keda
-
DrCash
- проходил мимо
- Сообщения: 8
- Зарегистрирован: 2009-02-16 10:58:53
Непрочитанное сообщение
DrCash » 2012-04-20 11:33:19
В общемто так, из-за шаманства с phpvirtualbox стандартные скрипты не отрабатывают. И дополнение в к причинам энного, то что в phpvirtualbox виртуалки тоже под разными пользователями. И запускаются они у меня со своего скрипта с поддержкой vnc.
Решил проблему так, запускаются виртуалки через su phpvbuser и дальше все, что надо, создаем pid а при выключение ставим в скрипт wait_for_pids <vmpid> & wait_for_pids <vmpid> ... = кол-ву виртуалок и всё отрабатывает нормально.
____________________________
отказоустойчивость и безопасность - это то на чем не надо экономить и надо надеяться, что это никогда не потребуется
DrCash
-
ADRE
- майор
- Сообщения: 2645
- Зарегистрирован: 2007-07-26 8:53:49
-
Контактная информация:
Непрочитанное сообщение
ADRE » 2012-04-26 16:59:26
через скрин всё ок. (/usr/ports/sysutils/screen)
Тухнет процесс автоматом при выключении.
Поставил проверку существования процесса и всё.
--
Только странно что в phpvirtualbox есть превью а вот vrdp запилен.
//del
ADRE
-
Charlz_Klug_
- проходил мимо
Непрочитанное сообщение
Charlz_Klug_ » 2012-04-26 20:37:34
ADRE писал(а):
Только странно что в phpvirtualbox есть превью а вот vrdp запилен.
Имеете в виду что vrdp в VirtualBox под FreeBSD есть?
Charlz_Klug_
-
ADRE
- майор
- Сообщения: 2645
- Зарегистрирован: 2007-07-26 8:53:49
-
Контактная информация:
Непрочитанное сообщение
ADRE » 2012-05-24 14:24:34
он есть, активируется проверкой лицензий. думаю при определённых условиях можно обмануть. +)
//del
ADRE
-
Alvares
- прапорщик
- Сообщения: 485
- Зарегистрирован: 2008-07-10 12:48:08
- Откуда: Воронеж
-
Контактная информация:
Непрочитанное сообщение
Alvares » 2012-05-24 17:03:30
Дефолтный таймаут на выключение вроде как 30 сек. Потом рубится сервис. Где-то в rc.shutdown наверное можно поглядеть порядок выключения
Бог создал людей сильными и слабыми. Сэмюэл Кольт сделал их равными...
Alvares