mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-09-17 07:09:09 +02:00
Merge pull request #2774 from alexbelgium/fix/wger-issue-2529-startup
Fix wger fresh-install startup
This commit is contained in:
@@ -1,3 +1,7 @@
|
|||||||
|
## 2.6-dev-3 (2026-06-16)
|
||||||
|
- Fix fresh-install startup by making the persistent `/data/static` and `/data/media` directories writable by the `wger` user without recursively changing all of `/data`.
|
||||||
|
- Preserve existing persistent data by reusing `/data/database.sqlite` when present, and migrating a legacy `/home/wger/db/database.sqlite` only if no persistent database exists yet.
|
||||||
|
- Make nginx startup idempotent and fail loudly if its configuration is invalid, instead of masking nginx startup errors that can leave the add-on web port closed.
|
||||||
|
|
||||||
## 2.6-dev-2 (2026-06-16)
|
## 2.6-dev-2 (2026-06-16)
|
||||||
- Fix startup script database path rewrite by switching the `settings.py` matching with `*.py` since last update moved the settings.py file into several files within the settings folder
|
- Fix startup script database path rewrite by switching the `settings.py` matching with `*.py` since last update moved the settings.py file into several files within the settings folder
|
||||||
|
|||||||
@@ -23,5 +23,5 @@ schema:
|
|||||||
slug: wger
|
slug: wger
|
||||||
udev: true
|
udev: true
|
||||||
url: https://github.com/alexbelgium/hassio-addons
|
url: https://github.com/alexbelgium/hassio-addons
|
||||||
version: "2.6-dev-2"
|
version: "2.6-dev-3"
|
||||||
webui: "[PROTO:ssl]://[HOST]:[PORT:80]"
|
webui: "[PROTO:ssl]://[HOST]:[PORT:80]"
|
||||||
|
|||||||
@@ -1,5 +1,56 @@
|
|||||||
#!/usr/bin/env bashio
|
#!/usr/bin/env bashio
|
||||||
|
|
||||||
|
set -u
|
||||||
|
|
||||||
|
prepare_data_root() {
|
||||||
|
mkdir -p /data
|
||||||
|
chown wger /data || bashio::log.warning "Unable to set /data ownership to wger"
|
||||||
|
chmod a+rwx /data || bashio::log.warning "Unable to make /data writable"
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_writable_dir() {
|
||||||
|
local path="$1"
|
||||||
|
|
||||||
|
mkdir -p "$path"
|
||||||
|
chown -R wger "$path" || bashio::log.warning "Unable to set $path ownership to wger"
|
||||||
|
chmod -R a+rwX "$path" || bashio::log.warning "Unable to make $path writable"
|
||||||
|
}
|
||||||
|
|
||||||
|
move_persistent_dir() {
|
||||||
|
local source="$1"
|
||||||
|
local target="$2"
|
||||||
|
|
||||||
|
prepare_writable_dir "$target"
|
||||||
|
|
||||||
|
if [ -d "$source" ] && [ ! -L "$source" ]; then
|
||||||
|
if [ -n "$(ls -A "$source" 2> /dev/null)" ]; then
|
||||||
|
cp -rnf "$source"/. "$target"/
|
||||||
|
fi
|
||||||
|
rm -rf "$source"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ln -sfn "$target" "$source"
|
||||||
|
}
|
||||||
|
|
||||||
|
migrate_database() {
|
||||||
|
local legacy_db=/home/wger/db/database.sqlite
|
||||||
|
local persistent_db=/data/database.sqlite
|
||||||
|
|
||||||
|
if [ -f "$persistent_db" ]; then
|
||||||
|
bashio::log.info "Using existing persistent database at $persistent_db"
|
||||||
|
elif [ -f "$legacy_db" ]; then
|
||||||
|
bashio::log.info "Migrating legacy database from $legacy_db to $persistent_db"
|
||||||
|
cp -n "$legacy_db" "$persistent_db"
|
||||||
|
else
|
||||||
|
bashio::log.info "No existing database found; wger will create a new persistent database at $persistent_db"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$persistent_db" ]; then
|
||||||
|
chown wger "$persistent_db" || bashio::log.warning "Unable to set $persistent_db ownership to wger"
|
||||||
|
chmod a+rw "$persistent_db" || bashio::log.warning "Unable to make $persistent_db writable"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
############################
|
############################
|
||||||
# Change database location #
|
# Change database location #
|
||||||
############################
|
############################
|
||||||
@@ -11,56 +62,54 @@ if [ "${#SETTINGS_FILES[@]}" -gt 0 ]; then
|
|||||||
sed -i "s|/home/wger/db/database.sqlite|/data/database.sqlite|g" "$settings_file"
|
sed -i "s|/home/wger/db/database.sqlite|/data/database.sqlite|g" "$settings_file"
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
bashio::log.warning "Unable to find settings.py containing database path under /home, skipping rewrite"
|
bashio::log.warning "Unable to find Python settings containing database path under /home, skipping rewrite"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
# Adapt directories #
|
# Adapt directories #
|
||||||
#####################
|
#####################
|
||||||
echo "... create directories"
|
echo "... create directories"
|
||||||
mkdir -p /data/static
|
prepare_data_root
|
||||||
if [ -d /home/wger/static ] && [ ! -L /home/wger/static ]; then
|
migrate_database
|
||||||
if [ -n "$(ls -A /home/wger/static 2> /dev/null)" ]; then
|
move_persistent_dir /home/wger/static /data/static
|
||||||
cp -rnf /home/wger/static/* /data/static/
|
move_persistent_dir /home/wger/media /data/media
|
||||||
fi
|
|
||||||
rm -r /home/wger/static
|
|
||||||
fi
|
|
||||||
ln -sf /data/static /home/wger
|
|
||||||
|
|
||||||
mkdir -p /data/media
|
|
||||||
if [ -d /home/wger/media ] && [ ! -L /home/wger/media ]; then
|
|
||||||
if [ -n "$(ls -A /home/wger/media 2> /dev/null)" ]; then
|
|
||||||
cp -rnf /home/wger/media/* /data/media/
|
|
||||||
fi
|
|
||||||
rm -r /home/wger/media
|
|
||||||
fi
|
|
||||||
ln -sf /data/media /home/wger
|
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
# Align permissions #
|
# Align permissions #
|
||||||
#####################
|
#####################
|
||||||
echo "... align permissions"
|
echo "... align permissions"
|
||||||
chown -R wger /data
|
prepare_writable_dir /data/static
|
||||||
chown -R wger /home/wger
|
prepare_writable_dir /data/media
|
||||||
chmod -R 777 /data
|
migrate_database
|
||||||
|
|
||||||
echo "... add env variables"
|
echo "... add env variables"
|
||||||
(
|
(
|
||||||
set -o posix
|
set -o posix
|
||||||
export -p
|
export -p
|
||||||
) > /data/env.sh
|
) > /data/env.sh
|
||||||
while IFS= read -r line; do
|
|
||||||
[[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue
|
|
||||||
var="${line%%=*}"
|
|
||||||
sed -i "/^export[[:space:]]\+$var=/d" /data/env.sh
|
|
||||||
echo "export $line" >> /data/env.sh
|
|
||||||
done < /.env
|
|
||||||
|
|
||||||
chown wger /data/env.sh
|
if [ -f /.env ]; then
|
||||||
chmod +x /data/env.sh
|
while IFS= read -r line; do
|
||||||
|
[[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue
|
||||||
|
var="${line%%=*}"
|
||||||
|
[[ "$var" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]] || continue
|
||||||
|
sed -i "/^export[[:space:]]\+$var=/d" /data/env.sh
|
||||||
|
echo "export $line" >> /data/env.sh
|
||||||
|
done < /.env
|
||||||
|
fi
|
||||||
|
|
||||||
|
chown wger /data/env.sh || bashio::log.warning "Unable to set /data/env.sh ownership to wger"
|
||||||
|
chmod 0644 /data/env.sh || bashio::log.warning "Unable to make /data/env.sh readable"
|
||||||
|
|
||||||
bashio::log.info "Starting nginx"
|
bashio::log.info "Starting nginx"
|
||||||
nginx || true &
|
mkdir -p /run/nginx /var/log/nginx
|
||||||
true
|
if [ -f /run/nginx.pid ] && kill -0 "$(cat /run/nginx.pid)" 2> /dev/null; then
|
||||||
|
bashio::log.info "nginx is already running"
|
||||||
|
elif nginx -t; then
|
||||||
|
nginx &
|
||||||
|
else
|
||||||
|
bashio::log.error "nginx configuration test failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
bashio::log.info "Starting entrypoint"
|
bashio::log.info "Starting entrypoint"
|
||||||
|
|||||||
Reference in New Issue
Block a user