#!/bin/sh # SPDX-License-Identifier: GPL-2.0-or-later # Copyright 2021 Jookia <contact@jookia.org> type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh GENERATOR_DIR="$2" [ -z "$GENERATOR_DIR" ] && exit 1 [ -z "$root" ] && root=$(getarg root=) [ -z "$overlay" ] && overlay=$(getarg overlay=) [ -z "$overlay" ] && return 0 derefed="" function deref_dev() { case "${1}" in block:LABEL=*|LABEL=*) derefed="${1#block:}" derefed="$(echo $derefed | sed 's,/,\\x2f,g')" derefed="/dev/disk/by-label/${derefed#LABEL=}" ;; block:UUID=*|UUID=*) derefed="${1#block:}" derefed="/dev/disk/by-uuid/${derefed#UUID=}" ;; block:PARTUUID=*|PARTUUID=*) derefed="${1#block:}" derefed="/dev/disk/by-partuuid/${derefed#PARTUUID=}" ;; block:PARTLABEL=*|PARTLABEL=*) derefed="${1#block:}" derefed="/dev/disk/by-partlabel/${derefed#PARTLABEL=}" ;; /dev/*) derefed="block:${1}" ;; esac } deref_dev "${overlay}" overlay_data="${derefed}" deref_dev "${root}" overlay_root="${derefed}" fsck_data="systemd-fsck@$(systemd-escape -p "${overlay_data}").service" fsck_root="systemd-fsck@$(systemd-escape -p "${overlay_root}").service" { echo "# generated by dracut" echo "[Unit]" echo "Before=initrd-root-fs.target" echo "RequiresMountsFor=/run" echo "BindsTo=${fsck_data}" echo "[Mount]" echo "Where=/run/overlay" echo "What=${overlay_data}" echo "Options=defaults" } > "$GENERATOR_DIR"/run-overlay.mount { echo "# generated by dracut" echo "[Unit]" echo "Before=initrd-root-fs.target" echo "RequiresMountsFor=/run/overlay" echo "BindsTo=${fsck_root}" echo "[Mount]" echo "Where=/run/overlay/lower" echo "What=${overlay_root}" echo "Options=defaults,ro" } > "$GENERATOR_DIR"/run-overlay-lower.mount { echo "# generated by dracut" echo "[Unit]" echo "Before=initrd-root-fs.target" echo "RequiresMountsFor=/run/overlay /run/overlay/lower" echo "[Mount]" echo "Where=/sysroot" echo "What=overlay" echo "Type=overlay" echo "Options=lowerdir=/run/overlay/lower,upperdir=/run/overlay/upper,workdir=/run/overlay/work" } > "$GENERATOR_DIR"/sysroot.mount