LINUX.ORG.RU
ФорумAdmin

init-скрипт ВМ virtualbox


0

1

Не хочу писать велосипед.

У кого-нибудь есть инитскрипт для виртуалбокса, который стартует виртуалку и в случае падения перезапускает, корректно делает снапшот при остановке сервиса и развёртывает его при запуске?

для генты

nx00 ~ # cat /etc/conf.d/virtualbox.Win7
# cp /etc/conf.d/virtualbox.example /etc/conf.d/virtualbox.NEW_VM
# cd /etc/init.d
# ln -s virtualbox virtualbox.NEW_VM

#Username to start vbox as, must be part of vboxusers group.
VM_USER=«vbox»

# Virtual Machine Name
VM_NAME=«Win7»

# Shutdown Method: pause|resume|reset|poweroff|savestate|acpipowerbutton|acpisleepbutton
VM_SHUTDOWN=«savestate»

# Nice Priority: -20 (most favorable scheduling) to 19 (least favorable)
VM_NICE=0

nx00 ~ # cat /etc/init.d/virtualbox.Win7
#!/sbin/runscript

# Not sure why but gentoo forgot to add /opt/bin to the path.
VBOXPATH=«/usr/bin:/opt/bin»
VBOXNAME=«${SVCNAME#*.}»

depend() {
need net

if [ «${SVCNAME}» != «virtualbox» ] ; then
need virtualbox
fi
}


checkconfig() {
if [ ! -r /etc/conf.d/$SVCNAME ] ; then
eerror «Please create /etc/conf.d/$SVCNAME»
eerror «Sample conf: /etc/conf.d/virtualbox.example»
return 1
fi

return 0
}

checkpath() {
local r=0

if ! su $VM_USER -c «PATH=$VBOXPATH command -v VBoxHeadless &>/dev/null» ; then
eerror «Could not locate VBoxHeadless»
r=1
fi

if ! su $VM_USER -c «PATH=$VBOXPATH command -v VBoxManage &>/dev/null» ; then
eerror «Could not locate VBoxManage»
r=1
fi

if [ $r -gt 0 ] ; then
eerror «Please verify the vm users path.»
fi

return $r
}

isloaded() {
lsmod | grep -q «$1[^_-]»
}

isvm() {
[ $SVCNAME != «virtualbox» ]
}

loadmodules() {
if ! isloaded vboxdrv ; then
if ! modprobe vboxdrv > /dev/null 2>&1 ; then
eerror «modprobe vboxdrv failed.»
return 1
fi
fi

if ! isloaded vboxnetflt ; then
if ! modprobe vboxnetflt > /dev/null 2>&1 ; then
eerror «modprobe vboxnetflt failed.»
return 1
fi
fi

return 0
}

unloadmodules() {
if isloaded vboxnetflt ; then
if ! rmmod vboxnetflt > /dev/null 2>&1 ; then
eerror «rmmod vboxnetflt failed.»
return 1
fi
fi

if isloaded vboxdrv ; then
if ! rmmod vboxdrv > /dev/null 2>&1 ; then
eerror «rmmod vboxdrv failed.»
return 1
fi
fi

return 0
}

start() {
# If we are the original virtualbox script [ $SVCNAME = «virtualbox» ]
if ! isvm ; then
ebegin «Starting Virtualbox»
loadmodules
eend $?
else
checkconfig || return $?
checkpath || return $?

ebegin «Starting Virtualbox: $VBOXNAME»
su $VM_USER -c «PATH=$VBOXPATH nice -n $VM_NICE VBoxHeadless -startvm \»$VM_NAME\" &>/dev/null" &
pid=$!
sleep 1

kill -CHLD $pid &>/dev/null
eend $?
fi
}

stop() {
# If we are the original virtualbox script [ $SVCNAME = «virtualbox» ]
if ! isvm ; then
ebegin «Stopping Virtualbox»
unloadmodules
eend $?
else
checkconfig || return $?
checkpath || return $?

ebegin «Stopping Virtualbox: $VBOXNAME»
su ${VM_USER} -c «PATH=$VBOXPATH VBoxManage controlvm \»$VM_NAME\" $VM_SHUTDOWN &>/dev/null"

while [ «$(su ${VM_USER} -c „PATH=$VBOXPATH VBoxManage showvminfo \“$VM_NAME\» | grep State | grep runn")" != «» ]
do
echo -n "."
sleep 1
done

sleep 1
echo

eend $?
fi
}

bashnia
()
Ответ на: для генты от bashnia

эх, для редхатоподобных бы.

что-то он у меня вообще ничего не выводит и не делает

Gordon01 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.