]> Zhao Yanbai Git Server - minix.git/commitdiff
- Added netconf script which makes it a lot easier to change network settings.
authorThomas Veerman <thomas@minix3.org>
Thu, 3 Sep 2009 09:38:27 +0000 (09:38 +0000)
committerThomas Veerman <thomas@minix3.org>
Thu, 3 Sep 2009 09:38:27 +0000 (09:38 +0000)
 - Modified the setup script to use the netconf script for the network
   configuration:
    - Moved step 2 to step 8 and renamed the steps in between.
    - Autopart adapted to print step 3 instead of step 4.

commands/ibm/autopart.c
commands/scripts/Makefile
commands/scripts/netconf.sh [new file with mode: 0755]
commands/scripts/setup.sh

index 9d974c2f730746ff57414a003f7d34c3380daffc..a168b43c251a402d3db62ad8fd710c5a68655416 100755 (executable)
@@ -2066,7 +2066,7 @@ select_region(void)
 void printstep(int step, char *str)
 {
        int n;
-       n = printf("\n --- Substep 4.%d: %s ---", step, str);
+       n = printf("\n --- Substep 3.%d: %s ---", step, str);
        while(n++ < 73) printf("-");
        printf("\n");
 }
index f99954fab6d6387c24cada726c17e40b1258f472..b2b55a2e41401eedf6a82eac27f97a816957b1b0 100755 (executable)
@@ -40,6 +40,7 @@ usr:  \
        /usr/bin/mkdist \
        /bin/readclock \
        /bin/setup \
+       /bin/netconf \
        /usr/bin/binsizes \
        /usr/bin/rotate \
        /usr/bin/floppysetup \
@@ -142,6 +143,9 @@ clean:
 /bin/setup:    setup.sh
        install -m 755 -c -o bin $? $@
 
+/bin/netconf:  netconf.sh
+       install -m 755 -c -o bin $? $@
+
 /usr/bin/binsizes:     binsizes.sh
        install -m 755 -c -o bin $? $@
 
