mise à jour du module debian
- support de jessie+ - possibilité de spécifier qu'une interface n'a pas de passerelle avec la syntaxe iface//-:ipsuffixes - support de la configuration de réseau partiel - support de la mise à jour de /etc/networks
This commit is contained in:
parent
e3cd3cec3f
commit
fbc1a5cc9b
151
lib/ulib/debian
151
lib/ulib/debian
|
@ -176,20 +176,40 @@ function network_fix_confbrs() {
|
||||||
|
|
||||||
function __network_fix_confips() {
|
function __network_fix_confips() {
|
||||||
local -a confips ipsuffixes ifaces ips
|
local -a confips ipsuffixes ifaces ips
|
||||||
local confip iface gateway ip suffix mainip
|
local confip iface gateway network ip suffix mainip
|
||||||
|
|
||||||
local mainiface="$1"
|
local mainiface="$1"
|
||||||
|
|
||||||
# recenser les interfaces et créer les tableaux __IFACE_ipspecs
|
# recenser les interfaces et créer les tableaux __IFACE_ipspecs
|
||||||
for confip in "${__nfc_confips[@]}"; do
|
for confip in "${__nfc_confips[@]}"; do
|
||||||
network_parse_confip "$confip" iface gateway ipsuffixes
|
network_parse_confip "$confip" iface gateway ipsuffixes
|
||||||
[ -n "$iface" ] || iface="$mainiface"
|
if [ -n "$iface" ]; then
|
||||||
array_addu ifaces "$iface"
|
network="${iface}_network"
|
||||||
eval "local ${iface}_gateway; local -a ${iface}_ipsuffixes"
|
if ! array_contains ifaces "$iface"; then
|
||||||
|
array_add ifaces "$iface"
|
||||||
|
eval "local ${iface}_gateway $network; local -a ${iface}_ipsuffixes"
|
||||||
|
fi
|
||||||
|
if [ -z "${!network}" -a -n "${ipsuffixes[0]}" ]; then
|
||||||
|
setv "$network" "$(ipcalc_network "${ipsuffixes[0]}")"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
# puis construire la liste des adresses IP associées à chaque interface
|
# puis construire la liste des adresses IP associées à chaque interface
|
||||||
for confip in "${__nfc_confips[@]}"; do
|
for confip in "${__nfc_confips[@]}"; do
|
||||||
network_parse_confip "$confip" iface gateway ipsuffixes
|
network_parse_confip "$confip" iface gateway ipsuffixes
|
||||||
|
# si aucune interface n'est spécifiée, sélectionner celle correspondant
|
||||||
|
# à la même adresse de réseau. sinon prendre $mainiface
|
||||||
|
if [ -z "$iface" ]; then
|
||||||
|
network="$(ipcalc_network "${ipsuffixes[0]}")"
|
||||||
|
local ip_iface ip_network
|
||||||
|
for ip_iface in "${ifaces[@]}"; do
|
||||||
|
ip_network="${ip_iface}_network"
|
||||||
|
if [ "${!ip_network}" == "$network" ]; then
|
||||||
|
iface="$ip_iface"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
[ -n "$iface" ] || iface="$mainiface"
|
[ -n "$iface" ] || iface="$mainiface"
|
||||||
# si la passerelle a déjà été spécifiée, la récupérer
|
# si la passerelle a déjà été spécifiée, la récupérer
|
||||||
local tmpgw="${iface}_gateway"
|
local tmpgw="${iface}_gateway"
|
||||||
|
@ -356,6 +376,7 @@ function __network_set_confips() {
|
||||||
array_from_lines ifaces "$(__network_valid_ifaces)"
|
array_from_lines ifaces "$(__network_valid_ifaces)"
|
||||||
for iface in "${ifaces[@]}"; do
|
for iface in "${ifaces[@]}"; do
|
||||||
__network_set_gateway "$iface"
|
__network_set_gateway "$iface"
|
||||||
|
[ -n "$gateway" ] || gateway=-
|
||||||
__network_set_confip "$iface" "$gateway" || continue
|
__network_set_confip "$iface" "$gateway" || continue
|
||||||
array_add confips "$confip"
|
array_add confips "$confip"
|
||||||
done
|
done
|
||||||
|
@ -462,6 +483,7 @@ BEGIN {
|
||||||
have_iface = 0
|
have_iface = 0
|
||||||
have_method = 0 # static ou dhcp
|
have_method = 0 # static ou dhcp
|
||||||
have_gateway = ipsuffixes[1] == "dhcp" || gateway == ""
|
have_gateway = ipsuffixes[1] == "dhcp" || gateway == ""
|
||||||
|
if (gateway == "none" || gateway == "-") gateway = ""
|
||||||
array_new(have_ips)
|
array_new(have_ips)
|
||||||
array_new(have_ip_ups)
|
array_new(have_ip_ups)
|
||||||
array_new(have_ip_downs)
|
array_new(have_ip_downs)
|
||||||
|
@ -692,6 +714,8 @@ function network_interfaces_add_confip() {
|
||||||
local nifile="${4:-$__DEBIAN_NETWORK_INTERFACES}"
|
local nifile="${4:-$__DEBIAN_NETWORK_INTERFACES}"
|
||||||
local mainip netmask method
|
local mainip netmask method
|
||||||
|
|
||||||
|
[ "$gateway" == "none" -o "$gateway" == "-" ] && gateway=
|
||||||
|
|
||||||
network_parse_ipsuffix "${ipsuffixes[0]}" mainip netmask
|
network_parse_ipsuffix "${ipsuffixes[0]}" mainip netmask
|
||||||
if [ "$mainip" == "dhcp" ]; then
|
if [ "$mainip" == "dhcp" ]; then
|
||||||
mainip=
|
mainip=
|
||||||
|
@ -928,7 +952,9 @@ $ip$TAB$host $hostname" "$tmpfile"
|
||||||
}
|
}
|
||||||
|
|
||||||
function network_config() {
|
function network_config() {
|
||||||
# (Re)configurer le réseau sur l'hôte courant.
|
# (Re)configurer le réseau sur l'hôte courant. Des efforts sont faits pour
|
||||||
|
# ne mettre à jour les fichiers que si c'est nécessaire. Si un des arguments
|
||||||
|
# $1..$6 n'est pas spécifié, il est ignoré.
|
||||||
# $1 (host) est le nom d'hôte.
|
# $1 (host) est le nom d'hôte.
|
||||||
# $2 (confips) est le nom d'un tableau contenant la configuration des
|
# $2 (confips) est le nom d'un tableau contenant la configuration des
|
||||||
# adresses ips pour les interfaces.
|
# adresses ips pour les interfaces.
|
||||||
|
@ -939,9 +965,12 @@ function network_config() {
|
||||||
# son interface. En principe, l'interface principale est le premier bridge
|
# son interface. En principe, l'interface principale est le premier bridge
|
||||||
# défini ou la première interface définie.
|
# défini ou la première interface définie.
|
||||||
# $5 (reset_interfaces) spécifie de ne pas chercher à mettre à jour le
|
# $5 (reset_interfaces) spécifie de ne pas chercher à mettre à jour le
|
||||||
# fichier /etc/network/interfaces, mais de le recréer depuis zéro.
|
# fichier /etc/network/interfaces, mais de le recréer depuis zéro. la valeur
|
||||||
|
# 'force' spécifie de recréer le fichier même si ce n'est pas nécessaire à
|
||||||
|
# priori.
|
||||||
# $6 (oldhost) est le nom d'hôte actuel, avant la modification
|
# $6 (oldhost) est le nom d'hôte actuel, avant la modification
|
||||||
# Si un des arguments n'est pas spécifié, il est ignoré.
|
# $7(=/etc/network/interfaces) est le fichier à mettre à jour
|
||||||
|
#
|
||||||
# Le tableau confips doit contenir des définitions d'une des formes
|
# Le tableau confips doit contenir des définitions d'une des formes
|
||||||
# suivantes:
|
# suivantes:
|
||||||
# [[iface][//gateway]:]address[/suffix],...
|
# [[iface][//gateway]:]address[/suffix],...
|
||||||
|
@ -952,6 +981,7 @@ function network_config() {
|
||||||
# interface, seule la première spécification d'adresse IP tient compte de
|
# interface, seule la première spécification d'adresse IP tient compte de
|
||||||
# l'argument gateway. Les autres spécifications définissent des adresses IP
|
# l'argument gateway. Les autres spécifications définissent des adresses IP
|
||||||
# supplémentaires pour l'interface.
|
# supplémentaires pour l'interface.
|
||||||
|
#
|
||||||
# Le tableau brs doit contenir des définitions de la forme suivante:
|
# Le tableau brs doit contenir des définitions de la forme suivante:
|
||||||
# br:ifaces,...
|
# br:ifaces,...
|
||||||
# br est le nom du bridge, e.g. br0. ifaces est une liste d'interfaces
|
# br est le nom du bridge, e.g. br0. ifaces est une liste d'interfaces
|
||||||
|
@ -967,6 +997,7 @@ function network_config() {
|
||||||
local -a confbrs; array_copy confbrs __nc_confbrs
|
local -a confbrs; array_copy confbrs __nc_confbrs
|
||||||
local mainiface="$4" reset_interfaces="$5" oldhost="$6"
|
local mainiface="$4" reset_interfaces="$5" oldhost="$6"
|
||||||
local modified
|
local modified
|
||||||
|
local nifile="${7:-$__DEBIAN_NETWORK_INTERFACES}"
|
||||||
|
|
||||||
network_fix_confs confbrs confips "$mainiface"
|
network_fix_confs confbrs confips "$mainiface"
|
||||||
|
|
||||||
|
@ -1001,13 +1032,16 @@ function network_config() {
|
||||||
|
|
||||||
# vérifier si une modification est nécessaire
|
# vérifier si une modification est nécessaire
|
||||||
local modify
|
local modify
|
||||||
for confbr in "${confbrs[@]}"; do
|
[ "$reset_interfaces" == force ] && modify=1
|
||||||
network_parse_confbr "$confbr" br ifaces
|
if [ -z "$modify" ]; then
|
||||||
if ! network_interfaces_check_confbr "$br" iface; then
|
for confbr in "${confbrs[@]}"; do
|
||||||
modify=1
|
network_parse_confbr "$confbr" br ifaces
|
||||||
break
|
if ! network_interfaces_check_confbr "$br" iface; then
|
||||||
fi
|
modify=1
|
||||||
done
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
if [ -z "$modify" ]; then
|
if [ -z "$modify" ]; then
|
||||||
for confip in "${confips[@]}"; do
|
for confip in "${confips[@]}"; do
|
||||||
network_parse_confip "$confip" iface gateway ipsuffixes
|
network_parse_confip "$confip" iface gateway ipsuffixes
|
||||||
|
@ -1022,13 +1056,17 @@ function network_config() {
|
||||||
if [ -n "$modify" ]; then
|
if [ -n "$modify" ]; then
|
||||||
# faire une copie de travail
|
# faire une copie de travail
|
||||||
local interfaces; ac_set_tmpfile interfaces
|
local interfaces; ac_set_tmpfile interfaces
|
||||||
cat "$__DEBIAN_NETWORK_INTERFACES" >"$interfaces"
|
cat "$nifile" >"$interfaces"
|
||||||
|
|
||||||
if [ -n "$reset_interfaces" ]; then
|
if [ -n "$reset_interfaces" ]; then
|
||||||
|
local source_itfd
|
||||||
|
check_sysinfos -d debian -v jessie+ && source_itfd=1
|
||||||
echo >"$interfaces" "\
|
echo >"$interfaces" "\
|
||||||
# This file describes the network interfaces available on your system
|
# This file describes the network interfaces available on your system
|
||||||
# and how to activate them. For more information, see interfaces(5).
|
# and how to activate them. For more information, see interfaces(5).
|
||||||
|
${source_itfd:+
|
||||||
|
source /etc/network/interfaces.d/*
|
||||||
|
}
|
||||||
# The loopback network interface
|
# The loopback network interface
|
||||||
auto lo
|
auto lo
|
||||||
iface lo inet loopback
|
iface lo inet loopback
|
||||||
|
@ -1059,21 +1097,21 @@ iface lo inet loopback
|
||||||
|
|
||||||
# Fin de traitement
|
# Fin de traitement
|
||||||
if [ -n "$__DEBIAN_NETWORK_DEVEL_SHOW_MODIFS" ]; then
|
if [ -n "$__DEBIAN_NETWORK_DEVEL_SHOW_MODIFS" ]; then
|
||||||
if testdiff "$interfaces" "$__DEBIAN_NETWORK_INTERFACES"; then
|
if testdiff "$interfaces" "$nifile"; then
|
||||||
uecho "Setting $__DEBIAN_NETWORK_INTERFACES to:"
|
uecho "Setting $nifile to:"
|
||||||
cat "$interfaces" | sed 's/^/ /g' 1>&2
|
cat "$interfaces" | sed 's/^/ /g' 1>&2
|
||||||
else
|
else
|
||||||
uecho "$__DEBIAN_NETWORK_INTERFACES: pas de modifications"
|
uecho "$nifile: pas de modifications"
|
||||||
fi
|
fi
|
||||||
elif testdiff "$interfaces" "$__DEBIAN_NETWORK_INTERFACES"; then
|
elif testdiff "$interfaces" "$nifile"; then
|
||||||
__network_backup "$__DEBIAN_NETWORK_INTERFACES"
|
__network_backup "$nifile"
|
||||||
if show_debug; then
|
if show_debug; then
|
||||||
edebug "Setting $__DEBIAN_NETWORK_INTERFACES to:"
|
edebug "Setting $nifile to:"
|
||||||
cat "$interfaces" | sed 's/^/ /g' 1>&2
|
cat "$interfaces" | sed 's/^/ /g' 1>&2
|
||||||
else
|
else
|
||||||
estep "$__DEBIAN_NETWORK_INTERFACES"
|
estep "$nifile"
|
||||||
fi
|
fi
|
||||||
cat "$interfaces" >"$__DEBIAN_NETWORK_INTERFACES"
|
cat "$interfaces" >"$nifile"
|
||||||
modified=1
|
modified=1
|
||||||
fi
|
fi
|
||||||
ac_clean "$interfaces"
|
ac_clean "$interfaces"
|
||||||
|
@ -1112,3 +1150,68 @@ iface lo inet loopback
|
||||||
[ -z "$modified" ] && return 10
|
[ -z "$modified" ] && return 10
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function network_config_partial() {
|
||||||
|
# une version allégée de network_config() qui ne permet que de rajouter des
|
||||||
|
# adresses IPs en plus de celles qui sont déjà configurées.
|
||||||
|
# $1(=confips) est le nom d'un tableau contenant la configuration des
|
||||||
|
# adresses ips pour les interfaces.
|
||||||
|
# $2(=/etc/network/interfaces) est le fichier à mettre à jour
|
||||||
|
local -a __ncp_newconfips; array_copy __ncp_newconfips "${1:-confips}"
|
||||||
|
local nifile="${2:-$__DEBIAN_NETWORK_INTERFACES}"
|
||||||
|
|
||||||
|
local -a confips confbrs
|
||||||
|
network_set_confips
|
||||||
|
network_set_confbrs
|
||||||
|
network_fix_confs
|
||||||
|
|
||||||
|
array_extend confips __ncp_newconfips
|
||||||
|
network_config "" confips confbrs "" "" "" "$nifile" || return
|
||||||
|
|
||||||
|
# des modifications ont eu lieu, tenter de configurer les nouvelles adresses
|
||||||
|
# d'abord calculer les adresses ips qui sont activées
|
||||||
|
network_set_confips
|
||||||
|
local -a ips
|
||||||
|
local ipsuffix ip suffix
|
||||||
|
for confip in "${confips[@]}"; do
|
||||||
|
network_parse_confip "$confip" iface gateway ipsuffixes
|
||||||
|
for ipsuffix in "${ipsuffixes[@]}"; do
|
||||||
|
network_parse_ipsuffix "$ipsuffix" ip suffix
|
||||||
|
array_addu ips "$ip"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
# puis lister les commandes correspondant aux adresses ips non activées
|
||||||
|
local -a ups; local up
|
||||||
|
array_from_lines ups "$(awkrun <"$nifile" -f ips[@] '
|
||||||
|
$1 == "up" && $2 == "ip" && $3 == "addr" && $4 == "add" {
|
||||||
|
ip = $5; sub(/(\/[0-9.]+)?$/, "", ip) # enlever suffixe
|
||||||
|
if (! in_array(ip, ips)) {
|
||||||
|
$1 = ""
|
||||||
|
print
|
||||||
|
}
|
||||||
|
}')"
|
||||||
|
if [ ${#ups[*]} -gt 0 ]; then
|
||||||
|
etitle "Configuration des nouvelles adresses"
|
||||||
|
for up in "${ups[@]}"; do
|
||||||
|
estep "$up"
|
||||||
|
eval "$up"
|
||||||
|
done
|
||||||
|
eend
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function network_update_etc_networks() {
|
||||||
|
# écraser le contenu du fichier /etc/networks avec la chaine $1
|
||||||
|
# si $1 est vide, initialiser le fichier avec un contenu par défaut.
|
||||||
|
local contents="$1" TAB=$'\t'
|
||||||
|
[ -n "$contents" ] || contents="\
|
||||||
|
default${TAB}${TAB}0.0.0.0
|
||||||
|
loopback${TAB}127.0.0.0
|
||||||
|
link-local${TAB}169.254.0.0"
|
||||||
|
if [ "$(</etc/networks)" != "$contents" ]; then
|
||||||
|
__network_backup /etc/networks
|
||||||
|
echo "$contents" >/etc/networks
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue