首页 技术 正文
技术 2022年11月23日
0 收藏 602 点赞 2,828 浏览 3491 个字

1.

pbuilder(personal Debian package builder)是ubuntu环境下维护debian包的专业工具,能够为每个deb包创建纯净的编译构建环境,自动解析和安装依赖包,并且不污染宿主系统。

2. 使用pbuilder的流程

(1) 使用pbuild create创建纯净的编译构建环境,可以通过参数指定所要模拟的debian环境版本

(2) 使用apt-get source下载目标deb包的src包

(3) 使用pbuilder build编译目标源码包,参数为src包的dsc文件

(4) 回到第(2)步继续编译更多的包

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

(1) –create

创建指定debian发行版的编译构建环境,最终会打包为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的路径,该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,如果要创建编译构建环境,一般选用 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会使用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

微信扫一扫

支付宝扫一扫

本文网址:https://www.zhankr.net/141034.html

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:875 阅读:4,994
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:806 阅读:3,472
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:565 阅读:4,281
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:730 阅读:4,282
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:4,840
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:3,072
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:8:00-16:00

客服电话

400-888-8888

客服邮箱

ceotheme@ceo.com

扫描二维码

关注微信公众号

扫描二维码

手机访问本站