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

相关文章
相关标签/搜索