As an lxc user, I like a semi-automatic (distributional way) of setting up the needed cgroup-subsystems. Ubuntu uses a lightweight variant of cgroups-bin (currently blocked in wheezy).

As always you may have more than one way to achive a proper cgroup handling.
Attached is my (updated) solution which is an initscript in parallel to such as mountdevsubfs.sh and similar.

I use this on Squeeze-server running with latest lxc-7.5.x from Wheezy.
It was never tested together with systemd. All subsystems are mounted in their own subdirectories.

Feel free to examine the functionality and reuse it in initscripts for future cgroup handling in wheezy.
#! /bin/sh
### BEGIN INIT INFO
# Provides:          mountcgroupsubsys
# Required-Start:    mountkernfs
# Required-Stop:
# Should-Start:      
# Default-Start:     S
# Default-Stop:
# Short-Description: Mount cgroup subsystems
# Description:       Mounts every cgroup subsystem
#                    in it's own directory under /sys/fs/cgroup
### END INIT INFO

PATH=/sbin:/bin
. /lib/init/vars.sh

. /lib/lsb/init-functions
. /lib/init/mount-functions.sh

[ -f /etc/default/tmpfs ] && . /etc/default/tmpfs

CGROUP_MOUNTTAB=/proc/mounts # /etc/mtab does not show cgroup subsystems after 
stop/start
export CGROUP_MOUNTTAB

do_start () {
        #
        # Mount cgroup on /sys/fs/cgroup
        #
        # Only mount cgroup if it is supported and enabled in /etc/default/tmpfs
        if grep -E -qs "cgroup\$" /proc/filesystems && [ -d /sys/fs/cgroup ] && 
[ yes = "$CGROUPSUBSYSTEMS" ]
        then
                RW_OPT=
                [ "${RW_SIZE:=$TMPFS_SIZE}" ] && RW_OPT=",size=$RW_SIZE"
                domount tmpfs "" /sys/fs/cgroup tmpfs -omode=0755,nosuid$RW_OPT
                CGROUP_EXCL_SUBSYS=${CGROUP_EXCL_SUBSYS:-"ns"} # ns (namespace) 
subsystem marked as deprecated
                grep -v "^#" /proc/cgroups | while read subsysline; do
                        subsys=$(echo $subsysline | /usr/bin/awk '{print $1}' )
                        subsys_enabled=$(echo $subsysline | /usr/bin/awk 
'{print $4}' )
                        if [ ! -d /sys/fs/cgroup/${subsys} -a "$subsys_enabled" 
= "1" ]
                        then
                                mkdir /sys/fs/cgroup/${subsys}
                                domount cgroup "" /sys/fs/cgroup/${subsys} 
cgroup -o${subsys}
                                [ $? -eq 0 ] && log_success_msg "Successfully 
mounted /sys/fs/cgroup/${subsys}."
                        else
                                log_warning_msg "Directory 
/sys/fs/cgroup/${subsys} does already exists or subsystem is not enabled. Do 
not try to mount cgroup subsystem named $subsys."
                        fi
                done
        else
                log_warning_msg "Cgroups not supported by kernel or 
CGROUPSUBSYSTEMS not set to 'yes' in /etc/default/tmpfs."
        fi


}

do_stop () {
        if [ -d /sys/fs/cgroup ]
        then
                for subsys in $(/usr/bin/awk '{print $1}' /proc/cgroups); do
                        if [ -d /sys/fs/cgroup/${subsys} ]
                        then
                                umount /sys/fs/cgroup/${subsys}
                                [ $? -ne 0 ] && log_warning_msg "Could not 
unmount /sys/fs/cgroup/${subsys}."
                                rmdir /sys/fs/cgroup/${subsys}
                                [ $? -eq 0 ] && log_success_msg "Successfully 
removed /sys/fs/cgroup/${subsys}."
                        fi
                done
                grep "/sys/fs/cgroup" $CGROUP_MOUNTTAB > /dev/null 
                if [ $? -eq 0 ]
                then
                        umount /sys/fs/cgroup
                        [ $? -eq 0 ] && log_success_msg "Successfully unmounted 
/sys/fs/cgroup."
                fi
        else
                log_warning_msg "Directory /sys/fs/cgroup not found. Do not try 
to unmount cgroup subsystems."
        fi
}

do_status () {
        grep "/sys/fs/cgroup" $CGROUP_MOUNTTAB > /dev/null
        if [ -d /sys/fs/cgroup -a $? -eq 0 ]
        then
                for subsys in $(/usr/bin/awk '{print $1}' /proc/cgroups); do
                        if [ -d /sys/fs/cgroup/${subsys} ]
                        then
                                log_action_msg "Cgroup subsystem ${subsys} 
found in /sys/fs/cgroup/${subsys}"
                        fi
                done
        else
                log_action_msg "Did not find mounted /sys/fs/cgroup"
        fi
}

case "$1" in
  "")
        echo "Warning: mountcgroupsubsys should be called with the 'start' 
argument." >&2
        do_start
        ;;
  start)
        do_start
        ;;
  status)
        do_status
        ;;
  restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
  stop)
        do_stop
        ;;
  *)
        echo "Usage: mountcgroupsubsys [start|stop]" >&2
        exit 3
        ;;
esac

Reply via email to