Translation(s): English - Français - Italiano


Esiste un bug segnalato da molto tempo (267838, segnato come bug che non verrà risolto) riguardandte l'installatore Debian che riguarda la possibilità di avviare una macchina usando DHCP durante l'installazione, ma creare il sistema installato con una configurazione di rete statica.

Questo è uno script scritto da ?AlexOwen da eseguire al primo avvio per fare il cambiamento per conto dell'utente. Accetta anche un argomento "--bond" per la conversione in un'interfaccia statica bonded.

L'autore lo rende disponibile nella speranza che sia di aiuto ad altri.

   1 #!/bin/bash
   2 set -e
   3 
   4 #functions
   5 
   6 cidr2mask() {
   7   local i mask=""
   8   local full_octets=$(($1/8))
   9   local partial_octet=$(($1%8))
  10 
  11   for ((i=0;i<4;i+=1)); do
  12     if [ $i -lt $full_octets ]; then
  13       mask+=255
  14     elif [ $i -eq $full_octets ]; then
  15       mask+=$((256 - 2**(8-$partial_octet)))
  16     else
  17       mask+=0
  18     fi  
  19     test $i -lt 3 && mask+=.
  20   done
  21 
  22   echo $mask
  23 }
  24 
  25 
  26 gen-interfaces(){
  27 
  28 cat <<EOF | $FILTER
  29 # The loopback network interface
  30 auto lo
  31 iface lo inet loopback
  32 
  33 # The primary network interface
  34 auto eth0
  35 EOF
  36 
  37 #Use sed magic and function cidr2mask to convert ip command output into  output of this form
  38 # eth0-1 iface eth0 inet static
  39 # eth0-2        address nnn.nnn.50.203
  40 # eth0-4        broadcast nnn.nnn.51.255
  41 # eth0-3        netmask nnn.nnn.254.0
  42 # eth0-5        gateway 138.37.51.254
  43 #In preparation for further filtering
  44 
  45 (
  46 ip addr show |\
  47 sed -n  -e's%.*inet \([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)/\([0-9]*\) brd \([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\) scope global \(.*\)%'\
  48 '\4-1 iface \4 inet static\n\4-2 \taddress \1\n\4-4 \tbroadcast \3%p'
  49 ip addr show |\
  50 sed -n  -e's%.*inet \([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)/\([0-9]*\) brd \([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\) scope global \(.*\)%'\
  51 '\4-3 \2\n%p' | (read key mask; if [ -n "$mask" ] ; then printf "%s \t%s %s\n" $key  netmask `cidr2mask $mask` ; fi)
  52 ip route show |sed -n  -e's%default via \([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\) dev \(.*\) %\2-5 \t\gateway \1%p'
  53 )| sort | cut -f2- -d" " | $FILTER
  54 
  55 if [ $BOND = 1 ] ; then
  56 cat <<EOF
  57         slaves eth0 eth1
  58         bond_mode 802.3ad
  59         bond_miimon 100
  60         bond_updelay 200
  61         bond_downdelay 200
  62         bond_xmit_hash_policy layer2+3
  63 EOF
  64 fi
  65 }
  66 
  67 
  68 #Main
  69 
  70 BOND=0
  71 if [ "$1" = "--bond" ] ; then
  72         BOND=1
  73 fi
  74 
  75 FILTER=cat
  76 if [ $BOND = 1 ] ; then
  77         FILTER='sed -e s/eth0/bond0/ '
  78 fi
  79 
  80 [ -f /etc/network/interfaces.orig ] || cp -p  /etc/network/interfaces /etc/network/interfaces.orig 
  81  
  82 gen-interfaces  >/etc/network/interfaces.new
  83 
  84 ifdown eth0
  85 
  86 cp -p /etc/network/interfaces /etc/network/interfaces-"`date +%F-%T`"
  87 mv /etc/network/interfaces.new /etc/network/interfaces
  88 
  89 if [ $BOND = 1 ] ; then
  90         ifconfig eth0 0.0.0.0
  91         ifup bond0
  92 else
  93         ifup eth0
  94 fi