且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

定制安装光盘在RAID卡上安装LInux

更新时间:2022-06-28 05:25:16

目前方案:

方案一:直接在启动安装程序时加载官方提 供驱动,已失败。
linux dd,指定驱动的位置和名称失败;指 定驱动盘失败。
linux text,切换到2号控制台,挂载U盘, 复制驱动目录到/tmp/hptdd下,执行step1, 失败。
 
结论:官方驱动程序不适应相应的内核版本。最不解的是5U5版本的驱动居然在CENT5.5的系统中都不能支持,就别说Elastix了。
===================================== ========================
 
方案二:编译内核并替换掉原有光盘中的内核文件。然后生成新的initrd.img文件。
1、内核源码的选择问题
 
标准版本的内核源码编译后用在光盘安装应 该是没问题。但是为了能使用这份源码编译 生成rr272x_1x.ko文件,我还是选择了使用与光盘中内核版本相同的源码,下载地址如下:
http://vault.centos.org/5.6/centosplus/SRPMS/kernel-2.6.18-238.12.1.el5.centos.plus.src.rpm
 
2、下载,并解压驱动源码
 
注意由于源码是.src.rpm文件,所以步骤如下:
#rpm -ivh kernel-2.6.18-238.12.1.el5.centos.plus.src.rpm "安装源码RPM
#rpmbuild -bp /usr/src/redhat/SPECS/kernel-2.6.spec "生成源码文件
 
3、先编译出.ko(驱动模块文件)备用
 
在以下位置下载相应驱动源文件http://www.highpoint-tech.cn/China_new/product_support_sas6c.htm
# yum install ncurses-devel   "(此步要求您的Linux工作站目前已联网)准备编译环境,如果没有gcc、ncurse类推处理。
# tar xzvf rr272<tab>       "解压驱动源码包,注意是名为rr…….src.……这样的驱动包。
# cd rr272x-linux-src-v1.1<tab>/product/rr272x/linux/ "进入驱动安装目录
# make patchkernel KERNELDIR=<内核源文件目录> KERNEL_VER=2.6 "把驱动补丁嵌入内核,本例源文件目录为/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64
#cd 内核源码路径
#make SUBDIRS=驱动源码目录 "编译出驱动模块文件rr272x_1x.ko,此文件非常重要。
 
4、编译内核,把rr272x_1x的驱动直接写入内核文件,而不是以模块方式存在(保险起见)
 
#cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64 "进入 源码目录
#cp /boot/config* .config "为避免编译失败,复制系统原有的内核配置文件。
#make menuconfig "开始编译
我选择了以下项目:
--kernel hack里所有项目都拿掉不要(重要!)
--device driver下scsi device、scsi disk和low level项目下的"HighPoint RocketRAID 272x support" 全部加载到内核中
--low level下的"bus logic"加载到内核中(只有虚拟机vmware需要此驱动)
--iptables防火墙的一些相关选项,这个必须根据个人经验,与本案例无关
--其它项目如NTFS支持、不完整源码、源码校验等常用项目在本案例中不是很紧要,新手建议尽量少的修改选项。如果需要支持或移除某些功能可以自行实验(需要反复编译验证选项是否正确,有些项目选择会导致编译失败,此乃天命,君勿自扰)
 
如果编译失败或出现错误,就重新make menuconfig,建议不要按错误提示去修改include文件(会导致编译模块失败)。
#make modules "编译内核所需的模块文件
#make modules_install "把模块放到应该去的地方
#make install "安装新内核到系统中(本案例中,此步无意义)
 
5、提取安装光盘所需的内核文件,然后生成光盘所需的initrd.img文件。
 
我们需要的内核文件是/boot/vmlinuz-2.6.18-prep    把它提取到某个目录。
下面生成initrd.img文件:
#mkdir /tmp/initrd "创建新镜像文件目录
#mkdir /tmp/initcd "创建光盘中原有镜像文件的解压目录
插入原安装光盘
#mount /dev/cdrom /mnt/cdrom "挂光盘
#cd /tmp/initcd
#gzip -dc /mnt/cdrom/isolinux/initrd.img|cpio -dvi "解压原光盘中的镜像文件
#cd modules   "进入模块目录
#gzip -dc modules.cgz|cpio -dvi    "解压模块文件
#cd 2.6.18-prep/x86_64    "进入模块所在目录
#find .>cp.sh   "把安装光盘的initrd.img中所需要的所有模块文件名列出并写入cp.sh这个文件,此步用于准备脚本。
#rm -rf *     "删除原有的所有模块文件,方便观察效果
#vim cp.sh      "写脚本
利用vim的查找替换功能(如果不会可以复制到windows中用wordpad解决),把所有的行改为以下的样子:
原先的行是./crc16.ko
改为find /lib/modules/2.6.18-prep/ -name "crc16.ko" -exec cp {} . \;
这句的意思是在我们自己编译的模块中找到安装光盘所需要的,然后复制到我现在这里。
#chmod 700 cp.sh "给我们的脚本加执行权限
#./cp.sh      "执行我们的脚本,如果顺利的话,应该会把刚才删除的文件都找回来,但已经是我们自己编译的模块文件了。
#rm -rf cp.sh   "过河拆桥
#cd ../..     "回到模块目录
#find 2.6*|cpio -o -H newc|gzip -9>modules.cgz "生成新的modules.cgz文件
#rm -rf 2.6*    "过河拆桥
#cd ..        "回到镜像文件解压的根目录
#find .|cpio -o -H newc|gzip -9>initrd.img     "生成新的镜像文件
 
