用 Mock 來打包各版本的 Fedora RPMS
零、前言
最近這一陣子在把 gcin 推進 Fedora Extras 中
不過似乎遇到很多問題,修了好多東西
但目前最主要的還是卡在 x86_64 的部份,因為我沒有 x86_64 的機器可以測試,所以也很難去 debug
在學習及查詢許多文件時,發現了這個好用的 Mock – Chroot Build Tools
一、簡介
Mock creates chroots and builds packages in them.
Its only task is to reliably populate a chroot and attempt to build a package in that chroot.
Mock is currently being used for all Fedora Extras builds.
Mock 是一套在 Fedora 上用來 Chroot Build 的 Tools
目前,所有 Fedora Extras 裡的套件,都是經由 Mock Build System 產生出來的
Mock 可以 Build FC1-FC5、FC6(Development)、RH7.3、RH9、RHEL3、RHEL4 等等平台的套
件
理論上,只要是 Fedora/RedHat 系列的,且有支援 yum 應該都可以適用的
而我也成功的用 mock 來 build Scientific Linux 4.3 的套件
二、安裝
在 Fedora Extras 中就有 mock 的套件,所以只要直接安裝即可:
sudo yum install mock
三、設定
所有的設定檔都在 /etc/mock 目錄底下
所以需要稍微修改一下
例如我想在我的 i386 機器上 build FC5 的套件
所以要修改 /etc/mock/fedora-5-i386-core.cfg 這個設定檔
主要是改裡面的 Yum Repository 路徑,改指到國內比較快的 Server 上
例如我都改成用 CLE 上的 Yum Repository:
[core] name=core baseurl=ftp://cle.linux.org.tw/pub/fedora/core/5/i386/ [updates-released] name=updates baseurl=ftp://cle.linux.org.tw/pub/fedora/core/updates/5/i386/ [groups] name=groups baseurl=http://buildsys.fedoraproject.org/buildgroups/5/i386/ [extras] name=extras baseurl=ftp://cle.linux.org.tw/pub/fedora/extras/5/i386/
四、設定可以執行 mock 的使用者
編輯 /etc/groups 把想要讓其能執行 mock 的使用者加到 mock 這個 group 裡
例如:
mock:x:106:candyz,linux,build
五、執行
1.語法:
mock [-r CHROOT] [--no-clean] [--arch=ARCH] [--debug] [--result-
dir=RESULTDIR] [--statedir=STATEDIR] [--uniqueext=UNIQUEEXT] [command]
filename
2.參數:
-r CHROOT
用 -r 來指定設定檔,如 -r fedora-5-i386-core.cfg
–no-clean
在 build 套件之前不要 clean chroot (可以節省時間,不用每次都要重新下載安裝)
–arch=ARCH
指定要 build 的平台
–debug
輸出除錯訊息
–resultdir=RESULTDIR
指定存放 RPMs 及 build logs 的路徑
–help
顯示求助訊息
–version
顯示 mock 的版本
3.command:
* init
初始化一個 chroot 的環境 (install packages, setup devices, etc.)
* clean
清除整個 chroot tree
* rebuild
若沒有指定 command 則預設會使用 rebuild
Rebuilds the specified SRPM
4.範例:
mock -r fedora-5-i386-core.cfg --no-clean ~/rpmbuild/SRPMS/gcin-1.2.2-8.src.rpm
5.注意事項:
因為 Chroot 環境所有的檔案都是放在 /var/lib/mock 目錄底下
因此,你的 /var/lib/mock 目錄空間要夠大,不然可是會爆掉的
或是修改一下設定檔,把 /var/lib/mock 換到空間比較大的目錄去
若還想 build FC4 FC3 的套件
同樣的,修改完 fedora-4-i386-core.cfg fedora-3.i386-core.cfg 等設定檔即可
然後再執行 mock 指令,如:
mock -r fedora-4-i386-core.cfg --no-clean ~/rpmbuild/SRPMS/gcin-1.2.2-8.src.rpm mock -r fedora-3-i386-core.cfg --no-clean ~/rpmbuild/SRPMS/gcin-1.2.2-8.src.rpm
六、結語
之前我都是一台電腦同時裝好幾個版本的 Linux,如 FC5 FC4 FC3 RHEL4 等等
要打包套件時再 chroot 過去打包,或是有時候得 reboot 進其他的系統去打包
而在我用了 mock build system 之後,打包套件變的輕鬆許多
現在,我只要下個指令,mock 就會從 FC3 – FC6(devel) 及 RHEL4
幫我把所有平台的套件都打包好,實在太方便了,也省下很多的硬碟空間
七、參考文件:
http://fedoraproject.org/wiki/Projects/Mock
* 2006/08/20 文件更新