Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27724
  • 博文数量: 5
  • 博客积分: 255
  • 博客等级: 二等列兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-25 08:59
文章分类
文章存档

2012年(1)

2010年(4)

我的朋友

分类: LINUX

2010-02-24 14:50:21

硬件环境:DELL OPTIPLEX 780台式机

软件环境:红帽RHEL5.1
 
建设一个基于红帽RHEL5.1的教学环境,环境中需要一台PXE服务器(附带文件共享服务),由于机器硬件比较新,红帽RHEL5.1系统自带驱动不能识别INTEL GM45芯片组硬件,显卡、网卡只能手动安装驱动。
安装网卡驱动并不麻烦,下载INTEL e1000e-1.1.2源码安装包

yum groupinstall “Development Tools” -y

yum install kernel-devel -y

tar vxf e1000e-1.1.2.tar.gz

cd e1000e-1.1.2/src

make install

 
安装结束之后会新建一个/lib/modules/2.6.18-53.el5/kernel/drivers/net/e1000e/e1000e.ko模块文件,这个文件可以直接复制到其它相同内核、相同网卡的机器上

insmod /lib/modules/2.6.18-53.el5/kernel/drivers/net/e1000e/e1000e.ko
modprobe e1000e echo “alias eth0 e1000e” >> /etc/modprobe.conf
vim /etc/sysconfig/network-scripts/ifcfg-ethX
>DEVICE=ethX
>ONBOOT=yes
>BOOTPROTO=none
>IPADDR=192.168.0.X
>NETMASK=255.255.255.0

 
/etc/sysconfig/network-scripts/ifcfg-ethX网卡配置文件最好把机器重启让它自动生成。
如果希望刚才这一切在PXE服务器实现自动装系统、自动装好网卡驱动,就比较麻烦一些了。
要处理的部分有两个:
第一:让anaconda安装程序识别网卡。客户端需要的安装文件通过NFS等等协议传输。
第二:安装完毕的操作系统自动安装好网卡驱动。
先谈第一部分,anaconda可以支持从网络获取安装文件,但前提是安装启动之后网卡是已经驱动好了的。
我们要做的就是将网卡驱动加入到initrd.img文件中,这个文件位于PXE服务器/tftpboot/目录(这里假定你已经设定好PXE服务器),initrd.img文件被称为内核模块文件,包含了大量驱动,安装时启动的内核需要网卡驱动时会读取模块及相关信息。安装结束之后,新的系统仍然不能驱动网卡,这个放在第二步处理。
先准备好网卡的驱动模块文件e1000e.ko,我们刚才看到的是编译安装而来的,也有可能驱动在一个rpm包的,你也可以将其解开。

mkdir /tmp/2.6.18-53.el5

cd /tmp/2.6.18-53.el5

rpm2cpio /mnt/cdrom/Server/kernel-XXXXXXXXXXXXXXX.rpm | cpio -ivd

 
解开initrd.img

mkdir /tmp/initrd

cd /tmp/initrd

gzip -dc /tftpboot/initrd.img | cpio -ivd

cd modules

gzip -dc modules.cgz | cpio -ivd

 
modules子目录中的modules.cgz是经过gzip压缩过的cpio包,将其解开。
 
解开之后的目录中有大量扩展名为ko的驱动模块文件,把我们想要支持的硬件驱动模块加进去,这样在安装过程中,anaconda程序会正常支持我们想要的硬件。当然过程并非只是复制一个ko驱动模块文件,还需要更新一个模块信息文件。

cd /tmp/initrd/modules

cp ~/e1000e.ko 2.6.18-53.el5/i686/

modinfo -F alias 2.6.18-53.el5/i686/e1000e | sed -e 's/^/alias /' -e 's/$/ e1000e/' >> modules.alias

 
(注意sed语句中置换目标中的空格。第三条命令中的两个模块名称请随着实际情况更改)
就像我们以前所做的,修改了源码包中的内容就势必再次打包恢复,这里我们需要把修改过的内容打包成一个initrd.img文件,PXE服务器会把它发给客户机使用。不过这里要注意打包时的压缩格式,modules.cgz文件用的是crc格式,而initrd.img文件用的是newc格式,命令参数不要弄错。

cd /tmp/initrd/modules

find 2.6.18-53.el5 | cpio -o -H crc | gzip -9 > modules.cgz

rm -rf 2.6.18-53.el5

cd ..

find . | cpio -o -H newc | gzip -9 > /tmp/initrd.img

 
将打包好的initrd.img文件复制到/tftpboot/目录,测试客户机能否在安装时使用网卡。测试时最好用kickstart文件,等下也会用得着。
不出意外的话,安装过程非常顺利,网卡正常工作了,安装文件从服务器中通过NFS或者HTTP、FTP之类的协议获得
客户端系统安装结束之后,你会发现网卡仍然不能工作,这里我们还需要处理第二部分要做的,让安装完的系统自动获得新驱动。
如果用kickstart的话,这一切实在太简单了。
编辑kickstart文件,在%post段中加几条命令

rm -rf /lib/modules/2.6.18-53.el5/kernel/drivers/net/e1000e
mkdir /lib/modules/2.6.18-53.el5/kernel/drivers/net/e1000e
cd /lib/modules/2.6.18-53.el5/kernel/drivers/net/e1000e
wget

 
e1000e.ko模块文件会从一个http或ftp服务器下载到客户机中。
整个建设过程忽略了很多麻烦的地方,如果是有多种内核多个版本操作系统的存在的话,自动处理并不好做。欢迎大家指正。
参考文献:
感谢同事jarson Liu的帮助。
阅读(1806) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~