#!/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 after firewall net } lxc_get_configfile() { local i for i in /var/lib/lxc/${CONTAINER}/config \ /etc/lxc/${CONTAINER}.conf \ /etc/lxc/${CONTAINER}/config; do if [ -f "$i" ]; then echo "$i" return 0 fi done 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 } 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 "lxc.utsname. Right now the lxc.utsname is set to ${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 ${CONTAINER}" start-stop-daemon --start $command \ --pidfile $pidfile \ -- \ --daemon \ --pidfile $pidfile \ --name ${CONTAINER} \ --rcfile ${CONFIGFILE} \ --logpriority WARN \ --logfile /var/log/lxc/${CONTAINER}.log \ || eend $? || return $? lxc-wait -n ${CONTAINER} -t 5 -s RUNNING eend $? } stop() { checkconfig || return 1 ebegin "Stopping container ${CONTAINER}" start-stop-daemon --stop --pidfile ${pidfile} \ --retry ${POWEROFF_SIGNAL:-SIGUSR2}/${TIMEOUT:-30} \ --progress eend $? } reboot() { checkconfig || return 1 ebegin "Sending reboot signal to container $CONTAINER" start-stop-daemon --signal ${RESTART_SIG:-SIGTERM} \ --pidfile ${pidfile} eend $? }