]>
Commit | Line | Data |
---|---|---|
9fc68fe3 | 1 | #!/bin/sh -e |
2ab697dc | 2 | |
43276460 | 3 | # Parse command flags |
4 | while [ ! $# -eq 0 ] | |
5 | do | |
6 | case "$1" in | |
7 | --skip-cgroup-mounts ) | |
8 | SKIP_CGROUP_MOUNTS=1 | |
9 | ;; | |
10 | esac | |
11 | shift | |
12 | done | |
13 | ||
71f0cd30 | 14 | # We're dealing with mount entries, so expand any symlink |
50c32b5e | 15 | LXC_ROOTFS_MOUNT=$(readlink -f "${LXC_ROOTFS_MOUNT}") |
71f0cd30 | 16 | |
2ab697dc | 17 | # /proc files |
e5af758b CB |
18 | if [ -d {{LXCFSTARGETDIR}}/proc/ ]; then |
19 | for entry in {{LXCFSTARGETDIR}}/proc/*; do | |
427caedd SD |
20 | DEST=$(basename "$entry") |
21 | [ -e "${LXC_ROOTFS_MOUNT}/proc/${DEST}" ] || continue | |
22 | mount -n --bind "$entry" "${LXC_ROOTFS_MOUNT}/proc/${DEST}" | |
7456f3b5 SG |
23 | done |
24 | fi | |
25 | ||
24ee58a5 | 26 | # /sys/devices/system/cpu |
e5af758b CB |
27 | if [ -d {{LXCFSTARGETDIR}}/sys/devices/system/cpu ] ; then |
28 | if [ -f {{LXCFSTARGETDIR}}/sys/devices/system/cpu/uevent ]; then | |
29 | mount -n --bind {{LXCFSTARGETDIR}}/sys/devices/system/cpu "${LXC_ROOTFS_MOUNT}/sys/devices/system/cpu" | |
791adfe1 | 30 | else |
e5af758b | 31 | for entry in {{LXCFSTARGETDIR}}/sys/devices/system/cpu/*; do |
427caedd SD |
32 | DEST=$(basename "$entry") |
33 | [ -e "${LXC_ROOTFS_MOUNT}/sys/devices/system/cpu/${DEST}" ] || continue | |
34 | mount -n --bind "$entry" "${LXC_ROOTFS_MOUNT}/sys/devices/system/cpu/${DEST}" | |
791adfe1 CB |
35 | done |
36 | fi | |
24ee58a5 | 37 | fi |
f51072f5 SG |
38 | |
39 | # Allow nesting lxcfs | |
e5af758b CB |
40 | if [ -d "${LXC_ROOTFS_MOUNT}{{LXCFSTARGETDIR}}/" ]; then |
41 | mount -n --bind {{LXCFSTARGETDIR}} "${LXC_ROOTFS_MOUNT}{{LXCFSTARGETDIR}}/" | |
f51072f5 SG |
42 | fi |
43 | ||
1edd4d20 | 44 | # no need for lxcfs cgroups if we have cgroup namespaces |
5f4744ea | 45 | [ -n "$LXC_CGNS_AWARE" ] && [ -f /proc/self/ns/cgroup ] && exit 0 |
1edd4d20 | 46 | |
358b8c7d SG |
47 | # Don't mess with containers that don't have /sys/fs/cgroup configured |
48 | # (lxc.mount.auto = cgroup:mixed) | |
50c32b5e SD |
49 | if touch "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/lxcfs"; then |
50 | rm "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/lxcfs" | |
358b8c7d SG |
51 | else |
52 | exit 0 | |
53 | fi | |
54 | ||
43276460 | 55 | # Skip mounting cgroup tree if requested. |
50c32b5e | 56 | if [ "${SKIP_CGROUP_MOUNTS}" = "1" ]; then |
43276460 | 57 | exit 0 |
58 | fi | |
59 | ||
2ab697dc SG |
60 | # /sys/fs/cgroup files |
61 | if [ -d "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup" ]; then | |
e5af758b | 62 | if [ -d {{LXCFSTARGETDIR}}/cgroup ]; then |
77171c86 | 63 | # Cleanup existing mounts |
50c32b5e SD |
64 | for entry in "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup"/*; do |
65 | DEST=$(basename "$entry") | |
77171c86 SG |
66 | |
67 | if [ "${DEST}" = "cgmanager" ]; then | |
68 | continue | |
2ab697dc | 69 | fi |
7456f3b5 | 70 | |
77171c86 | 71 | if [ ! -d "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}" ]; then |
8e8b8658 SH |
72 | continue |
73 | fi | |
59c982dc | 74 | |
7f377c96 | 75 | while grep -q "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}" /proc/self/mountinfo; do |
50c32b5e SD |
76 | grep "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}" /proc/self/mountinfo | cut -d' ' -f5 | while read -r line; do |
77 | [ -e "${line}" ] || continue | |
78 | umount -l "${line}" || true | |
77171c86 SG |
79 | done |
80 | done | |
81 | ||
50c32b5e | 82 | rm -Rf "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}" |
77171c86 SG |
83 | done |
84 | ||
85 | # Mount the new entries | |
e5af758b | 86 | for entry in {{LXCFSTARGETDIR}}/cgroup/*; do |
50c32b5e | 87 | DEST=$(basename "$entry") |
77171c86 SG |
88 | if [ "$DEST" = "name=systemd" ]; then |
89 | DEST="systemd" | |
90 | fi | |
91 | ||
50c32b5e SD |
92 | if [ ! -d "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}" ]; then |
93 | mkdir "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}" | |
38273402 | 94 | fi |
59c982dc | 95 | |
50c32b5e | 96 | mount -n --bind "$entry" "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}" |
8d00b97a SH |
97 | |
98 | # make sure that cpu,cpuacct shows up as cpu and cpuacct | |
99 | # separately, else systemd is unhappy | |
50c32b5e SD |
100 | if echo "$DEST" | grep -q ","; then |
101 | arr=$(echo "$DEST" | tr "," "\n") | |
8d00b97a SH |
102 | for single in $arr |
103 | do | |
50c32b5e SD |
104 | if [ ! -L "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${single}" ]; then |
105 | ln -s "$DEST" "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${single}" | |
38273402 | 106 | fi |
8d00b97a SH |
107 | done |
108 | fi | |
2ab697dc | 109 | done |
7456f3b5 SG |
110 | fi |
111 | fi | |
2ab697dc SG |
112 | |
113 | exit 0 |