release: v0.8.28
install.sh krijgt --host, zodat een server die de ingebouwde hostnaam niet kan oplossen toch bij de broncode kan. Bij een bestaande installatie wordt de git-remote meteen omgezet, anders had de optie daar geen effect. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H9Vcwu7owJZ3nj5dCf4VFT
This commit is contained in:
parent
ac3a357ed7
commit
850a80f86b
4 changed files with 108 additions and 5 deletions
16
CHANGELOG.md
16
CHANGELOG.md
|
|
@ -1,3 +1,19 @@
|
|||
# v0.8.28 — Installeren vanaf een ander adres
|
||||
|
||||
De ingebouwde hostnaam in `install.sh` lost niet overal op. Staat je Forgejo
|
||||
achter een naam die alleen op je eigen netwerk werkt, dan strandt bijwerken
|
||||
vanaf een andere locatie op `could not resolve host` — ook door een tunnel,
|
||||
want die repareert de naam niet.
|
||||
|
||||
- **`--host ADRES`** geeft aan waar de broncode staat: een naam, een IP of een
|
||||
tailnet-adres. Een schema mag mee (`--host http://10.0.20.22:3000`), want een
|
||||
IP over https levert een certificaatfout op.
|
||||
- **Een bestaande installatie gaat mee.** Die haalt op via de remote die in de
|
||||
kloon staat — precies het adres dat het niet doet. Met `--host` wordt die
|
||||
remote eerst omgezet, zodat bijwerken daarna vanzelf via het nieuwe adres
|
||||
gaat.
|
||||
- **`--branch` accepteert ook een tag**, en dat staat nu ook in de hulptekst.
|
||||
|
||||
# v0.8.27 — Wachtwoorden, wachtrijen, snelheid en versies
|
||||
|
||||
Eerste stabiele uitgave sinds v0.8.12. Wie vanaf die versie bijwerkt, krijgt de
|
||||
|
|
|
|||
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
|||
0.8.27
|
||||
0.8.28
|
||||
|
|
|
|||
45
install.sh
45
install.sh
|
|
@ -15,6 +15,8 @@ set -eu
|
|||
|
||||
SCRIPT_VERSIE="1.2"
|
||||
GIT_HOST="git.ramonbesselink.nl"
|
||||
GIT_SCHEMA="https"
|
||||
HOST_EXPLICIET=0
|
||||
GIT_PAD="bes-r/server-up"
|
||||
BRANCH="main"
|
||||
DOEL="/opt/server-up"
|
||||
|
|
@ -118,7 +120,15 @@ Gebruik: install.sh [opties]
|
|||
--bind ADRES Waarop de poort luistert (standaard: ${BIND})
|
||||
Gebruik 0.0.0.0 om er van buiten de server bij te kunnen,
|
||||
maar zet er dan wel een reverse proxy met TLS voor.
|
||||
--branch NAAM Branch om te installeren (standaard: ${BRANCH})
|
||||
--branch NAAM Branch of tag om te installeren (standaard: ${BRANCH})
|
||||
--host ADRES Waar de broncode staat, als ${GIT_HOST} daar niet
|
||||
oplost of niet bereikbaar is. Een naam, een IP of een
|
||||
tailnet-adres; een schema mag mee omdat een IP over https
|
||||
een certificaatfout geeft:
|
||||
--host 10.0.20.22
|
||||
--host http://10.0.20.22:3000
|
||||
Bij een bestaande installatie wordt de git-remote meteen
|
||||
omgezet, zodat bijwerken daarna via dit adres gaat.
|
||||
--token TOKEN Toegangstoken, als je git-repo niet openbaar is
|
||||
--base-dir PAD Hoofdmap voor stacks, appdata en backups
|
||||
(standaard: /opt/serverup). Later wijzigen kan via
|
||||
|
|
@ -157,6 +167,27 @@ Voorbeelden:
|
|||
UITLEG
|
||||
}
|
||||
|
||||
# Waar de broncode vandaan komt. Standaard de naam hierboven, maar die is niet
|
||||
# overal te gebruiken: staat je Forgejo achter een naam die alleen thuis
|
||||
# oplost, dan kom je er vanaf een andere locatie (of door een tunnel) niet uit.
|
||||
# Met `--host` geef je dan het adres op dat daar wél werkt — een IP, een
|
||||
# tailnet-adres, een andere naam — zonder aan /etc/hosts te komen.
|
||||
#
|
||||
# Een IP over https levert een certificaatfout op, dus een schema mag mee:
|
||||
# --host 10.0.20.22 → https://10.0.20.22
|
||||
# --host http://10.0.20.22:3000 → precies dat
|
||||
zet_host() {
|
||||
_waarde="${1%/}"
|
||||
case "$_waarde" in
|
||||
http://*) GIT_SCHEMA="http"; _waarde="${_waarde#http://}" ;;
|
||||
https://*) GIT_SCHEMA="https"; _waarde="${_waarde#https://}" ;;
|
||||
esac
|
||||
# Alles achter de eerste schuine streep is een pad; dat komt uit GIT_PAD.
|
||||
GIT_HOST="${_waarde%%/*}"
|
||||
[ -n "$GIT_HOST" ] || fout "--host vereist een adres, bijvoorbeeld 10.0.20.22:3000"
|
||||
HOST_EXPLICIET=1
|
||||
}
|
||||
|
||||
# ── Argumenten ───────────────────────────────────────────────────────────────
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
|
|
@ -164,6 +195,7 @@ while [ $# -gt 0 ]; do
|
|||
--port) POORT="${2:?--port vereist een nummer}"; POORT_EXPLICIET=1; shift 2 ;;
|
||||
--bind) BIND="${2:?--bind vereist een adres}"; BIND_EXPLICIET=1; shift 2 ;;
|
||||
--branch) BRANCH="${2:?--branch vereist een naam}"; shift 2 ;;
|
||||
--host) zet_host "${2:?--host vereist een adres}"; shift 2 ;;
|
||||
--token) TOKEN="${2:?--token vereist een waarde}"; shift 2 ;;
|
||||
--user) GEBRUIKER="${2:?--user vereist een accountnaam}"
|
||||
GEBRUIKER_EXPLICIET=1; shift 2 ;;
|
||||
|
|
@ -324,7 +356,7 @@ controleer_docker() {
|
|||
# In plaats daarvan: een bestand met modus 0600 dat na afloop weer weg is. Git
|
||||
# leest het via een credential-helper, curl via --config; in beide gevallen
|
||||
# staat alleen het pád op de opdrachtregel.
|
||||
bron_url() { printf 'https://%s/%s.git' "$GIT_HOST" "$GIT_PAD"; }
|
||||
bron_url() { printf '%s://%s/%s.git' "$GIT_SCHEMA" "$GIT_HOST" "$GIT_PAD"; }
|
||||
|
||||
TOKEN_BESTAND=""
|
||||
CURL_BESTAND=""
|
||||
|
|
@ -373,6 +405,13 @@ haal_broncode() {
|
|||
# installatie is er niets om naar terug te gaan.
|
||||
VORIGE_COMMIT="$($SUDO git -C "$DOEL" rev-parse HEAD 2>/dev/null || echo '')"
|
||||
[ -n "$VORIGE_COMMIT" ] && log "Huidige versie: $(printf '%.9s' "$VORIGE_COMMIT")"
|
||||
# Een bestaande kloon haalt op via de remote die erin staat, en die
|
||||
# wijst naar de naam van toen. Juist bij --host is dat het adres dat het
|
||||
# niet doet — dus eerst omzetten, anders heeft de optie geen effect.
|
||||
if [ "$HOST_EXPLICIET" -eq 1 ]; then
|
||||
log "Bron omgezet naar $(bron_url)"
|
||||
doe $SUDO git -C "$DOEL" remote set-url origin "$(bron_url)"
|
||||
fi
|
||||
git_doe -C "$DOEL" fetch --depth 1 origin "$BRANCH"
|
||||
# FETCH_HEAD en niet origin/$BRANCH: een tag krijgt geen origin/-ref,
|
||||
# dus `--branch v0.7.92-beta` installeerde prima maar kon daarna nooit
|
||||
|
|
@ -396,7 +435,7 @@ haal_broncode() {
|
|||
waarschuw "Klonen mislukte; ik probeer het archief."
|
||||
fi
|
||||
|
||||
archief="https://${GIT_HOST}/${GIT_PAD}/archive/${BRANCH}.tar.gz"
|
||||
archief="${GIT_SCHEMA}://${GIT_HOST}/${GIT_PAD}/archive/${BRANCH}.tar.gz"
|
||||
log "Downloaden: $archief"
|
||||
if [ "$DROOG" -eq 0 ]; then
|
||||
tijdelijk="$(mktemp -d)"
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ def test_geen_bashismen():
|
|||
def test_help_werkt_en_noemt_alle_opties():
|
||||
r = _draai("--help")
|
||||
assert r.returncode == 0
|
||||
for optie in ("--dir", "--port", "--bind", "--branch", "--token",
|
||||
for optie in ("--dir", "--port", "--bind", "--branch", "--host", "--token",
|
||||
"--update", "--uninstall", "--yes", "--dry-run",
|
||||
"--admin", "--admin-password-file", "--create-admin"):
|
||||
assert optie in r.stdout, f"{optie} niet gedocumenteerd in --help"
|
||||
|
|
@ -1213,3 +1213,51 @@ def test_doctor_kijkt_naar_koppelingen_onder_base_dir():
|
|||
assert "eigen koppeling, maar niet in de container" in blok
|
||||
# De uitweg hoort erbij te staan, anders weet je nog niets.
|
||||
assert "docker-compose.yml" in blok
|
||||
|
||||
|
||||
# ── Een andere bron opgeven ──────────────────────────────────────────────────
|
||||
# De ingebouwde hostnaam lost niet overal op: staat je Forgejo achter een naam
|
||||
# die alleen thuis werkt, dan kom je er vanaf een andere locatie niet uit en
|
||||
# strandt het bijwerken op "could not resolve host".
|
||||
|
||||
def test_host_wordt_in_de_bron_url_gebruikt(tmp_path):
|
||||
r = _draai("--dry-run", "--yes", "--dir", str(tmp_path / "su"),
|
||||
"--host", "10.0.20.22")
|
||||
assert "https://10.0.20.22/bes-r/server-up" in r.stdout, r.stdout[-800:]
|
||||
assert "git.ramonbesselink.nl" not in r.stdout
|
||||
|
||||
|
||||
def test_host_met_schema_en_poort(tmp_path):
|
||||
"""Een IP over https geeft een certificaatfout, dus http moet kunnen."""
|
||||
r = _draai("--dry-run", "--yes", "--dir", str(tmp_path / "su"),
|
||||
"--host", "http://10.0.20.22:3000")
|
||||
assert "http://10.0.20.22:3000/bes-r/server-up" in r.stdout
|
||||
|
||||
|
||||
def test_host_negeert_een_pad_erachter(tmp_path):
|
||||
r = _draai("--dry-run", "--yes", "--dir", str(tmp_path / "su"),
|
||||
"--host", "https://voorbeeld.nl/iets/anders/")
|
||||
assert "https://voorbeeld.nl/bes-r/server-up" in r.stdout
|
||||
|
||||
|
||||
def test_host_zonder_waarde_stopt(tmp_path):
|
||||
r = _draai("--dry-run", "--host")
|
||||
assert r.returncode != 0
|
||||
assert "--host" in (r.stdout + r.stderr)
|
||||
|
||||
|
||||
def test_zonder_host_blijft_de_standaard_staan(tmp_path):
|
||||
r = _draai("--dry-run", "--yes", "--dir", str(tmp_path / "su"))
|
||||
assert "git.ramonbesselink.nl" in r.stdout
|
||||
|
||||
|
||||
def test_bestaande_installatie_krijgt_de_nieuwe_remote(tmp_path):
|
||||
"""Een bestaande kloon haalt op via de remote die erin staat — precies het
|
||||
adres dat het niet doet. Zonder omzetten heeft --host geen effect."""
|
||||
if not shutil.which("git"):
|
||||
pytest.skip("git niet aanwezig")
|
||||
doel = tmp_path / "su"
|
||||
(doel / ".git").mkdir(parents=True)
|
||||
r = _draai("--dry-run", "--yes", "--dir", str(doel),
|
||||
"--host", "100.64.0.5")
|
||||
assert "remote set-url origin https://100.64.0.5/bes-r/server-up.git" in r.stdout
|
||||
|
|
|
|||
Loading…
Reference in a new issue