不知道怎么搞的, 以前在Redhat下从来没有成功过, 都是在一切顺利的情况下完成,但是一重启就不能启动。这次在MagicLinux下很很顺利,一次成功。其中根据pppoe-server的需要对内核做了些更改。
主要步骤:
make oldconfig #这一步我不知道有没有必要
make menuconfig
#然后是把旧的.config load进来,再到Networking Options中把ppp的大部份改成内核,当然,对我来说最重要的是pppoe-server,顺便把802.1Q协议也编进内核了,再把device --> char device中把HDLC改为内核模式(UNIX98_PTY在这里默认就是内核模式的)---之前我想不通为什么要这样做,后来查看了rp-pppoe3.6,发现pppoe.c里面有这么一段:
#ifdef HAVE_N_HDLC
if (conn.synchronous) {
if (ioctl(0, TIOCSETD, &disc) < 0) {
printErr("Unable to set line discipline to N_HDLC. Make sure your kernel supports the N_HDLC line discipline, or do not use the SYNCHRONOUS option. Quitting.");
exit(EXIT_FAILURE);
} else {
syslog(LOG_INFO,
"Changed pty line discipline to N_HDLC for synchronous mode");
}
/* There is a bug in Linux's select which returns a descriptor
* as readable if N_HDLC line discipline is on, even if
* it isn't really readable. This return happens only when
* select() times out. To avoid blocking forever in read(),
* make descriptor 0 non-blocking */
flags = fcntl(0, F_GETFL);
if (flags < 0) fatalSys("fcntl(F_GETFL)");
if (fcntl(0, F_SETFL, (long) flags | O_NONBLOCK) < 0) {
fatalSys("fcntl(F_SETFL)");
}
}
#endif
下面再来
make
make install
重启后,菜单里就多了个2.6.9的选项,进去就可以了。但是,按照这样的步骤在RAS4下就是失败,郁闷!
(如果还要安装新模块的话,应该要
#make module (编译选择的模块)
#make module-install (将编译后的模块转移到系统标准位置)
)
下面是做pppoe-server时的记录:
rpm -qa | grep "ppp"
把原有的ppp和rp-pppoe包卸载掉 rpm -e pppxxxxxxx,(为了保险,我同时还再次搜索了下pppoe-server,发现还有的话就杀无赦!)
把下载回来的pppd2.4.4和rp-pppoe3.6放在同一目录下,解压。
进入pppd.2.4.4的目录
./configure
make
make install
chmod u+s /usr/local/sbin/pppd
进入rp-pppoe目录
./configure --prefix=/usr/local --enable-plugin=../../ppp-2.4.4
make
make install
然后把生成的plugins放到/etc/ppp/plugins下
cp /usr/local/lib/pppd/2.4.4/* /etc/ppp/plugins/
修改pppoe-server-options,大致上为
auth
require-chap #如果把这句注释掉,那么就任何用户和密码都可以登陆
default-mru
default-asyncmap
lcp-echo-interval 60
lcp-echo-failure 5
ms-dns 192.168.0.2
ms-dns 61.132.90.92
noipdefault
noipx
nodefaultroute
noproxyarp
noktune
10.0.0.1:10.0.0.200
netmask 255.255.255.255
logfile /var/log/pppoe-server.log
我的options是这样的
lock
crtscts
nobsdcomp
nodeflate
nopcomp
如果没有chap-secrets的话,cp pap-secrets chap-secrets,同时确保pap-secrets中没有其它数据
chap-secrets内容如下:
# Secrets for authentication using CHAP
# client server secret IP addresses
test * 1234 *
这时运行
pppoe-server -k -I eth0 -L 192.168.1.123 -R 10.0.0.1 -N 128
就可以了。
为了证实是在内核模式下运行的pppoe-server,我修改了pppoe-server.c代码,增加了一点显示
#ifdef HAVE_LINUX_KERNEL_PPPOE
printf("Run in LINUX_KERNEL_PPPOE MODE/n");
case 'k':
UseLinuxKernelModePPPoE = 1;
printf("Thie UseLinuxKernelModePPPoE value is:%d/n",UseLinuxKernelModePPPoE);
break;
#endif
(重新编译rp-pppoe)
这样,如果是成功把pppoe编译进内核了,那么运行pppoe-serverr时,会显示
Run in LINUX_KERNEL_PPPOE MODE
Thie UseLinuxKernelModePPPoE value is 1
我这里的确是显示了(不过想不通我的代码只让它显示一次,但是它却显示了两次),说明内核编译的确是成功了。
附带网上找到的一点小资料,以便日后编译SCSI硬盘的时候可能用得上
1、在升级内核前,你需要知道自己机器上的硬件来安装合适的模块。查看硬件的命令有:
lspci 列出所有的 pci 设备。
dmesg 也能给出很多有用的信息。
2、其实现在编译内核最关键的地方就是配置内核。我一般用make menuconfig配置内核。
配置2.6.0内核时如果你的主板是Intel芯片的话,你用默认配制也许就可以得到一个满意的内核哦。做法是make menuconfig后离开时选择保存。
这里的难点是pci,如果你硬盘是IDE的那一定要选择好你主板上南桥芯片。SCSI的话就是要选择上你的SCSI卡型号。
还有就是网卡,声卡芯片的型号了,他们的型号你都可以用lspci 查找到比如我的是。
sh-2.05a# /sbin/lspci
00:00.0 Host bridge: ServerWorks CNB20LE Host Bridge (rev 05)
00:00.1 Host bridge: ServerWorks CNB20LE Host Bridge (rev 05)
00:02.0 PCI bridge: Intel Corp. 80960RP [i960 RP Microprocessor/Bridge] (rev 01)
00:02.1 I2O: Intel Corp. 80960RP [i960RP Microprocessor] (rev 01)
00:04.0 Ethernet controller: 3Com Corporation 3c985 1000BaseSX (SX/TX) (rev 01)
00:08.0 PCI bridge: Digital Equipment Corporation DECchip 21152 (rev 03)
00:0e.0 VGA compatible controller: ATI Technologies Inc 3D Rage IIC (rev 7a)
00:0f.0 ISA bridge: ServerWorks OSB4 South Bridge (rev 4f)
00:0f.1 IDE interface: ServerWorks OSB4 IDE Controller
02:04.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 05)
02:05.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 05)
03:02.0 PCI bridge: Intel Corp. 80960RM [i960RM Bridge] (rev 01)
03:08.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 08)
你只要把你pci上的东西全部选择对了。 剩下就用默认的就可以了
ps:下午要张贴文章的时候发现CSDNBlog又不能用了,faint,似乎不是第一次,经常有这样的事。