#!/sbin/openrc-run # 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 CONTAINER= return 0 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 } _autostart() { ebegin "$1 LXC containers" shift lxc-autostart --group "${LXC_GROUP:-onboot,}" "$@" eend $? } start() { checkconfig || return 1 if [ -z "$CONTAINER" ]; then _autostart "Starting" return fi rm -f /var/log/lxc/${CONTAINER}.log rootpath=$(lxc_get_var lxc.rootfs) # verify that container is not on tmpfs dev=$(df -P "${rootpath}" | awk '{d=$1}; END {print d}') type=$(awk -v dev="$dev" '$1 == dev {m=$3}; END {print m}' /proc/mounts) if [ "$type" = tmpfs ] && ! yesno "$ALLOW_TMPFS"; then eerror "${rootpath} is on tmpfs and ALLOW_TMPFS is not set" return 1 fi 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 if [ -z "$CONTAINER" ]; then _autostart "Stopping" --shutdown --timeout ${LXC_TIMEOUT:-30} return fi ebegin "Stopping container ${CONTAINER}" start-stop-daemon --stop --pidfile ${pidfile} \ --retry ${POWEROFF_SIGNAL:-SIGUSR2}/${TIMEOUT:-30} \ --progress eend $? } reboot() { checkconfig || return 1 if [ -z "$CONTAINER" ]; then _autostart "Rebooting" --reboot return fi ebegin "Sending reboot signal to container $CONTAINER" start-stop-daemon --signal ${RESTART_SIG:-SIGTERM} \ --pidfile ${pidfile} eend $? }