by tangke
2009-09-20
本文主要介绍关于pppoe_loongson软件在co-create系统上面运行出错的问题.
在co-create系统上面,我们的默认使用用户是yee,非root权限。
因为在运行的时候需要修改/etc/ppp/peers/dsl-provider以及/etc/ppp/chap-secrets这两个文件,而且这两个文件是非root用户不能修改,所以需要root权限的。
所以程序也进行了修改,采用了脚本来执行这些操作。
脚本如下:/usr/share/pppoe_loongson/pppoe_loongosn.sh
TARGET_DIRECTORY=/etc/ppp/peers
TARGET_FILE=${TARGET_DIRECTORY}/dsl-provider
PASSWORD_FILE=/etc/ppp/chap-secrets
test -d ${TARGET_DIRECTORY} || sudo mkdir -pv ${TARGET_DIRECTORY}
case $1 in
"setup")
sudo rm -rf ${TARGET_FILE}
sudo echo "noipdefault" >> ${TARGET_FILE}
sudo echo "replacedefaultroute">> ${TARGET_FILE}
sudo echo "hide-password">> ${TARGET_FILE}
sudo echo "#lcp-echo-interval 30">> ${TARGET_FILE}
sudo echo "#lcp-echo-failure 4">> ${TARGET_FILE}
sudo echo "noauth">> ${TARGET_FILE}
sudo echo "persist">> ${TARGET_FILE}
sudo echo "#mtu 1492">> ${TARGET_FILE}
sudo echo "#persist">> ${TARGET_FILE}
sudo echo "#maxfail 0">> ${TARGET_FILE}
sudo echo "#holdoff 20">> ${TARGET_FILE}
sudo echo "plugin rp-pppoe.so $3">> ${TARGET_FILE} #network interface ->$3
sudo echo "user \"$2\"">> ${TARGET_FILE} #username->$2
sudo echo "usepeerdns">> ${TARGET_FILE}
sudo rm -rf ${PASSWORD_FILE}
sudo echo "\"$2\" dsl-provider \"$4\" *" > ${PASSWORD_FILE}
sudo echo "\"$2\" dsl-provider \"$4\" *" ;;
#以上为创建一个dsl-provider文件.
"information")
if test -e ${TARGET_FILE}
then
PPP_USERNAME=`cat ${TARGET_FILE}| sed -n -e "s/^user.*\"\(.*\)\"/\1/p" `
PPP_INTERFACE=`cat ${TARGET_FILE}| sed -n -e "s/^plugin.*rp-pppoe.so \(.*\)/\1/p" `
PPP_PASSWORD=`cat ${PASSWORD_FILE}| sed -n -e "s/^\"${PPP_USERNAME}\".*\"\(.*\)\"/\1/p" `
echo ${PPP_USERNAME} ${PPP_INTERFACE} ${PPP_PASSWORD}
fi;;
#以上为得到上次使用的用户名,密码以及network interface.然后输出这些内容,在二进制文件读取这些信息。
"list")
XXX=""
ALL_INTERFACE=`sudo ifconfig | sed -n -e "s/\(^[a-z]*[0-9]\).*/\1/p" `
for a in ${ALL_INTERFACE}
do
XXX=${XXX}" "${a}
done
echo ${XXX};;
#以上为列出目前的可能使用的network interface设备。
"connect")
sudo pon dsl-provider;;
"disconnect")
sudo poff dsl-provider;;
*)
echo "you must input a parameters.....";;
esac
目前这个修改还没有测试过,不过应该问题不大,明天可以拿一台共创系统然后安装上这个软件,回家测试一下。
2009-09-22
测试没有成功.发现co-create系统上面连ppp软件包都没有安装
重新修改脚本:
# Minimalistic default options file for DSL/PPPoE connections
TARGET_DIRECTORY=/etc/ppp/peers
TARGET_FILE=${TARGET_DIRECTORY}/dsl-provider
PASSWORD_FILE=/etc/ppp/chap-secrets
test -d ${TARGET_DIRECTORY} || sudo mkdir -pv ${TARGET_DIRECTORY}
sudo chmod 777 ${TARGET_DIRECTORY}
case $1 in
"setup")
sudo rm -rf ${TARGET_FILE}
sudo echo "noipdefault" >> ${TARGET_FILE}
sudo echo "defaultroute">> ${TARGET_FILE}
sudo echo "hide-password">> ${TARGET_FILE}
sudo echo "#lcp-echo-interval 30">> ${TARGET_FILE}
sudo echo "#lcp-echo-failure 4">> ${TARGET_FILE}
sudo echo "noauth">> ${TARGET_FILE}
sudo echo "persist">> ${TARGET_FILE}
sudo echo "#mtu 1492">> ${TARGET_FILE}
sudo echo "#persist">> ${TARGET_FILE}
sudo echo "#maxfail 0">> ${TARGET_FILE}
sudo echo "#holdoff 20">> ${TARGET_FILE}
sudo echo "plugin rp-pppoe.so $3">> ${TARGET_FILE} #network interface ->$3
sudo echo "user \"$2\"">> ${TARGET_FILE} #username->$2
sudo echo "usepeerdns">> ${TARGET_FILE}
sudo rm -rf ${PASSWORD_FILE}
sudo touch ${PASSWORD_FILE} && sudo chmod 666 ${PASSWORD_FILE}
sudo echo "\"$2\" dsl-provider \"$4\" *" > ${PASSWORD_FILE}
exit 0;;
# sudo "echo "\"$2\" dsl-provider \"$4\" *"" ;;
"information")
if test -e ${TARGET_FILE}
then
PPP_USERNAME=`cat ${TARGET_FILE}| sed -n -e "s/^user.*\"\(.*\)\"/\1/p" `
PPP_INTERFACE=`cat ${TARGET_FILE}| sed -n -e "s/^plugin.*rp-pppoe.so \(.*\)/\1/p" `
PPP_PASSWORD=`cat ${PASSWORD_FILE}| sed -n -e "s/^\"${PPP_USERNAME}\".*\"\(.*\)\"/\1/p" `
echo ${PPP_USERNAME} ${PPP_INTERFACE} ${PPP_PASSWORD}
fi;;
"list")
XXX=""
ALL_INTERFACE=`sudo ifconfig | sed -n -e "s/\(^[a-z]*[0-9]\).*/\1/p" `
for a in ${ALL_INTERFACE}
do
XXX=${XXX}" "${a}
done
echo ${XXX};;
"connect")
sudo pon dsl-provider
exit $?;;
"disconnect")
sudo poff dsl-provider
exit $?;;
"check")
INTERFACE=`sudo plog | sed -n -e "s/Using interface \(.*\)/\1/p" `
PAP_AUTH=`sudo plog | sed -n -e "s/PAP authentication \(.*\)/\1/p" `
LOCAL_IP=`sudo plog | sed -n -e "s/local IP address \(.*\)/\1/p" `
REMOTE_IP=`sudo plog | sed -n -e "s/remote IP address \(.*\)/\1/p" `
PRIMARY_DNS=`sudo plog | sed -n -e "s/primary DNS address \(.*\)/\1/p" `
SECONDARY_DNS=`sudo plog | sed -n -e "s/secondary DNS address \(.*\)/\1/p" `
if [ -n "${INTERFACE}" -a -n "${PAP_AUTH}" ]; then
if [ -n "${LOCAL_IP}" -a -n "${REMOTE_IP}" ] ; then
if [ -n "${PRIMARY_DNS}" ]; then
echo ${INTERFACE} ${PAP_AUTH} ${LOCAL_IP} ${REMOTE_IP} ${PRIMARY_DNS} ${SECONDARY_DNS}
exit 0
fi
fi
fi
sudo poff dsl-provider
exit 1;;
*)
echo "you must input a parameters.....";;
esac
关键是引入了plog命令,该命令是在ppp软件包里面的。
错误信息
root@tangke-laptop:/etc/ppp/peers# plog
Sep 21 21:10:06 tangke-laptop pppd[10961]: Plugin rp-pppoe.so loaded.
Sep 21 21:10:06 tangke-laptop pppd[10961]: RP-PPPoE plugin version 3.8p compiled against pppd 2.4.5
Sep 21 21:10:06 tangke-laptop pppd[10963]: pppd 2.4.5 started by root, uid 0
Sep 21 21:10:07 tangke-laptop pppd[10963]: PPP session is 5915
Sep 21 21:10:07 tangke-laptop pppd[10963]: Connected to 00:30:88:03:75:28 via interface eth0
Sep 21 21:10:07 tangke-laptop pppd[10963]: Using interface ppp0
Sep 21 21:10:07 tangke-laptop pppd[10963]: Connect: ppp0 <--> eth0
Sep 21 21:10:07 tangke-laptop pppd[10963]: Remote message: Limit Users Err
Sep 21 21:10:07 tangke-laptop pppd[10963]: PAP authentication failed
root@tangke-laptop:/etc/ppp/peers# plog
Sep 21 21:10:43 tangke-laptop pppd[10963]: PPP session is 1774
Sep 21 21:10:43 tangke-laptop pppd[10963]: Connected to 00:30:88:03:82:4e via interface eth0
Sep 21 21:10:43 tangke-laptop pppd[10963]: Using interface ppp0
Sep 21 21:10:43 tangke-laptop pppd[10963]: Connect: ppp0 <--> eth0
Sep 21 21:10:43 tangke-laptop pppd[10963]: Remote message: Limit Users Err
Sep 21 21:10:43 tangke-laptop pppd[10963]: PAP authentication failed
Sep 21 21:10:49 tangke-laptop pppd[10963]: Connection terminated.
Sep 21 21:10:49 tangke-laptop pppd[10963]: Modem hangup
after /etc/init.d/KNetworkManager stop
正确信息
root@tangke-laptop:/etc/ppp# pon dsl-provider
Plugin rp-pppoe.so loaded.
RP-PPPoE plugin version 3.8p compiled against pppd 2.4.5
root@tangke-laptop:/etc/ppp# plog
Sep 21 21:13:42 tangke-laptop pppd[11255]: Using interface ppp0
Sep 21 21:13:42 tangke-laptop pppd[11255]: Connect: ppp0 <--> eth0
Sep 21 21:13:42 tangke-laptop pppd[11255]: PAP authentication succeeded
Sep 21 21:13:42 tangke-laptop pppd[11255]: peer from calling number 00:30:88:03:82:4E authorized
Sep 21 21:13:42 tangke-laptop pppd[11255]: Cannot determine ethernet address for proxy ARP
Sep 21 21:13:42 tangke-laptop pppd[11255]: local IP address 117.82.16.242
Sep 21 21:13:42 tangke-laptop pppd[11255]: remote IP address 117.82.16.1
Sep 21 21:13:42 tangke-laptop pppd[11255]: primary DNS address 61.177.7.1
Sep 21 21:13:42 tangke-laptop pppd[11255]: secondary DNS address 221.228.255.1
root@tangke-laptop:/etc/ppp# ping
PING (61.132.118.132) 56(84) bytes of data.
64 bytes from (61.132.118.132): icmp_seq=1 ttl=59 time=10.8 ms
this is not connect to the remote because of dsl-provider "replacedefaultroute"
RP-PPPoE plugin version 3.8p compiled against pppd 2.4.5
root@tangke-laptop:/etc/ppp# plog
Sep 21 21:17:49 tangke-laptop pppd[11729]: Using interface ppp0
Sep 21 21:17:49 tangke-laptop pppd[11729]: Connect: ppp0 <--> eth0
Sep 21 21:17:49 tangke-laptop pppd[11729]: PAP authentication succeeded
Sep 21 21:17:49 tangke-laptop pppd[11729]: peer from calling number 00:30:88:03:75:28 authorized
Sep 21 21:17:49 tangke-laptop pppd[11729]: Cannot determine ethernet address for proxy ARP
Sep 21 21:17:49 tangke-laptop pppd[11729]: local IP address 117.83.53.15
Sep 21 21:17:49 tangke-laptop pppd[11729]: remote IP address 117.83.48.1
Sep 21 21:17:49 tangke-laptop pppd[11729]: primary DNS address 61.177.7.1
Sep 21 21:17:49 tangke-laptop pppd[11729]: secondary DNS address 221.228.255.1
because of the /etc/ppp/peers/dsl-provider file use the replacedefaultroute
edit the "replacedefaultroute" to "defaultroute"
目前不太确定NetworkManager对pppoe的连接有什么影响,还需要多进行测试!!!
2009-09-24
今天研究了一下pon,poff,plog的脚本,
plog的脚本是从/var/log/syslog文件来读取的,而不是从/var/log/ppp.log文件读取的,所以要看到plog信息的话,必须要先安装sysklogd这个包。
pon脚本是调用/usr/sbin/pppd这个二进制程序
poff脚本要稍微复杂一点,主要用来killall pppd,复杂点主要在于如果ps aux里面看到很多pppd进程在跑的话,使用poff -a将删掉所有的进程。
这两天在家里测试一直OK,但是同样的机器同事拿回去测试却每次都不OK,很是郁闷,今天研究了一下source code.重新修改了一下脚本
for OPTIONS in "noipdefault" "noipv6" "noipx" "noauth" \
"hide-password" "defaultroute" "lcp-echo-interval 10" \
"lcp-echo-failure 1" "plugin rp-pppoe.so" "$3" \
"user \"$2\"" "usepeerdns" "debug" \
"dump" "refuse-pap" "receive-all" "password \"$4\""
do
sudo echo ${OPTIONS} >> ${TARGET_FILE}
done
其中加入dump和debug参数用来调试,如果再加入kdebug的话,应该可以启动内核级调试。
建议再安装上sysklogd来进行plog级别调试。
下面是这些参数的一些意义:
lcp-echo-failure 1
lcp-echo-interval 10
defaultroute
hide-password
在以后的打印信息中隐藏密码信息。
usepeerdns
noauth
receive-all
noipx
其中还有两个来自/etc/ppp/options的参数
proxyarp
asyncmap 0
阅读(792) | 评论(0) | 转发(0) |