diff --git a/commands/scripts/netconf.sh b/commands/scripts/netconf.sh
new file mode 100755 (executable)
index 0000000..4e4671a
--- /dev/null
@@ -0,0 +1,315 @@
+#!/bin/sh
+#
+#      netconf 0.1 - Configure network 
+#
+# Changes:
+#                                              
+
+LOCALRC=/usr/etc/rc.local
+INETCONF=/etc/inet.conf
+RCNET=/etc/rc.net
+HOSTS=/etc/hosts
+HOSTNAME=/etc/hostname.file
+USRKBFILE=/.usrkb
+
+step1=""
+step2=""
+step3=""
+v=1 # verbosity
+manual_opts=0
+prefix=""
+cd="no" # running from cd?
+
+eth=""
+driver=""
+driverargs=""
+
+config=""
+manual=""
+dhcp="no"
+
+hostname=""
+hostname_prev=""
+ip=""
+ip_prev=""
+netmask=""
+netmask_prev=""
+gateway=""
+dns1=""
+dns2=""
+
+# Provide some sane defaults
+hostname_default=`uname -n`
+test -z "$hostname_default" && hostname_default="Minix"
+ip_default="10.0.0.1"
+netmask_default="255.255.255.0"
+gateway_default=""
+
+usage()
+{
+    cat >&2 <<'EOF'
+Usage:
+
+  netconf [-q] [-p <prefix>] [-e <num>] [-a]
+  netconf [-H <name> -i <ip> -n <mask> -g <gw> -d <prim dns> [-s <sec dns>]]
+
+  flags:
+     -q Limit generated output
+     -p Path prefix for configuration files (e.g., during install -p mnt is used as files are mounted on /mnt).
+     -e Ethernet card
+     -a Use DHCP (-H, -i, -n, -g, -d, and -s flags are discarded)
+     -H Hostname
+     -i IP address
+     -n Netmask
+     -g Default gateway
+     -d Primary DNS
+     -s Secondary DNS
+     -h Shows this help file
+     -c Shows a list of ethernet cards supported
+
+  By default netconf starts in Interactive mode. By providing parameters on the
+  command line, some questions can be omitted.
+EOF
+    exit 1
+}
+
+cards()
+{
+    echo "0. No Ethernet card (no networking)"
+    echo "1. Intel Pro/100"
+    echo "2. 3Com 501 or 3Com 509 based card"
+    echo "3. Realtek 8139 based card (also emulated by KVM)"
+    echo "4. Realtek 8029 based card (also emulated by Qemu)"
+    echo "5. NE2000, 3com 503 or WD based card (also emulated by Bochs)"
+    echo "6. AMD LANCE (also emulated by VMWare and VirtualBox)"
+    echo "7. Different Ethernet card (no networking)"
+}
+
+warn()
+{
+    echo -e "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b ! $1"
+}
+
+do_step1()
+{
+    # Ask user about networking
+    echo "MINIX 3 currently supports the following Ethernet cards. Please choose: "
+    echo ""
+    cards
+    echo ""
+
+    while [ "$step1" != ok ]; do
+      echo -n "Ethernet card? [0] "; read eth
+      test -z $eth && eth=0
+
+      drv_params $eth
+      test -n "$driver" && step1="ok"
+    done
+}
+
+drv_params()
+{
+      case "$1" in
+        0) driver=psip0;    ;;    
+       1) driver=fxp;      ;;
+       2) driver=dpeth;    driverargs="#dpeth_arg='DPETH0=port:irq:memory'";
+          test "$v" = 1 && echo ""
+           test "$v" = 1 && echo "Note: After installing, edit $LOCALRC to the right configuration."
+               ;;
+       3) driver=rtl8139;  ;;
+       4) driver=dp8390;   driverargs="dp8390_arg='DPETH0=pci'";       ;;
+       5) driver=dp8390;   driverargs="dp8390_arg='DPETH0=240:9'"; 
+          test "$v" = 1 && echo ""
+           test "$v" = 1 && echo "Note: After installing, edit $LOCALRC to the right configuration."
+           test "$v" = 1 && echo " chose option 4, the defaults for emulation by Bochs have been set."
+               ;;
+        6) driver="lance"; ;;    
+        7) driver="psip0"; ;;    
+        *) warn "choose a number"
+      esac
+}
+
+do_step2()
+{
+    echo ""
+    echo "Configure network using DHCP or manually?"
+    echo ""
+    echo "1. Automatically using DHCP"
+    echo "2. Manually"
+    echo ""
+
+    while [ "$step2" != ok ]
+      do
+        echo -n "Configure method? [1] "; read config
+       test -z $config && config=1
+      
+       case "$config" in
+           1) step2="ok"; dhcp="yes" ; ;;
+            2) step2="ok"; manual="do"; ;;
+           *) warn "choose a number"
+       esac
+    done
+    
+    # Use manual parameters?
+    if [ -n "$manual" ]; then
+        # Query user for settings
+        # Hostname
+       if [ -z $hostname_prev ]; then
+           hostname_prev=$hostname_default
+       fi
+       echo -n "Hostname [$hostname_prev]: "
+       read hostname
+       if [ ! -z $hostname ]; then
+           hostname_prev=$hostname
+       else
+           hostname=$hostname_prev
+       fi
+       
+        # IP address
+       if [ -z $ip_prev ]; then
+           ip_prev=$ip_default
+       fi
+       echo -n "IP address [$ip_prev]: "
+       read ip
+       if [ ! -z $ip ]; then
+           ip_prev=$ip
+       else
+           ip=$ip_prev
+       fi
+       
+        # Netmask
+       if [ -z $netmask_prev ]; then
+           netmask_prev=$netmask_default
+       fi
+       echo -n "Netmask [$netmask_prev]: "
+       read netmask
+       if [ ! -z $netmask ]; then
+           netmask_prev=$netmask
+       else
+           netmask=$netmask_prev
+       fi
+       
+        # Gateway (no gateway is fine for local networking)
+       echo -n "Gateway: "
+       read gateway
+           
+        # DNS Servers
+       echo -n "Primary DNS Server [$dns1_prev]: "
+       read dns1
+       test -z "$dns1" && test -n "$dns1_prev" && dns1=$dns1_prev
+       if [ ! -z "$dns1" ]; then
+           dns1_prev=$dns1
+           
+           echo -n "Secondary DNS Server [$dns2_prev]: "
+           read dns2
+           if [ ! -z $dns2 ]; then
+               dns2_prev=$dns2
+           fi
+       else
+           # If no primary DNS, then also no secondary DNS
+           dns2=""
+       fi
+    fi
+}
+
+# Parse options
+while getopts ":qe:p:aH:i:n:g:d:s:hc" arg; do
+    case "$arg" in
+       q) v=0; ;;
+       e) ethernet=$OPTARG; 
+          test "$ethernet" -ge 0 -a "$ethernet" -le 7 2>/dev/null || usage
+          drv_params $ethernet
+          ;;
+       p) prefix=$OPTARG; ;;
+       a) dhcp="yes"; ;;
+       H) hostname=$OPTARG; manual_opts=`expr $manual_opts '+' 1`;;
+       i) ip=$OPTARG;       manual_opts=`expr $manual_opts '+' 1`;;
+       n) netmask=$OPTARG;  manual_opts=`expr $manual_opts '+' 1`;;
+       g) gateway=$OPTARG;  manual_opts=`expr $manual_opts '+' 1`;;
+       d) dns1=$OPTARG;     ;;
+       s) dns2=$OPTARG;     ;;
+       h) usage ;;
+       c) echo -e "The following cards are supported by Minix:\n";
+          cards; exit 0
+          ;;
+       \?) echo "Unknown option -$OPTARG"; usage ;;
+       :) echo "Missing required argument for -$OPTARG"; usage ;;
+       *)  usage ;;
+    esac
+done
+
+# Verify parameter count
+if [ "$dhcp" != "yes" ] ; then
+    if [ $manual_opts -gt 0 ] ; then
+        test $manual_opts -eq 4 -a -n "$dns1" || usage
+        manual="do"
+    fi
+fi
+
+if [ -n "$prefix" ] ; then
+    LOCALRC=$prefix$LOCALRC
+    INETCONF=$prefix$INETCONF
+    RCNET=$prefix$RCNET
+    HOSTS=$prefix$HOSTS
+    HOSTNAME=$prefix$HOSTNAME
+    if [ ! -f  $INETCONF ]; then
+       echo -e "It seems the supplied prefix (\`$prefix') is invalid."
+       exit 1
+    fi
+fi
+
+if [ "$USER" != root ] ; then
+    test "$v" = 1 && echo "Please run netconf as root."
+    exit 1
+fi
+
+# Are we running from CD?
+if [ -f "$USRKBFILE" ] ; then
+    echo "Running from CD"
+    cd="yes" # We are running from CD
+fi
+
+# Do we know what ethernet card to use?
+test -z "$ethernet" && do_step1
+
+# If no parameters are supplied and we're not using DHCP, query for settings
+test $manual_opts -eq 0 -a "$dhcp" = "no" && do_step2
+
+# Store settings.
+# Do not make backups if we're running from CD
+test "$cd" != "yes" && test -f $INETCONF && mv $INETCONF "$INETCONF~" && 
+                     test "$v" = 1 && echo "Backed up $INETCONF to $INETCONF~"
+test "$cd" != "yes" && test -f $LOCALRC && mv $LOCALRC "$LOCALRC~" &&
+                     test "$v" = 1 && echo "Backed up $LOCALRC to $LOCALRC~"
+
+echo "eth0 $driver 0 { default; } ;" > $INETCONF
+echo "$driverargs" > $LOCALRC
+
+if [ -n "$manual" ]
+    then
+    # Backup config file if it exists and we're not running from CD
+    test "$cd" != "yes" && test -f $RCNET && mv $RCNET "$RCNET~" && 
+                      test "$v" = 1 && echo "Backed up $RCNET to $RCNET~"
+    test "$cd" != "yes" && test -f $HOSTS && mv $HOSTS "$HOSTS~" && 
+                      test "$v" = 1 && echo "Backed up $HOSTS to $HOSTS~"
+
+    # Store manual config
+    echo "ifconfig -I /dev/ip0 -n $netmask -h $ip" > $RCNET
+    test ! -z $gateway && echo "add_route -g $gateway" >> $RCNET
+    echo "daemonize nonamed -L" >> $RCNET
+    test ! -z $dns1 && echo -e "$ip\t%nameserver\t#$hostname" > $HOSTS
+    test ! -z $dns1 && echo -e "$dns1\t%nameserver\t#DNS 1" >> $HOSTS
+    test ! -z $dns2 && echo -e "$dns2\t%nameserver\t#DNS 2" >> $HOSTS
+    echo -e "\n$ip\t$hostname" >> $HOSTS
+    echo $hostname > $HOSTNAME
+else
+    test "$cd" != "yes" && test -f "$RCNET" && mv "$RCNET" "$RCNET~" && 
+        test "$v" = 1 && echo "Moved $RCNET to $RCNET~ to use default settings"
+    test "$cd" != "yes" && test -f $HOSTS && mv $HOSTS "$HOSTS~" && 
+        test "$v" = 1 && echo "Backed up $HOSTS to $HOSTS~"
+    test -f "$HOSTS~" && grep -v "%nameserver" "$HOSTS~" > $HOSTS
+fi
+
+test "$cd" != "yes" && test "$v" = 1 && echo "
+You might have to reboot for the changes to take effect."
+exit 0
index e0fb1ca9386aba9bcc20591ae3fba69389daaf77..9d6f6f23e99eb34329090334feb15a29934469d4 100755 (executable)
@@ -130,59 +130,11 @@ done
 # end Step 1
 
 # begin Step 2
