内容简介:
今天跟大家分享点稍微高级点的内容,
第一种情况,当服务器硬件平台或某个部件的发布时间晚于操作系统发布的时间,这就会导致老操作系统中没有新发布的硬件平台或配件的驱动,可能就导致操作系统无法正常安装,或安装以后系统无法识别某些硬件配件,比如主板芯片、cpu、内存、网卡、硬盘、raid卡等导致各种各样问题的出现,最关键的问题是没有raid卡或者usb的驱动会直接影响系统安装,没有raid卡驱动,可以使用dd手动加载驱动,没有usb驱动,键盘鼠标都用不了了,又何谈手动加载驱动呢,到这我想大部分人会选择放弃了,有小伙伴以前或许遇到过像win7系统要安装到新电脑,发现没有usb2.0驱动,或者直接识别不了cpu,不支持安装等问题。
第二种情况,部分用户购买了新的硬件平台,但是之前一直使用的老版本的操作系统,而且成为了习惯,对老版本系统产生了依赖关系,不想再增加学习成本,又或者老版本系统上运行的应用由于年代久远,缺少维护,无法迁移到新的操作系统运行,因此老版本系统跟新硬件平台的兼容性就成了问题,操作系统厂家也不会回过头再对老系统适配新硬件,这就是今天要讲的内容价值所在。
环境说明:
操作系统:centos为例
场景:
适配服务器raid卡,以博科broadcom厂商的raid卡9560-8i为例
一、软件工具准备
1.1 驱动下载
驱动下载链接
注 :驱动版本请根据操作系统版本进行选择,本文以最新驱动为例。
https://docs.broadcom.com/docs and downloads/raid controllers/raid
controllers common files/MR_LINUX_DRIVER_7.20 07.720.04.00 1.tgz
本次下载的是最新版Linux 驱动 MR_LINUX_DRIVER_7.20 07.720.04.00 1.tgz 。
1.2 操作系统
本文档以CentOS 7.6为操作系统为例
操作系统安装,选择带 GUI的服务器 全包安装 。
安装的时候创建 mockbuild用户。
二、将raid卡驱动集成到操作系统ISO镜像
2.1 准备制作操作系统文件
2.1.1 上传需要适配的操作系统镜像ISO文件
将操作系统镜像文件 CentOS-7-x86_64-DVD-1810.iso上 传到工作目录
2.1.2 挂载刚上传的镜像文件
1) 创建 挂载 目录
mkdir -p /mnt/iso
2) 挂载镜像
mount CentOS-7-x86_64-DVD-1810-Hygon-v8.iso /mnt/iso/
2.1.3 未适配的镜像文件内容
1 )创建镜像制作目录
mkdir -p /root/iso_rebuild
2 )进入镜像制作目录
cd /root/iso_rebuild
3)拷贝原始镜像内核
rsync -a /mnt/iso/ .
2.2 准备raid卡驱动
2.2.1 上传驱动文件
将驱动文件 MR_LINUX_DRIVER_7.20-07.720.04.00-1.tgz上 传到工作目录
2.2.2 解压刚上传的驱动文件包
1 )创建官方驱动文件解压目录
mkdir -p /root/driver
2)解压官方驱动文件包
tar xf MR_LINUX_DRIVER_7.20-07.720.04.00-1.tgz -C /root/driver/
3 )进入解压官方驱动文件包解压目录
cd /root/driver/
4)创建 megaraid_sas_components.tgz解压目录
mkdir -p megaraid_sas_components
5 )解压 megaraid_sas_components.tgz
tar xf megaraid_sas_components.tgz -C megaraid_sas_components
2.2.3 查看megaraid_sas_components
1 )进入 megaraid_sas_components目录
cd megaraid_sas_components/
2) 查看 megaraid_sas_components
ls
3) 查看 kmod_srpm
ls kmod_srpm/
这是本次制作驱动rpm所需的驱动源代码。
4 )查看 rhel7_oel7_centos7
tree rhel7_oel7_centos7/
这个是raid卡厂家官方制作好的驱动iso和 rpm文件,分别对应 rhel7.7、 rhel7.8和 rhel7.9。
2.3 编译生成megaraid_sas.ko.xz
2.3.1 创建生成目录
mkdir get_megaraid_sas.ko.xz
2.3.2 拷贝驱动源码到生成目录
cp /root/driver/megaraid_sas_components/megaraid_sas-07.720.04.00-src.tar.gz get_megaraid_sas.ko.xz/
2.3.3 进入生成目录并解压源代码
cd get_megaraid_sas.ko.xz/
tar xf megaraid_sas-07.720.04.00-src.tar.gz
2.3.4 进入驱动源代码目录
cd megaraid_sas-07.720.04.00/
2.3.5 编译
./compile.sh
2.3.6 压缩ko驱动文件
xz -z megaraid_sas.ko
2.3.7 移到上级目录
mv megaraid_sas.ko.xz ../
将压缩后的驱动文件megaraid_sas.ko.xz移到上级目录备用 。
2.4 生成新镜像initrd.img
2.4.1 创建生成目录
mkdir get_initrd.img
2.4.2 进入生成目录
cd get_initrd.img/
2.4.3 拷贝原始initrd.img
cp /mnt/iso/isolinux/initrd.img .
2.4.4 重命名initrd.img
mv initrd.img initrd.img.xz
2.4.5 解压initrd.img.xz
xz -d initrd.img.xz
2.4.6 提取initrd.img
cpio -i < initrd.img
2.4.7 删除原来initrd.img
rm initrd.img
2.4.8 替换megaraid_sas.ko.xz
cp /root/get_megaraid_sas.ko.xz/megaraid_sas.ko.xz usr/lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz
2.4.9 重建模块依赖映射
depmod -vab .
2.4.10 查看新建的模块依赖映射
ll -ht lib/modules/3.10.0-957.el7.x86_64/
2.4.11 重新打包initrd.img
find . | cpio -c -o | xz -9 --format=lzma > ../initrd.img
2.4.12 将生成的initrd.img移到当前目录
mv ../initrd.img .
将新生成的initrd.img文件移到制作目录备用。
2.5 替换原始镜像里的initrd.img文件
2.5.1 进入镜像制作目录
cd /root/iso_rebuild/
2.5.2 替换isolinux/initrd.img
cp /root/get_initrd.img/initrd.img isolinux/initrd.img
2.5.3 替换images/pxeboot/initrd.img
cp /root/get_initrd.img/initrd.img images/pxeboot/initrd.img
2.6 编译驱动rpm包
2.6.1 准备kmod-megaraid_sas-07.720.04.00-1.src.rpm
cp /root/driver/megaraid_sas_components/kmod_srpm/kmod-megaraid_sas-07.720.04.00-1.src.rpm /home/mockbuild/
2.6.2 切换到mockbuild用户
su - mockbuild
2.6.3 安装源码
rpm -ivh kmod-megaraid_sas-07.720.04.00-1.src.rpm
2.6.4 进入SPEC目录
cd rpmbuild/SPECS/
2.6.5 编译源码
rpmbuild -bb megaraid_sas.spec
2.6.6 查看生成的rpm包
tree ../RPMS/
2.7 替换ISO镜像里的驱动rpm
2.7.1 进入镜像制作目录
cd iso_rebuild/
2.7.2 拷入驱动rpm
cp /home/mockbuild/rpmbuild/RPMS/x86_64/kmod-megaraid_sas-07.720.04.00-1.x86_64.rpm Packages/
2.7.3 修改-comps.xml
1 )生成 comps.xml
cd repodata/ rm -rf *.gz rm -rf *.bz2 rm -rf repomd.xml* rm -rf TRANS.TBL mv *-comps.xml comps.xml cd ..
2) 查找 group id Core
vim repodata/comps.xml
3) 在 group id Core的 <packagelist>下添加 kmod-megaraid_sas
2.7.4 重建repodata
createrepo -g repodata/comps.xml ./
2.8 重新打包成ISO镜像
2.8.1 获取镜像LABEL
vim isolinux/isolinux.cfg
其中LABEL为 CentOS\x207\x20x86_64 打包镜像时 \x20替换为空格 。
2.8.2 重新打包成 ISO 镜像
mkisofs -quiet -input-charset utf-8 -V "CentOS 7 x86_64" -b isolinux/isolinux.bin -c boot.cat -
20
no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot -R -J -T -v -joliet-long -o /root/CentOS-7-x86_64-DVD-1810-Hygon-v8-9560.iso -r ./
2.9 ISO镜像转为hybrid格式
isohybrid -u CentOS-7-x86_64-DVD-1810-Hygon-v8-9560.iso
2.10 为ISO镜像添加md5值 implantisomd5 CentOS-
2.10 为ISO镜像添加md5值
implantisomd5 CentOS-7-x86_64-DVD-1810-Hygon-v8-9560.iso
2.11 验证测试
1) 安装时能够正确识别驱动器
2) 安装后驱动版本 为更新后的版本
modinfo megaraid-sas