File: lxc.mount.hook.in

package info (click to toggle)
lxcfs 5.0.3-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 752 kB
  • sloc: ansic: 10,316; sh: 583; makefile: 46; python: 27
file content (113 lines) | stat: -rwxr-xr-x 3,627 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/bin/sh -e

# Parse command flags
while [ ! $# -eq 0 ]
do
	case "$1" in
		--skip-cgroup-mounts )
			SKIP_CGROUP_MOUNTS=1
			;;
	esac
	shift
done

# We're dealing with mount entries, so expand any symlink
LXC_ROOTFS_MOUNT=$(readlink -f "${LXC_ROOTFS_MOUNT}")

# /proc files
if [ -d {{LXCFSTARGETDIR}}/proc/ ]; then
    for entry in {{LXCFSTARGETDIR}}/proc/*; do
        DEST=$(basename "$entry")
        [ -e "${LXC_ROOTFS_MOUNT}/proc/${DEST}" ] || continue
        mount -n --bind "$entry" "${LXC_ROOTFS_MOUNT}/proc/${DEST}"
    done
fi

# /sys/devices/system/cpu
if [ -d {{LXCFSTARGETDIR}}/sys/devices/system/cpu ] ; then
    if [ -f {{LXCFSTARGETDIR}}/sys/devices/system/cpu/uevent ]; then
        mount -n --bind {{LXCFSTARGETDIR}}/sys/devices/system/cpu "${LXC_ROOTFS_MOUNT}/sys/devices/system/cpu"
    else
        for entry in {{LXCFSTARGETDIR}}/sys/devices/system/cpu/*; do
            DEST=$(basename "$entry")
            [ -e "${LXC_ROOTFS_MOUNT}/sys/devices/system/cpu/${DEST}" ] || continue
            mount -n --bind "$entry" "${LXC_ROOTFS_MOUNT}/sys/devices/system/cpu/${DEST}"
        done
    fi
fi

# Allow nesting lxcfs
if [ -d "${LXC_ROOTFS_MOUNT}{{LXCFSTARGETDIR}}/" ]; then
    mount -n --bind {{LXCFSTARGETDIR}} "${LXC_ROOTFS_MOUNT}{{LXCFSTARGETDIR}}/"
fi

# no need for lxcfs cgroups if we have cgroup namespaces
[ -n "$LXC_CGNS_AWARE" ] && [ -f /proc/self/ns/cgroup ] && exit 0

# Don't mess with containers that don't have /sys/fs/cgroup configured
# (lxc.mount.auto = cgroup:mixed)
if touch "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/lxcfs"; then
    rm "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/lxcfs"
else
    exit 0
fi

# Skip mounting cgroup tree if requested.
if [ "${SKIP_CGROUP_MOUNTS}" = "1" ]; then
        exit 0
fi

# /sys/fs/cgroup files
if [ -d "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup" ]; then
    if [ -d {{LXCFSTARGETDIR}}/cgroup ]; then
        # Cleanup existing mounts
        for entry in "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup"/*; do
            DEST=$(basename "$entry")

            if [ "${DEST}" = "cgmanager" ]; then
                continue
            fi

            if [ ! -d "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}" ]; then
                continue
            fi

            while grep -q "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}" /proc/self/mountinfo; do
                grep "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}" /proc/self/mountinfo | cut -d' ' -f5 | while read -r line; do
                     [ -e "${line}" ] || continue
                     umount -l "${line}" || true
                done
            done

            rm -Rf "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}"
        done

        # Mount the new entries
        for entry in {{LXCFSTARGETDIR}}/cgroup/*; do
            DEST=$(basename "$entry")
            if [ "$DEST" = "name=systemd" ]; then
                DEST="systemd"
            fi

            if [ ! -d "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}" ]; then
                mkdir "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}"
            fi

            mount -n --bind "$entry" "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${DEST}"

            # make sure that cpu,cpuacct shows up as cpu and cpuacct
            # separately, else systemd is unhappy
            if echo "$DEST" | grep -q ","; then
                arr=$(echo "$DEST" | tr "," "\n")
                for single in $arr
                do
                    if [ ! -L "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${single}" ]; then
                        ln -s "$DEST" "${LXC_ROOTFS_MOUNT}/sys/fs/cgroup/${single}"
                    fi
                done
            fi
        done
    fi
fi

exit 0