Author: justin
Date: 2005-08-27 23:12:52 -0600 (Sat, 27 Aug 2005)
New Revision: 601
Modified:
ppc/trunk/scripts/net-setup
Log:
Reverted copy of new net-setup to the ppc branch. Needs the dialog program
before it will work.
Modified: ppc/trunk/scripts/net-setup
===================================================================
--- ppc/trunk/scripts/net-setup 2005-08-28 05:06:17 UTC (rev 600)
+++ ppc/trunk/scripts/net-setup 2005-08-28 05:12:52 UTC (rev 601)
@@ -1,436 +1,191 @@
#!/bin/bash
#
-# Script for interactively choosing a network interface,
-# service and configuring this service. First implemented
+# Script for interactively choosing a network service
+# and starting eth0 on the LFS LiveCD. First implemented
# in the x86-6.0-1 CD.
#
# Written by Jeremy Huntwork 09.17.2004
-# Additional features by Justin Knierim with the help
-# of Alexander Patrakov 08.08.05
#
-# Locations of network configs, ifup and ifdown
DIR=/etc/sysconfig/network-devices
+ETH0CFG=$DIR/ifconfig.eth0
IFUP=$DIR/ifup
IFDOWN=$DIR/ifdown
+LINKTEST=`ip link show eth0 2> /dev/null`
+GREETING="Let's configure your network device!"
-# Set variables after network device is selected
-set_devvars(){
- ETHXCFG=$DIR/ifconfig.$DEV
- LINKTEST=`/sbin/ip link show $DEV 2> /dev/null`
-}
+# Function to set nameservers in /etc/resolv.conf
+# Allows user to enter any number of nameservers,
+# exits when user types "done"
-# Form to enter nameservers for /etc/resolv.conf
set_dns(){
- DLG_COMMAND="dialog --title \"DNS Servers - /etc/resolv.conf\"
--no-cancel \
- --form \"Please enter the DNS IP addresses below:\" 0 0 3 \
- \"Server 1:\" 1 1 \"$F_DNS1\" 1 25 15 0 \
- \"Server 2:\" 2 1 \"$F_DNS2\" 2 25 15 0 \
- \"Server 3:\" 3 1 \"$F_DNS3\" 3 25 15 0"
- SELECTION=`eval $DLG_COMMAND 3>&2 2>&1 1>&3`
- STATUS=$?
- if [ "$STATUS" -ne 0 ] ; then
- exit 1
- fi
+ echo "Enter a DNS server: "
+ echo "(Enter server addresses, one per line in order of preference, and
type \"done\" when finished."
+ read DNS
+ counter=0
+ while [ $DNS != "done" ]
+ do
+ # Check that user enters four numbers separated by '.'
+ if [ -z "$DNS" -o -n "${DNS##?*.?*.?*.?*}" ] ; then
+ echo "$DNS is not a valid nameserver address."
+ else
+ # If this is the first entry, overwrite any existing
+ # /etc/resolv.conf, else append.
+ if [ $counter -eq 0 ] ; then
+ echo "nameserver $DNS" > /etc/resolv.conf
+ else
+ echo "nameserver $DNS" >> /etc/resolv.conf
+ fi
+ fi
+ read DNS
+ counter=`expr $counter + 1`
+ done
+}
- unset F_DNS1 F_DNS2 F_DNS3
- eval "`echo "$SELECTION" | sed -e '1s,^,F_DNS1=",' -e '2s,^,F_DNS2=",' \
- -e '3s,^,F_DNS3=",' | sed -e 's,$,",'`"
-
- # Validate DNS IP addresses
- DNS_OK=1
- if [ -n "$F_DNS1" -a "${F_DNS1##?*.?*.?*.?*}" ] || \
- [ -n "$F_DNS2" -a "${F_DNS2##?*.?*.?*.?*}" ] || \
- [ -n "$F_DNS3" -a "${F_DNS3##?*.?*.?*.?*}" ] ; then
- DNS_OK=0
- DNS_ERRMSG="One of the entered IP addresses is not valid."
- fi
-
- if [ "$DNS_OK" -eq 1 ] ; then
- rm -f /etc/resolv.conf
- [ -n "$F_DNS1" ] && echo "nameserver $F_DNS1" >>
/etc/resolv.conf
- [ -n "$F_DNS2" ] && echo "nameserver $F_DNS2" >>
/etc/resolv.conf
- [ -n "$F_DNS3" ] && echo "nameserver $F_DNS3" >>
/etc/resolv.conf
-
- unset F_DNS1 F_DNS2 F_DNS3 SELECTION DLG_COMMAND STATUS
- unset DNS_OK DNS_ERRMSG
+set_static_ip(){
+ echo "Enter your IP address:"
+ read IP
+ if [ -z "$IP" -o -n "${IP##?*.?*.?*.?*}" ] ; then
+ echo ""
+ echo "$IP is not a valid IP address."
+ set_static_ip;
else
- DLG_COMMAND="dialog --title \"DNS IP Validation Error\" \
- --msgbox \"$DNS_ERRMSG\" 6 60"
- eval $DLG_COMMAND
- set_dns;
+ echo "IP=$IP" >> $ETH0CFG
fi
-}
+}
-# Setup IP address, prefix, gateway and broadcast
-set_static_cfg(){
- # Default values (only apply on first run-through, meaning SIP_OK
doesn't exist)
- if [ -z "$SIP_OK" ] ; then
- F_PREFIX=24
+set_static_gateway(){
+ echo "Enter your default gateway:"
+ read GTWY
+ if [ -z "$GTWY" -o -n "${GTWY##?*.?*.?*.?*}" ] ; then
+ echo ""
+ echo "$GTWY is not a valid default gateway."
+ set_static_gateway;
+ else
+ echo "GATEWAY=$GTWY" >> $ETH0CFG
fi
+}
- DLG_COMMAND="dialog --title \"Static IP Configuration\" --no-cancel \
- --form \"Please enter the network connection details:\" 0 0 4 \
- \"IP Address:\" 1 1 \"$F_IPADDR\" 1 25 15 0 \
- \"Prefix:\" 2 1 \"$F_PREFIX\" 2 25 2 0 \
- \"Broadcast:\" 3 1 \"$F_BROADCAST\" 3 25 15 0 \
- \"Gateway:\" 4 1 \"$F_GATEWAY\" 4 25 15 0"
- SELECTION=`eval $DLG_COMMAND 3>&2 2>&1 1>&3`
-
- STATUS=$?
- if [ "$STATUS" -ne 0 ] ; then
- exit 1
- fi
-
- unset F_IPADDR F_PREFIX F_BROADCAST F_GATEWAY
- eval "`echo "$SELECTION" | sed -e '1s,^,F_IPADDR=",' -e
'2s,^,F_PREFIX=",' \
- -e '3s,^,F_BROADCAST=",' -e '4s,^,F_GATEWAY=",' | sed -e
's,$,",'`"
-
- # Validate entries (Must give IP, prefix and broadcast. Gateway
optional.)
- SIP_OK=1
- if [ -n "$F_IPADDR" -a "${F_IPADDR##?*.?*.?*.?*}" ] || \
- [ -n "$F_BROADCAST" -a "${F_BROADCAST##?*.?*.?*.?*}" ] || \
- [ -n "$F_GATEWAY" -a "${F_GATEWAY##?*.?*.?*.?*}" ] ; then
- SIP_OK=0
- SIP_ERRMSG="One of the entered IP addresses or prefix is not
valid."
- fi
- if [ "$F_PREFIX" -lt 8 -o "$F_PREFIX" -gt 30 ] ; then
- SIP_OK=0
- SIP_ERRMSG="The prefix is not valid. Please enter a value from
8 to 30."
- fi
- if [ -z "$F_IPADDR" -o -z "$F_BROADCAST" -o -z "$F_PREFIX" ] ; then
- SIP_OK=0
- SIP_ERRMSG="Please enter an IP address, broadcast and prefix."
- fi
-
- if [ "$SIP_OK" -eq 1 ] ; then
- echo "IP=$F_IPADDR" >> $ETHXCFG
- echo "PREFIX=$F_PREFIX" >> $ETHXCFG
- echo "BROADCAST=$F_BROADCAST" >> $ETHXCFG
- [ -n "$F_GATEWAY" ] && echo "GATEWAY=$F_GATEWAY" >> $ETHXCFG
-
- unset F_IPADDR F_PREFIX F_BROADCAST F_GATEWAY DLG_COMMAND
STATUS
- unset SELECTION SIP_OK SIP_ERRMSG
+set_static_prefix(){
+ echo "Enter your prefix: "
+ echo "(This determines your subnet mask. For example, a prefix of 24
would give you a subnet mask of 255.255.255.0)"
+ read PRFX
+ # First verify that user has entered a prefix, and not just pressed
'Enter'
+ if [ $PRFX ] ; then
+ # Check that prefix is a value between 8 & 30
+ if [ "$PRFX" -lt 8 -o "$PRFX" -gt 30 ] ; then
+ echo ""
+ echo "$PRFX is not a valid prefix."
+ set_static_prefix;
+ else
+ echo "PREFIX=$PRFX" >> $ETH0CFG
+ fi
else
- DLG_COMMAND="dialog --title \"Static IP Validation Error\" \
- --msgbox \"$SIP_ERRMSG\" 6 60"
- eval $DLG_COMMAND
- set_static_cfg;
+ echo "Prefix cannot be empty."
+ echo ""
+ set_static_prefix;
fi
}
-# GPRS Device options
-set_gprs_cfg(){
- # Default values (only apply on first run-through, meaning GPRS_OK
doesn't exist)
- if [ -z "$GPRS_OK" ] ; then
- F_DEVICE=/dev/ttyS1
- F_SPEED=115200
- F_SETTING=1
- fi
-
- DLG_COMMAND="dialog --title \"GPRS Device Configuration\" --no-cancel \
- --form \"Please enter the GPRS device details below. The default value
for the setting number is 1.\" 0 0 4 \
- \"APN:\" 1 1 \"$F_APN\" 1 25 30 0 \
- \"Device:\" 2 1 \"$F_DEVICE\" 2 25 20 0 \
- \"Speed:\" 3 1 \"$F_SPEED\" 3 25 10 0 \
- \"Setting Number:\" 4 1 \"$F_SETTING\" 4 25 4 0"
- SELECTION=`eval $DLG_COMMAND 3>&2 2>&1 1>&3`
-
- STATUS=$?
- if [ "$STATUS" -ne 0 ] ; then
- exit 1
- fi
-
- unset F_APN F_DEVICE F_SPEED F_SETTING
- eval "`echo "$SELECTION" | sed -e '1s,^,F_APN=",' -e
'2s,^,F_DEVICE=",' \
- -e '3s,^,F_SPEED=",' -e '4s,^,F_SETTING=",' | sed -e 's,$,",'`"
-
- # Validate entries (All values are required.)
- GPRS_OK=1
- if [ -z "$F_APN" -o -z "$F_DEVICE" -o -z "$F_SPEED" -o -z "$F_SETTING"
] ; then
- GPRS_OK=0
- GPRS_ERRMSG="All fields are required to setup your GPRS device."
+set_static_broadcast(){
+ echo "Enter your broadcast address: "
+ read BRDCST
+ if [ -z "$BRDCST" -o -n "${BRDCST##?*.?*.?*.?*}" ] ; then
+ echo ""
+ echo "$BRDCST is not a valid broadcast address."
+ set_static_broadcast;
+ else
+ echo "BROADCAST=$BRDCST" >> $ETH0CFG
fi
-
- if [ "$GPRS_OK" -eq 1 ] ; then
- # Make a backup and restore before changes, so the sed's work
correctly.
- [ -f /etc/ppp/peers/gprs.orig ] || cp /etc/ppp/peers/gprs
/etc/ppp/peers/gprs.orig
- [ -f /etc/ppp/gprs.chat.orig ] || cp /etc/ppp/gprs.chat
/etc/ppp/gprs.chat.orig
- cp /etc/ppp/peers/gprs.orig /etc/ppp/peers/gprs
- cp /etc/ppp/gprs.chat.orig /etc/ppp/gprs.chat
-
- # Alter /etc/ppp/peers/gprs file.
- sed -i -e "[EMAIL PROTECTED]@[EMAIL PROTECTED]" -e
"s@/dev/[EMAIL PROTECTED]@g" \
- -e "[EMAIL PROTECTED]@[EMAIL PROTECTED]"
/etc/ppp/peers/gprs
-
- # Alter /etc/ppp/gprs.chat (advanced setting)
- sed -i -e "[EMAIL PROTECTED]@[EMAIL PROTECTED]" \
- -e "[EMAIL PROTECTED]@[EMAIL PROTECTED]"
/etc/ppp/gprs.chat
-
- unset F_APN F_DEVICE F_SPEED F_SETTING DLG_COMMAND STATUS
- unset SELECTION GPRS_OK GPRS_ERRMSG
- else
- DLG_COMMAND="dialog --title \"GPRS Validation Error\" \
- --msgbox \"$GPRS_ERRMSG\" 6 60"
- eval $DLG_COMMAND
- set_gprs_cfg;
- fi
}
-# Modem Device options
-set_modem_cfg(){
- # Default values (only apply on first run-through, meaning MODEM_OK
doesn't exist)
- if [ -z "$MODEM_OK" ] ; then
- F_DEVICE=/dev/ttyS1
- F_SPEED=115200
- fi
+# Main function. Presents user with a choice of
+# static or dhcp and attempts to bring up eth0
- DLG_COMMAND="dialog --title \"Modem Configuration\" --no-cancel \
- --form \"Please enter the modem details below:\" 0 0 5 \
- \"Telephone Number:\" 1 1 \"$F_PHONE\" 1 25 20 0 \
- \"User:\" 2 1 \"$F_USERNAME\" 2 25 30 0 \
- \"Password:\" 3 1 \"$F_PASSWORD\" 3 25 30 0 \
- \"Device:\" 4 1 \"$F_DEVICE\" 4 25 20 0 \
- \"Speed:\" 5 1 \"$F_SPEED\" 5 25 10 0"
- SELECTION=`eval $DLG_COMMAND 3>&2 2>&1 1>&3`
+choose_service(){
- STATUS=$?
- if [ "$STATUS" -ne 0 ] ; then
- exit 1
- fi
-
- unset F_PHONE F_USERNAME F_PASSWORD F_DEVICE F_SPEED
- eval "`echo "$SELECTION" | sed -e '1s,^,F_PHONE=",' -e
'2s,^,F_USERNAME=",' \
- -e '3s,^,F_PASSWORD=",' -e '4s,^,F_DEVICE=",' -e
'5s,^,F_SPEED=",' | sed -e 's,$,",'`"
-
- # Validate entries (All values except password are required.)
- MODEM_OK=1
- if [ -z "$F_PHONE" -o -z "$F_USERNAME" -o -z "$F_DEVICE" -o -z
"$F_SPEED" ] ; then
- MODEM_OK=0
- MODEM_ERRMSG="The telephone number, username, device and speed
are required fields."
- fi
-
- if [ "$MODEM_OK" -eq 1 ] ; then
- # Make a backup and restore before changes, so the sed's work
correctly.
- [ -f /etc/ppp/peers/dialup.orig ] || cp /etc/ppp/peers/dialup
/etc/ppp/peers/dialup.orig
- [ -f /etc/ppp/pap-secrets.orig ] || cp /etc/ppp/pap-secrets
/etc/ppp/pap-secrets.orig
- cp /etc/ppp/peers/dialup.orig /etc/ppp/peers/dialup
- cp /etc/ppp/pap-secrets.orig /etc/ppp/pap-secrets
-
- # Alter /etc/ppp/peers/dialup file.
- sed -i -e "[EMAIL PROTECTED]@[EMAIL PROTECTED]" -e
"s@/dev/[EMAIL PROTECTED]@g" \
- -e "[EMAIL PROTECTED]@[EMAIL PROTECTED]" -e "[EMAIL
PROTECTED]"jdoe\"@\"$F_USERNAME\"@g" \
- /etc/ppp/peers/dialup
-
- # Alter /etc/ppp/pap-secrets
- echo $F_USERNAME dialup $F_PASSWORD >> /etc/ppp/pap-secrets
-
- unset F_PHONE F_USERNAME F_PASSWORD F_DEVICE F_SPEED
DLG_COMMAND STATUS
- unset SELECTION MODEM_OK MODEM_ERRMSG
- else
- DLG_COMMAND="dialog --title \"Modem Validation Error\" \
- --msgbox \"$MODEM_ERRMSG\" 6 60"
- eval $DLG_COMMAND
- set_modem_cfg;
- fi
-}
-
-# Main Menu for Network Devices
-net_service_menu(){
# Remove previous config, so ifup won't get confused.
- rm -f $ETHXCFG
+ rm -f $ETH0CFG
- unset ARGS
- ARGS="$ARGS dhcp \"Acquire IP address through dhcp.\""
- ARGS="$ARGS static \"Enter a static IP Address.\""
- ARGS="$ARGS pppoe \"Setup an ADSL connection.\""
+ echo ""
+ echo "What type of service should eth0 use?"
+ echo "(static, dhcp or pppoe)"
+ read SERVICE
- DLG_COMMAND="dialog --title \"Select network service\" --default-item
dhcp \
- --menu \"Select the network service to use for the $DEV
interface:\" \
- 0 0 0 $ARGS"
- SERVICE=`eval $DLG_COMMAND 3>&2 2>&1 1>&3`
+case "$SERVICE" in
- unset DLG_COMMAND ARGS
+ dhcp)
+ echo "SERVICE=dhcpcd" > $ETH0CFG
+ echo "DHCP_START=\"\"" >> $ETH0CFG
+ echo "DHCP_STOP=\"-k\"" >> $ETH0CFG
- case "$SERVICE" in
+ # Start the service
+ $IFUP eth0
- dhcp)
- echo "SERVICE=dhcpcd" > $ETHXCFG
- echo "DHCP_START=\"\"" >> $ETHXCFG
- echo "DHCP_STOP=\"-k\"" >> $ETHXCFG
-
- # Start the service
- $IFUP $DEV
-
- # Test if dhcp worked and did not set DNS.
- # If so run set_dns function.
- if echo "$LINKTEST" | grep -q UP ; then
- if [ ! -f /etc/resolv.conf ] ; then
- set_dns;
- fi
- ip addr show $DEV
+ # Test if dhcp worked and did not set DNS.
+ # If so run set_dns function.
+ if `ip link show eth0 2>/dev/null` | grep -q UP ; then
+ if [ ! -f /etc/resolv.conf ] ; then
+ echo "DHCP did not configure DNS."
+ set_dns;
fi
- ;;
-
- static)
- echo "SERVICE=ipv4-static" > $ETHXCFG
- set_static_cfg;
- set_dns;
- $IFUP $DEV
- ;;
-
- pppoe)
- adsl-setup
- ;;
- *)
- exit 0
- ;;
- esac
-}
+ ip addr show eth0
+ fi
+ ;;
-# Main Menu for ppp modem devices
-ppp_modem_menu(){
- unset ARGS
- ARGS="$ARGS configure \"Configure your modem.\""
- ARGS="$ARGS dial \"Dial modem and exit.\""
- ARGS="$ARGS hangup \"Hang up modem and exit.\""
+ static)
+ echo "SERVICE=ipv4-static" > $ETH0CFG
+ set_static_ip;
+ set_static_gateway;
+ set_static_prefix;
+ set_static_broadcast;
+ set_dns;
+ # Start the service
+ $IFUP eth0
+ ;;
- DLG_COMMAND="dialog --title \"Modem - Actions\" --default-item
configure \
- --menu \"Select the action to perform for your modem:\" \
- 0 0 0 $ARGS"
- SERVICE=`eval $DLG_COMMAND 3>&2 2>&1 1>&3`
+ pppoe)
+ adsl-setup
+ ;;
- unset DLG_COMMAND ARGS
-
- case "$SERVICE" in
-
- configure)
- set_modem_cfg;
- ;;
-
- dial)
- [ -e /dev/ppp ] || mknod /dev/ppp c 108 0
- modprobe ppp-generic ; pppd call dialup
- exit 0
- ;;
-
- hangup)
- killall pppd
- exit 0
- ;;
- *)
- exit 0
- ;;
- esac
-
- ppp_modem_menu;
+ *)
+ # Error message in case user entered something unusable, like
"waldo"
+ echo ""
+ echo "--------------------------"
+ echo " Invalid option: $SERVICE"
+ echo " Please try again."
+ echo "--------------------------"
+ choose_service;
+ ;;
+esac
}
-# Main Menu for ppp gprs devices
-ppp_gprs_menu(){
- unset ARGS
- ARGS="$ARGS configure \"Configure your GPRS device.\""
- ARGS="$ARGS dial \"Dial GPRS device and exit.\""
- ARGS="$ARGS hangup \"Hang up GPRS device and exit.\""
+# Script starts here. Tests first for link on eth0
- DLG_COMMAND="dialog --title \"GPRS Device - Actions\" --default-item
configure \
- --menu \"Select the action to perform for your GPRS device:\" \
- 0 0 0 $ARGS"
- SERVICE=`eval $DLG_COMMAND 3>&2 2>&1 1>&3`
-
- unset DLG_COMMAND ARGS
-
- case "$SERVICE" in
-
- configure)
- set_gprs_cfg;
- ;;
-
- dial)
- [ -e /dev/ppp ] || mknod /dev/ppp c 108 0
- modprobe ppp-generic ; pppd call gprs
- exit 0
- ;;
-
- hangup)
- killall pppd
- exit 0
- ;;
- *)
- exit 0
- ;;
- esac
-
- ppp_gprs_menu;
-}
-
-# Script starts here. Check for root user.
if [ `whoami` != "root" ] ; then
echo "You must be root to use $0"
exit 1;
fi
-# Get list of devices and prompt user to select one
-if [ ! -d /sys/class/net ] ; then
- echo "No devices found or sysfs not mounted!"
- exit 1;
-fi
+if [ -n "$LINKTEST" ] ; then
-for EDEV in /sys/class/net/eth* /sys/class/net/wlan* ; do
- EDEV=`basename $EDEV`
- if echo $EDEV | grep -q "*" ; then continue ; fi
- if echo `/sbin/ip link show $EDEV 2> /dev/null` | grep -q UP ; then
- EDEVSTATUS="UP"
+ # If link is not up, start main function choose_service.
+
+ if ! echo "$LINKTEST" | grep -q UP ; then
+ echo ""
+ echo $GREETING
+ choose_service;
else
- EDEVSTATUS="DOWN"
- fi
- DEVLIST="$DEVLIST `basename $EDEV` \"$EDEVSTATUS\""
-done
-DEVLIST="$DEVLIST ppp-modem \"Configure a dial-up Modem\" ppp-gprs \"Configure
a GPRS Modem\""
-DLG_COMMAND="dialog --title \"Network Configuration\" --default-item eth0 \
- --timeout 30 --menu \"Select the network device to configure:\"
\
- 0 0 0 $DEVLIST"
-DEV=`eval $DLG_COMMAND 3>&2 2>&1 1>&3`
-unset EDEV EDEVSTATUS DEVLIST DLG_COMMAND
+ # If link is up, user likely has run this script already.
+ # Take down eth0 so we can set it up cleanly.
-# Continue if device was selected, exit if otherwise.
-if [ -n "$DEV" ] ; then
- if [ "$DEV" == "ppp-modem" ] ; then
- ppp_modem_menu;
- exit 0
+ $IFDOWN eth0
+ echo ""
+ echo $GREETING
+ choose_service;
fi
- if [ "$DEV" == "ppp-gprs" ] ; then
- ppp_gprs_menu;
- exit 0
- fi
- # If the menu times out, activate eth0 with dhcpcd and exit.
- if [ "$DEV" == "timeout" ] ; then
- DEV="eth0"
- set_devvars;
- rm -f $ETHXCFG
- echo "SERVICE=dhcpcd" > $ETHXCFG
- echo "DHCP_START=\"\"" >> $ETHXCFG
- echo "DHCP_STOP=\"-k\"" >> $ETHXCFG
- $IFUP $DEV
- exit 0
- fi
-
- # If not ppp-modem or ppp-gprs, then network device to configure
- set_devvars;
-
- if [ -n "$LINKTEST" ] ; then
- # Link is up. Bring it down and start service menu.
- if echo "$LINKTEST" | grep -q UP ; then
- $IFDOWN $DEV
- fi
-
- net_service_menu;
- else
- DLG_COMMAND="dialog --title \"Device Not Found\" \
- --msgbox \"Device $DEV is not present on this system.\" 6 60"
- eval $DLG_COMMAND
- exit 1
- fi
+else
+ echo "Device eth0 is not present on this system!"
fi
--
http://linuxfromscratch.org/mailman/listinfo/livecd
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page