#!/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 ] [-e ] [-a] netconf [-H -i -n -g -d [-s ]] 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 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