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
d4e4f47760
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
|
# v0.8.27 — Wachtwoorden, wachtrijen, snelheid en versies
|
||||||
|
|
||||||
Eerste stabiele uitgave sinds v0.8.12. Wie vanaf die versie bijwerkt, krijgt de
|
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"
|
SCRIPT_VERSIE="1.2"
|
||||||
GIT_HOST="git.ramonbesselink.nl"
|
GIT_HOST="git.ramonbesselink.nl"
|
||||||
|
GIT_SCHEMA="https"
|
||||||
|
HOST_EXPLICIET=0
|
||||||
GIT_PAD="bes-r/server-up"
|
GIT_PAD="bes-r/server-up"
|
||||||
BRANCH="main"
|
BRANCH="main"
|
||||||
DOEL="/opt/server-up"
|
DOEL="/opt/server-up"
|
||||||
|
|
@ -118,7 +120,15 @@ Gebruik: install.sh [opties]
|
||||||
--bind ADRES Waarop de poort luistert (standaard: ${BIND})
|
--bind ADRES Waarop de poort luistert (standaard: ${BIND})
|
||||||
Gebruik 0.0.0.0 om er van buiten de server bij te kunnen,
|
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.
|
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
|
--token TOKEN Toegangstoken, als je git-repo niet openbaar is
|
||||||
--base-dir PAD Hoofdmap voor stacks, appdata en backups
|
--base-dir PAD Hoofdmap voor stacks, appdata en backups
|
||||||
(standaard: /opt/serverup). Later wijzigen kan via
|
(standaard: /opt/serverup). Later wijzigen kan via
|
||||||
|
|
@ -157,6 +167,27 @@ Voorbeelden:
|
||||||
UITLEG
|
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 ───────────────────────────────────────────────────────────────
|
# ── Argumenten ───────────────────────────────────────────────────────────────
|
||||||
while [ $# -gt 0 ]; do
|
while [ $# -gt 0 ]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
|
|
@ -164,6 +195,7 @@ while [ $# -gt 0 ]; do
|
||||||
--port) POORT="${2:?--port vereist een nummer}"; POORT_EXPLICIET=1; shift 2 ;;
|
--port) POORT="${2:?--port vereist een nummer}"; POORT_EXPLICIET=1; shift 2 ;;
|
||||||
--bind) BIND="${2:?--bind vereist een adres}"; BIND_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 ;;
|
--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 ;;
|
--token) TOKEN="${2:?--token vereist een waarde}"; shift 2 ;;
|
||||||
--user) GEBRUIKER="${2:?--user vereist een accountnaam}"
|
--user) GEBRUIKER="${2:?--user vereist een accountnaam}"
|
||||||
GEBRUIKER_EXPLICIET=1; shift 2 ;;
|
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
|
# 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
|
# leest het via een credential-helper, curl via --config; in beide gevallen
|
||||||
# staat alleen het pád op de opdrachtregel.
|
# 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=""
|
TOKEN_BESTAND=""
|
||||||
CURL_BESTAND=""
|
CURL_BESTAND=""
|
||||||
|
|
@ -373,6 +405,13 @@ haal_broncode() {
|
||||||
# installatie is er niets om naar terug te gaan.
|
# installatie is er niets om naar terug te gaan.
|
||||||
VORIGE_COMMIT="$($SUDO git -C "$DOEL" rev-parse HEAD 2>/dev/null || echo '')"
|
VORIGE_COMMIT="$($SUDO git -C "$DOEL" rev-parse HEAD 2>/dev/null || echo '')"
|
||||||
[ -n "$VORIGE_COMMIT" ] && log "Huidige versie: $(printf '%.9s' "$VORIGE_COMMIT")"
|
[ -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"
|
git_doe -C "$DOEL" fetch --depth 1 origin "$BRANCH"
|
||||||
# FETCH_HEAD en niet origin/$BRANCH: een tag krijgt geen origin/-ref,
|
# FETCH_HEAD en niet origin/$BRANCH: een tag krijgt geen origin/-ref,
|
||||||
# dus `--branch v0.7.92-beta` installeerde prima maar kon daarna nooit
|
# 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."
|
waarschuw "Klonen mislukte; ik probeer het archief."
|
||||||
fi
|
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"
|
log "Downloaden: $archief"
|
||||||
if [ "$DROOG" -eq 0 ]; then
|
if [ "$DROOG" -eq 0 ]; then
|
||||||
tijdelijk="$(mktemp -d)"
|
tijdelijk="$(mktemp -d)"
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ def test_geen_bashismen():
|
||||||
def test_help_werkt_en_noemt_alle_opties():
|
def test_help_werkt_en_noemt_alle_opties():
|
||||||
r = _draai("--help")
|
r = _draai("--help")
|
||||||
assert r.returncode == 0
|
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",
|
"--update", "--uninstall", "--yes", "--dry-run",
|
||||||
"--admin", "--admin-password-file", "--create-admin"):
|
"--admin", "--admin-password-file", "--create-admin"):
|
||||||
assert optie in r.stdout, f"{optie} niet gedocumenteerd in --help"
|
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
|
assert "eigen koppeling, maar niet in de container" in blok
|
||||||
# De uitweg hoort erbij te staan, anders weet je nog niets.
|
# De uitweg hoort erbij te staan, anders weet je nog niets.
|
||||||
assert "docker-compose.yml" in blok
|
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