diff --git a/linkwarden/config.yaml b/linkwarden/config.yaml index e0229dc73..2b7d46f47 100644 --- a/linkwarden/config.yaml +++ b/linkwarden/config.yaml @@ -45,5 +45,5 @@ schema: STORAGE_FOLDER: str? slug: linkwarden url: https://github.com/alexbelgium/hassio-addons/tree/master/linkwarden -version: "2.14.0" +version: "2.14.0-2" webui: "[PROTO:ssl]://[HOST]:[PORT:3000]" diff --git a/linkwarden/rootfs/etc/cont-init.d/99-run.sh b/linkwarden/rootfs/etc/cont-init.d/99-run.sh index ce2d5f68e..3c217f266 100755 --- a/linkwarden/rootfs/etc/cont-init.d/99-run.sh +++ b/linkwarden/rootfs/etc/cont-init.d/99-run.sh @@ -9,6 +9,43 @@ set -e bashio::log.info "Creating folders" mkdir -p "$STORAGE_FOLDER" +# Upstream Linkwarden (packages/filesystem/*.ts) resolves STORAGE_FOLDER via: +# path.join(process.cwd(), '../..', STORAGE_FOLDER, filePath) +# The yarn workspace commands run from apps/web/ or apps/worker/, so +# process.cwd()/../.. resolves to the monorepo root /data_linkwarden. +# Node.js path.join treats absolute path segments as relative when they are not +# the first argument, so an absolute STORAGE_FOLDER like /config/library becomes +# /data_linkwarden/config/library instead of /config/library. +# This affects all filesystem operations: createFile, createFolder, readFile, +# moveFile, removeFile, removeFolder. +# Fix: symlink the top-level directory so all subpaths resolve correctly. +fix_linkwarden_path() { + local actual_path="$1" + local resolved_path="/data_linkwarden${actual_path}" + + # Only needed for absolute paths that differ after prefixing + if [ "$resolved_path" = "$actual_path" ]; then + return + fi + + mkdir -p "$(dirname "$resolved_path")" + + # Preserve any data already written to the non-persistent path + if [ -d "$resolved_path" ] && [ ! -L "$resolved_path" ]; then + if ! cp -rn "$resolved_path/." "$actual_path/" 2>/dev/null; then + bashio::log.warning "Could not migrate existing data from $resolved_path to $actual_path (may be empty or a permissions issue)" + fi + rm -rf "$resolved_path" + fi + + ln -sfn "$actual_path" "$resolved_path" + bashio::log.info "Symlinked $resolved_path -> $actual_path" +} + +if [[ "$STORAGE_FOLDER" == /* ]]; then + fix_linkwarden_path "$STORAGE_FOLDER" +fi + ###################### # CONFIGURE POSTGRES # ######################