-echo ""
-echo " --- Step 2: Select your Ethernet chip ---------------------------------"
-echo ""
-
-# Ask user about networking
-echo "MINIX 3 currently supports the following Ethernet cards. Please choose: "
-    echo ""
-    echo "0. No Ethernet card (no networking)"
-    echo "1. Intel Pro/100"
-    echo "2. 3Com 501 or 3Com 509 based card"
-    echo "3. Realtek 8139 based card (also emulated by KVM)"
-    echo "4. Realtek 8029 based card (also emulated by Qemu)"
-    echo "5. NE2000, 3com 503 or WD based card (also emulated by Bochs)"
-    echo "6. AMD LANCE (also emulated by VMWare and VirtualBox)"
-    echo "7. Different Ethernet card (no networking)"
-    echo ""
-    echo "You can always change your mind after the setup."
-    echo ""
-step2=""
-while [ "$step2" != ok ]
-do
-    eth=""
-    echo -n "Ethernet card? [0] "; read eth
-    test -z $eth && eth=0
-    driver=""
-    driverargs=""
-    case "$eth" in
-        0) step2="ok"; ;;    
-       1) step2="ok";  driver=fxp;      ;;
-       2) step2="ok";  driver=dpeth;    driverargs="#dpeth_arg='DPETH0=port:irq:memory'";
-          echo ""
-           echo "Note: After installing, edit $LOCALRC to the right configuration."
-               ;;
-       3) step2="ok";  driver=rtl8139;  ;;
-       4) step2="ok";  driver=dp8390;   driverargs="dp8390_arg='DPETH0=pci'";  ;;
-       5) step2="ok";  driver=dp8390;   driverargs="dp8390_arg='DPETH0=240:9'"; 
-          echo ""
-           echo "Note: After installing, edit $LOCALRC to the right configuration."
-           echo " chose option 4, the defaults for emulation by Bochs have been set."
-               ;;
-        6) driver="lance"; step2="ok"; ;;    
-        7) step2="ok"; ;;    
-        *) warn "choose a number"
-    esac
-done
-# end Step 2
-
-# begin Step 3
-#step3=""
-#while [ "$step3" != ok ]
+#step2=""
+#while [ "$step2" != ok ]
 #do
 #      echo ""
