Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1867169
  • 博文数量: 473
  • 博客积分: 13997
  • 博客等级: 上将
  • 技术积分: 5953
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-22 11:52
文章分类

全部博文(473)

文章存档

2014年(8)

2013年(38)

2012年(95)

2011年(181)

2010年(151)

分类: LINUX

2011-12-28 16:04:23

  从源代码编译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
  
阅读(2454) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~