1# 2# SPDX-License-Identifier: GPL-2.0-only 3# 4# This file contains common functions for overlayfs and its QA check 5 6# this function is based on https://github.com/systemd/systemd/blob/main/src/basic/unit-name.c 7def escapeSystemdUnitName(path): 8 escapeMap = { 9 '/': '-', 10 '-': "\\x2d", 11 '\\': "\\x5d" 12 } 13 return "".join([escapeMap.get(c, c) for c in path.strip('/')]) 14 15def strForBash(s): 16 return s.replace('\\', '\\\\') 17 18def allOverlaysUnitName(d): 19 return d.getVar('PN') + '-overlays.service' 20 21def mountUnitName(unit): 22 return escapeSystemdUnitName(unit) + '.mount' 23 24def helperUnitName(unit): 25 return escapeSystemdUnitName(unit) + '-create-upper-dir.service' 26 27def unitFileList(d): 28 fileList = [] 29 overlayMountPoints = d.getVarFlags("OVERLAYFS_MOUNT_POINT") 30 31 if not overlayMountPoints: 32 bb.fatal("A recipe uses overlayfs class but there is no OVERLAYFS_MOUNT_POINT set in your MACHINE configuration") 33 34 # check that we have required mount points set first 35 requiredMountPoints = d.getVarFlags('OVERLAYFS_WRITABLE_PATHS') 36 for mountPoint in requiredMountPoints: 37 if mountPoint not in overlayMountPoints: 38 bb.fatal("Missing required mount point for OVERLAYFS_MOUNT_POINT[%s] in your MACHINE configuration" % mountPoint) 39 40 for mountPoint in overlayMountPoints: 41 for path in d.getVarFlag('OVERLAYFS_WRITABLE_PATHS', mountPoint).split(): 42 fileList.append(mountUnitName(path)) 43 fileList.append(helperUnitName(path)) 44 45 fileList.append(allOverlaysUnitName(d)) 46 47 return fileList 48 49