pbuilder编译程序构建工具的应用
1. 简介
pbuilder(personal Debian package builder)是在ubuntu条件下维护debian包的邮政专业设备,可为每个deb包建立清晰的编译程序,构建环境,自动分析和安装架包,不污染寄主系统软件。
2. 应用pbuilder的操作流程
(1) pbuild的应用 create建立了一个清晰的编译程序来构建环境,debian自然环境版本号可以通过特定的主要参数模拟
(2) 应用apt-get source免费下载总体目标deb包的邮src包
(3) pbuilder应用程序 build编译程序总体目标源码包,邮dsc文档的主要参数是src包
(4) 回到第(2)步,再次编译程序,包更多
3. pbuilder的主要作用(节选自manual page)
(1) --create
建立特定debian发行版的编译程序,构建环境,最终,它将被包装成basee.tgz。
(2) --update
升级base.tgz。
(2) --update
升级base.tgz。
(3) --build
根据传输到dsc-file的特定源码包,编译程序指定源码包。
(4) --clean
清除BUILDPLACE和APTCACHE的内容。
(5) --login
chroot(即login)到构建编译环境。需要注意的是,exit之后会全自动clean,期间客户的所有实际操作都不会被存储,所以这个指令只能用来调整目的地。
(6) --excute
首先,login到编译程序构建环境,然后实施指定的program。program的路线必须在主要参数中具体,可以复制到编译程序构建环境中。
(7) --debuild在Debian source directory(即Debian源码包,缓解压力较好)编译程序源码包,在文件列表过程中需要Debian/文件目录。pbuilder --等价于pdebuild的debuild。4. pbuilder
的基本原理
(1) 有关文件
与pbuilder相关的脚本制作有/usr/sbin/pbuilder,/usr/lib/pbuilder/*,/usr/bin/pdebuild。
相关临时目录为/var/cache/pbuilder。
BUILDPLACE等pbuilder运行所需的各种自变量, MIRRORSITE,BUILDRESULT, 环境变量中定义了DISTRIBUTION等。这些文件有/etc/pbuilder/*, /usr/share/pbuilder/pbuilderrc,/etc/pbuilderrc, ~/. pbuilderrc。根据pbuilder-loadconfig脚本的制作,这些文件的优先级已经上升:/usr/share/pbuilder/pbuilderrc< /etc/pbuilderrc < ~/. pbuilderrc,即前面一种配置能够被后面一种遮盖,最终,全部参数值又都能通过argv遮盖。
(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,如果想建立编译程序构建环境,一般选用 buildd。debootstrap现阶段所支持的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-essential,dpkg-dev及其他的packages。
(2.5) 卸载掉以前初始化的运行中文件目录。
(2.6) 将BUILDPLACE装包为base.tgz。
之上各步发生错误时,都是会清除BUILDPLACE,避免污染寄主系统软件。
(3) pbuilder build的实体是pbuilder-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等场所,获得编译程序总体目标源码包所需要的架包和冲突包,通过这些信息内容,创建了一个空deb包pbuilder-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将利用pbuilderc中默认的主要参数建立编译环境。也可以通过argv定制:
sudo pbuilder create--distribution raring --debootstrapopts --arch=AMD64 --debootstrapopts--variant=buildd此时,AMD64架构ubuntuntunt将建立 raring编译环境。
(4) 下载并编译程序源代码包
以编译程序bc为例,最简单的方法是:
apt-get source -d bc
sudo pbuilder buildbc__1.06.95-4ubuntuntuntubububububuntu1.dsc
源码包也可以手动缓解压力,进入源码文件目录编译程序:
apt-get source -d bc
dpkg-source -xbc__1.06.95-4ubuntuntuntubububububuntu1.dsccd bc-1.06.95