Compare commits

...

15 Commits

Author SHA1 Message Date
Alexandre
71b96dcb8e Merge pull request #2584 from alexbelgium/copilot/fix-openvpn-startup-issue
Fix Transmission OpenVPN startup failure caused by systemd-resolved in containers
2026-03-16 09:21:41 +01:00
copilot-swe-agent[bot]
b481580aa4 Bump transmission_openvpn version to v5.4.0-2 with changelog for DNS fix
Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>
2026-03-16 07:48:44 +00:00
Alexandre
352e3eca85 Merge pull request #2580 from alexbelgium/copilot/fix-internal-proxies-regex
fix(guacamole): use valid regex for PROXY_ALLOWED_IPS_REGEX default
2026-03-16 08:45:47 +01:00
github-actions
06ece60f76 GitHub bot: changelog 2026-03-16 07:36:39 +00:00
copilot-swe-agent[bot]
54c7a2ba10 Fix: Replace update-resolv-conf script that uses systemd-resolved with direct resolv.conf modification
The upstream haugene/transmission-openvpn v5.4.0 image uses systemd-resolved
via D-Bus in its update-resolv-conf script, which fails in HA containers
that lack systemd/D-Bus with 'sd_bus_open_system: No such file or directory'.

This adds a custom update-resolv-conf script that directly modifies
/etc/resolv.conf by parsing OpenVPN's foreign_option_* environment variables.

Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>
2026-03-16 07:33:22 +00:00
copilot-swe-agent[bot]
d1a40b3065 Initial plan 2026-03-16 07:26:24 +00:00
Alexandre
21d642c1d1 Update version to 1.0.32.0-3 in config.yaml 2026-03-16 08:25:56 +01:00
Alexandre
bcf8c383ae Update 99-run.sh 2026-03-16 08:25:21 +01:00
Alexandre
7b0c6c7ff2 Merge pull request #2583 from alexbelgium/copilot/add-multi-account-support
feat(immich_frame): add multi-account support
2026-03-16 08:14:56 +01:00
copilot-swe-agent[bot]
52aad31742 fix(immich_frame): address code review - null safety, file permissions, YAML escaping
Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>
2026-03-16 06:02:04 +00:00
copilot-swe-agent[bot]
dcb1a08a8f feat(immich_frame): add multi-account support via Accounts list option
- Add Accounts list schema to config.yaml for multi-account support
- Make ApiKey and ImmichServerUrl optional when using Accounts list
- Generate Settings.yaml from addon options in 99-run.sh
- Fix /app/Config symlink direction for proper config persistence
- Set IMMICHFRAME_CONFIG_PATH for reliable config discovery
- Update README with multi-account documentation and examples
- Bump version to 1.0.32.0-2

Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>
2026-03-16 06:00:59 +00:00
copilot-swe-agent[bot]
c8cf6e0953 Initial plan 2026-03-16 05:50:33 +00:00
copilot-swe-agent[bot]
9357f29850 chore(guacamole): bump version to 1.6.0-bullseye-3 and update changelog
Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>
2026-03-13 14:40:23 +00:00
copilot-swe-agent[bot]
d2d0e58980 fix(guacamole): change PROXY_ALLOWED_IPS_REGEX default from "*" to ".*"
Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>
2026-03-13 13:47:05 +00:00
copilot-swe-agent[bot]
e14b4a9b45 Initial plan 2026-03-13 13:45:40 +00:00
9 changed files with 161 additions and 13 deletions

View File

@@ -1,3 +1,6 @@
## 1.6.0-bullseye-3 (13-03-2026)
- Fix PROXY_ALLOWED_IPS_REGEX default from invalid regex "*" to ".*"
## 1.6.0-bullseye-2 (26-02-2026)
- Minor bugs fixed

View File

@@ -67,7 +67,7 @@ devices:
environment:
GUACAMOLE_HOME: /config
PGDATA: /config/postgres
PROXY_ALLOWED_IPS_REGEX: "*"
PROXY_ALLOWED_IPS_REGEX: ".*"
PROXY_BY_HEADER: X-Forwarded-By
PROXY_IP_HEADER: X-Forwarded-For
PROXY_PROTOCOL_HEADER: X-Forwarded-Proto
@@ -102,5 +102,5 @@ schema:
slug: guacamole
udev: true
url: https://github.com/alexbelgium/hassio-addons
version: "1.6.0-bullseye-2"
version: "1.6.0-bullseye-3"
video: true

View File

