#!/bin/sh # Copyright 2011 Canonical, Inc # 2014 Tianon Gravi # Author: Serge Hallyn # Tianon Gravi set -e # for simplicity this script provides no flexibility # if cgroup is mounted by fstab, don't run # don't get too smart - bail on any uncommented entry with 'cgroup' in it if grep -v '^#' /etc/fstab | grep -q cgroup; then echo 'cgroups mounted from fstab, not mounting /sys/fs/cgroup' exit 0 fi # kernel provides cgroups? if [ ! -e /proc/cgroups ]; then exit 0 fi # if we don't even have the directory we need, something else must be wrong if [ ! -d /sys/fs/cgroup ]; then exit 0 fi # mount /sys/fs/cgroup if not already done if ! mountpoint -q /sys/fs/cgroup; then mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup fi cd /sys/fs/cgroup # get/mount list of enabled cgroup controllers for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do mkdir -p $sys if ! mountpoint -q $sys; then if ! mount -n -t cgroup -o $sys cgroup $sys; then rmdir $sys || true fi fi done # example /proc/cgroups: # #subsys_name hierarchy num_cgroups enabled # cpuset 2 3 1 # cpu 3 3 1 # cpuacct 4 3 1 # memory 5 3 0 # devices 6 3 1 # freezer 7 3 1 # blkio 8 3 1 # enable cgroups memory hierarchy, like systemd does (and lxc/docker desires) # https://github.com/systemd/systemd/blob/v245/src/core/cgroup.c#L2983 # https://bugs.debian.org/940713 if [ -e /sys/fs/cgroup/memory/memory.use_hierarchy ]; then echo 1 > /sys/fs/cgroup/memory/memory.use_hierarchy fi exit 0