如何为SUSE Linux Enterprise Server 10.0安装RAIDcore驱动

这两天碰到一个问题,就是在一台使用了TYAN S3970主板的服务器上安装SUSE Linux Enterprise Server 10.0,并支持RAID。TYAN好几款AMD方案的主板都选用了Broadcom的芯片组,如果希望支持RAID,都会碰到这个问题。
CIPRICO提供了一些Linux Distribution的驱动,有SuSE 10.0(kernel version 2.6.13-15.7)但没有SuSE Enterprise Server 10.0(kernel version 2.6.16.21-0.8)。经过几个小时的尝试并刻废了数张CDR后,终于安装成功。基本步骤如下:

编译驱动

1. 找一台机器,安装同一版本的SuSE ES 10.0,我需要安装的是i386版本,我用vmware把它装在了我的iMac上。
2. 安装必要的package,包括通用编译工具和kernel-source。
3. 准备好编译环境。你可能需要编辑至少两个版本的驱动,一个是针对2.6.16.21-0.8-default内核,为了安装程序能够发现你的raid;另一个针对2.6.16.21-0.8-smp或者2.6.16.21-0.8-bigsmp内核,是你的服务器最终安装的驱动。因此,在/lib/modules目录下,除了和你目前系统内核对应的目录外,还需要创建另一个。对我来说,我在iMac上安装的是2.6.16.21-0.8-default,我在/lib/modules目录下又创建了一个2.6.16.21-0.8-bigsmp,在这个目录下面建一个到相应目标文件的链接:

cd /lib/modules
sudo mkdir 2.6.16.21-0.8-bigsmp
cd ./2.6.16.21-0.8-bigsmp
sudo ln -s /usr/src/linux-2.6.16.21-0.8-obj/i386/bigsmp build

4. 下载bcraid driveer SDK

curl http://kb.ciprico.com/raidcore/Downloads/V2.1/LIN-DRV-SDK_RC-210-2006044_3.tar
tar xvf LIN-DRV-SDK_RC-210-2006044_3.tar

5. 首先,编译default kernel版本的驱动。因为我目前安装的就是default kernel,所以make的时候不需要加任何选项。否则需要加KVERS=2.6.16.21-0.8-default。

cd ./LIN-DRV-SDK/bcraid
cp Makefile_2.6 Makefile
make
cd ../bccfg
cp Makefile_2.6 Makefile
make

6. 保存好你编译出的bcraid.ko和bccfg.ko
7. 编译bigsmp版本的驱动

cd ../bcraid
make KVERS=2.6.16.21-0.8-bigsmp
cd ../bccfg
make KVERS=2.6.16.21-0.8-bigsmp

8. 好了,你目前有了你需要的两个版本的驱动,别把它们搞混了。

制作安装盘

如果你有兴趣,可以仔细阅读一下SuSE关于DUD(Driver Update Disk)的文档。而你要做的是:
1. 准备好一个update.tar.gz文件。将你编译好的两个版本的驱动按照下面的目录结构放好:
Updatetargz
不要放错了,然后在lib上层目录打包:

tar cvfz update.tar.gz lib

2. 下载一份ciprico提供的SuSE 10.0的iso,虽然你不能用它装,但是你需要其中的脚本。
3. 按照下面目录结构准备好你需要的文件,

Driveriso
其中update.tar.gz是你准备好的。modules目录下的bcraid.ko是2.6.16.21-0.8-default版本的驱动,SuSE installer需要它。其他的文件都可以从上一步下载的iso中得到。
4. 将这些文件以iso 9660格式刻一张光盘。

安装

1. 启动SuSE Linux Enterprise Server 10.0的安装盘。在第一个菜单选择F5 (Dirver Update),选Yes确认。然后选择菜单中的Installation。
2. 系统进入Linuxrc,将刚做好的光盘放入光驱,然后选择正确的资源媒介,OK。
3. 很快系统会告诉你Driver Updated成功,并能找到你的raid array。选择back回到Installer,完成安装。
大功告成!

注意事项

  • 在编译前确认你已经安装了kernel-source这个package。你不需要重新编译内核,但你需要编译kernel modules。
  • update.tar.gz和最后光盘中的目录名一定要和你安装的kernel版本一一对应。如果在Linuxrc中无法找到驱动,多半是目录名和kernel版本不对应造成的。
  • 如果安装的时候可以找到硬盘,重启了一次后却又无法找到,那可能是你在update.tar.gz中提供的驱动于最终安装的内核版本不一致。
  • 如果你不确定最后安装的是那个kernel,最好default, smp, bigsmp都编译一份。

有用的资源

RAIDCore v2.1 Software Downloads
Creating a Driver Update Disk (DUD)
Update Media HowTO