rp-pppoe是linux下最常用的拨号工具,rp-pppoe包含了一个基本程序pppoe和一系列的脚本(pppoe-start、pppoe-stop、pppoe-connect、pppoe-setup、pppoe-status等,在fedora中这些脚本的前缀都是adsl-)。脚本无所谓移植,最关键的程序是pppoe。
1. 编译基本程序pppoe
首先下载解压rp-pppoe-3.8.tar.gz
# tar xzvf rp-pppoe-3.8.tar.gz
# cd rp-pppoe-3.8
pppoe这个程序是在src下编译得到。
# cd src/
# ./configure --host=mipsel-linux
# make
会出现一个无法判断某struct size的编译错误,涉及net/if.h头文件。
所以,来修改一下这个文件,此文件在交叉编译器默认的include/net目录下。
# vi /../..toolchain../include/net/if.h
在第25行,添加以下内容:
#define __USE_MISC
理论上来说在编译参数中加入-D__USE_MISC=1也可以实现这个效果,但不知为何在这里这样做无法移除这个编译错误。所以只能修改if.h这个文件。
继续make,会蹦出很多inline(某些头文件中包含的)引起的错误,因为ansi c不认inline,而默认的编译参数包含了-ansi,所以遇到了inline就过不去。
# vi Makefile
把这一行
#CFLAGS= -g -O2 -Wall -Wstrict-prototypes -ansi $(LIC_INCDIR) $(DEFINES) $(LIC_DEFINE) $(PATHS) -Ilibevent
中的-ansi去掉:
CFLAGS= -g -O2 -Wall -Wstrict-prototypes $(LIC_INCDIR) $(DEFINES) $(LIC_DEFINE) $(PATHS) -Ilibevent
然后make,就万事大吉了。
编译完成后,src目录下会产生pppoe,pppoe-server,pppoe-sniff,pppoe-relay。把这些程序下载到目标机备用。
2. 复制配置文件
rp-pppoe-3.8/configs目录下是rp-pppoe所需的配置文件,把这些文件全部复制到目标机的/etc/ppp目录下,如果目标机/etc目录是只读的,那么可以在/etc目录建立一个指向可读写目录的链接。
# ln -sf /mnt/data/etc/ppp /etc/ppp
3. 修改脚本
脚本程序共有6个,在rp-pppoe-3.8/scripts中。
pppoe-setup:配置程序,把输入的帐号密码等信息存入配置文件。
pppoe-start:拨号程序,连接网络。
pppoe-stop:断开。
pppoe-status:查看连接状态。
pppoe-connect:连接网络,被pppoe-start所调用。
pppoe-init:初始化,被其他程序调用。
脚本程序的名字可以按自己的需要修改,我把前缀统一改成了adsl-,和fedora保持一致。主要是为了和编译出的那些二进制程序pppoe*等相区别。对脚本程序的主要的修改是调整程序里指向程序pppd、程序pppoe、配置文件pppoe.conf、dns配置文件resolv.conf等的路径。
例如对pppoe-setup的修改:
--------省略头---------
prefix=/mnt/usr
exec_prefix=${prefix}
# Paths to programs
IFCONFIG=/sbin/ifconfig
PPPD=/mnt/usr/sbin/pppd
PPPOE=${exec_prefix}/sbin/pppoe
ECHO=/bin/echo
LOGGER="/usr/bin/logger -t `basename $0`"
CONFIG=/mnt/data/etc/ppp/pppoe.conf
--------省略中---------
if [ "$DNS1" != "" ] ; then
if [ "$DNS1" != "server" ] ; then
$ECHO "Adjusting /mnt/data/etc/resolv.conf"
if [ -r /mnt/data/etc/resolv.conf ] ; then
grep -s "MADE-BY-RP-PPPOE" /mnt/data/etc/resolv.conf > /dev/null 2>&1
if [ "$?" != 0 ] ; then
$ECHO " (But first backing it up to /mnt/data/etc/resolv.conf-bak)"
copy /mnt/data/etc/resolv.conf /mnt/data/etc/resolv.conf-bak
fi
fi
$ECHO "# MADE-BY-RP-PPPOE" > /mnt/data/etc/resolv.conf
$ECHO "nameserver $DNS1" >> /mnt/data/etc/resolv.conf
if [ "$DNS2" != "" ] ; then
$ECHO "nameserver $DNS2" >> /mnt/data/etc/resolv.conf
fi
fi
fi
$ECHO "Adjusting /mnt/data/etc/ppp/pap-secrets and /mnt/data/etc/ppp/chap-secrets"
if [ -r /mnt/data/etc/ppp/pap-secrets ] ; then
$ECHO " (But first backing it up to /mnt/data/etc/ppp/pap-secrets-bak)"
copy /mnt/data/etc/ppp/pap-secrets /mnt/data/etc/ppp/pap-secrets-bak
else
cp /dev/null /mnt/data/etc/ppp/pap-secrets-bak
fi
if [ -r /mnt/data/etc/ppp/chap-secrets ] ; then
$ECHO " (But first backing it up to /mnt/data/etc/ppp/chap-secrets-bak)"
copy /mnt/data/etc/ppp/chap-secrets /mnt/data/etc/ppp/chap-secrets-bak
else
cp /dev/null /mnt/data/etc/ppp/chap-secrets-bak
fi
egrep -v "^$U|^/"$U/"" /mnt/data/etc/ppp/pap-secrets-bak > /mnt/data/etc/ppp/pap-secrets
$ECHO "/"$U/" * /"$PWD1/"" >> /mnt/data/etc/ppp/pap-secrets
egrep -v "^$U|^/"$U/"" /mnt/data/etc/ppp/chap-secrets-bak > /mnt/data/etc/ppp/chap-secrets
$ECHO "/"$U/" * /"$PWD1/"" >> /mnt/data/etc/ppp/chap-secrets
--------省略尾---------
其他程序修改方式相同。
最后,再确认下kernel是否包含了对pppoe的支持,需要载入的module包括:
# modprobe slhc
# modprobe ppp-generic
# modprobe ppp-async
# modprobe ppp-synctty
一切就绪后,就可以先用pppoe-setup来配置,把你的adsl帐号密码输入。
然后运行pppoe-start,等待“Connnected!”消息吧。
1. 编译基本程序pppoe
首先下载解压rp-pppoe-3.8.tar.gz
# tar xzvf rp-pppoe-3.8.tar.gz
# cd rp-pppoe-3.8
pppoe这个程序是在src下编译得到。
# cd src/
# ./configure --host=mipsel-linux
# make
会出现一个无法判断某struct size的编译错误,涉及net/if.h头文件。
所以,来修改一下这个文件,此文件在交叉编译器默认的include/net目录下。
# vi /../..toolchain../include/net/if.h
在第25行,添加以下内容:
#define __USE_MISC
理论上来说在编译参数中加入-D__USE_MISC=1也可以实现这个效果,但不知为何在这里这样做无法移除这个编译错误。所以只能修改if.h这个文件。
继续make,会蹦出很多inline(某些头文件中包含的)引起的错误,因为ansi c不认inline,而默认的编译参数包含了-ansi,所以遇到了inline就过不去。
# vi Makefile
把这一行
#CFLAGS= -g -O2 -Wall -Wstrict-prototypes -ansi $(LIC_INCDIR) $(DEFINES) $(LIC_DEFINE) $(PATHS) -Ilibevent
中的-ansi去掉:
CFLAGS= -g -O2 -Wall -Wstrict-prototypes $(LIC_INCDIR) $(DEFINES) $(LIC_DEFINE) $(PATHS) -Ilibevent
然后make,就万事大吉了。
编译完成后,src目录下会产生pppoe,pppoe-server,pppoe-sniff,pppoe-relay。把这些程序下载到目标机备用。
2. 复制配置文件
rp-pppoe-3.8/configs目录下是rp-pppoe所需的配置文件,把这些文件全部复制到目标机的/etc/ppp目录下,如果目标机/etc目录是只读的,那么可以在/etc目录建立一个指向可读写目录的链接。
# ln -sf /mnt/data/etc/ppp /etc/ppp
3. 修改脚本
脚本程序共有6个,在rp-pppoe-3.8/scripts中。
pppoe-setup:配置程序,把输入的帐号密码等信息存入配置文件。
pppoe-start:拨号程序,连接网络。
pppoe-stop:断开。
pppoe-status:查看连接状态。
pppoe-connect:连接网络,被pppoe-start所调用。
pppoe-init:初始化,被其他程序调用。
脚本程序的名字可以按自己的需要修改,我把前缀统一改成了adsl-,和fedora保持一致。主要是为了和编译出的那些二进制程序pppoe*等相区别。对脚本程序的主要的修改是调整程序里指向程序pppd、程序pppoe、配置文件pppoe.conf、dns配置文件resolv.conf等的路径。
例如对pppoe-setup的修改:
--------省略头---------
prefix=/mnt/usr
exec_prefix=${prefix}
# Paths to programs
IFCONFIG=/sbin/ifconfig
PPPD=/mnt/usr/sbin/pppd
PPPOE=${exec_prefix}/sbin/pppoe
ECHO=/bin/echo
LOGGER="/usr/bin/logger -t `basename $0`"
CONFIG=/mnt/data/etc/ppp/pppoe.conf
--------省略中---------
if [ "$DNS1" != "" ] ; then
if [ "$DNS1" != "server" ] ; then
$ECHO "Adjusting /mnt/data/etc/resolv.conf"
if [ -r /mnt/data/etc/resolv.conf ] ; then
grep -s "MADE-BY-RP-PPPOE" /mnt/data/etc/resolv.conf > /dev/null 2>&1
if [ "$?" != 0 ] ; then
$ECHO " (But first backing it up to /mnt/data/etc/resolv.conf-bak)"
copy /mnt/data/etc/resolv.conf /mnt/data/etc/resolv.conf-bak
fi
fi
$ECHO "# MADE-BY-RP-PPPOE" > /mnt/data/etc/resolv.conf
$ECHO "nameserver $DNS1" >> /mnt/data/etc/resolv.conf
if [ "$DNS2" != "" ] ; then
$ECHO "nameserver $DNS2" >> /mnt/data/etc/resolv.conf
fi
fi
fi
$ECHO "Adjusting /mnt/data/etc/ppp/pap-secrets and /mnt/data/etc/ppp/chap-secrets"
if [ -r /mnt/data/etc/ppp/pap-secrets ] ; then
$ECHO " (But first backing it up to /mnt/data/etc/ppp/pap-secrets-bak)"
copy /mnt/data/etc/ppp/pap-secrets /mnt/data/etc/ppp/pap-secrets-bak
else
cp /dev/null /mnt/data/etc/ppp/pap-secrets-bak
fi
if [ -r /mnt/data/etc/ppp/chap-secrets ] ; then
$ECHO " (But first backing it up to /mnt/data/etc/ppp/chap-secrets-bak)"
copy /mnt/data/etc/ppp/chap-secrets /mnt/data/etc/ppp/chap-secrets-bak
else
cp /dev/null /mnt/data/etc/ppp/chap-secrets-bak
fi
egrep -v "^$U|^/"$U/"" /mnt/data/etc/ppp/pap-secrets-bak > /mnt/data/etc/ppp/pap-secrets
$ECHO "/"$U/" * /"$PWD1/"" >> /mnt/data/etc/ppp/pap-secrets
egrep -v "^$U|^/"$U/"" /mnt/data/etc/ppp/chap-secrets-bak > /mnt/data/etc/ppp/chap-secrets
$ECHO "/"$U/" * /"$PWD1/"" >> /mnt/data/etc/ppp/chap-secrets
--------省略尾---------
其他程序修改方式相同。
最后,再确认下kernel是否包含了对pppoe的支持,需要载入的module包括:
# modprobe slhc
# modprobe ppp-generic
# modprobe ppp-async
# modprobe ppp-synctty
一切就绪后,就可以先用pppoe-setup来配置,把你的adsl帐号密码输入。
然后运行pppoe-start,等待“Connnected!”消息吧。