西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴(lài)的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)其它知識(shí) → pbuilder編譯構(gòu)建工具使用詳細(xì)介紹

pbuilder編譯構(gòu)建工具使用詳細(xì)介紹

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2014/3/27 16:09:44字體大小:A-A+

作者:西西點(diǎn)擊:61次評(píng)論:0次標(biāo)簽: 編譯

  • 類(lèi)型:安裝制作大。1.7M語(yǔ)言:英文 評(píng)分:5.2
  • 標(biāo)簽:
立即下載

1. 簡(jiǎn)

pbuilder(personal Debian package builder)是ubuntu環(huán)境下維護(hù)debian包的專(zhuān)業(yè)工具,能夠?yàn)槊總(gè)deb包創(chuàng)建純凈的編譯構(gòu)建環(huán)境,自動(dòng)解析和安裝依賴(lài)包,并且不污染宿主系統(tǒng)。

2. 使用pbuilder的流程

(1) 使用pbuild create創(chuàng)建純凈的編譯構(gòu)建環(huán)境,可以通過(guò)參數(shù)指定所要模擬的debian環(huán)境版本

(2) 使用apt-get source下載目標(biāo)deb包的src包

(3) 使用pbuilder build編譯目標(biāo)源碼包,參數(shù)為src包的dsc文件

(4) 回到第(2)步繼續(xù)編譯更多的包

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

(1) --create

創(chuàng)建指定debian發(fā)行版的編譯構(gòu)建環(huán)境,最終會(huì)打包為base.tgz。

(2) --update

更新base.tgz。

(3) --build

編譯指定的源碼包,通過(guò)傳入dsc-file指定源碼包。

(4) --clean

清空BUILDPLACE和APTCACHE中的內(nèi)容。

(5) --login

chroot(即login)到構(gòu)建編譯環(huán)境。需要注意的是,exit后會(huì)自動(dòng)clean,期間用戶(hù)所有的操作都不會(huì)被保存,因此此命令只用于調(diào)試目的。

(6) --excute

首先login到編譯構(gòu)建環(huán)境,然后執(zhí)行指定的program。需要在參數(shù)中指定目標(biāo)program的路徑,該program會(huì)被復(fù)制到編譯構(gòu)建環(huán)境中執(zhí)行。

(7) --debuild

在Debian source directory(即解壓好的debian源碼包)中編譯源碼包,當(dāng)前目錄中需要存在debian/目錄。pbuilder --debuild等價(jià)于pdebuild。

4. pbuilder的原理

(1) 相關(guān)文件

