#!/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