#!/usr/bin/env bash # # Hook to generate stage4's fstab entries for persistent partitions # # Persistent identifiers (MBR types, GPT partition labels) # are expected to be specified in the OpenSLX config # as 'SLX_PERSISTENT_DEVICE_IDENTIFIER' and their filesystem # as 'SLX_PERSISTENT_DEVICE_FILESYSTEM', e.g ext4 or xfs. # If not specified, will default to 'auto' but will not # active systemd's features 'x-systemd.makefs' and 'x-systemd.growfs' . /etc/openslx type -p emergency_shell >/dev/null 2>&1 || source /lib/dracut-lib.sh # NOTE: systemd makes the mount point path automatically. # if multiple exists, take the biggest one (first in the list) if [ -n "$SLX_PERSISTENT_DEVICE_IDENTIFIER" ]; then declare -a persistent_dev_list for persistent_dev in \ $(get-partitions-by-id ${SLX_PERSISTENT_DEVICE_IDENTIFIER//,/ /}); do [ -z "$persistent_dev" ] && continue persistent_dev_list+=("$persistent_dev") done if [ "${#persistent_dev[@]}" -gt 0 ]; then if [ "${#persistent_dev[@]}" -gt 1 ]; then warn "$0: More than one persistent device found." warn "$0: Will use the biggest one: ${persistent_dev[0]}" fi persistent_dev_systemd_name="$( tr '/' '-' <<< ${persistent_dev[0]:1})" persistent_mount_opts="nofail" if [ -n "$SLX_PERSISTENT_DEVICE_FILESYSTEM" ]; then #persistent_mount_opts+=",x-systemd.requires=ensure-fs@${persistent_dev_systemd_name}" persistent_mount_opts+=",x-systemd.after=ensure-fs@${persistent_dev_systemd_name}" fi ( echo -ne "${persistent_dev[0]}\t" echo -ne "${SLX_PERSISTENT_DEVICE_MOUNT_POINT:-/opt/openslx/persistent}\t" echo -ne "${SLX_PERSISTENT_DEVICE_FILESYSTEM:-auto}\t" echo -ne "${persistent_mount_opts}\t0\t2" ) >> "$NEWROOT/etc/fstab" # drop-in to create filesystem if needed and #persistent_dev_systemd_name="$( tr '/' '-' <<< ${persistent_dev[0]:1})" #mkdir -p "$NEWROOT/etc/systemd/system/${persistent_dev_systemd_name}" #cat <<- EOF > "$NEWROOT" #EOF else warn "$0: No device with ID '$SLX_PERSISTENT_DEVICE_IDENTIFIER' found." fi fi true