极限首页 业界焦点 软件工程师之路 系统工程师之路 网络工程师之路 软件下载 技术社区
 主流显卡Linux驱动安装-In
 linux内核编译步骤
 Grub安装,配置及使用汇总
 优化安装 mysql+apache+ph
 制作Linux的优盘启动盘
 揭开Linux的Swap之谜
 LINUX与其它操作系统的区别
 学会使用Linux性能分析工具
 在USB盘上打造自己的Linux
 Linux应用问答
 主流显卡Linux驱动安装-In
 linux内核编译步骤
 Grub安装,配置及使用汇总
 优化安装 mysql+apache+ph
 制作Linux的优盘启动盘
 揭开Linux的Swap之谜
 LINUX与其它操作系统的区别
 学会使用Linux性能分析工具
 在USB盘上打造自己的Linux
 Linux应用问答

Shell 中文手册

Python 2.3 中文手册

Python 2.4 中文手册

Mysql 4.x 中文手册

PHP 4.x 中文手册

Apache 2.x 中文手册
更多手册

站内搜索:
当前位置:首页>>系统工程师之路>>入门知识>>正文
从源代码编译Debian包
时间:2006-10-23 作者:Debian思维 来源:Debian思维

 

从源代码编译Debian包

Debian优秀的包管理无疑是其吸引人的一个重要原因,安装于Debian系统的所有包有着紧密的依赖关系。举个例子来说,假设你只希望安装一个叫 foo的包,这个包依赖于其它的一些库或工具,如libbaa,那么当你使用:

apt-get install foo

来安装这个包时,实际上这个过程会提示并安装foo所依赖的包libbaa。反之,如果你通过命令:
apt-get remove libbaa

来御载libbaa,毫无疑问的,apt工具会提示包foo也将被御载掉。这样,Debian的系统将始终保持着一种稳定的完整性,不存在安装但由于依赖性而不可用的软件(但可能存在安装但没有用的软件或库,但可以通过一些工具将这些包删除掉)。

显然,如果我们自行从源代码通过常规的 make/make install的 方式进行安装,系统的这种完整性就会被破坏掉。虽然Debian的官方和非官方的站点提供了大量的应用软件和库,但有时我们为了在系统中使用最新版本的软 件或对某些软件需要特别的配置,还是有可能需要从源码生成可执行文件。这就有必要了解一下该如何生成一个deb包,并可以通过Debian的包管理工具进 行统一的管理。

从头开始制作一个debian的安装包并不容易,只有软件的开发者或对该软件有相当了解的人才能制作一个善的deb包。从 最基本的原代码开始,必需对代码所依赖的编译环境,编译时库和运行时库或其它软件条件支持等非常了解和全面。如果只想学习一下过程,完全可以从 Debian的镜像站点中下载Debian软件包和对应的支持文件来编译一个Debian的安装包。下面我们以编一个gaim包的过程简要说明一下如何制 作一个debian的安装包并制作第三方发布镜像。

获取源代码
首先,从Debian的镜像站点下载gaim的源代码及Debian的补丁和支持文件(扩展名dsc的文件),包括:
  • gaim_1.5.0+1.5.1cvs20051015.orig.tar.gz
  • gaim_1.5.0+1.5.1cvs20051015-5.dsc
  • gaim_1.5.0+1.5.1cvs20051015-5.diff.gz
其 中,第一个文件为gaim的源代码,通常是从源码开发者所提供的代码发布版本或源代码库中取得(如CVS或Subversion),本例中的gaim即是 从CVS库中获取的2005年10月15日的代码版本,从版本号看,应该是1.50版本之后经过修定,但1.51版本尚未推出时的一个版本。Debian 代码库中对这些源代码通常会保持其原状而不作任何修改。

第二个文件包含了一些编译过程和Debian包所需的一些信息,包括包名,版本 号,生成deb包的名称(一个源码可能不只生成一个.deb的包,如gaim源码会生成gaim, gaim-dbg, gaim-dev, gaim-data几个.deb的包),作者/发布者,平台,编译环境依赖,冲突,包签名和Hash等信息。

