This post describes my attempts to get "clean" shutdown of Ubuntu 10.04 containers. The goal here is that a "shutdown -h now" of the dom0 should not result in a potentially inconsistent domU postgres database, cf. a naive lxc-stop.
As at Ubuntu 10.04 with lxc 0.7.2, lxc-start detects that a container has halted by 1) seeing a reboot event in <container>/var/run/utmp; or 2) seeing <container>'s PID 1 terminate. Ubuntu 10.04 simply REQUIRES /var/run to be a tmpfs; this is hard-coded into mountall's (upstart's) /lib/init/fstab. Without it, the most immediate issue is that /var/run/ifstate isn't reaped on reboot, ifup(8) thinks lo (at least) is already configured, and the boot process hangs waiting for the network. Unfortunately, lxc 0.7's utmp detect requires /var/run to NOT be a tmpfs. The shipped lxc-ubuntu script works around this by deleting the ifstate file and not mounting a tmpfs on /var/run, but to me that is simply waiting for something else to assume /var/run is empty. It also doesn't cope with a mountall upgrade rewriting /lib/init/fstab. More or less by accident, I discovered that I can tell lxc-start that the container is ready to halt by "crashing" upstart: container# kill -SEGV 1 Likewise I can spoof a ctrl-alt-delete event in the container with: dom0# pkill -INT lxc-start I automate the former signalling at the end of shutdowns thusly: chroot $template_dir dpkg-divert --quiet --rename /sbin/reboot chroot $template_dir tee >/dev/null /sbin/reboot <<-EOF #!/bin/bash while getopts nwdfiph opt do [[ f = \$opt ]] && exec kill -SEGV 1 done exec -a "$0" "\$0.distrib" "\$@" EOF chroot $template_dir chmod +x /sbin/reboot chroot $template_dir ln -s reboot.distrib /sbin/halt.distrib chroot $template_dir ln -s reboot.distrib /sbin/poweroff.distrib I use the latter in my customized /etc/init.d/lxc stop rule. Note that the lxc-wait's SHOULD be parallelized, but this is not possible as at lxc 0.7.2 :-( This means that theoretically the nth container gets nĂ—10min to halt, although in practice I find most containers go down in a decisecond or two. case "$1" in ... stop) log_daemon_msg "Stopping $DESC" pkill -INT lxc-start for name in $(lxc-ls) do if timeout 10m lxc-wait -n $name -s STOPPED then log_progress_msg $name else lxc-stop -n $name log_progress_msg "$name (killed)" fi done wait log_end_msg 0 ;; esac ------------------------------------------------------------------------------ What happens now with your Lotus Notes apps - do you make another costly upgrade, or settle for being marooned without product support? Time to move off Lotus Notes and onto the cloud with Force.com, apps are easier to build, use, and manage than apps on traditional platforms. Sign up for the Lotus Notes Migration Kit to learn more. http://p.sf.net/sfu/salesforce-d2d _______________________________________________ Lxc-users mailing list Lxc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-users