-#      echo " --- Step 3: Select minimal or full distribution -----------------------"
+#      echo " --- Step 2: Select minimal or full distribution -----------------------"
 #      echo ""
 #      echo "You can install MINIX as (M)inimal or (F)ull. (M)inimal"
 #      echo "includes only the binary system and basic system sources."
@@ -195,24 +147,24 @@ done
 #      echo -n "Basic (M)inimal or (F)ull install? [F] "
 #      read conf
 #      case "$conf" in
-#      "")     step3="ok"; nobigsource="" ;;
-#      [Ff]*)  step3="ok"; nobigsource="" ;;
-#      [Mm]*)  step3="ok"; nobigsource="1"; TOTALMB=$NOSRCMB; USRFILES=$NOSRCUSRFILES ;;
+#      "")     step2="ok"; nobigsource="" ;;
+#      [Ff]*)  step2="ok"; nobigsource="" ;;
+#      [Mm]*)  step2="ok"; nobigsource="1"; TOTALMB=$NOSRCMB; USRFILES=$NOSRCUSRFILES ;;
 #      esac
 #done
-# end Step 3
+# end Step 2
 
 echo ""
-echo " --- Step 3: Selecting full distribution -------------------------------"
+echo " --- Step 2: Selecting full distribution -------------------------------"
 echo ""
 nobigsource=""
 
-# begin Step 4
-step4=""
-while [ "$step4" != ok ]
+# begin Step 3
+step3=""
+while [ "$step3" != ok ]
 do
        echo ""
-       echo " --- Step 4: Create or select a partition for MINIX 3 -------------------"
+       echo " --- Step 3: Create or select a partition for MINIX 3 -------------------"
        echo ""
 
     echo "Now you need to create a MINIX 3 partition on your hard disk."
@@ -282,7 +234,7 @@ Please finish the name of the primary partition you have created:
                do
                        echo -n "Are you sure you want to continue? Please enter 'yes' or 'no': "
                        read confirmation
-                       if [ "$confirmation" = yes ]; then step4=ok; fi
+                       if [ "$confirmation" = yes ]; then step3=ok; fi
                done
                biosdrivename="Actual BIOS device name unknown, due to expert mode."
        else
@@ -311,23 +263,23 @@ Please finish the name of the primary partition you have created:
                        # them messy.
                        atnormalize
 