pbuilder相關(guān)的腳本有/usr/sbin/pbuilder,/usr/lib/pbuilder/*,/usr/bin/pdebuild。

相關(guān)的臨時(shí)目錄是/var/cache/pbuilder。

pbuilder運(yùn)行時(shí)所需的各種變量如BUILDPLACE, MIRRORSITE,BUILDRESULT, DISTRIBUTION等都定義在配置文件中,這些文件有/etc/pbuilder/*, /usr/share/pbuilder/pbuilderrc,/etc/pbuilderrc, ~/. pbuilderrc。通過(guò)pbuilder-loadconfig腳本可知,這些文件的優(yōu)先級(jí)依次升高:/usr/share/pbuilder/pbuilderrc< /etc/pbuilderrc < ~/. pbuilderrc,即前者的配置可以被后者覆蓋,最后,所有的參數(shù)又都可以通過(guò)命令行參數(shù)覆蓋。

(2) pbuilder create命令的實(shí)體是pbuilder-createbuildenv。

它創(chuàng)建一個(gè)根目錄環(huán)境,模擬指定的debian發(fā)行版。根目錄被打包在BUILDPLACE/base.tar.gz中,之后編譯deb包時(shí)可以重復(fù)使用。

       (2.1) 該腳本首先創(chuàng)建debian系統(tǒng)的基礎(chǔ)根目錄并安裝基本的deb包,這些實(shí)際上是借助debootstrap完成的。根目錄環(huán)境放在BUILDPLACE中。

       可以通過(guò)參數(shù)定制debootstrap所創(chuàng)建的debian系統(tǒng),如--arch=ARCH可指定目標(biāo)體系架構(gòu),--include=PACKAGES指定需要額外下載安裝的package,--variant=minbase|buildd|fakechroot|scratchbox可指定所使用的bootstrap腳本,不同的腳本創(chuàng)建的debian環(huán)境不同,主要區(qū)別是安裝的deb包不同,默認(rèn)是minbase,如果要?jiǎng)?chuàng)建編譯構(gòu)建環(huán)境,一般選用 buildd。debootstrap目前所支持的debian系統(tǒng)發(fā)行版見(jiàn)http://neuro.debian.net/pkgs/debootstrap.html

       (2.2) 將一些重要的配置文件(hosts, hostname, resolv.conf)復(fù)制到目標(biāo)環(huán)境,創(chuàng)建并配置/etc/apt,添加apt keyring到目標(biāo)環(huán)境中。

       (2.3) chroot到目標(biāo)環(huán)境,掛載運(yùn)行時(shí)所需的目錄,如/proc, /dev/, /dev/pts, /selinux及用戶(hù)指定的需要bind mount的目錄。

       (2.4) 在目標(biāo)環(huán)境中,執(zhí)行apt-get update,并安裝build-essential,dpkg-dev以及其它的packages。

       (2.5) 卸載之前掛載的運(yùn)行時(shí)目錄。

       (2.6) 將BUILDPLACE打包為base.tgz。

以上各步出現(xiàn)錯(cuò)誤時(shí),都會(huì)清空BUILDPLACE,避免污染宿主系統(tǒng)。

(3) pbuilder build的實(shí)體是pbuilder-buildpackage。

它基于已有的base.tgz,創(chuàng)建臨時(shí)編譯構(gòu)建環(huán)境,并在此環(huán)境中編譯源碼包。

       (3.1) 該腳本首先解壓base.tgz到臨時(shí)目錄BUILDPLACE中,將宿主系統(tǒng)中的重要配置文件復(fù)制進(jìn)去,如果用戶(hù)指定要覆蓋默認(rèn)的apt源,則重新配置臨時(shí)環(huán)境中的/etc/apt,之后掛載/proc等運(yùn)行時(shí)目錄。

       (3.2) 創(chuàng)建編譯時(shí)所需的臨時(shí)目錄和文件,如BUILDRESULT,PBUILDER_BUILD_LOGFILE等。

       (3.3) chroot檢查并安裝編譯源碼包所需的依賴(lài)包,用戶(hù)指定的額外包。

       檢查并安裝依賴(lài)包的工作,通過(guò)pbuilder-satisfydepends腳本完成。該腳本通過(guò)解析dsc文件中的Build-Depends, Build-Depends-Indep, Build-Conflicts,Build-Conflicts-Indep等區(qū)域,得到編譯目標(biāo)源碼包所需的依賴(lài)包和沖突包,利用這些信息,創(chuàng)建了一個(gè)空的deb包pbuilder-satisfydepends-dummy,再利用aptitude install安裝這個(gè)dunmmy包,從而解決了依賴(lài)包和沖突包的問(wèn)題。

       (3.4) 根據(jù)參數(shù)中的dsc-file,將源碼文件復(fù)制到臨時(shí)環(huán)境中(即BUILDPLACE/tmp/buildd),并修改文件權(quán)限,同時(shí)如果用戶(hù)指定了INPUTFILE,則一并復(fù)制進(jìn)去。最后chroot到臨時(shí)環(huán)境,解壓源碼包。

       (3.5) 以chroot的方式調(diào)用dpkg-buildpackage編譯源碼包。

       (3.6) 卸載運(yùn)行時(shí)目錄。

       (3.7) 將編譯得到的deb包從BUILDPLACE/tmp/buildd復(fù)制到BUILDRESULT,默認(rèn)是/var/cache/pbuilder/result/。

       (3.8) 清除BUILDPLACE。

5. pbuilder使用實(shí)例

(1) 安裝pbuilder

sudo apt-get installpbuilder debootstrap devscripts

(2) 配置pbuilder使用的源

echo “MIRRORSITE=http://192.168.0.123 /ubuntu”>> /etc/ pbuilderrc

(3) 創(chuàng)建編譯環(huán)境

最簡(jiǎn)單的方式是:

sudo pbuilder create

此時(shí)pbuilder會(huì)使用pbuilderrc中默認(rèn)的參數(shù)創(chuàng)建編譯環(huán)境。

也可以通過(guò)命令行參數(shù)定制:

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

此時(shí)會(huì)創(chuàng)建amd64架構(gòu)的ubuntu raring編譯環(huán)境。

(4) 下載并編譯源碼包

以編譯bc為例,最簡(jiǎn)單的方式是:

apt-get source -d bc

sudo pbuilder buildbc_1.06.95-4ubuntu1.dsc

也可以手動(dòng)將源碼包解壓,進(jìn)入源碼目錄編譯:

apt-get source -d bc

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

cd bc-1.06.95

sudo pdebuild

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)