diff options
Diffstat (limited to 'meta/lib/oe/overlayfs.py')
-rw-r--r-- | meta/lib/oe/overlayfs.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/meta/lib/oe/overlayfs.py b/meta/lib/oe/overlayfs.py new file mode 100644 index 0000000000..8b88900f71 --- /dev/null +++ b/meta/lib/oe/overlayfs.py | |||
@@ -0,0 +1,54 @@ | |||
1 | # | ||
2 | # Copyright OpenEmbedded Contributors | ||
3 | # | ||
4 | # SPDX-License-Identifier: GPL-2.0-only | ||
5 | # | ||
6 | # This file contains common functions for overlayfs and its QA check | ||
7 | |||
8 | # this function is based on https://github.com/systemd/systemd/blob/main/src/basic/unit-name.c | ||
9 | def escapeSystemdUnitName(path): | ||
10 | escapeMap = { | ||
11 | '/': '-', | ||
12 | '-': "\\x2d", | ||
13 | '\\': "\\x5d" | ||
14 | } | ||
15 | return "".join([escapeMap.get(c, c) for c in path.strip('/')]) | ||
16 | |||
17 | def strForBash(s): | ||
18 | return s.replace('\\', '\\\\') | ||
19 | |||
20 | def allOverlaysUnitName(d): | ||
21 | return d.getVar('PN') + '-overlays.service' | ||
22 | |||
23 | def mountUnitName(unit): | ||
24 | return escapeSystemdUnitName(unit) + '.mount' | ||
25 | |||
26 | def helperUnitName(unit): | ||
27 | return escapeSystemdUnitName(unit) + '-create-upper-dir.service' | ||
28 | |||
29 | def unitFileList(d): | ||
30 | fileList = [] | ||
31 | overlayMountPoints = d.getVarFlags("OVERLAYFS_MOUNT_POINT") | ||
32 | |||
33 | if not overlayMountPoints: | ||
34 | bb.fatal("A recipe uses overlayfs class but there is no OVERLAYFS_MOUNT_POINT set in your MACHINE configuration") | ||
35 | |||
36 | # check that we have required mount points set first | ||
37 | requiredMountPoints = d.getVarFlags('OVERLAYFS_WRITABLE_PATHS') | ||
38 | for mountPoint in requiredMountPoints: | ||
39 | if mountPoint not in overlayMountPoints: | ||
40 | bb.fatal("Missing required mount point for OVERLAYFS_MOUNT_POINT[%s] in your MACHINE configuration" % mountPoint) | ||
41 | |||
42 | for mountPoint in overlayMountPoints: | ||
43 | mountPointList = d.getVarFlag('OVERLAYFS_WRITABLE_PATHS', mountPoint) | ||
44 | if not mountPointList: | ||
45 | bb.debug(1, "No mount points defined for %s flag, don't add to file list", mountPoint) | ||
46 | continue | ||
47 | for path in mountPointList.split(): | ||
48 | fileList.append(mountUnitName(path)) | ||
49 | fileList.append(helperUnitName(path)) | ||
50 | |||
51 | fileList.append(allOverlaysUnitName(d)) | ||
52 | |||
53 | return fileList | ||
54 | |||