pbuilder編譯構建工具分析

1. html

pbuilder(personal Debian package builder)ubuntu境下維護debian包的專業工具,能夠爲每一個deb純淨編譯構建境,自解析和安裝依包,而且不染宿主系linux

 

2. 使用pbuilder的流程bootstrap

(1) 使用pbuild create純淨編譯構建境,能夠通參數指定所要模debian版本ubuntu

(2) 使用apt-get sourcedeb包的src架構

(3) 使用pbuilder build編譯包,參數src包的dsc文件工具

(4) 回到第(2)繼續編譯更多的包ui

 

3. pbuilder的主要功能(摘自manual page)spa

(1) --create.net

建指定debian行版的編譯構建境,最會打包base.tgz命令行

(2) --update

更新base.tgz

(3) --build

編譯指定的源包,通過傳dsc-file指定源

(4) --clean

清空BUILDPLACEAPTCACHE中的內容。

(5) --login

chroot(login)到構建編譯環。須要注意的是,exit後會自clean,期全部的操做都不會被保存,所以此命令只用於調試目的

(6) --excute

首先login編譯構建,而後行指定的program。須要在參數中指定目program的路徑,program會被複制到編譯構建境中行。

(7) --debuild

Debian source directory(即解好的debian)編譯,當前目中須要存在debian/pbuilder --debuild等價於pdebuild

 

4. pbuilder的原理

(1) 相關文件

pbuilder相關的腳本有/usr/sbin/pbuilder/usr/lib/pbuilder/*/usr/bin/pdebuild

相關的臨時/var/cache/pbuilder

pbuilder運行所需的各類量如BUILDPLACE, MIRRORSITE,BUILDRESULT, DISTRIBUTION等都定配置文件中,些文件有/etc/pbuilder/*, /usr/share/pbuilder/pbuilderrc,/etc/pbuilderrc, ~/. pbuilderrc。通pbuilder-loadconfig腳本可知,些文件的依次升高/usr/share/pbuilder/pbuilderrc< /etc/pbuilderrc < ~/. pbuilderrc,即前者的配置能夠被後者覆蓋,最後,全部的參數又均可以通命令行參數覆蓋。

 

(2) pbuilder create命令的體是pbuilder-createbuildenv

一個根目錄環境,指定的debian行版。根目被打包在BUILDPLACE/base.tar.gz中,以後編譯deb能夠重複使用。

       (2.1) 腳本首先debian的基根目並安裝基本的deb包,實際上是藉助debootstrap完成的。根目錄環境放在BUILDPLACE中。

       能夠通參數定製debootstrap建的debian,如--arch=ARCH可指定目體系架構,--include=PACKAGES指定須要外下安裝的package--variant=minbase|buildd|fakechroot|scratchbox可指定所使用的bootstrap腳本,不一樣的腳本建的debian境不一樣,主要區是安裝的deb包不一樣,默minbase,若是要編譯構建境,通常 buildddebootstrap目前所支持的debian統發行版http://neuro.debian.net/pkgs/debootstrap.html

       (2.2) 將一些重要的配置文件(hosts, hostname, resolv.conf)複製到目標環建並配置/etc/apt,添加apt keyring到目標環境中。

       (2.3) chroot到目標環,掛運行所需的目,如/proc, /dev/, /dev/pts, /selinux及用指定的須要bind mount的目

       (2.4) 在目標環境中,apt-get update,並安裝build-essentialdpkg-dev以及其它的packages

       (2.5) 以前掛的運行

       (2.6) BUILDPLACE打包base.tgz

以上各步出現錯誤時,都會清空BUILDPLACE,避免染宿主系

 

(3) pbuilder buildpbuilder-buildpackage

它基於已有的base.tgz臨時編譯構建境,並在境中編譯包。

       (3.1) 腳本首先base.tgz臨時BUILDPLACE中,將宿主系中的重要配置文件複製,若是用指定要覆蓋默apt源,從新配置臨時環境中的/etc/apt,以後掛/proc等運行

       (3.2) 編譯時所需的臨時和文件,如BUILDRESULT,PBUILDER_BUILD_LOGFILE等。

       (3.3) chroot檢查並安裝編譯包所需的依包,用指定的外包。

       檢查並安裝依包的工做,通pbuilder-satisfydepends腳本完成。腳本通解析dsc文件中的Build-Depends, Build-Depends-Indep, Build-Conflicts,Build-Conflicts-Indep等區域,獲得編譯包所需的依包和衝突包,利用些信息,建了一個空的debpbuilder-satisfydepends-dummy,再利用aptitude install安裝dunmmy包,從而解決了依包和衝突包的問題

       (3.4) 根據參數中的dsc-file,將源文件複製到臨時環(BUILDPLACE/tmp/buildd),並修改文件,同若是用指定了INPUTFILE一併複製去。最後chroot臨時環,解

       (3.5) chroot的方式調dpkg-buildpackage編譯包。

       (3.6) 運行

       (3.7) 編譯獲得的deb包從BUILDPLACE/tmp/buildd複製到BUILDRESULT,默/var/cache/pbuilder/result/

       (3.8) 清除BUILDPLACE

 

5. pbuilder使用

(1) 安裝pbuilder

sudo apt-get installpbuilder debootstrap devscripts

(2) 配置pbuilder使用的源

echo 「MIRRORSITE=http://192.168.0.123 /ubuntu」>> /etc/ pbuilderrc

(3) 編譯環

簡單的方式是:

sudo pbuilder create

pbuilder會使用pbuilderrc中默的參數編譯環境。

也能夠通命令行參數定製:

sudo pbuilder create--distribution raring --debootstrapopts --arch=amd64 --debootstrapopts--variant=buildd

amd64架構的ubuntu raring編譯環

(4) 編譯

編譯bc例,簡單的方式是

apt-get source -d bc

sudo pbuilder buildbc_1.06.95-4ubuntu1.dsc

也能夠手將源包解入源錄編譯

apt-get source -d bc

dpkg-source -xbc_1.06.95-4ubuntu1.dsc

cd bc-1.06.95

sudo pdebuild

 

6. 參考

https://help.ubuntu.com/community/LiveCDCustomizationFromScratch

https://wiki.ubuntu.com/PbuilderHowto

http://manpages.ubuntu.com/manpages/hardy/en/man5/pbuilderrc.5.html

http://neuro.debian.net/pkgs/debootstrap.html

相關文章
相關標籤/搜索