我是一名 Fedora Linux 用户,每天运行 yum upgrade
。虽然这个习惯使我能够运行所有最新的软件(Fedora 的四大基石之一是“第一”,并且它也确实如此),但它也突显了 ZFS 存储平台与新内核之间的任何不兼容性。
作为一名开发者,有时我需要来自最新 ZFS 分支的新功能。例如,ZFS 2.0.0 包含一个令人兴奋的新功能,可以大大 提高 ZVOL 同步性能,这对于作为 KVM 用户的我来说至关重要。但这意味着如果我想使用 2.0.0 分支,我必须自己构建 ZFS。
起初,我只是在每次内核更新后从其 Git 仓库手动编译 ZFS。如果我忘记了,ZFS 将在下次启动时无法识别。幸运的是,我很快学会了如何为 ZFS 设置动态内核模块支持 (DKMS)。然而,这个解决方案并不完美。首先,它没有利用强大的 yum 系统,该系统可以帮助解决依赖关系和升级。此外,使用 yum 在您自己的软件包和上游软件包之间切换非常容易。
在本文中,我将演示如何设置一个用于打包 ZFS 的 yum 仓库。该解决方案包含两个步骤
- 从 ZFS Git 仓库创建 RPM 包
- 设置一个 yum 仓库来托管这些包
创建 RPM 包
要创建 RPM 包,您需要安装 RPM 工具链。Yum 提供了组来捆绑安装这些工具
sudo dnf group install 'C Development Tools and Libraries' 'RPM Development Tools'
在安装完这些工具之后,您必须安装所有必要的软件包,以便从 ZFS Git 仓库构建 ZFS。这些软件包属于三个组
- Autotools,用于从平台配置生成构建文件
- 用于构建 ZFS 内核和用户空间工具的库
- 用于构建 RPM 包的库
sudo dnf install libtool autoconf automake gettext createrepo \
libuuid-devel libblkid-devel openssl-devel libtirpc-devel \
lz4-devel libzstd-devel zlib-devel \
kernel-devel elfutils-libelf-devel \
libaio-devel libattr-devel libudev-devel \
python3-devel libffi-devel
现在您可以开始创建自己的软件包了。
构建 OpenZFS
OpenZFS 提供了出色的基础设施。要构建它
- 使用
git
克隆仓库,并切换到您希望使用的分支/标签。 - 运行 Autotools 以生成 makefile。
- 运行
make rpm
,如果一切正常,RPM 文件将放置在构建文件夹中。
$ git clone --branch=zfs-2.0.0-rc3 https://github.com/openzfs/zfs.git zfs
$ cd zfs
$ ./autogen.sh
$ ./configure
$ make rpm
设置 yum 仓库
在 yum 中,仓库是一个服务器或本地路径,其中包含元数据和 RPM 文件。使用者设置一个 INI 配置文件,yum
命令会自动解析元数据并下载相应的软件包。
Fedora 提供了 createrepo
工具来设置 yum 仓库。首先,创建仓库并将 ZFS 文件夹中的所有 RPM 文件复制到仓库。然后运行 createrepo --update
以将所有软件包包含在元数据中
$ sudo mkdir -p /var/lib/zfs.repo
$ sudo createrepo /var/lib/zfs.repo
$ sudo cp *.rpm /var/lib/zfs.repo/
$ sudo createrepo --update /var/lib/zfs.repo
在 /etc/yum.repos.d
中创建一个新的配置文件,以包含仓库路径
$ echo \
"[zfs-local]\\nname=ZFS Local\\nbaseurl=file:///var/lib/zfs.repo\\nenabled=1\\ngpgcheck=0" |\
sudo tee /etc/yum.repos.d/zfs-local.repo
$ sudo dnf --repo=zfs-local list available --refresh
最后,您已到达旅程的终点!您拥有一个可工作的 yum 仓库和 ZFS 软件包。现在您只需要安装它们
$ sudo dnf install zfs
$ sudo /sbin/modprobe zfs
运行 sudo zfs version
以查看您的用户空间和内核工具的版本。恭喜!您已经拥有了 适用于 Fedora 的 ZFS。
评论已关闭。