#!/bin/sh
#
# Copyright 2005 RelaxBSD All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1.Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# 2.Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY RelaxBSD ``AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# The views and conclusions contained in the software and documentation are
# those of the authors and should not be interpreted as representing official
# policies, either expressed or implied, of the RelaxBSD
#
export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/bin:/sbin"
[ -f /etc/ppp/ppp.conf ] && cp /etc/ppp/ppp.conf /etc/ppp/ppp.conf.bak
. gettext.sh
export TEXTDOMAIN=relaxconf
export TEXTDOMAINDIR="/share/locale"
TMP=/tmp
SYSTEM="RelaxBSD 1.1.1"
PPPCONF="/etc/ppp/ppp.conf"
RCCONF="/etc/rc.conf"
CANCELLABEL=$(gettext "Return")
DIALOG="/usr/local/bin/cdialog"
export PATH
dns_function ()
{
gettext "Please enter the IP address of your ISP's primary DNS server." > $TMP/txtTEMP$$
echo >> $TMP/txtTEMP$$
gettext "It's important that these IP numbers be correct." >> $TMP/txtTEMP$$
gettext "The IP numbers should not be: 0.0.0.0 " >> $TMP/txtTEMP$$
echo >> $TMP/txtTEMP$$
gettext "Note: Your service provider's technical support can provide you with this information." >> $TMP/txtTEMP$$
echo >> $TMP/txtTEMP$$
backtitle=$(eval_gettext "\$SYSTEM -> DNS IP ADDRESS ...")
$DIALOG --clear --cancel-label "$CANCELLABEL" --backtitle "$backtitle" --inputbox "`cat $TMP/txtTEMP$$`" 11 74 2> $TMP/rspTEMP$$
if [ $? = 1 ]; then
rm -f $TMP/*TEMP*
clear 2>/dev/null || echo
#gettext "PPP configuration cancelled."
menu_main
fi
DNSIP="`cat $TMP/rspTEMP$$`"
if [ -n $DNSIP ] ; then
gettext "Please enter the IP address of your ISP's secondary DNS server." > $TMP/txtTEMP$$
echo >> $TMP/txtTEMP$$
gettext "If you just press enter, I will assume there is only one DNS server." >> $TMP/txtTEMP$$
gettext "The IP numbers should not be: 0.0.0.0 " >> $TMP/txtTEMP$$
echo >> $TMP/txtTEMP$$
gettext "Note: Your service provider's technical support can provide you with this information." >> $TMP/txtTEMP$$
echo >> $TMP/txtTEMP$$
backtitle=$(eval_gettext "\$SYSTEM -> DNS IP ADDRESS ...")
$DIALOG --clear --cancel-label "$CANCELLABEL" --backtitle "$backtitle" --inputbox "`cat $TMP/txtTEMP$$`" 11 74 2> $TMP/rspTEMP$$
if [ $? = 1 ]; then
rm -f $TMP/*TEMP*
clear 2>/dev/null || echo
#gettext "PPP configuration cancelled."
menu_main
fi
DNSIP2="`cat $TMP/rspTEMP$$`"
fi
if [ -n "$DNSIP" ] ; then
echo "nameserver $DNSIP" > /etc/resolv.conf
if [ -n "$DNSIP2" ] ; then
echo "nameserver $DNSIP2" >> /etc/resolv.conf
fi
fi
clear 2>/dev/null || echo
}
ppprc ()
{
TITLE=$(gettext "Do you want to connect to internet now?")
YESNO=$(gettext "Setup successfully! You can trying to bring the link up at any time. For example,link up: 'ppp -auto myisp' (See man ppp for more help),link down: 'killall ppp'")
${DIALOG} --title "$TITLE" --yesno "$YESNO" 7 60
[ $? = 0 ] && ppp -auto myisp
TITLE=$(gettext "Do you want to auto link up when bootup?")
YESNO=$(gettext 'To save these configurations,you must run "/bin/relaxsavesetting" to save to a disk before reboot.')
${DIALOG} --title "$TITLE" --yesno "$YESNO" 7 60
case $? in
0)
cat >> $RCCONF << RCCONFEOF
ppp_enable="yes"
ppp_mode="auto"
ppp_nat="yes"
ppp_profile="myisp"
RCCONFEOF
;;
esac
}
ppp_function ()
{
backtitle=$(eval_gettext "\$SYSTEM -> PHONE NUMBER ...")
while [ -z "$PHONENUM" ]
do
gettext "To begin setting up your PPP connection, I need to know a few things." > $TMP/txtTEMP$$
gettext "For starters, what is the phone number of your (I)nternet (S)ervice (P)rovider?" >> $TMP/txtTEMP$$
echo >> $TMP/txtTEMP$$
$DIALOG --cancel-label "${CANCELLABEL}" --backtitle "${backtitle}" --inputbox "`cat $TMP/txtTEMP$$`" 10 75 2> $TMP/rspTEMP$$
if [ $? = 1 ]; then
rm -f $TMP/*TEMP*
clear 2>/dev/null || echo
#gettext "PPP configuration cancelled."
menu_main
fi
PHONENUM="`cat $TMP/rspTEMP$$`"
if [ -z "$PHONENUM" ]; then
clear 2>/dev/null || echo
rm -f $TMP/*TEMP*
#gettext "PPP configuration cancelled."
#gettext "No phone number."
menu_main
fi
done
backtitle=$(eval_gettext "\$SYSTEM -> MODEM DEVICE ...")
gettext "Where is your modem /dev/cuaa?" > $TMP/txtTEMP$$
$DIALOG --cancel-label "${CANCELLABEL}" --backtitle "$backtitle" --menu "`cat $TMP/txtTEMP$$`" 11 60 4 \
cuaa0 "= (COM1: under DOS)" \
cuaa1 "= (COM2: under DOS)" \
cuaa2 "= (COM3: under DOS)" \
cuaa3 "= (COM4: under DOS)" \
2> $TMP/rspTEMP$$
MODEM="`cat $TMP/rspTEMP$$`"
if [ -z $MODEM ]; then
clear 2>/dev/null || echo
rm -f $TMP/*TEMP*
# gettext "PPP configuration cancelled."
menu_main
fi
backtitle=$(eval_gettext "\$SYSTEM -> MODEM BAUD RATE ...")
gettext "What baud rate is your modem?" > $TMP/txtTEMP$$
$DIALOG --cancel-label "$CANCELLABEL" --backtitle "$backtitle" --default-item "115200" --menu "`cat $TMP/txtTEMP$$`" 14 72 7 \
460800 "460KBps - ISDN modem..." \
230400 "230KBps - 56Kbps modem... or ISDN modem..." \
115200 "115KBps - 28.8, 33.6, or 56Kbps modem..." \
57600 "57.6KBps - 28.8, 33.6, or 56Kbps modem..." \
38400 "38.4KBps - Hangin ten on the net! 28.8 or 33.6..." \
19200 "19.2KBps - Better known as 14.4..." \
9600 "9600bps - No comment..." 2> $TMP/rspTEMP$$
BAUDRATE="`cat $TMP/rspTEMP$$`"
if [ -z $BAUDRATE ]; then
clear 2>/dev/null || echo
rm -f $TMP/*TEMP*
#gettext "PPP configuration cancelled."
menu_main
fi
gettext "Put your Login = Username in the box below." > $TMP/txtTEMP1
echo >> $TMP/txtTEMP1
gettext "Sometimes they want your username or number followed" >> $TMP/txtTEMP1
gettext "by their @domenu_main name like this below." >> $TMP/txtTEMP1
gettext "Example: jerry@foo.boo.com" >> $TMP/txtTEMP1
gettext "Example: 1234567@foo.boo.com" >> $TMP/txtTEMP1
echo >> $TMP/txtTEMP1
gettext "Sometimes the username is two words." >> $TMP/txtTEMP1
gettext "Example: jerry donut" >> $TMP/txtTEMP1
echo >> $TMP/txtTEMP1
gettext "Usally it's just your username like this below." >> $TMP/txtTEMP1
gettext "Example: jerry" >> $TMP/txtTEMP1
echo >> $TMP/txtTEMP1
backtitle=$(eval_gettext "\$SYSTEM -> PAP or CHAP LOGIN? ...")
$DIALOG --cancel-label "$CANCELLABEL" --backtitle "$backtitle" --inputbox "`cat $TMP/txtTEMP1`" 14 64 2> $TMP/rspTEMP1
if [ $? = 1 ]; then
rm -f $TMP/*TEMP*
clear 2>/dev/null || echo
#gettext "PPP configuration cancelled."
menu_main
fi
if [ ! -s $TMP/rspTEMP1 ]; then
rm -f $TMP/*TEMP*
clear 2>/dev/null || echo
#gettext "PPP configuration cancelled."
#gettext "No username for pap, chap, or ms-chap given."
menu_main
fi
if [ -s $TMP/rspTEMP1 ]; then
AUTH1="`cat $TMP/rspTEMP1`"
eval_gettext "User:$AUTH1 " > $TMP/txtTEMP2
gettext "What's the password for the username above?" >> $TMP/txtTEMP2
gettext "Example: Xpi9u87T" >> $TMP/txtTEMP2
backtitle=$(eval_gettext "\$SYSTEM -> PAP or CHAP PASSWORD? ...")
$DIALOG --clear --cancel-label "$CANCELLABEL" --backtitle "$backtitle" --inputbox "`cat $TMP/txtTEMP2`" 9 64 2> $TMP/rspTEMP2
AUTH2="`cat $TMP/rspTEMP2`"
fi
rm -f $TMP/*TEMP*
! [ -s /etc/resolv.conf ] && dns_function
cat > $PPPCONF << EOF_
default:
set log Phase Chat LCP IPCP CCP tun command
ident user-ppp VERSION (built COMPILATIONDATE)
set device /dev/$MODEM
set speed $BAUDRATE
set dial "ABORT BUSY ABORT NO\\\sCARRIER TIMEOUT 5 \\
\"\" AT OK-AT-OK ATE1Q0 OK \\\dATDT\\\T TIMEOUT 40 CONNECT"
set timeout 180
enable dns
myisp:
set phone $PHONENUM
set authname $AUTH1
set authkey $AUTH2
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
add default HISADDR
EOF_
ppprc
}
pppoe_function () {
if [ -x /sbin/pppoe ] ; then
DISCOVERY_PROGRAM="/sbin/pppoe"
else
echo $(gettext "Please install port: net/rp-pppoe")
menu_main
fi
BACKTITLE=$(eval_gettext "\$SYSTEM -> The Ethernet interface connected to the ADSL modem")
MENU=$(gettext "Select the Ethernet interface connected to the ADSL modem")
echo "${DIALOG} --clear --item-help --cancel-label \"$CANCELLABEL\" --backtitle \"$BACKTITLE\" --menu \"$MENU\" 10 75 3 \\" > $TMP/menuTEMP$$
for i in /dev/net/* ; do
ETHDEV="`echo $i | cut -nb 10-`"
ETHTEST=`pciconf -lv | egrep -A 4 "$ETHDEV" | egrep "ethernet"`
if [ -n "$ETHTEST" ] ; then
ETHNAME=`pciconf -lv | egrep -A 4 "$ETHDEV" | egrep "device" | cut -nb 16-`
ETHVENDOR=`pciconf -lv | egrep -A 4 "$ETHDEV" | egrep "vendor" | cut -nb 16-`
ETHNUM=`echo $ETHDEV | wc -w| tr -d " "`
# Begin:Add date:2005.04.18
for mmm in '' ' -U ' ; do
title=$(gettext "SCANNING DEVICE")
text=$(eval_gettext "Looking for PPPoE Access Concentrator on \$ETHNAME")
if test -n "$mmm" ; then
mmode=$(gettext "(multi-modem mode)")
fi
touch $TMP/pppoe.scan
ifconfig $ETHDEV up
($DISCOVERY_PROGRAM $mmm -A -I $ETHDEV >> $TMP/$ETHNAME.pppoe ; rm $TMP/pppoe.scan) &
( time=0 ; while test -f $TMP/pppoe.scan ; do time=`expr $time + 6`; echo $time; sleep 1; done ) | $DIALOG --title "$title" --gauge "$text $mmode" 10 60 0
true
done
# End:Add date:2005.04.18
echo "$ETHDEV $ETHNAME $ETHVENDOR \\" >> $TMP/menuTEMP$$
fi
done
# Begin:Add date:2005.04.19
cd "$TMP"
ETHDEV=`grep -l AC *.pppoe| cut -f1 -d"." | head -n1`
#ifacenocomma=$(echo $iface | sed -e 's/,/\\,/g')
if test -z "$ETHDEV" ; then
title=$(gettext 'NOT CONNECTED')
backtitle=$(eval_gettext "\$SYSTEM -> Can't find any ADSL modem")
text=$(eval_ngettext \
'Sorry, I scanned $ETHNUM interface(s), but the Access Concentrator of your provider did not respond. Please check your network and modem cables. Another reason for the scan failure may also be another running pppoe process which controls the modem.Do you still want to continue ?')
$DIALOG --title "$title" --clear --backtitle "$backtitle" --yesno "$text" 10 60
[ $? = "1" ] && (rm $TMP/*pppoe* ; menu_main)
# End:Add date:2005.04.19
echo "2> $TMP/rspTEMP$$" >> $TMP/menuTEMP$$
sh $TMP/menuTEMP$$
ETHDEV=`cat $TMP/rspTEMP$$`
if [ $? = 1 ] ; then
rm -f $TMP/*TEMP*
clear 2> /dev/null || echo
menu_main
fi
else
title=$(gettext 'DSL CONNECTION FOUND')
text=$(eval_gettext 'I found an Access Concentrator on $ETHDEV. Should I setup PPPOE for this connection?')
$DIALOG --title "$title" --clear --yesno "$text" 15 60
[ $? = "1" ] && (rm $TMP/*pppoe* ; menu_main)
fi
gettext "Welcome to the RelaxBSD ADSL client setup." > $TMP/textTEMP1
gettext "Now, please enter some information" >> $TMP/textTEMP1
gettext "Enter your PPPoE user name:" >> $TMP/textTEMP1
BACKTITLE=$(eval_gettext "\$SYSTEM -> USER NAME")
$DIALOG --cancel-label "$CANCELLABEL" --backtitle "$BACKTITLE" --inputbox "`cat $TMP/textTEMP1`" 9 64 2> $TMP/rspTEMP1
if [ $? = 1 ]; then
rm -f $TMP/*TEMP*
clear 2>/dev/null || echo
# gettext "PPPoE configuration cancelled."
menu_main
fi
if [ ! -s $TMP/rspTEMP1 ]; then
rm -f $TMP/*TEMP*
clear 2>/dev/null || echo
# gettext "PPPoE configuration cancelled."
# gettext "No username for PPPoE client."
menu_main
fi
if [ -s $TMP/rspTEMP1 ]; then
AUTH1="`cat $TMP/rspTEMP1`"
eval_gettext "User:$AUTH1. " > $TMP/txtTEMP2
gettext "What's the password for the username above?" >> $TMP/txtTEMP2
gettext "Example: Xpi9u87T" >> $TMP/txtTEMP2
BACKTITLE=$(eval_gettext "\$SYSTEM -> PPPoE PASSWORD")
$DIALOG --cancel-label "$CANCELLABEL" --backtitle "$BACKTITLE" --inputbox "`cat $TMP/txtTEMP2`" 9 64 2> $TMP/rspTEMP2
AUTH2="`cat $TMP/rspTEMP2`"
fi
rm $TMP/*TEMP*
! [ -s /etc/resolv.conf ] && dns_function
cat > $PPPCONF << EOF_
default:
set log Phase Chat LCP IPCP CCP tun command
ident user-ppp VERSION (built COMPILATIONDATE)
set device PPPoE:$ETHDEV
set speed sync
set mru 1492
set mtu 1492
set ctsrts off
set timeout 180
disable lqr
deny lqr
add default HISADDR
enable dns
myisp:
set authname $AUTH1
set authkey $AUTH2
set dial
set login
set ifaddr 10.0.0.1/0 10.0.0.2/0
nat enable yes
EOF_
ppprc
}
netconf ()
{
BACKTITLE=$(eval_gettext "\$SYSTEM -> Configure additional network interfaces")
MENU=$(gettext "Select the ethernet device")
echo "${DIALOG} --clear --item-help --cancel-label \"$CANCELLABEL\" --backtitle \"$BACKTITLE\" --menu \"$MENU\" 10 75 3 \\" > $TMP/menuTEMP$$
for i in /dev/net/* ; do
ETHDEV="`echo $i | cut -nb 10-`"
ETHTEST=`pciconf -lv | egrep -A 4 "$ETHDEV" | egrep "ethernet"`
if [ -n "$ETHTEST" ] ; then
ETHNAME=`pciconf -lv | egrep -A 4 "$ETHDEV" | egrep "device" | cut -nb 16-`
ETHVENDOR=`pciconf -lv | egrep -A 4 "$ETHDEV" | egrep "vendor" | cut -nb 16-`
ETHNUM=`echo $ETHDEV | wc -w| tr -d " "`
echo "$ETHDEV $ETHNAME $ETHVENDOR \\" >> $TMP/menuTEMP$$
fi
done
echo "2> $TMP/rspTEMP$$" >> $TMP/menuTEMP$$
sh $TMP/menuTEMP$$
ETHDEV=`cat $TMP/rspTEMP$$`
if [ $? = 1 ] ; then
rm -f $TMP/*TEMP*
clear 2> /dev/null || echo
menu_main
fi
TITLE=$(gettext "User Confirmation Requested")
YESNO=$(gettext "Do you want to disable DHCP service of the interface?")
${DIALOG} --title "$TITLE" --yesno "$YESNO" 6 50
case $? in
1)
menu_main;;
esac
eval_gettext "Configure for \$ETHDEV interface" > $TMP/txt2TEMP$$
gettext " At first,please enter the IPv4 Address of your ethernet interface." >> $TMP/txt2TEMP$$
gettext "For example:192.168.1.90" >> $TMP/txt2TEMP$$
echo >> $TMP/txt2TEMP$$
backtitle=$(eval_gettext "\$SYSTEM -> Network Configuration")
$DIALOG --clear --cancel-label "$CANCELLABEL" --backtitle "$backtitle" --inputbox "`cat $TMP/txt2TEMP$$`" 9 74 "192.168.1.90" 2> $TMP/rsp2TEMP$$
[ "$?" = "1" ] && menu_main
IPV4=`cat $TMP/rsp2TEMP$$`
rm $TMP/*TEMP*
[ -z $IPV4 ] && menu_main
gettext "Please enter the Netmask of your ethernet interface." > $TMP/txt3TEMP$$
gettext "For example:255.255.255.0" >> $TMP/txt3TEMP$$
echo >> $TMP/txt3TEMP$$
$DIALOG --clear --cancel-label "$CANCELLABEL" --backtitle "$backtitle" --inputbox "`cat $TMP/txt3TEMP$$`" 9 74 "255.255.255.0" 2> $TMP/rsp3TEMP$$
[ "$?" = "1" ] && menu_main
NETMASK=`cat $TMP/rsp3TEMP$$`
rm $TMP/*TEMP*
[ -z $NETMASK ] && menu_main
gettext "Please enter the IPv4 Gateway:" >> $TMP/txt4TEMP$$
gettext "For example:192.168.1.1" >> $TMP/txt4TEMP$$
echo >> $TMP/txt4TEMP$$
$DIALOG --clear --cancel-label "$CANCELLABEL" --backtitle "$backtitle" --inputbox "`cat $TMP/txt4TEMP$$`" 8 74 "192.168.1.1" 2> $TMP/rsp4TEMP$$
[ "$?" = "1" ] && menu_main
GATEWAY=`cat $TMP/rsp4TEMP$$`
rm $TMP/*TEMP*
[ -z $NETMASK ] && menu_main
[ -f /var/run/dhclient.pid ] && kill -INT `cat /var/run/dhclient.pid`
ifconfig $ETHDEV inet $IPV4 netmask $NETMASK
route add default $GATEWAY
if [ ! -f /etc/resolv.conf ]; then
YESNO=$(gettext "Do you want to configure /etc/resolv.conf?")
${DIALOG} --defaultno --yesno "$YESNO" 5 50
[ "$?" == "0" ] && dns_function
fi
TITLE=$(gettext "Do you want to save configuration to /etc/rc.conf?")
YESNO=$(gettext 'To save all these configurations,you must run "/bin/relaxsavesetting" to save to a disk before reboot.')
${DIALOG} --title "$TITLE" --yesno "$YESNO" 7 60
case $? in
0)
sed -e '/NIC/d' $RCCONF > $TMP/rcTEMP.$$
cp -f $TMP/rcTEMP.$$ $RCCONF
rm /tmp/*TEMP*
cat >> $RCCONF << RCCONFEOF
ifconfig_$ETHDEV="inet $IPV4 netmask $NETMASK"
defaultrouter="$GATEWAY"
RCCONFEOF
;;
esac
}
menu_main ()
{
BACKTITLE=$(eval_gettext "\$SYSTEM -> Configure network interface")
MENU=$(gettext "Please choose a type of network interface")
PPPLOG=$(gettext "Configure User-ppp")
PPPOELOG=$(gettext "Configure PPP over Ethernet daemon (PPPoE for ADSL)")
ETHLOG=$(gettext "Configure ethernet interface")
NOLOG=$(gettext "I don't want to configure any network interface now")
$DIALOG --clear --backtitle "$BACKTITLE" \
--menu "$MENU" 11 60 4 \
"PPP" "$PPPLOG" \
"PPPoE" "$PPPOELOG" \
"Ethernet" "$ETHLOG" \
"No" "$NOLOG" 2> /tmp/menuTEMP$$
retval=$?
choice=`cat /tmp/menuTEMP$$`
rm -f /tmp/menuTEMP$$
case $retval in
0)
case $choice in
PPP)
ppp_function
;;
PPPoE)
pppoe_function
;;
Ethernet)
netconf
;;
No)
clear 2>/dev/null || echo
exit 0
;;
esac
;;
1)
clear 2>/dev/null || echo
exit 0
esac
}
menu_main
syntax highlighted by Code2HTML, v. 0.9.1