mint-image: WLAN-/Netzwerkverbindungsprofil ins Zielsystem uebernehmen

Neue image_deploy_install_network_profile() kopiert das von
export_connection_profile() (05_network.sh) geschuetzt abgelegte
Verbindungsprofil nach /etc/NetworkManager/system-connections/ im
Zielsystem - backend_launch() ruft das nach dem Mounten auf.

Nutzer-Feedback (01.09.2026, echter Hardware-Test): "WLAN-Information sind
nicht konsistent. Nach Reboot muss PSK neu eingegeben werden." Root Cause:
export_connection_profile() legte das Profil zwar unter
/run/tuxflotte/network/connection.nmconnection ab, aber niemand holte es
von dort ab - das frisch installierte System stand beim ersten Boot ohne
gespeichertes Profil da.
This commit is contained in:
Thomas Stallinger 2026-09-01 15:45:31 +02:00
parent 3739da37dc
commit 3f17885d55
2 changed files with 76 additions and 2 deletions

View File

@ -217,10 +217,20 @@ image_deploy_extract_image_from_url() {
local target="$2" local target="$2"
local pipe_status local pipe_status
# "--progress-bar" statt "--silent": mit Abstand der laengste Schritt
# der ganzen Installation (Minuten statt Sekunden) - Nutzer-Feedback
# (01.09.2026, echter Hardware-Test) wollte hier ausdruecklich eine
# sichtbare Fortschrittsanzeige statt einer stillen Wartezeit. Der
# Balken geht an stderr, unabhaengig vom stdout/stderr-Umleiten des
# restlichen Moduls (siehe TUXFLOTTE_VERBOSE_MODULES in utils.sh -
# 40_backend.sh bleibt deshalb bewusst von der Kreisel-Kompaktdarstellung
# ausgenommen, sonst waere dieser Balken fuer die Person vor dem Geraet
# unsichtbar).
#
# "|| true" verhindert, dass "set -e" hier sofort abbricht - der # "|| true" verhindert, dass "set -e" hier sofort abbricht - der
# eigentliche Fehlerfall wird gleich anhand von PIPESTATUS gezielt # eigentliche Fehlerfall wird gleich anhand von PIPESTATUS gezielt
# ausgewertet, statt die Pipeline roh durchschlagen zu lassen. # ausgewertet, statt die Pipeline roh durchschlagen zu lassen.
curl --silent --show-error --fail --location "${url}" | curl --progress-bar --show-error --fail --location "${url}" |
tar --zstd -xpf - -C "${target}" || true tar --zstd -xpf - -C "${target}" || true
pipe_status=("${PIPESTATUS[@]}") pipe_status=("${PIPESTATUS[@]}")
@ -235,6 +245,33 @@ image_deploy_extract_image_from_url() {
# /etc/fstab aus den tatsaechlichen Partitions-UUIDs neu erzeugen - kein # /etc/fstab aus den tatsaechlichen Partitions-UUIDs neu erzeugen - kein
# genfstab auf Debian/Mint verfuegbar (das ist ein Arch-Linux-Werkzeug), # genfstab auf Debian/Mint verfuegbar (das ist ein Arch-Linux-Werkzeug),
# blkid reicht fuer unseren einfachen Fall (Root + optional ESP) locker. # blkid reicht fuer unseren einfachen Fall (Root + optional ESP) locker.
# Uebernimmt das vom Netzwerkmodul exportierte, aktive NetworkManager-
# Verbindungsprofil (siehe export_connection_profile() in 05_network.sh)
# ins Zielsystem - ohne diesen Schritt bleibt das Profil nur unter
# /run/tuxflotte/network/... auf dem Boot-Medium liegen und geht beim
# Reboot ins frisch installierte System verloren. Live gefunden
# (01.09.2026, echter Hardware-Test): Kunde musste den WLAN-PSK nach dem
# ersten Boot erneut eingeben, weil genau dieser Kopierschritt fehlte.
# Keine Fatal-Bedingung, falls die Datei fehlt - das Provisionierungs-
# interface kann auch unmanaged/kabelgebunden ohne Profil gelaufen sein.
image_deploy_install_network_profile() {
local target="$1"
local profile_file="$2"
local dest_dir="${target}/etc/NetworkManager/system-connections"
local dest_name
[[ -n "${profile_file}" && -f "${profile_file}" ]] || return 0
dest_name="$(basename "${profile_file}")"
install -d --mode=0700 --owner=root --group=root "${dest_dir}" ||
{ image_deploy_fatal "Verzeichnis ${dest_dir} konnte nicht angelegt werden"; return 1; }
install --mode=0600 --owner=root --group=root \
"${profile_file}" "${dest_dir}/${dest_name}" ||
{ image_deploy_fatal "Verbindungsprofil konnte nicht nach ${dest_dir} kopiert werden"; return 1; }
}
image_deploy_write_fstab() { image_deploy_write_fstab() {
local target="$1" local target="$1"
local boot_part="$2" local boot_part="$2"

View File

@ -217,10 +217,20 @@ image_deploy_extract_image_from_url() {
local target="$2" local target="$2"
local pipe_status local pipe_status
# "--progress-bar" statt "--silent": mit Abstand der laengste Schritt
# der ganzen Installation (Minuten statt Sekunden) - Nutzer-Feedback
# (01.09.2026, echter Hardware-Test) wollte hier ausdruecklich eine
# sichtbare Fortschrittsanzeige statt einer stillen Wartezeit. Der
# Balken geht an stderr, unabhaengig vom stdout/stderr-Umleiten des
# restlichen Moduls (siehe TUXFLOTTE_VERBOSE_MODULES in utils.sh -
# 40_backend.sh bleibt deshalb bewusst von der Kreisel-Kompaktdarstellung
# ausgenommen, sonst waere dieser Balken fuer die Person vor dem Geraet
# unsichtbar).
#
# "|| true" verhindert, dass "set -e" hier sofort abbricht - der # "|| true" verhindert, dass "set -e" hier sofort abbricht - der
# eigentliche Fehlerfall wird gleich anhand von PIPESTATUS gezielt # eigentliche Fehlerfall wird gleich anhand von PIPESTATUS gezielt
# ausgewertet, statt die Pipeline roh durchschlagen zu lassen. # ausgewertet, statt die Pipeline roh durchschlagen zu lassen.
curl --silent --show-error --fail --location "${url}" | curl --progress-bar --show-error --fail --location "${url}" |
tar --zstd -xpf - -C "${target}" || true tar --zstd -xpf - -C "${target}" || true
pipe_status=("${PIPESTATUS[@]}") pipe_status=("${PIPESTATUS[@]}")
@ -235,6 +245,33 @@ image_deploy_extract_image_from_url() {
# /etc/fstab aus den tatsaechlichen Partitions-UUIDs neu erzeugen - kein # /etc/fstab aus den tatsaechlichen Partitions-UUIDs neu erzeugen - kein
# genfstab auf Debian/Mint verfuegbar (das ist ein Arch-Linux-Werkzeug), # genfstab auf Debian/Mint verfuegbar (das ist ein Arch-Linux-Werkzeug),
# blkid reicht fuer unseren einfachen Fall (Root + optional ESP) locker. # blkid reicht fuer unseren einfachen Fall (Root + optional ESP) locker.
# Uebernimmt das vom Netzwerkmodul exportierte, aktive NetworkManager-
# Verbindungsprofil (siehe export_connection_profile() in 05_network.sh)
# ins Zielsystem - ohne diesen Schritt bleibt das Profil nur unter
# /run/tuxflotte/network/... auf dem Boot-Medium liegen und geht beim
# Reboot ins frisch installierte System verloren. Live gefunden
# (01.09.2026, echter Hardware-Test): Kunde musste den WLAN-PSK nach dem
# ersten Boot erneut eingeben, weil genau dieser Kopierschritt fehlte.
# Keine Fatal-Bedingung, falls die Datei fehlt - das Provisionierungs-
# interface kann auch unmanaged/kabelgebunden ohne Profil gelaufen sein.
image_deploy_install_network_profile() {
local target="$1"
local profile_file="$2"
local dest_dir="${target}/etc/NetworkManager/system-connections"
local dest_name
[[ -n "${profile_file}" && -f "${profile_file}" ]] || return 0
dest_name="$(basename "${profile_file}")"
install -d --mode=0700 --owner=root --group=root "${dest_dir}" ||
{ image_deploy_fatal "Verzeichnis ${dest_dir} konnte nicht angelegt werden"; return 1; }
install --mode=0600 --owner=root --group=root \
"${profile_file}" "${dest_dir}/${dest_name}" ||
{ image_deploy_fatal "Verbindungsprofil konnte nicht nach ${dest_dir} kopiert werden"; return 1; }
}
image_deploy_write_fstab() { image_deploy_write_fstab() {
local target="$1" local target="$1"
local boot_part="$2" local boot_part="$2"