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