minor fixes and documentation
[automated-distro-installer] / fai / config / scripts / DEBIAN / 30-interface
1 #! /bin/bash
2
3 # modified from upstream fai example
4 error=0; trap 'error=$(($?>$error?$?:$error))' ERR # save maximum error code
5
6 newnicnames() {
7
8 # determine predictable network names only for stretch and above
9
10 [ $do_init_tasks -eq 0 ] && return
11
12 ver=$($ROOTCMD dpkg-query --showformat='${Version}' --show udev)
13 if dpkg --compare-versions $ver lt 220-7; then
14 return
15 fi
16
17 [ -z $NIC1 ] && return
18
19 fields="ID_NET_NAME_FROM_DATABASE ID_NET_NAME_ONBOARD ID_NET_NAME_SLOT ID_NET_NAME_PATH"
20 for field in $fields; do
21 name=$(udevadm info /sys/class/net/$NIC1 | sed -rn "s/^E: $field=(.+)/\1/p")
22 if [[ $name ]]; then
23 NIC1=$name
24 break
25 fi
26 done
27 # This condition is only needed because the nfsroot I use
28 # is based on Jessie, which has an old udev which can't
29 # figure out the persistent interface name used in stretch.
30 if ifclass VM; then NIC1=ens3; return; fi
31 if [[ ! $name ]]; then
32 echo "$0: error: could not find systemd predictable network name. Using $NIC1."
33 fi
34 }
35
36 newnicnames
37 CIDR=$(ip -o -f inet addr show $NIC1 | awk '{print $4}')
38 if ifclass DHCPC && [ $FAI_ACTION = "install" -o $FAI_ACTION = "dirinstall" ]; then
39
40 if ifclass VM; then
41 # note, this condition would apply to the elif below too,
42 # but I don't specify a static ip in fai, so not bothering
43 cat > $target/etc/network/interfaces <<-EOF
44 # generated by FAI
45 auto lo $NIC1
46 iface lo inet loopback
47 iface $NIC1 inet dhcp
48 EOF
49 else
50 cat > $target/etc/network/interfaces <<-EOF
51 # generated by FAI
52 auto lo br0
53 iface lo inet loopback
54 iface $NIC1 inet manual
55 # make a bridge by default so we can have bridged vms.
56 # Some example I read had stp on, but i don't need stp,
57 # and it causes a vm to fail pxe boot, presumably unless
58 # you add some delay.
59 # http://wiki.libvirt.org/page/PXE_boot_%28or_dhcp%29_on_guest_failed
60 iface br0 inet dhcp
61 bridge_ports $NIC1
62 bridge_stp off
63 bridge_maxwait 0
64 EOF
65 fi
66 elif [ $FAI_ACTION = "install" -o $FAI_ACTION = "dirinstall" ]; then
67 [ -n "$CIDR" ] && cat > $target/etc/network/interfaces <<-EOF
68 # generated by FAI
69 auto lo $NIC1
70 iface lo inet loopback
71 iface $NIC1 inet static
72 address $CIDR
73 gateway $GATEWAYS
74 EOF
75 [ -n "$NETWORK" ] && echo "localnet $NETWORK" > $target/etc/networks
76 if [ ! -L $target/etc/resolv.conf -a -e /etc/resolv.conf ]; then
77 cp -p /etc/resolv.conf $target/etc
78 fi
79 fi
80
81 # here fcopy is mostly used, when installing a client for running in a
82 # different subnet than during the installation
83 fcopy -iM /etc/resolv.conf
84 fcopy -iM /etc/network/interfaces /etc/networks
85
86 exit $error