在 Linux 上使用 yum 設(shè)置 ZFS
在 Fedora 上使用 yum 倉庫來獲取最新的 ZFS 特性。
我是一名 Fedora Linux 用戶,我每天都會運行 yum upgrade
。雖然這個習(xí)慣使我能夠運行所有最新的軟件(Fedora 的四個基礎(chǔ)之一的 “First” ,它也做到了),但它也會提醒 ZFS 存儲平臺和新內(nèi)核之間的不兼容性。
作為一名開發(fā)者,有時我需要最新的 ZFS 分支的新特性。例如,ZFS 2.0.0 包含了一個令人興奮的新功能,它大大提高了 ZVOL 同步性能,這對我這個 KVM 用戶來說至關(guān)重要。但這意味著,如果我想使用 2.0.0 分支,我必須自己構(gòu)建 ZFS。
起初,我只是在每次內(nèi)核更新后從它的 Git 倉庫中手動編譯 ZFS。如果我忘記了,ZFS 就會在下次啟動時無法被識別。幸運的是,我很快就學(xué)會了如何為 ZFS 設(shè)置動態(tài)內(nèi)核模塊支持 (DKMS)。然而,這個解決方案并不完美。首先,它沒有利用強大的 yum 系統(tǒng),而這個系統(tǒng)可以幫助解決依賴關(guān)系和升級。此外,使用 yum
在你自己的包和上游包之間進(jìn)行切換是非常容易的。
在本文中,我將演示如何設(shè)置 yum
倉庫來打包 ZFS。這個方案有兩個步驟:
- 從 ZFS 的 Git 倉庫中創(chuàng)建 RPM 包。
- 建立一個
yum
倉庫來托管這些包。
創(chuàng)建 RPM 包
要創(chuàng)建 RPM 包,你需要安裝 RPM 工具鏈。yum
提供了一個組來捆綁安裝這些工具:
sudo dnf group install 'C Development Tools and Libraries' 'RPM Development Tools'
安裝完這些之后,你必須從 ZFS Git 倉庫中安裝構(gòu)建 ZFS 所需的所有包。這些包屬于三個組:
- Autotools,用于從平臺配置中生成構(gòu)建文件。
- 用于構(gòu)建 ZFS 內(nèi)核和用戶態(tài)工具的庫。
- 構(gòu)建 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
現(xiàn)在你已經(jīng)準(zhǔn)備好創(chuàng)建你自己的包了。
構(gòu)建 OpenZFS
OpenZFS 提供了優(yōu)秀的基礎(chǔ)設(shè)施。要構(gòu)建它:
- 用
git
克隆倉庫,并切換到你希望使用的分支/標(biāo)簽。 - 運行 Autotools 生成一個 makefile。
- 運行
make rpm
,如果一切正常,RPM 文件將被放置在build
文件夾中。
$ git clone --branch=zfs-2.0.0-rc3 <https://github.com/openzfs/zfs.git> zfs
$ cd zfs
$ ./autogen.sh
$ ./configure
$ make rpm
建立一個 yum 倉庫
在 yum
中,倉庫是一個服務(wù)器或本地路徑,包括元數(shù)據(jù)和 RPM 文件。用戶設(shè)置一個 INI 配置文件,yum
命令會自動解析元數(shù)據(jù)并下載相應(yīng)的軟件包。
Fedora 提供了 createrepo
工具來設(shè)置 yum
倉庫。首先,創(chuàng)建倉庫,并將 ZFS 文件夾中的所有 RPM 文件復(fù)制到倉庫中。然后運行 createrepo --update
將所有的包加入到元數(shù)據(jù)中。
$ 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
中創(chuàng)建一個新的配置文件來包含倉庫路徑:
$ 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
終于完成了!你已經(jīng)有了一個可以使用的 yum
倉庫和 ZFS 包?,F(xiàn)在你只需要安裝它們。
$ sudo dnf install zfs
$ sudo /sbin/modprobe zfs
運行 sudo zfs version
來查看你的用戶態(tài)和內(nèi)核工具的版本。恭喜!你擁有了 Fedora 中的 ZFS。