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