第三个文件为Debian为了编译.deb包而对源代码所作的修定,有时还可能包括对一些功能的改进或对Bug的修改等。最主要的,这个补丁会在源代码目录中增加一个包含了如何生成Debian发布包信息的目录,目录名称debian。

从源代码编译debian包
前面已经提到,dsc扩展名的文件内包含了编译一个源码包所依赖的其它软件包,编译前,我们应该确认一下这些包否已经安装,并且版本满足要求。本例中,编译gaim所依赖的其它软件有:
bzip2, cdbs, debhelper (>= 5.0.0), libgtk2.0-dev, libxss-dev, libgnutls-dev (>= 1.0.16-5), tcl8.4-dev, tk8.4-dev, libao-dev, libaudiofile-dev, libgtkspell-dev, libltdl3-dev, libstartup-notification0-dev, xutils, libzephyr-dev, libxml2-dev, libebook1.2-dev, libedata-book1.2-dev, libcamel1.2-dev
要查看一个包是否安装,可以通过dpkg命令来查看,如查看是否安装bzip2:
redice@debian $ dpkg -l bzip2
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description========================================
pn bzip2 (no description available)
上面的信息说明没有安装bzip2,通过 apt-get install bzip2 安装bzip2后,再次查看:
redice@debian $ dpkg -l bzip2
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-===================-===================-======
ii bzip2 1.0.3-2 high-quality block-sorting file compressor - utilities
确认上面所有依赖的包都已经安装好后,可以开始编译gaim包了。编译过程较为简单,通过下面几条命令即可完成:
redice@debian $ dpkg-source -x gaim_1.5.0+1.5.1cvs20051015-5.dsc
redice@debian $ cd gaim-1.5.0+1.5.1cvs20051015
redice@debian $ fakeroot dpkg-buildpackage
简 单说明一下,第一条命令用于将上面下载的源代码包解开到目录gaim-1.5.0+1.5.1cvs20051015中,并打上debian补丁包,然后 通过debian专用的编译debian包的工具dpkg-buildpackage完成对源代码的编译工作。fakeroot是一个使普通用户可以虚拟 的完成超级用户才能做的一些功能的库,如通过fakeroot普通用户可以执行mknod等功能。

编译完成后,在源代码的上级目录会生成几个deb扩展名的包,本例中会生成以下几个文件:
gaim-data_1.5.0+1.5.1cvs20051015-5_all.deb
gaim_1.5.0+1.5.1cvs20051015-5_i386.deb
gaim-dbg_1.5.0+1.5.1cvs20051015-5_i386.deb
gaim-dev_1.5.0+1.5.1cvs20051015-5_i386.deb

构建一个本地包发布库
这样构造出来的包可以通过dpkg直接安装,更好的方式是构造一个类似于非其它Debian非官方的包发布站点的库,这样可以直接通过apt-get或dselect等工具来进行统一的管理。

假设我们只需要在本地构造一套发布库,如/opt/my_packages。建立目录/opt/my_packages,将生成的所有deb扩展名的包复制到该目录,然后通过Debian工具dpkg-scanpackages来生成索引文件。
redice@debian $ mkdir -p /opt/my_packages
redice@debian $ mv *.deb /opt/my_packages
redice@debian $ dpkg-scanpackages /opt/my_packages /dev/null | gzip -f9 > /opt/my_packages/Packages.gz
以root身份更新 /etc/apt/sources.list后,即可通过 apt-get 或dselect等工具来安装刚生成的这些Debian包了。
redice@debian # echo "deb file:/opt/my_packages ./" >> /etc/apt/sources.list
redice@debian # apt-get update
redice@debian # apt-get install gaim
推荐】【 】【关闭


关于极限 | 站内地图 | 意见反馈 | 广告服务 | 数据服务 | 联系我们
本站所刊登的文章,技术资料,软件均整理于网络资源或本站原创,转载请务必联系原作者或本站。
Copyright ? 2001-2004 UPLinux.com All Rights Reserved.
本站唯一联系信箱:
京ICP备05010519