xref: /openbmc/openbmc/poky/meta/lib/oe/overlayfs.py (revision 2390b1b6)
10ca19ccfSPatrick Williams#
292b42cb3SPatrick Williams# Copyright OpenEmbedded Contributors
392b42cb3SPatrick Williams#
40ca19ccfSPatrick Williams# SPDX-License-Identifier: GPL-2.0-only
50ca19ccfSPatrick Williams#
60ca19ccfSPatrick Williams# This file contains common functions for overlayfs and its QA check
70ca19ccfSPatrick Williams
80ca19ccfSPatrick Williams# this function is based on https://github.com/systemd/systemd/blob/main/src/basic/unit-name.c
90ca19ccfSPatrick Williamsdef escapeSystemdUnitName(path):
100ca19ccfSPatrick Williams    escapeMap = {
110ca19ccfSPatrick Williams        '/': '-',
120ca19ccfSPatrick Williams        '-': "\\x2d",
130ca19ccfSPatrick Williams        '\\': "\\x5d"
140ca19ccfSPatrick Williams    }
150ca19ccfSPatrick Williams    return "".join([escapeMap.get(c, c) for c in path.strip('/')])
160ca19ccfSPatrick Williams
170ca19ccfSPatrick Williamsdef strForBash(s):
180ca19ccfSPatrick Williams    return s.replace('\\', '\\\\')
190ca19ccfSPatrick Williams
20595f6308SAndrew Geisslerdef allOverlaysUnitName(d):
21595f6308SAndrew Geissler    return d.getVar('PN') + '-overlays.service'
22595f6308SAndrew Geissler
230ca19ccfSPatrick Williamsdef mountUnitName(unit):
240ca19ccfSPatrick Williams    return escapeSystemdUnitName(unit) + '.mount'
250ca19ccfSPatrick Williams
260ca19ccfSPatrick Williamsdef helperUnitName(unit):
270ca19ccfSPatrick Williams    return escapeSystemdUnitName(unit) + '-create-upper-dir.service'
280ca19ccfSPatrick Williams
290ca19ccfSPatrick Williamsdef unitFileList(d):
300ca19ccfSPatrick Williams    fileList = []
310ca19ccfSPatrick Williams    overlayMountPoints = d.getVarFlags("OVERLAYFS_MOUNT_POINT")
320ca19ccfSPatrick Williams
330ca19ccfSPatrick Williams    if not overlayMountPoints:
340ca19ccfSPatrick Williams        bb.fatal("A recipe uses overlayfs class but there is no OVERLAYFS_MOUNT_POINT set in your MACHINE configuration")
350ca19ccfSPatrick Williams
360ca19ccfSPatrick Williams    # check that we have required mount points set first
370ca19ccfSPatrick Williams    requiredMountPoints = d.getVarFlags('OVERLAYFS_WRITABLE_PATHS')
380ca19ccfSPatrick Williams    for mountPoint in requiredMountPoints:
390ca19ccfSPatrick Williams        if mountPoint not in overlayMountPoints:
400ca19ccfSPatrick Williams            bb.fatal("Missing required mount point for OVERLAYFS_MOUNT_POINT[%s] in your MACHINE configuration" % mountPoint)
410ca19ccfSPatrick Williams
420ca19ccfSPatrick Williams    for mountPoint in overlayMountPoints:
43*2390b1b6SPatrick Williams        mountPointList = d.getVarFlag('OVERLAYFS_WRITABLE_PATHS', mountPoint)
44*2390b1b6SPatrick Williams        if not mountPointList:
45*2390b1b6SPatrick Williams            bb.debug(1, "No mount points defined for %s flag, don't add to file list", mountPoint)
46*2390b1b6SPatrick Williams            continue
47*2390b1b6SPatrick Williams        for path in mountPointList.split():
480ca19ccfSPatrick Williams            fileList.append(mountUnitName(path))
490ca19ccfSPatrick Williams            fileList.append(helperUnitName(path))
500ca19ccfSPatrick Williams
51595f6308SAndrew Geissler    fileList.append(allOverlaysUnitName(d))
52595f6308SAndrew Geissler
530ca19ccfSPatrick Williams    return fileList
540ca19ccfSPatrick Williams
55