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() {
|
||||
local -a confips ipsuffixes ifaces ips
|
||||
local confip iface gateway ip suffix mainip
|
||||
local confip iface gateway network ip suffix mainip
|
||||
|
||||
local mainiface="$1"
|
||||
|
||||
# recenser les interfaces et créer les tableaux __IFACE_ipspecs
|
||||
for confip in "${__nfc_confips[@]}"; do
|
||||
network_parse_confip "$confip" iface gateway ipsuffixes
|
||||
[ -n "$iface" ] || iface="$mainiface"
|
||||
array_addu ifaces "$iface"
|
||||
eval "local ${iface}_gateway; local -a ${iface}_ipsuffixes"
|
||||
if [ -n "$iface" ]; then
|
||||
network="${iface}_network"
|
||||
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
|
||||
# puis construire la liste des adresses IP associées à chaque interface
|
||||
for confip in "${__nfc_confips[@]}"; do
|
||||
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"
|
||||
# si la passerelle a déjà été spécifiée, la récupérer
|
||||
local tmpgw="${iface}_gateway"
|
||||
|
@ -356,6 +376,7 @@ function __network_set_confips() {
|
|||
array_from_lines ifaces "$(__network_valid_ifaces)"
|
||||
for iface in "${ifaces[@]}"; do
|
||||
__network_set_gateway "$iface"
|
||||
[ -n "$gateway" ] || gateway=-
|
||||
__network_set_confip "$iface" "$gateway" || continue
|
||||
array_add confips "$confip"
|
||||
done
|
||||
|
@ -462,6 +483,7 @@ BEGIN {
|
|||
have_iface = 0
|
||||
have_method = 0 # static ou dhcp
|
||||
have_gateway = ipsuffixes[1] == "dhcp" || gateway == ""
|
||||
if (gateway == "none" || gateway == "-") gateway = ""
|
||||
array_new(have_ips)
|
||||
array_new(have_ip_ups)
|
||||
array_new(have_ip_downs)
|
||||
|
@ -692,6 +714,8 @@ function network_interfaces_add_confip() {
|
|||
local nifile="${4:-$__DEBIAN_NETWORK_INTERFACES}"
|
||||
local mainip netmask method
|
||||
|
||||
[ "$gateway" == "none" -o "$gateway" == "-" ] && gateway=
|
||||
|
||||
network_parse_ipsuffix "${ipsuffixes[0]}" mainip netmask
|
||||
if [ "$mainip" == "dhcp" ]; then
|
||||
mainip=
|
||||
|
@ -928,7 +952,9 @@ $ip$TAB$host $hostname" "$tmpfile"
|
|||
}
|
||||
|
||||
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.
|
||||
# $2 (confips) est le nom d'un tableau contenant la configuration des
|
||||
# adresses ips pour les interfaces.
|
||||
|
@ -939,9 +965,12 @@ function network_config() {
|
|||
# son interface. En principe, l'interface principale est le premier bridge
|
||||
# défini ou la première interface définie.
|
||||
# $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
|
||||
# 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
|
||||
# suivantes:
|
||||
# [[iface][//gateway]:]address[/suffix],...
|
||||
|
@ -952,6 +981,7 @@ function network_config() {
|
|||
# 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
|
||||
# supplémentaires pour l'interface.
|
||||
#
|
||||
# Le tableau brs doit contenir des définitions de la forme suivante:
|
||||
# br:ifaces,...
|
||||
# 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 mainiface="$4" reset_interfaces="$5" oldhost="$6"
|
||||
local modified
|
||||
local nifile="${7:-$__DEBIAN_NETWORK_INTERFACES}"
|
||||
|
||||
network_fix_confs confbrs confips "$mainiface"
|
||||
|
||||
|
@ -1001,13 +1032,16 @@ function network_config() {
|
|||
|
||||
# vérifier si une modification est nécessaire
|
||||
local modify
|
||||
for confbr in "${confbrs[@]}"; do
|
||||
network_parse_confbr "$confbr" br ifaces
|
||||
if ! network_interfaces_check_confbr "$br" iface; then
|
||||
modify=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
[ "$reset_interfaces" == force ] && modify=1
|
||||
if [ -z "$modify" ]; then
|
||||
for confbr in "${confbrs[@]}"; do
|
||||
network_parse_confbr "$confbr" br ifaces
|
||||
if ! network_interfaces_check_confbr "$br" iface; then
|
||||
modify=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ -z "$modify" ]; then
|
||||
for confip in "${confips[@]}"; do
|
||||
network_parse_confip "$confip" iface gateway ipsuffixes
|
||||
|
@ -1022,13 +1056,17 @@ function network_config() {
|
|||
if [ -n "$modify" ]; then
|
||||
# faire une copie de travail
|
||||
local interfaces; ac_set_tmpfile interfaces
|
||||
cat "$__DEBIAN_NETWORK_INTERFACES" >"$interfaces"
|
||||
cat "$nifile" >"$interfaces"
|
||||
|
||||
if [ -n "$reset_interfaces" ]; then
|
||||
local source_itfd
|
||||
check_sysinfos -d debian -v jessie+ && source_itfd=1
|
||||
echo >"$interfaces" "\
|
||||
# This file describes the network interfaces available on your system
|
||||
# and how to activate them. For more information, see interfaces(5).
|
||||
|
||||
${source_itfd:+
|
||||
source /etc/network/interfaces.d/*
|
||||
}
|
||||
# The loopback network interface
|
||||
auto lo
|
||||
iface lo inet loopback
|
||||
|
@ -1059,21 +1097,21 @@ iface lo inet loopback
|
|||
|
||||
# Fin de traitement
|
||||
if [ -n "$__DEBIAN_NETWORK_DEVEL_SHOW_MODIFS" ]; then
|
||||
if testdiff "$interfaces" "$__DEBIAN_NETWORK_INTERFACES"; then
|
||||
uecho "Setting $__DEBIAN_NETWORK_INTERFACES to:"
|
||||
if testdiff "$interfaces" "$nifile"; then
|
||||
uecho "Setting $nifile to:"
|
||||
cat "$interfaces" | sed 's/^/ /g' 1>&2
|
||||
else
|
||||
uecho "$__DEBIAN_NETWORK_INTERFACES: pas de modifications"
|
||||
uecho "$nifile: pas de modifications"
|
||||
fi
|
||||
elif testdiff "$interfaces" "$__DEBIAN_NETWORK_INTERFACES"; then
|
||||
__network_backup "$__DEBIAN_NETWORK_INTERFACES"
|
||||
elif testdiff "$interfaces" "$nifile"; then
|
||||
__network_backup "$nifile"
|
||||
if show_debug; then
|
||||
edebug "Setting $__DEBIAN_NETWORK_INTERFACES to:"
|
||||
edebug "Setting $nifile to:"
|
||||
cat "$interfaces" | sed 's/^/ /g' 1>&2
|
||||
else
|
||||
estep "$__DEBIAN_NETWORK_INTERFACES"
|
||||
estep "$nifile"
|
||||
fi
|
||||
cat "$interfaces" >"$__DEBIAN_NETWORK_INTERFACES"
|
||||
cat "$interfaces" >"$nifile"
|
||||
modified=1
|
||||
fi
|
||||
ac_clean "$interfaces"
|
||||
|
@ -1112,3 +1150,68 @@ iface lo inet loopback
|
|||
[ -z "$modified" ] && return 10
|
||||
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