🐛 Fix opengist external-url never being substituted 🐛

Found while build-testing the freshly regenerated image in a temp
data/config dir: opengist served REPLACE_HOSTNAME literally in every
generated URL, and http.git-enabled routes redirected to bogus paths,
because __update_conf_files() was patching a config file
($ETC_DIR/opengist.yaml) that doesn't exist -- the shipped config is
named config.yaml. Also normalized the substituted value: opengist's
external-url must be a full URL (scheme+host), not a bare hostname,
or it breaks absolute-URL/redirect generation; ssh.external-domain
must stay a bare domain, so it now gets its own REPLACE_SSH_HOSTNAME
token instead of reusing the schemed value.

Verified via: docker build, then a container run against a scratch
temp dir with data/config volumes -- health check reports healthy,
config.yaml shows the correct external-url/ssh.external-domain, and
/-/all, /-/login, /-/register all return 200 with real opengist HTML.

- rootfs/usr/local/etc/docker/init.d/00-opengist.sh: __update_conf_files
  now targets $ETC_DIR/config.yaml (was opengist.yaml, a nonexistent
  file), prefixes sysname with http:// when no scheme is present for
  external-url, and replaces ssh.external-domain via a separate
  REPLACE_SSH_HOSTNAME token using the unschemed hostname
- rootfs/tmp/etc/opengist/config.yaml: ssh.external-domain placeholder
  changed from REPLACE_HOSTNAME to REPLACE_SSH_HOSTNAME
This commit is contained in:
2026-08-03 11:37:00 -04:00
parent ca23d7e592
commit b53c36f33d
2 changed files with 13 additions and 4 deletions
+1 -1
View File
@@ -47,7 +47,7 @@ ssh.host: 0.0.0.0
ssh.port: 7823
# Public domain for the Git SSH connection, if it has to be different from the HTTP one.
ssh.external-domain: REPLACE_HOSTNAME
ssh.external-domain: REPLACE_SSH_HOSTNAME
# Path or alias to ssh-keygen executable. Default: ssh-keygen
ssh.keygen-executable: ssh-keygen
@@ -316,6 +316,14 @@ __update_conf_files() {
local exitCode=0
# set hostname
local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}"
# opengist's external-url must be a full URL (scheme + host); a bare hostname breaks
# absolute-URL generation (e.g. redirect Location headers). ssh.external-domain must
# stay a bare domain, so it gets its own token instead of reusing the schemed value.
local ssh_sysname="$sysname"
case "$sysname" in
*://*) ;;
*) sysname="http://$sysname" ;;
esac
# - - - - - - - - - - - - - - - - - - - - - - - - -
# delete files
#__rm ""
@@ -325,9 +333,10 @@ __update_conf_files() {
# - - - - - - - - - - - - - - - - - - - - - - - - -
# replace variables
__replace "REPLACE_HOSTNAME" "$sysname" "$ETC_DIR/opengist.yaml"
__replace "REPLACE_DATA_DIR" "$DATA_DIR" "$ETC_DIR/opengist.yaml"
__replace "REPLACE_SERVER_PORT" "$SERVICE_PORT" "$ETC_DIR/opengist.yaml"
__replace "REPLACE_HOSTNAME" "$sysname" "$ETC_DIR/config.yaml"
__replace "REPLACE_SSH_HOSTNAME" "$ssh_sysname" "$ETC_DIR/config.yaml"
__replace "REPLACE_DATA_DIR" "$DATA_DIR" "$ETC_DIR/config.yaml"
__replace "REPLACE_SERVER_PORT" "$SERVICE_PORT" "$ETC_DIR/config.yaml"
# replace variables recursively
# __find_replace "" "" "$CONF_DIR"