#!/sbin/runscript # Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/app-emulation/lxc/files/lxc.initd.2,v 1.5 2012/07/21 05:07:15 flameeyes Exp $ CONTAINER=${SVCNAME#*.} command="/usr/bin/lxc-start" pidfile="/var/run/lxc/$CONTAINER.pid" extra_started_commands="reboot" depend() { need localmount } lxc_get_configfile() { if [ -f "/etc/lxc/${CONTAINER}.conf" ]; then echo "/etc/lxc/${CONTAINER}.conf" elif [ -f "/etc/lxc/${CONTAINER}/config" ]; then echo "/etc/lxc/${CONTAINER}/config" else eerror "Unable to find a suitable configuration file." eerror "If you set up the container in a non-standard" eerror "location, please set the CONFIGFILE variable." return 1 fi } lxc_get_var() { awk 'BEGIN { FS="[ \t]*=[ \t]*" } $1 == "'$1'" { print $2; exit }' ${CONFIGFILE} } checkconfig() { if [ ${CONTAINER} = ${SVCNAME} ]; then eerror "You have to create an init script for each container:" eerror " ln -s lxc /etc/init.d/lxc.container" return 1 fi CONFIGFILE=${CONFIGFILE:-$(lxc_get_configfile)} # no need to output anything, the function takes care of that. [ -z "${CONFIGFILE}" ] && return 1 utsname=$(lxc_get_var lxc.utsname) if [ ${CONTAINER} != ${utsname} ]; then eerror "You should use the same name for the service and the" eerror "container. Right now the container is called ${utsname}" return 1 fi } start() { checkconfig || return 1 rm -f /var/log/lxc/${CONTAINER}.log rootpath=$(lxc_get_var lxc.rootfs) checkpath -d ${pidfile%/*} ebegin "Starting ${CONTAINER}" start-stop-daemon --start $command \ --pidfile $pidfile \ --wait 500 \ -- \ --daemon \ --pidfile $pidfile \ --name ${CONTAINER} \ --rcfile ${CONFIGFILE} \ --logpriority WARN \ --logfile /var/log/lxc/${CONTAINER}.log eend $? } stop() { checkconfig || return 1 if ! [ -d /sys/fs/cgroup/cpuset/lxc/${CONTAINER} ]; then ewarn "${CONTAINER} doesn't seem to be started." return 0 fi ebegin "Shutting down system in ${CONTAINER}" start-stop-daemon --stop --pidfile ${pidfile} \ --retry ${POWEROFF_SIGNAL:-SIGUSR2}/${TIMEOUT:-30} \ --progress eend $? ebegin "Stopping ${CONTAINER}" lxc-stop -n ${CONTAINER} eend $? } reboot() { checkconfig || return 1 ebegin "Sending reboot signal to $CONTAINER" start-stop-daemon --signal ${RESTART_SIG:-SIGTERM} \ --pidfile ${pidfile} eend $? }