-                       if [ -n "$primary" ]; then step4=ok; fi
+                       if [ -n "$primary" ]; then step3=ok; fi
                fi
        fi
 
        if [ ! -b "/dev/$primary" ]
-       then    echo Doing step 4 again.
-               step4=""
+       then    echo Doing step 3 again.
+               step3=""
        else
                devsize="`devsize /dev/$primary`"
 
                if [ "$devsize" -lt 1 ]
                then    echo "/dev/$primary is a 0-sized device."
-                       step4=""
+                       step3=""
                fi
        fi
-done   # while step4 != ok
-# end Step 4
+done   # while step3 != ok
+# end Step 3
 
 root=${primary}s0
 home=${primary}s1
@@ -359,7 +311,7 @@ while [ "$confirm" = "" ]
 do
        auto=""
        echo ""
-echo " --- Step 5: Reinstall choice ------------------------------------------"
+echo " --- Step 4: Reinstall choice ------------------------------------------"
        if mount -r /dev/$home $TMPMP >/dev/null 2>&1
        then    umount /dev/$home >/dev/null 2>&1
                echo ""
@@ -391,7 +343,7 @@ homesize=""
 if [ ! "$auto" = r ]
 then   
 echo ""
-echo " --- Step 6: Select the size of /home ----------------------------------"
+echo " --- Step 5: Select the size of /home ----------------------------------"
        while [ -z "$homesize" ]
        do
 
@@ -448,7 +400,7 @@ blockdefault=4
 if [ ! "$auto" = "r" ]
 then
        echo ""
-echo " --- Step 7: Select a block size ---------------------------------------"
+echo " --- Step 6: Select a block size ---------------------------------------"
        echo ""
        
        echo "The default file system block size is $blockdefault KB."
@@ -505,10 +457,9 @@ else       fshome=""
 fi
 
 echo ""
-echo " --- Step 8: Wait for files to be copied -------------------------------"
+echo " --- Step 7: Wait for files to be copied -------------------------------"
 echo ""
-echo "This is the final step of the MINIX 3 setup.  All files will now be"
-echo "copied to your hard disk.  This may take a while."
+echo "All files will now be copied to your hard disk. This may take a while."
 echo ""
 
 mount /dev/$usr /mnt >/dev/null || exit                # Mount the intended /usr.
@@ -521,10 +472,6 @@ mount /dev/$usr /mnt >/dev/null || exit            # Mount the intended /usr.
  done
 ) | progressbar "$USRFILES" || exit    # Copy the usr floppy.
 
-if [ -n "$driver" ]
-then   echo "$driverargs" >$MYLOCALRC
-fi
-
 umount /dev/$usr >/dev/null || exit            # Unmount the intended /usr.
 mount /dev/$root /mnt >/dev/null || exit
 
@@ -536,10 +483,6 @@ cp /mnt/etc/motd.install /mnt/etc/motd
 rm /mnt/var/log
 ln -s /usr/log /mnt/var/log
 
-if [ -n "$driver" ]
-then   echo "eth0 $driver 0 { default; };" >/mnt/etc/inet.conf
-fi
-
 # CD remnants that aren't for the installed system
 rm /mnt/etc/issue /mnt/CD /mnt/.* 2>/dev/null
                                        # Change /etc/fstab. (No swap.)
@@ -554,7 +497,7 @@ $fshome"
                                        # National keyboard map.
 test -n "$keymap" && cp -p "/usr/lib/keymaps/$keymap.map" /mnt/etc/keymap
 
-umount /dev/$root >/dev/null || exit   # Unmount the new root.
+umount /dev/$root >/dev/null || exit   # Unmount the new root.
 mount /dev/$usr /mnt >/dev/null || exit
 
 # Make bootable.
@@ -587,6 +530,21 @@ fi
 echo "Saving random data.."
 dd if=/dev/random of=/mnt/adm/random.dat bs=1024 count=1
 
+umount /dev/$usr >/dev/null || exit
+
+# Networking.
+echo ""
+echo " --- Step 8: Select your Ethernet chip ---------------------------------"
+echo ""
+
+mount /dev/$root /mnt >/dev/null || exit
+mount /dev/$usr /mnt/usr >/dev/null || exit
+
+/bin/netconf -p /mnt || echo FAILED TO CONFIGURE NETWORK
+
+umount /dev/$usr && echo Unmounted $usr
+umount /dev/$root && echo Unmounted $root
+
 echo "
 Please type 'shutdown' to exit MINIX 3 and enter the boot monitor. At
 the boot monitor prompt, type 'boot $bios', where X is the bios drive