]> git.proxmox.com Git - mirror_lxcfs.git/blame - share/lxc.mount.hook.in
Merge pull request #509 from brauner/2021-12-13.fixes
[mirror_lxcfs.git] / share / lxc.mount.hook.in
CommitLineData
9fc68fe3 1#!/bin/sh -e
2ab697dc 2
43276460 3# Parse command flags
4while [ ! $# -eq 0 ]
5do
6 case "$1" in
7 --skip-cgroup-mounts )
8 SKIP_CGROUP_MOUNTS=1
9 ;;
10 esac
11 shift
12done
13
71f0cd30 14# We're dealing with mount entries, so expand any symlink
50c32b5e 15LXC_ROOTFS_MOUNT=$(readlink -f "${LXC_ROOTFS_MOUNT}")
71f0cd30 16
2ab697dc 17# /proc files
e5af758b
CB
18if [ -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
24fi
25
24ee58a5 26# /sys/devices/system/cpu
e5af758b
CB
27if [ -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 37fi
f51072f5
SG
38
39# Allow nesting lxcfs
e5af758b
CB
40if [ -d "${LXC_ROOTFS_MOUNT}{{LXCFSTARGETDIR}}/" ]; then
41 mount -n --bind {{LXCFSTARGETDIR}} "${LXC_ROOTFS_MOUNT}{{LXCFSTARGETDIR}}/"
f51072f5
SG
42fi
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
49if touch "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/lxcfs"; then
50 rm "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/lxcfs"
358b8c7d
SG
51else
52 exit 0
53fi
54
43276460 55# Skip mounting cgroup tree if requested.
50c32b5e 56if [ "${SKIP_CGROUP_MOUNTS}" = "1" ]; then
43276460 57 exit 0
58fi
59
2ab697dc
SG
60# /sys/fs/cgroup files
61if [ -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
111fi
2ab697dc
SG
112
113exit 0