xref: /openbmc/openbmc/poky/meta/lib/oe/overlayfs.py (revision 864cc43b)
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
9def escapeSystemdUnitName(path):
10    escapeMap = {
11        '/': '-',
12        '-': "\\x2d",
13        '\\': "\\x5d"
14    }
15    return "".join([escapeMap.get(c, c) for c in path.strip('/')])
16
17def strForBash(s):
18    return s.replace('\\', '\\\\')
19
20def allOverlaysUnitName(d):
21    return d.getVar('PN') + '-overlays.service'
22
23def mountUnitName(unit):
24    return escapeSystemdUnitName(unit) + '.mount'
25
26def helperUnitName(unit):
27    return escapeSystemdUnitName(unit) + '-create-upper-dir.service'
28
29def 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
55