@@ -1,3 +1,10 @@
## 1.0.32.0-3 (16-03-2026)
- Minor bugs fixed
## 1.0.32.0-2 (2026-03-16)
- Added multi-account support: configure multiple Immich accounts via the `Accounts` option in the addon configuration
- `ApiKey` and `ImmichServerUrl` are now optional when using the `Accounts` list
- Settings.yaml is now auto-generated from addon options for reliable multi-account configuration
## 1.0.32.0 (2026-03-07)
- Update to latest version from immichFrame/ImmichFrame (changelog : https://github.com/immichFrame/ImmichFrame/releases)

View File

@@ -41,11 +41,12 @@ Webui can be found at `<your-ip>:8171`.
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `ImmichServerUrl` | str | **Required** | URL of your Immich server (e.g., `http://homeassistant:3001`) |
| `ApiKey` | str | **Required** | Immich API key for authentication |
| `ImmichServerUrl` | str | | URL of your Immich server (e.g., `http://homeassistant:3001`). Used for single-account setup. |
| `ApiKey` | str | | Immich API key for authentication. Used for single-account setup. |
| `Accounts` | list | `[]` | List of Immich accounts for multi-account support. Each entry requires `ImmichServerUrl` and `ApiKey`. |
| `TZ` | str | | Timezone (e.g., `Europe/London`) |
### Example Configuration
### Single Account Example
```yaml
ImmichServerUrl: "http://homeassistant:3001"
@@ -53,6 +54,23 @@ ApiKey: "your-immich-api-key-here"
TZ: "Europe/London"
```
### Multi-Account Example
To display photos from multiple Immich accounts (e.g., you and your partner), use the `Accounts` list:
```yaml
Accounts:
- ImmichServerUrl: "http://homeassistant:3001"
ApiKey: "api-key-for-user-1"
- ImmichServerUrl: "http://homeassistant:3001"
ApiKey: "api-key-for-user-2"
TZ: "Europe/London"
```
When using the `Accounts` list, the `ApiKey` and `ImmichServerUrl` top-level options are not needed. Images will be drawn from each account proportionally based on the total number of images present in each account.
For more configuration options, see the [ImmichFrame documentation](https://immichframe.dev/docs/getting-started/configuration).
### Getting Your Immich API Key
1. Open your Immich web interface

View File

@@ -9,19 +9,23 @@ map:
- addon_config:rw
name: Immich Frame
options:
Accounts: []
env_vars: []
ports:
8080/tcp: 8171
ports_description:
8080/tcp: Web UI port
schema:
Accounts:
- ImmichServerUrl: str
ApiKey: str
env_vars:
- name: match(^[A-Za-z0-9_]+$)
value: str?
ApiKey: str
ImmichServerUrl: str
ApiKey: str?
ImmichServerUrl: str?
TZ: str?
slug: immich_frame
url: https://github.com/alexbelgium/hassio-addons
version: "1.0.32.0"
version: "1.0.32.0-3"
webui: http://[HOST]:[PORT:8080]

View File

@@ -3,9 +3,64 @@
bashio::log.info "Starting Immich Frame"
mkdir -p /config/Config
if [ -f /app/Config ]; then
rm -r /app/Config
fi
ln -sf /app/Config /config/Config
# Handle legacy installs where /config/Config was a symlink to /app/Config
if [ -L /config/Config ]; then
bashio::log.info "Migrating legacy /config/Config symlink to real directory"
mkdir -p /config/Config.migrate
# Copy contents from the symlink target into the new real directory
cp -a /config/Config/. /config/Config.migrate/ 2>/dev/null || true
rm -f /config/Config
mv /config/Config.migrate /config/Config
fi
if [ -d /app/Config ] && [ ! -L /app/Config ]; then
cp -n /app/Config/* /config/Config/ 2>/dev/null || true
rm -rf /app/Config
fi
if [ ! -e /app/Config ]; then
ln -sf /config/Config /app/Config
fi
# Generate Settings.yaml from addon options for multi-account support
SETTINGS_FILE="/config/Config/Settings.yaml"
ACCOUNT_COUNT=$(jq '.Accounts // [] | length' /data/options.json 2>/dev/null || echo 0)
if [ "$ACCOUNT_COUNT" -gt 0 ]; then
bashio::log.info "Configuring ${ACCOUNT_COUNT} account(s) from Accounts list"
{
echo "Accounts:"
for i in $(seq 0 $((ACCOUNT_COUNT - 1))); do
SERVER_URL=$(jq -r ".Accounts[${i}].ImmichServerUrl" /data/options.json)
API_KEY=$(jq -r ".Accounts[${i}].ApiKey" /data/options.json)
# Escape single quotes for YAML single-quoted strings
SERVER_URL="${SERVER_URL//\'/\'\'}"
API_KEY="${API_KEY//\'/\'\'}"
echo " - ImmichServerUrl: '${SERVER_URL}'"
echo " ApiKey: '${API_KEY}'"
bashio::log.info " Account $((i + 1)): ${SERVER_URL}"
done
} > "${SETTINGS_FILE}"
chmod 600 "${SETTINGS_FILE}"
bashio::log.info "Settings.yaml generated at ${SETTINGS_FILE}"
elif bashio::config.has_value 'ApiKey' && bashio::config.has_value 'ImmichServerUrl'; then
bashio::log.info "Using single account configuration"
SERVER_URL=$(bashio::config 'ImmichServerUrl')
API_KEY=$(bashio::config 'ApiKey')
# Escape single quotes for YAML single-quoted strings
SERVER_URL="${SERVER_URL//\'/\'\'}"
API_KEY="${API_KEY//\'/\'\'}"
{
echo "Accounts:"
echo " - ImmichServerUrl: '${SERVER_URL}'"
echo " ApiKey: '${API_KEY}'"
} > "${SETTINGS_FILE}"
chmod 600 "${SETTINGS_FILE}"
bashio::log.info "Settings.yaml generated at ${SETTINGS_FILE}"
else
bashio::log.fatal "No accounts configured! Set either 'Accounts' list or both 'ApiKey' and 'ImmichServerUrl'"
exit 1
fi
export IMMICHFRAME_CONFIG_PATH=/config/Config
exec dotnet ImmichFrame.WebApi.dll

View File

@@ -1,4 +1,8 @@
## v5.4.0-2 (2026-03-16)
- Fix: Replace update-resolv-conf script that uses systemd-resolved (unavailable in containers) with one that directly updates /etc/resolv.conf
## v5.4.0 (2026-03-14)
- Update to latest version from haugene/docker-transmission-openvpn (changelog : https://github.com/haugene/docker-transmission-openvpn/releases)
- The Home Assistant project has deprecated support for the armv7, armhf and i386 architectures. Support wil be fully dropped in the upcoming Home Assistant 2025.12 release

View File

@@ -138,4 +138,4 @@ schema:
slug: transmission_openvpn
udev: true
url: https://github.com/alexbelgium/hassio-addons
version: "v5.4.0"
version: "v5.4.0-2"

View File

@@ -0,0 +1,57 @@
#!/bin/bash
# OpenVPN update-resolv-conf replacement for containerized environments
# The default script from the base image uses systemd-resolved via D-Bus,
# which is unavailable in Home Assistant add-on containers.
# This script directly updates /etc/resolv.conf instead.
[ "$script_type" ] || exit 0
case "$script_type" in
up)
# Backup original resolv.conf
if [ ! -f /etc/resolv.conf.ovpn-bak ]; then
cp /etc/resolv.conf /etc/resolv.conf.ovpn-bak 2>/dev/null || true
fi
dns_servers=""
dns_domain=""
dns_search=""
# Parse foreign_option_* environment variables set by OpenVPN
for optionname in ${!foreign_option_*}; do
option="${!optionname}"
case "$option" in
dhcp-option\ DNS\ *)
dns_servers="${dns_servers} ${option#dhcp-option DNS }"
;;
dhcp-option\ DOMAIN\ *)
dns_domain="${option#dhcp-option DOMAIN }"
;;
dhcp-option\ DOMAIN-SEARCH\ *)
dns_search="${dns_search} ${option#dhcp-option DOMAIN-SEARCH }"
;;
esac
done
# Write new resolv.conf with VPN DNS servers
if [ -n "$dns_servers" ]; then
{
for server in $dns_servers; do
echo "nameserver $server"
done
[ -n "$dns_domain" ] && echo "domain $dns_domain"
[ -n "$dns_search" ] && echo "search${dns_search}"
} > /etc/resolv.conf
fi
;;
down)
# Restore original resolv.conf
if [ -f /etc/resolv.conf.ovpn-bak ]; then
cp /etc/resolv.conf.ovpn-bak /etc/resolv.conf
rm -f /etc/resolv.conf.ovpn-bak
fi
;;
esac
exit 0