123 lines
3.4 KiB
Bash
Executable File
123 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
|
urequire ipcalc
|
|
|
|
function display_help() {
|
|
uecho "$scriptname: s'assurer que l'hôte courant a l'adresse IP spécifiée
|
|
|
|
USAGE
|
|
$scriptname IPs...
|
|
|
|
NB: ce script ne supporte que la modification d'interfaces qui ne sont pas des
|
|
bridges. il est conçu avant tout pour utilisation sur un serveur, pas un poste
|
|
de travail.
|
|
|
|
OPTIONS
|
|
-i, --ignore-iface IFACE
|
|
Ajouter une interface à la liste des interfaces à ignorer. Si cette
|
|
option est utilisée, la liste par défaut n'est pas utilisée, sauf si
|
|
l'option -d est utilisée aussi.
|
|
-d, --defaults
|
|
Ajouter les valeurs suivantes à liste des interfaces à ignorer:
|
|
${DEFAULT_IGNORE_IFACES[*]}
|
|
Cette option est automatiquement activée si l'option -i n'est pas
|
|
utilisée
|
|
-n, --fake
|
|
Afficher simplement les modification à effectuer"
|
|
}
|
|
|
|
DEFAULT_IGNORE_IFACES=(
|
|
"docker*"
|
|
"br-*"
|
|
"veth*"
|
|
)
|
|
DEFAULT_PROFILES=(prod test devel)
|
|
|
|
ignore_ifaces=()
|
|
fake=
|
|
args=(
|
|
--help '$exit_with display_help'
|
|
-i:,--ignore-iface: ignore_ifaces
|
|
-d,--defaults '$array_extend ignore_ifaces DEFAULT_IGNORE_IFACES'
|
|
-n,--fake fake=1
|
|
)
|
|
parse_args "$@"; set -- "${args[@]}"
|
|
|
|
require_debian
|
|
|
|
for vip in "$@"; do
|
|
[ "${vip%/*}" != "$vip" ] || vip="$vip/32"
|
|
vips+=("$vip")
|
|
done
|
|
|
|
array_fix_paths ignore_ifaces
|
|
[ ${#ignore_ifaces[*]} -gt 0 ] || ignore_ifaces=("${DEFAULT_IGNORE_IFACES[@]}")
|
|
|
|
if [ -n "$fake" ]; then
|
|
set_verbosity --debug
|
|
__NETWORK_DEVEL_SHOW_MODIFS=1
|
|
__DEBIAN_NETWORK_DEVEL_SHOW_MODIFS=1
|
|
fi
|
|
|
|
################################################################################
|
|
# réimplémentation "corrigée" de network_config_partial()
|
|
|
|
nifile="$__DEBIAN_NETWORK_INTERFACES"
|
|
|
|
network_set_confips
|
|
network_set_confbrs
|
|
tmpconfips=()
|
|
for confip in "${confips[@]}"; do
|
|
network_parse_confip "$confip" iface gateway ipsuffixes
|
|
continue=
|
|
for ignore_iface in "${ignore_ifaces[@]}"; do
|
|
if eval "[[ \"\$iface\" == $(qwc "$ignore_iface") ]]"; then
|
|
continue=1
|
|
break
|
|
fi
|
|
done
|
|
[ -n "$continue" ] && continue
|
|
|
|
tmpconfips+=("$confip")
|
|
network_parse_ipsuffix "${ipsuffixes[0]}" mainip suffix
|
|
for vip in "${vips[@]}"; do
|
|
if [ "${vip%.*}" == "${mainip%.*}" ]; then
|
|
tmpconfips+=("$iface:$vip")
|
|
fi
|
|
done
|
|
done
|
|
confips=("${tmpconfips[@]}")
|
|
confbrs=()
|
|
network_fix_confs
|
|
|
|
network_config "" confips confbrs || exit 0
|
|
|
|
# des modifications ont eu lieu, tenter de configurer les nouvelles adresses
|
|
# d'abord calculer les adresses ips qui sont activées
|
|
network_set_confips
|
|
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
|
|
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
|