6、用ultraISO等光盘镜像工具打开原安装光盘
 
把前步的vmlinuz-2.6.18-prep文件放到光盘isolinux目录下,改名为vmlinuz,替换原文件。
把前步的initrd.img文件放到光盘isolinux目录下,替换原文件。
 
7、为了让操作系统在将来安装完成后仍然能识别rr272x的驱动,进行光盘的后续工作:
 
编辑光盘根目录下的ks_default.cfg文件,找到reboot --eject这行,在前面加"#"注释掉。
在光盘中创建AI目录(我的意思是After Install,不是人工智能哦)
#mkdir /tmp/new    "随便建个目录
#cp /boot/initrd-2.6.18-238.12.1.el5.img . "把现在用的镜像文件复制过来
#gzip -dc initrd-2.6.18-238.12.1.el5.img|cpio -ivd    "解压
#rm -rf initrd-2.6.18-238.12.1.el5.img "过河拆桥
#把前面提取的rr272x_1x.ko文件放到lib目录下
#vim init "编辑初始化文件,加入以下内容
echo "Loading rr272x_1x.ko module"
insmod Loading rr272x_1x.ko module
#find .|cpio -o -H newc|gzip -9>../initrd-2.6.18-238.12.1.el5.img     "生成新的镜像文件
把刚才生成的initrd-2.6.18-238.12.1.el5.img放到光盘的AI目录。
 
8、刻盘,用此盘安装系统后,千万不要马上重启。alt+f2进入2号控制台。
把我们自己生成的initrd-2.6.18-238.12.1.el5.img放到/boot下替换原文件。
 
至此,方案二完成。
 
=====================================
方案三:手工编译制作driver disk以适应 内核版本,并回到方案一。
1、生成驱动源码,参见方案二。
2、生成.ko文件
进入内核源码目录
make SUBDIRS=驱动源码目录
在驱动源码目录中找到.ko文件,提取到某个目录比如/tmp/myimg
3、cd /tmp/myimg
--写文件modules.dep,内容为:
rr272x_1x: scsi_mod
--写文件rhdd,内容为:
rr272x_1x-v1 driver disk for Elastix (Generated By bob)
--写文件modinfo,内容为:
Version 0
rr272x_1x
   scsi
   "RocketRAID 271x/272x SAS Controller"
--写文件pcitable,内容为:
0x1103 0x02720 "rr272x_1x" "HighPoint|RocketRAID 272x_1x SAS Controller"
0x1103 0x02721 "rr272x_1x" "HighPoint|RocketRAID 272x_1x SAS Controller"
0x1103 0x02722 "rr272x_1x" "HighPoint|RocketRAID 272x_1x SAS Controller"
0x1103 0x02710 "rr272x_1x" "HighPoint|RocketRAID 272x_1x SAS Controller"
0x1103 0x02711 "rr272x_1x" "HighPoint|RocketRAID 272x_1x SAS Controller"
 
4、生成cgz文件(加上前步所编辑的共五大文件)
#mkdir -r 2.6.18-238.12.1.el5/x86_64 "创建规定模式的目录名,不然可能找不到
#cp 我们的.ko文件 2.6.18-238.12.1.el5/x86_64 "把模块文件复制过来
#find 2.6<tab> |cpio -H crc -o|gzip - 9>modules.cgz
#rm -rf 2.6*    "过河拆桥
#cd ..
#find .|cpio -H crc -o|gzip - 9>bob.img "生成驱动盘镜像文件
把这个文件放到U盘就行。
 
5、安装时用标准的安装光盘启动系统,在出现安装方式选择界面前一定要插入U盘。
输入linux dd,选择U盘,找到bob.img即可。


本文转自 霜寒未试 51CTO博客,原文链接:http://blog.51cto.com/51bbs/769243,如需转载请自行联系原作者