source: MondoRescue/branches/3.2/mindi/rootfs/usr/sbin/start-netfs@ 3443

Last change on this file since 3443 was 3443, checked in by Bruno Cornec, 9 years ago
  • Adds an ipmode configuration parameter at boot time to typically force start-netfs to make a DHCP request, despite the conf file doesn't precise it (parm can be DHCP or STATIC)
  • Review again the strategy when the simple case of NIC unchanged and IP conf either is not verified. Trust ipconf first, and then use mondorestore.cfg content, trying to find the right NIC withthe corresponding MAC address in the file, if the stored NIC isn't named identically anymore.
  • Property svn:executable set to *
File size: 6.2 KB
RevLine 
[742]1#!/bin/sh
[740]2#
[741]3# $Id$
4#
[2380]5# This script sets up the network + Network FS environment if needed.
[741]6#
7
8
[740]9# number of ping
10ipcount=3
11
12# Get info from config file
[3271]13ipdev=`grep netfs-dev /tmp/mondorestore.cfg 2> /dev/null | cut -d' ' -f2-`
[3433]14# MAC address in uppercases
[3440]15hwaddr=`grep netfs-client-hwaddr /tmp/mondorestore.cfg 2> /dev/null | cut -d' ' -f2- | tr '[a-z]' '[A-Z]'`
[3271]16ipaddress=`grep netfs-client-ipaddr /tmp/mondorestore.cfg 2> /dev/null | cut -d' ' -f2-`
17ipnetmask=`grep netfs-client-netmask /tmp/mondorestore.cfg 2> /dev/null | cut -d' ' -f2-`
18ipbroadcast=`grep netfs-client-broadcast /tmp/mondorestore.cfg 2> /dev/null | cut -d' ' -f2-`
19ipgateway=`grep netfs-client-defgw /tmp/mondorestore.cfg 2> /dev/null | cut -d' ' -f2-`
20proto=`grep netfs-proto /tmp/mondorestore.cfg 2> /dev/null | cut -d' ' -f2-`
21iproute=`grep netfs-route /tmp/mondorestore.cfg 2> /dev/null | cut -d' ' -f2-`
[740]22ipconf=""
[3443]23ipmode="STATIC"
[2255]24pre=""
25post=""
[3271]26export netfsmount=`grep netfs-server-mount /tmp/mondorestore.cfg 2> /dev/null | cut -d' ' -f2-`
27export imgname=`grep iso-prefix /tmp/mondorestore.cfg 2> /dev/null | cut -d' ' -f2-`
[740]28if [ "$imgname" = "" ]; then
[801]29 export imgname="mondorescue"
[740]30fi
[3278]31export dirimg=`grep iso-dir /tmp/mondorestore.cfg 2> /dev/null | cut -d' ' -f2-`
[740]32if [ "$dirimg" = "" ]; then
[801]33 export dirimg="/"
[740]34fi
35
36# info from cmdline are predominent
37for i in `cat /proc/cmdline` ; do
38 echo $i | grep -qi ping= && ipcount=`echo $i | cut -d= -f2`
[3440]39 echo $i | grep -qi hwaddr= && hwaddr=`echo $i | cut -d= -f2 | tr '[a-z]' '[A-Z]'`
[740]40 echo $i | grep -qi ipconf= && ipconf=`echo $i | cut -d= -f2`
[2380]41 echo $i | grep -qi netfsmount= && export netfsmount=`echo $i | cut -d= -f2`
[2498]42 echo $i | grep -qi netfsopt= && export netfsopt=`echo $i | cut -d= -f2`
[801]43 echo $i | grep -qi prefix= && export imgname=`echo $i | cut -d= -f2`
[2380]44 echo $i | grep -qi netfspath= && export dirimg=`echo $i | cut -d= -f2`
[2255]45 echo $i | grep -qi pre= && pre=`echo $i | cut -d= -f2`
46 echo $i | grep -qi post= && post=`echo $i | cut -d= -f2`
[2380]47 echo $i | grep -qi proto= && proto=`echo $i | cut -d= -f2`
[3168]48 echo $i | grep -qi iproute= && iproute=`echo $i | cut -d= -f2`
[3443]49 echo $i | grep -qi ipmode= && ipmode=`echo $i | cut -d= -f2`
[740]50done
51
[1830]52if [ "$ipdev" != "" ] || [ "$ipconf" != "" ]; then
53 # Network configuration stored during archive
54 # or on cmdline so network wanted => starting it
[740]55 LogIt "Starting Network..."
56
[1830]57 # Activate loobback
58 ifconfig lo 127.0.0.1
[740]59
[3443]60 # ipconf has priority
61 if [ "$ipconf" != "" ]; then
62 echo "$ipconf" | grep -q "dhcp"
63 if [ $? -eq 0 ]; then
[1830]64 ipdev=`echo $ipconf | cut -d: -f1`
[3443]65 ipmode="DHCP"
66 else
67 ipdev=`echo $ipconf | cut -d: -f1`
[1830]68 ipaddress=`echo $ipconf | cut -d: -f2`
69 ipnetmask=`echo $ipconf | cut -d: -f3`
70 ipbroadcast=`echo $ipconf | cut -d: -f4`
71 ipgateway=`echo $ipconf | cut -d: -f5`
72 fi
[3443]73 else
74 # Now relying on ipdev which isn't empty
75 # ipmode is either STATIC by default or DHCP if a parameter was passed
76 # If same system, map to the right MAC address
[2887]77
[3443]78 # Look at our previous device
79 hwaddr_found=`ifconfig $ipdev 2> /dev/null | grep HWaddr | awk '{print $NF}' | tr '[a-z]' '[A-Z]'`
80 if [ "$hwaddr_found" != "" ]; then
81 # That device always exists
82 if [ "$hwaddr" = "$hwaddr_found" ]; then
83 # No renaming took place use it
84 fi
85 else
86 # maybe there was a change of NIC numbering e.g.
87 # and the one used at backup doesn't exist anymore
88 # ipdev is not good anymore probably
89 oldipdev=$ipdev
90
91 for hwdev in `ifconfig -a | grep HWaddr | awk '{print $1}'` ; do
92 mac=`ifconfig $hwdev | grep HWaddr | awk '{print $NF}' | tr '[a-z]' '[A-Z]'`
93 if [ "$hwaddr" = "$mac" ]; then
94 # This is the new device for the MAC address of our card at backup time
95 LogIt "Interface with MAC address $hwaddr changed from $ipdev to $hwdev"
96 LogIt "Using $hwdev for network configuration from now on"
97 ipdev=$hwdev
98 break
[3271]99 fi
[3443]100 done
101
102 if [ "$oldipdev" = "$ipdev" ]; then
103 # We didn't find a new device for this MAC
104 LogIt "NOTE: Interface $ipdev kept despite it doesn't match the $hwaddr MAC address"
105 ipdev=$oldipdev
[2887]106 fi
[3443]107
108 # TODO: Should we do that ?
109 if [ "$hwaddr" = "" ]; then
110 # No hwaddr stored at backup
111 # take the first interface and hope it's good
112 ipdev=`ifconfig -a | grep HWaddr | awk '{print $1}' | head -1`
113 fi
[2887]114 fi
[3443]115 fi
[2887]116
[3443]117 if [ "$ipmode" = "DHCP" ]; then
118 LogIt "Making DHCP request on $ipdev"
119 udhcpc -i $ipdev
120 else
121 LogIt "Configuring $ipdev statically ($ipaddress/$ipnetmask/$ipgateway)"
[1830]122 ifconfig $ipdev $ipaddress netmask $ipnetmask broadcast $ipbroadcast
123 route add default gw $ipgateway
[740]124 fi
[3168]125 # Leave time to the stack to wake up (reported by some users)
[2887]126 sleep 5
127
[3168]128 # Handle a potential static route
129 if [ _"$iproute" != _"" ]; then
[3440]130 iproute=`echo $iproute | sed -i 's/:/ /g'`
[3168]131 LogIt "Adding static route with route add $iproute"
132 route add $iproute
133 fi
134
[1830]135 # ping server helps waking interface up
[2380]136 LogIt "Pinging Remote server..."
137 netfs_server_ipaddr=`echo $netfsmount | cut -d: -f1 | cut -d@ -f2`
138 ping -c $ipcount $netfs_server_ipaddr
[740]139
[2380]140 # Which is our protocol for file sharing
141 if [ "$proto" = "" ]; then
142 LogIt "No protocol specified, defaulting to NFS"
[2709]143 proto="nfs"
[2380]144 fi
145
146 if [ "$proto" = "sshfs" ]; then
147 LogIt "Mounting SSHFS share ($netfsmount) on /tmp/isodir..."
[2438]148 # We need a correct console for ssh
149 ln -sf /dev/console /dev/tty
[2498]150 sshfs -o ro,StrictHostKeyChecking=no $netfsopt $netfsmount /tmp/isodir
[3111]151 elif [ "$proto" = "smbfs" ]; then
152 LogIt "Mounting SMBFS share ($netfsmount) on /tmp/isodir..."
[3279]153 mount -t cifs $netfsmount /tmp/isodir -o ro $netfsopt
[2380]154 elif [ "$proto" != "" ]; then
[2951]155 if [ -x /sbin/rpcbind ]; then
[3271]156 echo "Starting rpcbind daemon..."
[3261]157 /sbin/rpcbind -w &
[2951]158 fi
[2380]159 LogIt "Mounting Network share ($netfsmount) on /tmp/isodir..."
160 touch /etc/mtab
[2498]161 mount -t $proto -o nolock,ro $netfsopt $netfsmount /tmp/isodir
[2380]162 else
163 LogIt "Unknown protocol $proto"
164 fi
[1830]165
[2380]166 LogIt "Mounting Remote image ${imgname}-1.iso in $dirimg on /mnt/cdrom in loopback"
[1927]167 mount -o ro,loop -t iso9660 /tmp/isodir/$dirimg/${imgname}-1.iso /mnt/cdrom
[2253]168
[2380]169 # Save the scripts on the Network share locally
[2255]170 if [ "`echo $pre | grep -E '^/tmp/isodir'`" ]; then
171 cp $pre /tmp
172 LogIt "Copying $pre under /tmp"
[2253]173 fi
[2255]174 if [ "`echo $post | grep -E '^/tmp/isodir'`" ]; then
175 cp $post /tmp
176 LogIt "Copying $post under /tmp"
177 fi
[1830]178fi
Note: See TracBrowser for help on using the repository browser.