diff --git a/.templates/00-local_mounts.sh b/.templates/00-local_mounts.sh index aa98877c1..73c72cacf 100755 --- a/.templates/00-local_mounts.sh +++ b/.templates/00-local_mounts.sh @@ -1,108 +1,125 @@ #!/usr/bin/with-contenv bashio # shellcheck shell=bash -set -e -if ! bashio::supervisor.ping 2>/dev/null; then - echo "..." +############################################################################### +# Strong defaults # +############################################################################### +set -Eeuo pipefail +shopt -s inherit_errexit + +trap 'bashio::log.fatal "Line ${LINENO}: command «${BASH_COMMAND}» failed"; exit 1' ERR + +############################################################################### +# Helpers # +############################################################################### + +log() { bashio::log.green "$*"; } +warn() { bashio::log.yellow "$*"; } +die() { bashio::log.fatal "$*"; } + +# Return first existing path for $1 (device name, UUID, or LABEL), else 1. +resolve_device() { + local d="$1" + for p in "/dev/${d}" \ + "/dev/disk/by-uuid/${d}" \ + "/dev/disk/by-label/${d}" ; do + [[ -e $p ]] && { echo "$p"; return 0; } + done + return 1 +} + +safe_mount() { # safe_mount SRC MNT FSTYPE OPTS + local src=$1 mnt=$2 fstype=$3 opts=$4 + + # Already mounted? + if findmnt -rn --source "$src" --target "$mnt" &>/dev/null; then + warn "$src is already mounted on $mnt – skipping" + return 0 + fi + + bashio::log.blue "→ mount -t ${fstype} -o ${opts} ${src} ${mnt}" + mount -t "$fstype" -o "$opts" "$src" "$mnt" +} + +supported_fs() { + grep -v nodev /proc/filesystems | awk '{print $1}' +} + +############################################################################### +# Early exit if supervisor not present (addon start during build, etc.) # +############################################################################### +if ! bashio::supervisor.ping &>/dev/null; then + log "Supervisor not reachable – nothing to mount" exit 0 fi -###################### -# MOUNT LOCAL SHARES # -###################### - -# Mount local Share if configured -if bashio::config.has_value 'localdisks'; then - - # Available devices - blkid | awk '{print substr($1, 0, length($1) - 1)}' | awk -F'/' '{print $NF}' > availabledisks - echo "NAME" >> availabledisks - - ## List available Disk with Labels and Id - bashio::log.blue "---------------------------------------------------" - bashio::log.info "Available Disks for mounting :" - lsblk -o name,label,size,fstype,ro | awk '$4 != "" { print $0 }' | grep -f availabledisks - bashio::log.blue "---------------------------------------------------" - rm availabledisks - - # Show support fs https://github.com/dianlight/hassio-addons/blob/2e903184254617ac2484fe7c03a6e33e6987151c/sambanas/rootfs/etc/s6-overlay/s6-rc.d/init-automount/run#L106 - fstypessupport=$(grep -v nodev