316 lines
8 KiB
Bash
316 lines
8 KiB
Bash
|
#!/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
|