diff options
-rw-r--r-- | netconfig | 469 |
1 files changed, 310 insertions, 159 deletions
@@ -15,10 +15,16 @@ write_config_files() { # we use the IP in other places, we need to make a copy for here. RCIPCOPY=$IPADDR RCMASKCOPY=$NETMASK +RCIP6COPY=$IPADDR6 +RCPREFIXCOPY=$PREFIX6 if [ "$RCIPCOPY" = "127.0.0.1" ]; then RCIPCOPY="" RCMASKCOPY="" fi +if [ "$RCIP6COPY" = "::1" ]; then + RCIP6COPY="" + RCPREFIXCOPY="" +fi # echo "Creating /$RC..." /bin/cat << ENDFILE > $RC @@ -55,9 +61,9 @@ IPALIASES[0]="" USE_DHCP[0]="$USE_DHCP" DHCP_HOSTNAME[0]="$DHCP_HOSTNAME" # IPv6 config information for eth0: -IP6ADDRS[0]="" -USE_SLAAC[0]="" -USE_DHCP6[0]="" +IP6ADDRS[0]="`if [ ! \"$RCIP6COPY\" = \"\" ]; then echo \"$RCIP6COPY/$RCPREFIXCOPY\"; fi`" +USE_SLAAC[0]="$USE_SLAAC" +USE_DHCP6[0]="$USE_DHCP6" # IPv4 config information for eth1: IPADDR[1]="" @@ -95,7 +101,7 @@ USE_DHCP6[3]="" # IPv4 default gateway IP address: GATEWAY="$GATEWAY" # IPv6 default gateway IP address: -GATEWAY6="" +GATEWAY6="$GATEWAY6" # ============================================================================= @@ -361,7 +367,7 @@ fi # example: syntax_check 123.22.43.1 4 # returns: 0=found correct 1=too many fields 2=non numeric field found syntax_check_color() { - RET_CODE=0 + RET_CODE=0 SCRATCH=$1 SCRATCH=`echo $SCRATCH | tr "." "/"` INDEX=$2 @@ -381,16 +387,11 @@ syntax_check_color() { fi if [ "$3" = "WARN" -a ! "$RET_CODE" = "0" ]; then cat << EOF > $TMP/tempmsg - -The address you have entered seems to be non-standard. We were expecting -$2 groups of numbers seperated by dots, like: 127.0.0.1 -Are you absolutely sure you want to use the address $1? - +The value you have entered seems to be non-standard. We were +expecting $2 groups of numbers seperated by dots, like: 127.0.0.1 +Please enter a valid value. EOF - dialog --title "WARNING" --yesno "`cat $TMP/tempmsg`" 9 72 - if [ $? = 0 ]; then - RET_CODE = 0; - fi + dialog --title "INVALID VALUE" --defaultno --msgbox "`cat $TMP/tempmsg`" 7 72 rm -r $TMP/tempmsg else if [ "$3" = "ECHO" ]; then @@ -411,14 +412,16 @@ RC=etc/rc.d/rc.inet1.conf # Where rc.inet1.conf file is. RESOLV=etc/resolv.conf # Where resolv.conf file is. HOSTS=etc/hosts # Where hosts file is. ETCNETWORKS=etc/networks # Where networks file is. -USE_DHCP="" # Use DHCP? "" == no. -DHCP_HOSTNAME="" # This is our DHCP hostname. # # defaults: +USE_DHCP="" # Use DHCP? "" == no. +USE_DHCP6="" +DHCP_HOSTNAME="" # This is our DHCP hostname. NETWORK=127.0.0.0 IPADDR=127.0.0.1 -NETMASK=255.255.255.0 - +NETMASK=24 # Use CIDR now. +IPADDR6=::1 +PREFIX6=64 # Main loop: while [ 0 ]; do @@ -507,9 +510,10 @@ services), select 'DHCP'. If you do not have a network card, select \ the 'loopback' choice. You may also select 'NetworkManager' if you would \ like to have the NetworkManager daemon automatically handle your wired and \ wireless network interfaces (this is simple and usually works). \ -Which type of network setup would you like?" 20 70 4 \ -"static IP" "Use a static IP address to configure ethernet" \ -"DHCP" "Use a DHCP server to configure ethernet" \ +Which type of network setup would you like?" 21 77 5 \ +"SLAAC" "Use only IPv6 SLAAC to configure ethernet" \ +"static IP" "Use a static IPv4 or IPv6 address to configure ethernet" \ +"DHCP" "Use a DHCP (IPv4 or IPv6) server to configure ethernet" \ "loopback" "Set up a loopback connection (modem or no net)" \ "NetworkManager" "Autoconfigure network using NetworkManager" 2> $TMP/reply if [ $? = 1 -o $? = 255 ]; then @@ -520,7 +524,27 @@ REPLY=`cat $TMP/reply` rm -f $TMP/reply if [ "$REPLY" = "DHCP" ]; then - USE_DHCP="yes" + dialog --title "SELECT DHCP TYPE" --default-item "DHCPv4" --menu \ +"Please select the type of DHCP to use to configure your networking. +Select 'DHCPv4' to configure for an IPv4 network (this is the most +common type of network, and the safe choice). Select 'DHCPv6' for a +pure IPv6 network, or 'Both' to try and set up both types of network." 13 73 3 \ +"DHCPv4" "An IPv4 based network, with no IPv6 configuration" \ +"DHCPv6" "An IPv6 based network, with no IPv4 configuration" \ +"Both" "A combination of IPv4 and IPv6 networks" 2>$TMP/reply + if [ $? = 1 -o $? = 255 ]; then + rm -f $TMP/reply + exit + fi + TYPE=`cat $TMP/reply` + if [ "$TYPE" = "DHCPv4" ]; then + USE_DHCP="yes" + elif [ "$TYPE" = "DHCPv6" ]; then + USE_DHCP6="yes" + else + USE_DHCP="yes" + USE_DHCP6="yes" + fi dialog --title "SET DHCP HOSTNAME" --inputbox "Some network providers require \ that the DHCP hostname be set in order to connect. If so, they'll have assigned \ a hostname to your machine, which may look something like CC-NUMBER-A (this \ @@ -536,136 +560,252 @@ elif [ "$REPLY" = "loopback" ]; then elif [ "$REPLY" = "NetworkManager" ]; then LOOPBACK="yes" NETWORKMANAGER="yes" +elif [ "$REPLY" = "SLAAC" ]; then + LOOPBACK="no" + USE_SLAAC="yes" else LOOPBACK="no" fi -if [ "$LOOPBACK" = "no" -a ! "$USE_DHCP" = "yes" ]; then - - while [ 0 ]; do - if [ -r $TMP/SeTIP ]; then - IPADDR=`cat $TMP/SeTIP` - fi - cat << EOF > $TMP/tempmsg -Enter your IP address for the local machine. Example: -111.112.113.114 -Enter IP address for $HOSTNM (aaa.bbb.ccc.ddd): -EOF - dialog --title "ENTER IP ADDRESS FOR '$HOSTNM.$DOMAIN'" --inputbox \ -"`cat $TMP/tempmsg`" \ -10 68 $IPADDR 2> $TMP/SeTlip - if [ $? = 1 -o $? = 255 ]; then - rm -f $TMP/SeTlip $TMP/tempmsg - exit - fi - IPADDR="`cat $TMP/SeTlip`" - rm -f $TMP/SeTlip $TMP/tempmsg - if [ "$IPADDR" = "" ]; then - continue; - fi - syntax_check_color $IPADDR 4 WARN - if [ $? = 0 ]; then - echo $IPADDR > $TMP/SeTIP - break; - fi - done +if [ "$LOOPBACK" = "no" -a ! "$USE_DHCP" = "yes" -a ! "$USE_SLAAC" = "yes" ]; then + while [ 0 ]; do + while [ 0 ]; do + if [ -r $TMP/SeTIP ]; then + IPADDR=`cat $TMP/SeTIP` + fi + dialog --title "ENTER IPv4 ADDRESS FOR '$HOSTNM.$DOMAIN'" --inputbox \ +"Enter the IPv4 address for the local machine. Example: 111.112.113.114 +If you do not want to configure a static IPv4 address, just hit ENTER. " \ + 9 75 $IPADDR 2> $TMP/SeTlip + if [ $? = 1 -o $? = 255 ]; then + rm -f $TMP/SeTlip + exit + fi + IPADDR="`cat $TMP/SeTlip`" + rm -f $TMP/SeTlip + if [ "$IPADDR" = "" ]; then + break + fi + syntax_check_color $IPADDR 4 WARN + if [ $? = 0 ]; then + echo $IPADDR > $TMP/SeTIP + break + fi + done + + if [ ! "$IPADDR" = "" ]; then + while [ 0 ]; do + if [ -r $TMP/SeTnetmask ]; then + NETMASK=`cat $TMP/SeTnetmask` + fi + dialog --title "ENTER NETMASK FOR IPv4 NETWORK" --inputbox \ +"Enter the netmask for your IPv4 network. +This will generally be a single number (eg, 24) +or look something like this: 255.255.255.0." 10 55 $NETMASK 2> $TMP/SeTnmask + if [ $? = 1 -o $? = 255 ]; then + rm -f $TMP/SeTnmask + exit + fi + NETMASK="`cat $TMP/SeTnmask`" + rm -f $TMP/SeTnmask + if [ "$NETMASK" = "" ]; then + dialog --title "NETMASK REQUIRED" --msgbox \ +"You have configured this host with a v4 +IP address - a netmask is required." 6 43 + continue + fi + if (($NETMASK == 0)) 2>/dev/null || (($NETMASK > 32)) 2>/dev/null; then + dialog --title "NETMASK INVALID" --msgbox \ +"The netmask you entered is not valid. +Valid netmasks will be in the range 1-32." 6 45 + continue + elif (($NETMASK)) 2>/dev/null; then + echo $NETMASK > $TMP/SeTnetmask + break + else + syntax_check_color $NETMASK 4 WARN + if [ $? = 0 ]; then + echo $NETMASK > $TMP/SeTnetmask + break + fi + fi + done + while [ 0 ]; do + if [ -r $TMP/SeTgateway ]; then + GATEWAY=`cat $TMP/SeTgateway` + fi + dialog --title "ENTER IPv4 GATEWAY ADDRESS" --inputbox \ +"Enter the address for the IPv4 gateway on your network, such as: + `echo $IPADDR | cut -f 1-3 -d .`.1 + +If you don't have an IPv4 gateway on your network just hit ENTER +without entering a gateway IP address. - while [ 0 ]; do - if [ -r $TMP/SeTnetmask ]; then - NETMASK=`cat $TMP/SeTnetmask` - fi - cat << EOF > $TMP/tempmsg -Enter your netmask. This will generally look something -like this: 255.255.255.0 -Enter netmask (aaa.bbb.ccc.ddd): -EOF - dialog --title "ENTER NETMASK FOR LOCAL NETWORK" --inputbox \ -"`cat $TMP/tempmsg`" \ -10 65 $NETMASK 2> $TMP/SeTnmask - if [ $? = 1 -o $? = 255 ]; then - rm -f $TMP/SeTnmask $TMP/tempmsg - exit - fi - NETMASK="`cat $TMP/SeTnmask`" - rm -f $TMP/SeTnmask $TMP/tempmsg - if [ "$NETMASK" = "" ]; then - continue; - fi - syntax_check_color $NETMASK 4 WARN - if [ $? = 0 ]; then - echo $NETMASK > $TMP/SeTnetmask - break; - fi - done - - # Set broadcast/network addresses automatically: - BROADCAST=`ipmask $NETMASK $IPADDR | cut -f 1 -d ' '` - NETWORK=`ipmask $NETMASK $IPADDR | cut -f 2 -d ' '` - - while [ 0 ]; do - if [ -r $TMP/SeTgateway ]; then - GATEWAY=`cat $TMP/SeTgateway` - fi - cat << EOF > $TMP/tempmsg -Enter the address for the gateway on your network, such as: -`echo $IPADDR | cut -f 1-3 -d .`.1 +Enter IPv4 gateway address (aaa.bbb.ccc.ddd):" 14 68 $GATEWAY 2> $TMP/SeTgate + if [ $? = 1 -o $? = 255 ]; then + rm -f $TMP/SeTgate + exit + fi + GATEWAY="`cat $TMP/SeTgate`" + rm -f $TMP/SeTgate + if [ "$GATEWAY" = "" ]; then + echo > $TMP/SeTgateway + break + fi + syntax_check_color $GATEWAY 4 WARN + if [ $? = 0 ]; then + echo $GATEWAY > $TMP/SeTgateway + break + fi + done + fi -If you don't have a gateway on your network just hit ENTER + while [ 0 ]; do + if [ -r $TMP/SeTIP6 ]; then + IPADDR6=`cat $TMP/SeTIP6` + fi + dialog --title "ENTER IPv6 ADDRESS FOR '$HOSTNM.$DOMAIN'" --inputbox \ +"Enter the IPv6 address for the local machine. +Example: fe80:426c:ffff::365a +If you do not want to configure a static IPv6 address, just hit ENTER." \ + 10 74 $IPADDR6 2> $TMP/SeTlip6 + if [ $? = 1 -o $? = 255 ]; then + rm -f $TMP/SeTlip6 + exit + fi + IPADDR6="`cat $TMP/SeTlip6`" + rm -f $TMP/SeTlip6 + if [ "$IPADDR6" = "" ]; then + if [ "$IPADDR" = "" ]; then + dialog --title "NO IP ADDRESSES" --yesno \ +"You have not configured any IP addresses for your system. +Are you sure you want to proceed with no IPs?" 6 61 + if [ $? = 0 ]; then + break 2 + else + continue 2 + fi + fi + else + # We can only do a basic validation of the entered address + # as regexes for IPv6 addresses are very complex. + if echo "$IPADDR6" | grep -E "^[0-9a-fA-F:]+$" >/dev/null; then + echo $IPADDR6 > $TMP/SeTIP6 + break + else + dialog --title "INVALID IP ADDRESS" --msgbox \ +"The IP address you entered is not valid. +Please enter a valid IPv6 address." 6 44 + continue + fi + fi + done + + if [ ! "$IPADDR6" = "" ]; then + while [ 0 ]; do + if [ -r $TMP/SeTprefix6 ]; then + PREFIX6=`cat $TMP/SeTprefix6` + fi + dialog --title "ENTER IPv6 PREFIX FOR LOCAL NETWORK" --inputbox \ +"Enter your IPv6 prefix length. +This will be a single number (eg, 64)" 9 55 $PREFIX6 2> $TMP/SeTprefix6 + if [ $? = 1 -o $? = 255 ]; then + rm -f $TMP/SeTprefix6 + exit + fi + PREFIX6="`cat $TMP/SeTprefix6`" + if [ "$PREFIX6" = "" ]; then + dialog --title "PREFIX REQUIRED" --msgbox \ +"You have configured this host with a v6 +IP address - a prefix is required." 6 43 + continue + elif (($PREFIX6 == 0)) 2>/dev/null || (($PREFIX6 > 128)) 2>/dev/null || \ + ! (($PREFIX6)) 2>/dev/null; then + dialog --title "PREFIX INVALID" --msgbox \ +"The prefix you entered is not valid. +Valid prefixes will be in the range 1-128." \ +6 46 + continue + else + echo $PREFIX6 >$TMP/SeTprefix6 + break + fi + done + + while [ 0 ]; do + if [ -r $TMP/SeTgateway6 ]; then + GATEWAY6=`cat $TMP/SeTgateway6` + fi + dialog --title "ENTER IPv6 GATEWAY ADDRESS" --inputbox \ +"Enter the address for the IPv6 gateway on your network, such as: + fe80:426c:ffff::1 + +If you don't have an IPv6 gateway on your network just hit ENTER without entering a gateway IP address. -Enter gateway address (aaa.bbb.ccc.ddd): -EOF - dialog --title "ENTER GATEWAY ADDRESS" --inputbox "`cat $TMP/tempmsg`" \ - 14 64 $GATEWAY 2> $TMP/SeTgate - if [ $? = 1 -o $? = 255 ]; then - rm -f $TMP/SeTgate $TMP/tempmsg - exit - fi - GATEWAY="`cat $TMP/SeTgate`" - rm -f $TMP/SeTgate $TMP/tempmsg - if [ "$GATEWAY" = "" ]; then - echo > $TMP/SeTgateway - break; - fi - syntax_check_color $GATEWAY 4 WARN - if [ $? = 0 ]; then - echo $GATEWAY > $TMP/SeTgateway - break; - fi - done +Enter IPv6 gateway address:" 14 68 $GATEWAY6 2> $TMP/SeTgate6 + if [ $? = 1 -o $? = 255 ]; then + rm -f $TMP/SeTgate6 + exit + fi + GATEWAY6="`cat $TMP/SeTgate6`" + rm -f $TMP/6SeTgate6 + if [ "$GATEWAY6" = "" ]; then + echo > $TMP/SeTgateway6 + break 2 + fi + # We can only do a basic validation of the entered address + # as regexes for IPv6 addresses are very complex. + if echo "$GATEWAY6" | grep -E "^[0-9a-fA-F:]+$" >/dev/null; then + echo $GATEWAY6 > $TMP/SeTgateway6 + break 2 + else + dialog --title "INVALID IP ADDRESS" --msgbox \ +"The IP address you entered is not valid. +Please enter a valid IPv6 address." 6 44 + continue + fi + echo $GATEWAY6 > $TMP/SeTgateway6 + done + fi + done fi if [ "$LOOPBACK" = "no" ]; then - dialog --title "USE A NAMESERVER?" --yesno "Will you be accessing a \ -nameserver?" 5 42 + dialog --title "USE A NAMESERVER?" --yesno "Do you wish to configure \ +a nameserver?" 5 42 if [ $? = 0 ]; then - if [ ! "`cat $TMP/SeTns 2> /dev/null`" = "" ]; then - DNSSAMPLE="`cat $TMP/SeTns 2> /dev/null`" - elif [ "$GATEWAY" = "" ]; then - DNSSAMPLE=`echo $IPADDR | cut -f 1-3 -d .` - else - DNSSAMPLE=$GATEWAY + if [ ! "$IPADDR" = "" ]; then + if [ ! "$GATEWAY" = "" ]; then + DNSSAMPLE="$GATEWAY" + DNSDEFAULT="$GATEWAY" + else + DNSSAMPLE="`echo $IPADDR | cut -f 1-3 -d .`.1" + fi + fi + if [ ! "$IPADDR6" = "" ]; then + if [ ! "$GATEWAY6" = "" ]; then + DNSSAMPLE="$DNSSAMPLE or $GATEWAY6" + # Keep the v4 nameserver the default, for now. + # DNSDEFAULT="$GATEWAY6" + else + DNSSAMPLE="or fe80:426c:ffff::1" + fi fi while [ "$NAMESERVER" = "" ]; do - cat << EOF > $TMP/tempmsg -Here is your current IP address, full hostname, and base hostname: -$IPADDR $HOSTNM.$DOMAIN $HOSTNM + dialog --title "ENTER NAMESERVER IP ADDRESS" --inputbox \ +"Please give the IP address of the name server to use, such as + $DNSSAMPLE +You can add more Domain Name Servers later by editing + /$RESOLV. -Please give the IP address of the name server to use, -such as $DNSSAMPLE. - -You can add more Domain Name Servers later by editing /$RESOLV. - -Primary name server to use (aaa.bbb.ccc.ddd): -EOF - dialog --title "SELECT NAMESERVER" --inputbox \ -"`cat $TMP/tempmsg`" 17 72 $DNSSAMPLE 2> $TMP/SeTns +Primary name server to use:" 13 65 $DNSDEFAULT 2> $TMP/SeTns if [ $? = 1 -o $? = 255 ]; then - rm -f $TMP/tempmsg $TMP/SeTns + rm -f $TMP/SeTns break fi NAMESERVER="`cat $TMP/SeTns`" - rm -f $TMP/tempmsg $TMP/SeTns + rm -f $TMP/SeTns done fi fi @@ -749,7 +889,7 @@ system is now configured to use loopback: IP address: 127.0.0.1 Netmask: 255.255.255.0 -Is this correct? Press 'Yes' to continue, or 'No' to reconfigure." 0 0 +Is this correct? Press 'Yes' to continue, or 'No' to reconfigure." 10 70 RETVAL=$? elif [ "$LOOPBACK" = "yes" -a "$NETWORKMANAGER" = "yes" ]; then dialog --title "NETWORK SETUP COMPLETE" --yesno "Your networking \ @@ -758,24 +898,29 @@ wired and wireless network management. To set up wireless networks and view status, add the Network Management control panel widget to your KDE desktop. -Is this correct? Press 'Yes' to confirm, or 'No' to reconfigure." 0 0 +Is this correct? Press 'Yes' to confirm, or 'No' to reconfigure." 10 71 RETVAL=$? -elif [ "$USE_DHCP" = "" ]; then +elif [ "$USE_SLAAC" = "yes" ]; then + dialog --title "NETWORK SETUP COMPLETE" --yesno \ +"Your system is now set up to autoconfigure an IPv6 IP address. +If this is correct, hit 'Yes' to confirm, or 'No' to cancel." 6 66 +RETVAL=$? +elif [ "$USE_DHCP" = "" -a "$USE_DHCP6" = "" ]; then while [ 0 ]; do dialog --title "CONFIRM NETWORK SETUP" \ ---ok-label Accept \ ---extra-label Edit \ ---cancel-label Restart \ ---inputmenu \ +--ok-label Accept --extra-label Edit --cancel-label Restart --inputmenu \ "These are the settings you have entered. To accept them and complete \ -the networking setup, press enter. If you need to make any changes, you \ -can do that now (or reconfigure later using 'netconfig')." \ -22 60 12 \ +the networking setup, press ENTER. If you need to make any changes, you \ +can do that now using 'Edit' (or reconfigure later using 'netconfig')." \ +24 75 15 \ "Hostname:" "$HOSTNM" \ -"Domain name:" "$DOMAIN" \ -"IP address:" "$IPADDR" \ -"Netmask:" "$NETMASK" \ -"Gateway:" "$GATEWAY" \ +"Domain Name:" "$DOMAIN" \ +"IPv4 Address:" "$IPADDR" \ +"IPv4 Netmask:" "$NETMASK" \ +"IPv4 Gateway:" "$GATEWAY" \ +"IPv6 Address:" "$IPADDR6" \ +"IPv6 Prefix:" "$PREFIX6" \ +"IPv6 Gateway:" "$GATEWAY6" \ "Nameserver:" "$NAMESERVER" 2> $TMP/tempmsg RETVAL=$? if [ "$RETVAL" = "3" ]; then @@ -783,14 +928,20 @@ can do that now (or reconfigure later using 'netconfig')." \ NEWVAL=`cat $TMP/tempmsg | cut -f 2 -d : | cut -f 2- -d ' '` if [ "$FIELD" = "Hostname" ]; then HOSTNM=$NEWVAL - elif [ "$FIELD" = "Domain name" ]; then + elif [ "$FIELD" = "Domain Name" ]; then DOMAIN=$NEWVAL - elif [ "$FIELD" = "IP address" ]; then + elif [ "$FIELD" = "IPv4 Address" ]; then IPADDR=$NEWVAL - elif [ "$FIELD" = "Netmask" ]; then + elif [ "$FIELD" = "IPv4 Netmask" ]; then NETMASK=$NEWVAL - elif [ "$FIELD" = "Gateway" ]; then + elif [ "$FIELD" = "IPv4 Gateway" ]; then GATEWAY=$NEWVAL + elif [ "$FIELD" = "IPv6 Address" ]; then + IPADDR6=$NEWVAL + elif [ "$FIELD" = "IPv6 Prefix" ]; then + PREFIX6=$NEWVAL + elif [ "$FIELD" = "IPv6 Gateway" ]; then + GATEWAY6=$NEWVAL elif [ "$FIELD" = "Nameserver" ]; then NAMESERVER=$NEWVAL fi @@ -799,17 +950,18 @@ can do that now (or reconfigure later using 'netconfig')." \ fi done else # DHCP was used - dialog --title "CONFIRM SETUP COMPLETE" \ + dialog --title "CONFIRM NETWORK SETUP" \ --yesno "Your networking system is now configured to use DHCP: - Hostname: $HOSTNM + Hostname: $HOSTNM Domain name: $DOMAIN - IP address: (use DHCP server) - Netmask: (use DHCP server) - Gateway: (use DHCP server) - Nameserver: (use DHCP server) + DHCP hostname: $DHCP_HOSTNAME + IP addresses: (use DHCP server) + Netmask & Prefix: (use DHCP server) + Gateways: (use DHCP server) + Nameserver: (use DHCP server) -Is this correct? Press 'Yes' to continue, or 'No' to reconfigure." 0 0 +Is this correct? Press 'Yes' to continue, or 'No' to reconfigure." 15 76 RETVAL=$? fi @@ -834,4 +986,3 @@ else fi exit $RETVAL - |