[ADD] vpn install : vérifier la présence de vpnc-script

openconnect appelle vpnc-script pour poser les routes et le DNS. Il vient
d'un paquet distinct, dont le nom change de famille en famille et qui
l'installe à des endroits différents. C'est un FICHIER qu'on cherche, pas
un binaire du PATH : le contrôle des binaires ne peut donc pas le voir.

Sans lui, la session s'ouvre, openconnect démarre, et l'interface tun
n'apparaît jamais. La panne se manifeste trois étages au-dessus du paquet
absent, sur un symptôme qui ne l'accuse pas. L'installateur nomme
désormais le paquet à poser, par famille de distribution.

--- EN ---

openconnect calls vpnc-script to lay down routes and DNS. It ships in a
separate package whose name varies by family and which installs it at
different paths. It is a FILE we look for, not a binary on the PATH, so
the binary check cannot see it.

Without it the session opens, openconnect starts, and the tun interface
never appears. The failure surfaces three stages above the missing
package, on a symptom that does not accuse it. The installer now names
the package to install, per distribution family.

Assisted-by: Claude Opus 5
This commit is contained in:
Mathieu Benoit 2026-09-04 09:50:20 +00:00
parent 9d51ee7fac
commit 50187ece85

View file

@ -153,14 +153,47 @@ binaries_for() {
esac
}
# Le script que openconnect appelle pour poser routes et DNS. Il vient d'un
# paquet à part, dont le nom change de famille en famille, et il s'installe à
# des endroits différents : c'est un FICHIER qu'on cherche, pas un binaire du
# PATH, donc `binaries_for` ne peut pas le voir.
#
# Sans lui, la session s'ouvre, openconnect se lance, et l'interface tun
# n'apparaît jamais : le montage échoue trois étages plus haut, sur un
# symptôme qui n'accuse pas le paquet manquant.
VPNC_SCRIPT_PATHS="
/etc/vpnc/vpnc-script
/usr/share/vpnc-scripts/vpnc-script
/usr/libexec/openconnect/vpnc-script
/usr/lib/openconnect/vpnc-script
"
verify_vpnc_script() {
local fam="$1" path package
for path in ${VPNC_SCRIPT_PATHS}; do
if [ -x "$path" ]; then
log "vpnc-script : ${path}"
return 0
fi
done
case "$fam" in
rhel|suse) package="vpnc-script" ;;
*) package="vpnc-scripts" ;;
esac
die "vpnc-script introuvable — installer le paquet ${package}"
}
verify() {
local driver="$1" missing=""
local driver="$1" fam="$2" missing=""
for b in $(binaries_for "$driver"); do
command -v "$b" >/dev/null || missing="${missing} ${b}"
done
if [ -n "$missing" ]; then
die "toujours absents après installation :${missing}"
fi
if [ "$driver" = "openconnect" ]; then
verify_vpnc_script "$fam"
fi
log "vérifié : tout est en place pour ${driver}"
}
@ -180,7 +213,7 @@ main() {
for driver in ${drivers}; do
log "── ${driver} ──"
install_packages "$fam" "$(packages_for "$driver" "$fam")"
verify "$driver"
verify "$driver" "$fam"
done
disable_autostart
log "Terminé. Monter un tunnel : ./script/vpn/vpn.py up --profile <nom>"