如何为 anaconda 安装构建驱动程序磁盘(CentOS 6)

如何为 anaconda 安装构建驱动程序磁盘(CentOS 6)

我需要为 anaconda 制作一个驱动程序磁盘。该磁盘将包含较新的笔记本电脑网卡的更新模块,目标是使 CentOS 6.2 的网络安装正常工作。我正在使用 cobbler,因此即使 kickstart 文件本身也在网络上。我不介意安装不是完全无人值守的,也不介意在安装过程中插入带有驱动程序磁盘映像的 USB 记忆棒并手动选择正确的项目,但我确实希望将其他所有内容保留在网络上(内核映像、initrd、kickstart 文件、RPM 存储库)。

我已经构建了更新的驱动程序,甚至在 /usr/lib/rpm/redhat/kmodtool 的帮助下构建了一个“kmod”RPM。不幸的是,我完全没有找到有关驱动程序磁盘的文档。

http://www.phil.muni.cz/~letty/linuxfaq/pracovni/driver-disk-howto是我能找到的唯一链接,它描述了某人和我做同样事情的挣扎——下载驱动程序磁盘并尝试探索它们。不幸的是,CentOS 6 中的格式似乎已经改变,我能做的最好的事情就是让 anaconda 告诉我:“驱动程序磁盘对于此版本的 CentOS 无效。”。日志本身显示“找不到 /tmp/drivers/rpms/x86_64/repodata”,到目前为止我还没有看到带有“repodata”的驱动程序磁盘。

目前正在深入anaconda 源代码但我希望有人能给我指明正确的方向。

答案1

我可能已经找到了答案anaconda 源毕竟。

要生成与 CentOS 6 兼容的驱动程序磁盘,您可以创建一个 squashfs 映像(其他文件系统也可以使用,但 squashfs 是迄今为止最容易创建的),其布局如下:

  • rhdd3- 一个带有简单一行注释的文件,用于描述磁盘
  • .rundepmod- 此文件的存在告诉安装程序它应该运行depmod以获取模块
  • rpms/x86_64- 包含 kmod RPM 的可选 yum 存储库
  • lib/modules/2.6.32-220.el6.x86_64/...- 实际的内核模块放在这里;如果驱动程序磁盘包含上游驱动程序的更新驱动程序,则此处的目录结构应与上游内核模块位置相匹配。内核的版本当然应与安装程序的版本相匹配。

由于一张图片胜过千言万语,下面是我们用来启动需要更新atl1c.ko驱动程序的新款笔记本电脑的示例驱动程序磁盘:

$ unsquashfs -ls driver-disk.dd 
Parallel unsquashfs: Using 2 processors
8 inodes (26 blocks) to write

squashfs-root
squashfs-root/.rundepmod
squashfs-root/lib
squashfs-root/lib/modules
squashfs-root/lib/modules/2.6.32-220.el6.x86_64
squashfs-root/lib/modules/2.6.32-220.el6.x86_64/kernel
squashfs-root/lib/modules/2.6.32-220.el6.x86_64/kernel/drivers
squashfs-root/lib/modules/2.6.32-220.el6.x86_64/kernel/drivers/net
squashfs-root/lib/modules/2.6.32-220.el6.x86_64/kernel/drivers/net/atl1c
squashfs-root/lib/modules/2.6.32-220.el6.x86_64/kernel/drivers/net/atl1c/atl1c.ko
squashfs-root/lib/modules/2.6.32-220.el6.x86_64/updates
squashfs-root/rhdd3
squashfs-root/rpms
squashfs-root/rpms/x86_64
squashfs-root/rpms/x86_64/kmod-compat-wireless-3.3_2_n-2.el6.x86_64.rpm
squashfs-root/rpms/x86_64/repodata
squashfs-root/rpms/x86_64/repodata/filelists.xml.gz
squashfs-root/rpms/x86_64/repodata/other.xml.gz
squashfs-root/rpms/x86_64/repodata/primary.xml.gz
squashfs-root/rpms/x86_64/repodata/repomd.xml

答案2

我在搜索如何为 Centos 7.4 创建驱动程序磁盘的说明时发现了这一点。就我而言,我需要一个 RAID 驱动程序来安装在 HP Microserver 上,其中唯一的内部磁盘是 RAID 的一部分。

我从旧的设备驱动程序磁盘(实际上是一个 USB 密钥)开始,它有以下文件夹(以及一些其他文件):

/rpms/x86_64/
/rpms/x86_64/repodata/

以下过程似乎对我有用:

  1. /rpms/x86_64/删除USB 密钥上的文件夹内容
  2. 下载正确/最新的驱动程序作为 RPM 文件
  3. 将此 RPM 单独移动到一个文件夹中
  4. 确保创建仓库软件包已安装
  5. 运行以下命令,其中你的文件夹RPM 位于:

    createrepo your_folder/

  6. 检查是否已repodata在中创建文件夹你的文件夹

  7. 复制内容你的文件夹/rpms/x86_64USB 密钥上

虽然这并没有直接解决 OP 的问题,但对于在尝试弄清楚如何为 CentOS 安装创建设备驱动程序磁盘时偶然发现此页面的其他人来说,它可能会有所帮助。

答案3

来自anaconda driverdisc.txt:

The new DriverDisc format uses simple layout which can be created on top of
any anaconda's supported filesystem (vfat, squashfs, ext2 and ext3).

/
|rhdd3   - DD marker, contains the DD's description string
/rpms
|  /i386 - contains RPMs for this arch and acts as Yum repo
|  /i586
|  /x86_64
|  /ppc
|  /...  - any other architecture the DD provides drivers for

如果您正在执行类似 inst.dd=http://10.0.0.80/e1000e.rpm 的操作,则此部分至关重要:

用于更新驱动程序的 RPM 有特殊要求。Anaconda 仅选择提供“kernel-modules = <运行内核版本>”的 RPM。

因此,您需要编辑 .spec 并在顶部添加“Provides: kernel-modules = 3.10.0-1160.el7.x86_64”或任何等效安装版本。

另请注意,inst.sshd 非常适合排除网络启动安装故障。请参阅 /tmp/packaging.log:

# ssh <installer-host-ip>
[anaconda root@localhost ~]# less /tmp/packaging.log

这将完成安装,但将来的内核升级可能无法获得驱动程序更新。您可以在 /etc/kernel/postinst.d/ 中添加一个钩子,以便在内核更新时将您的驱动程序复制到较新的内核版本(假设 ABI 兼容)。

相关内容