首先是安裝所需要的套件
$ sudo apt-get install sbuild ubuntu-dev-tools lintian piuparts
接著是產生給 sbuild 使用的公私鑰(需要去做其它的操作來產生足夠的系統亂數,例如去瀏覽網頁)
$ sudo sbuild-update --keygen Generating archive key. Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 186 more bytes)
接下來將自己加入 sbuild 群組
$ sudo sbuild-adduser $LOGNAME 正將 `sylee' 使用者新增至 `sbuild' 群組 ... 正在將使用者“sylee”加入到“sbuild”群組中 完成。 # Setup tasks for sudo users: # BUILD # HOME directory in chroot, user:sbuild, 0770 perms, from # passwd/group copying to chroot, filtered # Maybe source 50sbuild, or move into common location. Next, copy the example sbuildrc file to the home directory of each user and set the variables for your system: cp /usr/share/doc/sbuild/examples/example.sbuildrc /home/sylee/.sbuildrc Now try a build: cd /path/to/source sbuild-update -ud(or "sbuild-apt apt-get -f install" first if the chroot is broken) sbuild -d _
然後登出 X Window System 再重新登入來使 sbuild 群組權限生效,如果不想重新登出登入的話,可以使用下面指令直接取得 sbuild 的群組權限。
$ newgrp sbuild
複製 sbuild 的設定範本到家目錄底下
$ cp /usr/share/doc/sbuild/examples/example.sbuildrc $HOME/.sbuildrc
開始建立 Debian unstable 的編譯環境
$ mk-sbuild --arch amd64 --distro debian unstable [...中略] Done building sid-amd64. To CHANGE the golden image: sudo schroot -c source:sid-amd64 -u root To ENTER an image snapshot: schroot -c sid-amd64 To BUILD within a snapshot: sbuild -A -d sid-amd64 PACKAGE*.dsc
接下來就可以使用 sbuild -A -d sid-amd64 PACKAGE*.dsc 來編譯 Debian binary package 了。
$ sbuild -A -d sid-amd64 x11-touchscreen-calibrator_0.2-2.dsc
另外可以修改 ~/.sbuildrc 在編譯完成時,自動加上 lintian 以及 piuparts 的檢查。
$run_lintian = 1; $lintian_opts = ['-EviIL', '+pedantic', '--profile', 'debian']; $run_piuparts = 1; $piuparts_opts = ['-D', 'debian', '--schroot=chroot:sid-amd64'];
參考資料:https://wiki.debian.org/sbuild
2015-11-04 補充:
在使用 $run_lintian 跟 $lintian_opts 時,要特別注意是否要在 sbuild 加上 -s 或是 --source 的參數,這樣才會去檢查 source package,不然就只會檢查 binary package 而已。
$ sbuild -s -A -d sid-amd64 x11-touchscreen-calibrator_0.2-2.dsc
另外 SimpleSbuild - Ubuntu Wiki 也提供一些加速編譯過程的方法,像是使用記憶體來做檔案系統,或是使用 apt-cacher-ng 來儲存可重覆使用的 deb 檔案。
2015-12-10 補充:
編譯過程中可能會有無法預期的問題發生,導致 sbuild 所使用的 schroot 無法正常結束,這種時候可能會需要參考 man schroot-faq 裡面的 "How do I manually cleaning up a broken session?" 來手動清除壞掉的東西。
2017-12-05 補充:
可以在執行 mk-sbuild 時,指定一個比較近的 mirror 來使用,例如為 Ubuntu xenial 建立 schroot 環境時就可以:
$ mk-sbuild --arch amd64 --distro ubuntu --debootstrap-mirror=http://mirror01.idc.hinet.net/ubuntu xenial