#!/bin/sh #*********************************************************************** # # adsl-setup # # All-purpose slicing/dicing shell script to configure rp-pppoe or pppoa. # # LIC: GPL # # Copyright (C) 2000 Roaring Penguin Software Inc. # PPPoA additions 2003-11-02 Clive Nicolson. # # $Id: adsl-setup.in,v 1.3 2001/04/02 13:59:14 dfs Exp $ #*********************************************************************** # From AUTOCONF prefix=/usr exec_prefix=/usr # Paths to programs and config files IFCONFIG=/sbin/ifconfig PPPD=/usr/sbin/pppd PPPOE=/sbin/pppoe ECHO=/bin/echo LOGGER="/usr/bin/logger -t `basename $0`" LS=/bin/ls NETWORKDIR=/etc/sysconfig/network-scripts PAPFILE=/etc/ppp/chap-secrets CHAPFILE=/etc/ppp/pap-secrets RESOLVFILE=/etc/resolv.conf # Set to "C" locale so we can parse messages from commands LANG=C export LANG # Protect created files umask 077 copy() { cp $1 $2 if [ "$?" != 0 ] ; then $ECHO "*** Error copying $1 to $2" $ECHO "*** Quitting." exit 1 fi } get_device() { if [ ! -d $NETWORKDIR ] ; then $ECHO "** $NETWORKDIR not found" $ECHO "** Quitting" exit 1 fi cd $NETWORKDIR interfaces=$($LS ifcfg-* 2>/dev/null | egrep -v '(~|\.bak)$' | \ egrep -v '(rpmsave|rpmorig|rpmnew)' | sed 's/^ifcfg-//g') for device in $interfaces ; do if [ -f ifcfg-$device ] ; then TYPE="" CHAN_TYPE="" . ifcfg-$device 2>/dev/null if [ "$TYPE" = "xDSL" -o "$CHAN_TYPE" = "plugin" ] ; then device_count=$[$device_count+1] devices="$devices $DEVICE" fi fi done } clear_env() { unset USERCTL BOOTPROTO NAME DEVICE TYPE ONBOOT FIREWALL PING \ PPPOE_TIMEOUT LCP_FAILURE LCP_INTERVAL CLAMPMSS CONNECT_POLL \ CONNECT_TIMEOUT DEFROUTE SYNCHRONOUS ETH PROVIDER USER PEERDNS \ DNS1 DNS2 PROTOCOL ENCAP ATM_ITF ATM_VPI ATM_VCI } $ECHO "" $ECHO "Welcome to the ADSL client setup. First, I will run some checks on" $ECHO "your system to make sure the PPPoE/A client is installed properly..." $ECHO "" # Must be root if [ "`/usr/bin/id -u`" != 0 ] ; then $ECHO "$0: Sorry, you must be root to run this script" exit 1 fi # get the DSL config files in /etc/sysconfig/network-scripts/ devices="" device_count=0 get_device if [ $device_count -gt 0 ] ; then $ECHO "The following DSL config was found on your system:" $ECHO "" $ECHO " Device: Name:" for device in $devices ; do . $NETWORKDIR/ifcfg-$device $ECHO " $device $NAME" done $ECHO "" for device in $devices ; do default_device=$device break done clear_env while [ true ] ; do $ECHO "Please enter the device if you want to configure the present DSL config" $ECHO -n "(default $default_device) or enter 'n' if you want to create a new one: " read dev if [ "$dev" = "n" ] ; then break else if [ -n "$default_device" ] ; then if [ -n "$dev" ] ; then dsl_device="$dev" else dsl_device="$default_device" fi fi for device in $devices ; do [ "$dsl_device" = "$device" ] && break done if [ "$dsl_device" = "$device" ] ; then break fi $ECHO "Device '$dsl_device' is not found in the list, please choose the correct one" fi done fi if [ ! "$dsl_device" = "" ] ; then DEVICE=$dsl_device CONFIG="$NETWORKDIR/ifcfg-$DEVICE" [ "$dev" = "n" ] || . $CONFIG 2>/dev/null fi [ "$DEMAND" = "" ] && DEMAND=no [ -n "$ONBOOT" ] || ONBOOT="no" [ "$PROTOCOL" = "" ] && PROTOCOL="PPPoE" while [ true ] ; do $ECHO "" $ECHO "PROTOCOL" $ECHO "" $ECHO -n "Please enter 'EoA', 'PPPoA' or 'PPPoE' (default $PROTOCOL): " read E if [ -n "$E" ] ; then PROTOCOL="$E" fi if [ "$dsl_device" = "" ] ; then case "$PROTOCOL" in EoA) xxx="nas" ;; *) xxx="ppp" ;; esac if [ $device_count -gt 0 ] ; then num=0 while true; do found=0 for j in $interfaces ; do if [ "$j" = "$xxx$num" ] ; then found=1 break fi done if [ $found -eq 0 ] ; then dsl_device="$xxx$num" break fi num=$[$num+1] done if [ -z "$dsl_device" ] ; then num=0 while [ -e $NETWORKDIR/ifcfg-$xxx$num ] ; do num=`expr $num + 1` done dsl_device="$xxx$num" fi else num=0 while [ -e $NETWORKDIR/ifcfg-$xxx$num ] ; do num=`expr $num + 1` done dsl_device="$xxx$num" fi echo "Device $dsl_device" DEVICE=$dsl_device CONFIG="$NETWORKDIR/ifcfg-$DEVICE" fi if [ "$PROTOCOL" = "PPPoA" -o "$PROTOCOL" = "PPPoE" ] ; then # Must have pppd if [ ! -x $PPPD ] ; then $ECHO "Oops, I can't execute the program '$PPPD'. You must" $ECHO "install the PPP software suite, version 2.3.10 for PPPoE" $ECHO "or 2.4.2b1 for PPPoA or later." fi $ECHO "" $ECHO "LOGIN NAME" $ECHO "" if [ -z "$USER" ] ; then $ECHO -n "Enter your adsl Login Name: " else $ECHO -n "Enter your adsl Login Name (default $USER): " fi read U if [ -z "$U" ] ; then if [ -z "$USER" ] ; then continue fi else USER="$U" fi fi case "$PROTOCOL" in PPPoE) # Under Linux, "fix" the default interface if eth1 is not available [ -n "$ETH" ] || ETH=eth0 if test `uname -s` = "Linux" ; then $IFCONFIG $ETH >/dev/null 2>&1 || ETH=eth0 fi $ECHO "" $ECHO "INTERFACE" $ECHO "" $ECHO "Enter the Ethernet interface connected to the ADSL modem" $ECHO "For Solaris, this is likely to be something like /dev/hme0." $ECHO "For Linux, it will be ethX, where 'X' is a number." $ECHO -n "(default $ETH): " read E if [ -n "$E" ] ; then ETH="$E" fi ;; PPPoA|EoA) $ECHO "" $ECHO "ENCAP" $ECHO "" $ECHO -n "Enter the encapsulation llc,vc or auto (default $ENCAP): " read E if [ -n "$E" ] ; then ENCAP="$E" fi [ -n "$ATM_ITF" ] || ATM_ITF="0" [ -n "$ATM_VPI" ] || ATM_VPI="0" [ -n "$ATM_VCI" ] || ATM_VCI="35" $ECHO "" $ECHO "ATM_ITF" $ECHO "" $ECHO -n "Enter the adsl card's ATM device number (default $ATM_ITF): " read E if [ -n "$E" ] ; then ATM_ITF="$E" fi $ECHO "" $ECHO "ATM_VPI" $ECHO "" $ECHO -n "Enter the VPI to use (default $ATM_VPI): " read E if [ -n "$E" ] ; then ATM_VPI="$E" fi $ECHO "" $ECHO "ATM_VCI" $ECHO "" $ECHO -n "Enter the VCI to use (default $ATM_VCI): " read E if [ -n "$E" ] ; then ATM_VCI="$E" fi ;; *) echo "Only {EoA|PPPoA|PPPoE}" ;; esac $ECHO "" $ECHO "DEMAND" $ECHO "" $ECHO "Do you want the link to come up on demand, or stay up continuously?" $ECHO "If you want it to come up on demand, enter the idle time in seconds" $ECHO "after which the link should be dropped. If you want the link to" $ECHO "stay up permanently, enter 'no' (two letters, lower-case.)" $ECHO "NOTE: Demand-activated links do not interact well with dynamic IP" $ECHO "addresses. You may have some problems with demand-activated links." $ECHO "" $ECHO -n "Enter the demand value (default $DEMAND): " read D if [ -n "$D" ] ; then DEMAND="$D" fi $ECHO "" $ECHO "DNS" $ECHO "" $ECHO "Please enter the IP address of your ISP's primary DNS server." $ECHO "If your ISP claims that 'the server will provide dynamic DNS addresses'," $ECHO "enter 'server' (all lower-case) here." $ECHO "If you just press enter, I will assume you know what you are" $ECHO "doing and not modify your DNS setup." $ECHO "" $ECHO -n "Enter the DNS information here: " read DNS1 if [ -n "$DNS1" ] ; then if [ "$DNS1" != "server" ] ; then $ECHO "Please enter the IP address of your ISP's secondary DNS server." $ECHO "If you just press enter, I will assume there is only one DNS server." $ECHO -n "Enter the secondary DNS server address here: " read DNS2 fi fi if [ "$PROTOCOL" = "PPPoA" -o "$PROTOCOL" = "PPPoE" ] ; then while [ true ] ; do $ECHO "" $ECHO "PASSWORD" $ECHO "" stty -echo $ECHO -n "Please enter your adsl Password: " read PWD1 $ECHO "" $ECHO -n "Please re-enter your adsl Password: " read PWD2 $ECHO "" stty echo if [ "$PWD1" = "$PWD2" ] ; then break fi $ECHO -n "Sorry, the adsl passwords do not match. Try again? (y/n)" read ANS case "$ANS" in N|No|NO|Non|n|no|non) $ECHO "OK, quitting. Bye." exit 1 esac done fi # Usercontrol $ECHO "" $ECHO "USERCTRL" $ECHO $ECHO "Please enter 'yes' (two letters, lower-case.) if you want to allow" $ECHO -n "normal user to start or stop DSL connection (default yes): " read USERCTL if [ -z "$USERCTL" ] ; then USERCTL="yes" fi # Firewalling $ECHO "" $ECHO "FIREWALLING" $ECHO "" if test `uname -s` != "Linux" ; then $ECHO "Sorry, firewalling is only supported under Linux. Consult" $ECHO "your operating system manuals for details on setting up" $ECHO "packet filters for your system." FIREWALL=NONE else $ECHO "Please choose the firewall rules to use. Note that these rules are" $ECHO "very basic. You are strongly encouraged to use a more sophisticated" $ECHO "firewall setup; however, these will provide basic security. If you" $ECHO "are running any servers on your machine, you must choose 'NONE' and" $ECHO "set up firewalling yourself. Otherwise, the firewall rules will deny" $ECHO "access to all standard servers like Web, e-mail, ftp, etc. If you" $ECHO "are using SSH, the rules will block outgoing SSH connections which" $ECHO "allocate a privileged source port." $ECHO "" while [ true ] ; do case "$FIREWALL" in STANDALONE) a=1 ;; MASQUERADE) a=2 ;; NONE|*) a=0 ;; esac $ECHO "The firewall choices are:" $ECHO "0 - NONE: This script will not set any firewall rules. You are responsible" $ECHO " for ensuring the security of your machine. You are STRONGLY" $ECHO " recommended to use some kind of firewall rules." $ECHO "1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation" $ECHO "2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway" $ECHO " for a LAN" $ECHO "" $ECHO -n "Choose a type of firewall [0-2] (default $a): " read E if [ -n "$E" ] ; then a="$E" break fi if [ "$a" = 0 -o "$a" = 1 -o "$a" = 2 ] ; then break fi $ECHO "Please enter a number from 0 to 2" done case "$a" in 0) FIREWALL=NONE ;; 1) FIREWALL=STANDALONE ;; 2) FIREWALL=MASQUERADE ;; esac fi $ECHO "" $ECHO "ONBOOT" $ECHO "" $ECHO "Do you want to start this connection at boot time?" $ECHO "" $ECHO -n "Please enter no or yes (default $ONBOOT):" read boot case "$boot" in yes|YES) ONBOOT="yes";; *) ;; esac $ECHO "" $ECHO "** Summary of what you entered for $DEVICE **" $ECHO "" $ECHO "Protocol: $PROTOCOL" if [ "$PROTOCOL" = "PPPoE" ] ; then $ECHO "Ethernet Interface: $ETH" elif [ "$PROTOCOL" = "PPPoA" -o "$PROTOCOL" = "EoA" ] ; then $ECHO "Interface.VPI.VCI: $ATM_ITF.$ATM_VPI.$ATM_VCI" $ECHO "Encapsulation: $ENCAP" fi if [ "$PROTOCOL" = "PPPoA" -o "$PROTOCOL" = "PPPoE" ] ; then $ECHO "User name: $USER" fi $ECHO "Start on boot: $ONBOOT" $ECHO -n "Activate-on-demand: " if [ "$DEMAND" = "no" ] ; then $ECHO "no" else $ECHO "yes, idle timeout = $DEMAND seconds" fi if [ -n "$DNS1" ] ; then if [ "$DNS1" = "server" ] ; then $ECHO "DNS addresses: Supplied by ISP's server" else $ECHO "Primary DNS: $DNS1" if [ -n "$DNS2" ] ; then $ECHO "Secondary DNS: $DNS2" fi fi else $ECHO "DNS: Do not adjust" fi $ECHO "Firewalling: $FIREWALL" $ECHO "User Control: $USERCTL" while [ true ] ; do $ECHO "" $ECHO -n 'Accept these settings and adjust configuration files (y/n)? ' read ANS case "ANS" in Y|y|yes|Yes|oui|Oui) ANS=y ;; N|n|no|No|non|Non) ANS=n ;; esac if [ "$ANS" = "y" -o "$ANS" = "n" ] ; then break fi done if [ "$ANS" = "y" ] ; then break fi done # Adjust configuration files. First to $CONFIG $ECHO "" $ECHO "Adjusting $CONFIG" test -f $CONFIG && copy $CONFIG $CONFIG.bak if [ "$DNS1" = "server" ] ; then DNS1="" DNS2="" PEERDNS=yes else PEERDNS=no fi if [ "$PROTOCOL" = "PPPoA" -o "$PROTOCOL" = "PPPoE" ] ; then # Where is pppd likely to put its pid? if [ -d /var/run ] ; then VARRUN=/var/run else VARRUN=/etc/ppp fi fi $ECHO "#This configuration written by adsl-setup" >$CONFIG $ECHO "USERCTL=$USERCTL" >>$CONFIG $ECHO "BOOTPROTO=dialup" >>$CONFIG [ -z "$NAME" ] && NAME="DSL$DEVICE" $ECHO "NAME=DSL$DEVICE" >>$CONFIG $ECHO "DEVICE=$DEVICE" >>$CONFIG $ECHO "TYPE=xDSL" >>$CONFIG $ECHO "PROTOCOL=$PROTOCOL" >>$CONFIG if [ "$PROTOCOL" = "PPPoE" ] ; then $ECHO "ETH=$ETH" >>$CONFIG [ -z "$CLAMPMSS" ] && CLAMPMSS=1412 $ECHO "CLAMPMSS=$CLAMPMSS" >>$CONFIG [ -z "$PPPOE_TIMEOUT" ] && PPPOE_TIMEOUT=80 $ECHO "PPPOE_TIMEOUT=$PPPOE_TIMEOUT" >>$CONFIG elif [ "$PROTOCOL" = "PPPoA" -o "$PROTOCOL" = "EoA" ] ; then if [ -n "$ENCAP" ] ; then $ECHO "ENCAP=$ENCAP" >>$CONFIG fi $ECHO "ATM_ITF=$ATM_ITF" >>$CONFIG $ECHO "ATM_VPI=$ATM_VPI" >>$CONFIG $ECHO "ATM_VCI=$ATM_VCI" >>$CONFIG fi $ECHO "ONBOOT=$ONBOOT" >>$CONFIG if [ "$PROTOCOL" = "PPPoA" -o "$PROTOCOL" = "PPPoE" ] ; then $ECHO "PIDFILE=/var/run/ppp-adsl.pid" >>$CONFIG fi $ECHO "FIREWALL=$FIREWALL" >>$CONFIG if [ "$PROTOCOL" = "PPPoA" -o "$PROTOCOL" = "PPPoE" ] ; then [ -z "$PING" ] && PING="." $ECHO "PING=$PING" >>$CONFIG [ -z "$LCP_FAILURE" ] && LCP_FAILURE=3 $ECHO "LCP_FAILURE=$LCP_FAILURE" >>$CONFIG [ -z "$LCP_INTERVAL" ] && LCP_INTERVAL=20 $ECHO "LCP_INTERVAL=$LCP_INTERVAL" >>$CONFIG [ -z "$CONNECT_POLL" ] && CONNECT_POLL=6 $ECHO "CONNECT_POLL=$CONNECT_POLL" >>$CONFIG [ -z "$CONNECT_TIMEOUT" ] && CONNECT_TIMEOUT=60 $ECHO "CONNECT_TIMEOUT=$CONNECT_TIMEOUT" >>$CONFIG [ -z "$DEFROUTE" ] && DEFROUTE=yes $ECHO "DEFROUTE=$DEFROUTE" >>$CONFIG [ -z "$SYNCHRONOUS" ] && SYNCHRONOUS=no $ECHO "SYNCHRONOUS=$SYNCHRONOUS" >>$CONFIG fi [ -z "$PROVIDER" ] && PROVIDER="$NAME" $ECHO "PROVIDER=$PROVIDER" >>$CONFIG if [ "$PROTOCOL" = "PPPoA" -o "$PROTOCOL" = "PPPoE" ] ; then $ECHO "USER=$USER" >>$CONFIG fi $ECHO "PEERDNS=$PEERDNS" >>$CONFIG #DEMAND is required by adsl-status $ECHO "DEMAND=$DEMAND" >>$CONFIG if [ -n "$DNS1" ] ; then if [ "$DNS1" != "server" ] ; then $ECHO "Adjusting $RESOLVFILE" if [ -r $RESOLVFILE ] ; then grep -s "MADE-BY-RP-PPPOE" $RESOLVFILE >/dev/null 2>&1 if [ "$?" != 0 ] ; then $ECHO " (But first backing it up to $RESOLVFILE.bak)" test -f $$RESOLVFILE && copy $RESOLVFILE $RESOLVFILE.bak fi fi $ECHO "# MADE-BY-RP-PPPOE" >$RESOLVFILE $ECHO "nameserver $DNS1" >>$RESOLVFILE if [ -n "$DNS2" ] ; then $ECHO "nameserver $DNS2" >>$RESOLVFILE fi fi fi if [ "$PROTOCOL" = "PPPoA" -o "$PROTOCOL" = "PPPoE" ] ; then $ECHO "Adjusting $PAPFILE and $CHAPFILE" if [ -r $PAPFILE ] ; then $ECHO " (But first backing it up to $PAPFILE.bak)" test -f $PAPFILE && copy $PAPFILE $PAPFILE.bak else cp /dev/null $PAPFILE.bak fi egrep -v "^$USER|^\"$USER\"" $PAPFILE.bak >$PAPFILE $ECHO "\"$USER\" * \"$PWD1\"" >>$PAPFILE if [ -r $CHAPFILE ] ; then $ECHO " (But first backing it up to $CHAPFILE.bak)" test -f $CHAPFILE && copy $CHAPFILE $CHAPFILE.bak else cp /dev/null $CHAPFILE.bak fi egrep -v "^$USER|^\"$USER\"" $CHAPFILE.bak >$CHAPFILE $ECHO "\"$USER\" * \"$PWD1\"" >>$CHAPFILE fi $ECHO "" $ECHO "Congratulations, it should be all set up!" $ECHO "" $ECHO "Type '/sbin/ifup $DEVICE' to bring up your xDSL link and '/sbin/ifdown $DEVICE'" $ECHO "to bring it down." $ECHO "" $ECHO "Type '/sbin/adsl-status $NETWORKDIR/ifcfg-$DEVICE'" $ECHO "to see the link status." $ECHO "" exit 0