3 # based on Tony Risinger code from lxc-users
4 # http://www.mail-archive.com/lxc-users@lists.sourceforge.net/msg00074.html
6 which inotifywait >/dev/null || apt-get install inotify-tools
10 if [ ! -e /var/lib/lxc/$name/config ] ; then
12 ls /var/lib/lxc/*/config | cut -d/ -f5
16 rootfs=`grep lxc.rootfs /var/lib/lxc/$name/config | cut -d= -f2`
17 echo "$name rootfs $rootfs"
20 # cleanup init scripts which don't work in containers
22 $rootfs/etc/rc?.d/*umountfs \
23 $rootfs/etc/rc?.d/*umountroot \
24 $rootfs/etc/rc?.d/*hwclock* \
25 2>/dev/null | xargs -i rm -v {}
28 # let container respond to kill -SIGPWR
29 inittab=$rootfs/etc/inittab
30 powerfail="pw::powerfail:/sbin/init 0"
31 if ! grep "$powerfail" ${inittab} >/dev/null ; then
32 grep -v ::power ${inittab} > ${inittab}.new
33 echo $powerfail >> ${inittab}.new
34 mv ${inittab}.new ${inittab}
35 echo "$initab modified"
39 if [ "$2" == "stop" ] ; then
41 kill -SIGPWR `lxc-ps -C init -o pid | grep "^$name" | cut -d" " -f2-`
42 lxc-wait -n $name -s STOPPED
47 if ! lxc-info -n $name | grep RUNNING ; then
49 lxc-start -n $name -o /tmp/${name}.log -d
50 lxc-wait -n $name -s RUNNING
55 # time of 5 minutes on it JUST IN CASE...
56 vps_utmp=${rootfs}/var/run/utmp
57 inotifywait -qqt 300 ${vps_utmp}
58 if [ $(wc -l < /cgroup/${name}/tasks) -eq 1 ]; then
60 runlevel="$(runlevel ${vps_utmp})"
61 echo "# $name runlevel $runlevel"
65 # nothing for new boot state
75 lxc-wait -n ${name} -s STOPPED
76 mount /mnt/llin -o remount,rw
77 lxc-start -d -n ${name} -o /tmp/${name}.log
80 # make sure vps is still running
81 state="$(lxc-info -n "${name}" | sed -e 's/.* is //')"
82 [ "$state" = "RUNNING" ] || break