UBUNTU管理源码包

如何获取ubuntu源码包里面的源码?

1、在获取源码包之前,确保在软件源配置文件/etc/apt/sources.list中添加了deb-src项
2、使用如下命令获取xxx源码包的详细信息:
 sudo apt-cache showsrc xxx 这用来查询当前镜像站点中是否有该源码包。


3、源码包中通常包含3个文件,分别以dsc,orig.tar.gz和diff.gz为后缀名。
 sudo apt-get source  xxx    命令来获取源码包,它会将源码包下载到用户当前目录

并在命令执行过程中,调用dpkg-source命令,根据dsc文件中的信息,将源码包解压到同名目录中,应用程序的源代码就在这里面。

sudo apt-get source xxx

要强调的是,在下载源码包前,必须确保安装了dpkg-dev(执行”apt-get install dpkg-dev”来安装),
否则,只会下载源码包的3个文件,但不会解压缩源码包。当然你也可以自己用dpkg-source命令去解压缩源码包。

4、在编译源码包前,需要安装具有依赖关系的相关软件包。使用”apt-get build-dep”命令可以主动获取并安装所有相关的软件包。

sudo apt-get build-dep xxx

5、现在可以来编译源码包了,首先进入源码所在目录,使用dpkg-buildpackage命令来编译源码包,它会将生成的Deb软件包放置在上层目录中。
cd xxx
sudo dpkg-buildpackage

这样就会编译生成xxx_i386.deb

6、安装软件包。使用”dpkg –i”命令来安装生成的Deb软件包。

sudo dpkg -i  xxx_i386.deb


9.5 管理源码包

在开源软件的世界中,所有应用程序的源代码都是开放 的。依照GNU的约定,Linux应用程序的源代码必须随软件包一同发布,即使第三方软件包也必须同意有偿开放源码。因而,用户随时可以获取自己所需要的 应用程序源码包。在Ubuntu中,用户不但可以使用APT工具管理软件包,也可管理源码包,包括查询、获取、编译源码包,直至安装。本节将以tree实 用程序(以树形结构获取目录树)为例,介绍管理源码包的方法。

在获取源码包之前,确保在软件源配置文件/etc/apt/source.list中添加了deb-src项。

9.5.1  查询源码包

从软件源镜像站点获取源码包,多数情况下需要事先了 解源码包的相关信息。用户使用“apt-cache showsrc”命令就可以事先查询源码包信息,命令返回结果包括:版本(Version)、优先级(Priority)、编译依赖关系(Build- Depends)、适用计算机架构(Architecture)、镜像站点中存放位置(Directory)以及源码包中包含的文件(file)等。

以下命令的执行结果获取了tree源码包的详细描述 信息。可以看到,file项列出了tree源码包中所包含的3个文件:tree_1.5.1-2.dsc、 tree_1.5.1.orig.tar.gz、tree_1.5.1-2.diff.gz;Build-Depends项列出了编译tree源码包所依 赖的软件包——debhelper。

wdl@UbuntuFisher:~$ sudo apt-cache  showsrc  tree

Package: tree

Binary:  tree

Version: 1.5.1-2

Priority: optional

Section: universe/utils

Maintainer: Florian Ernst florian@debian.org

Build-Depends: debhelper (>= 5)

Architecture: any

Standards-Version: 3.7.2

Format: 1.0

Directory: pool/universe/t/tree

Files:

    80dfa94dd21e331600d39f1e7ac60085 545 tree_1.5.1-2.dsc

    274ca4d36ee6fb216fa6cf01ad5eaa84 30806 tree_1.5.1.orig.tar.gz

    9f292df6931d70f59e1da7a7e06c35e9 4277 tree_1.5.1-2.diff.gz

实质上,使用“apt-cache showsrc”命令的更重要目的是,查询当前软件源中是否存放了某个源码包。在保证查询关键字正确的情况下,返回结果提示不存在,说明当前镜像站点中没有放置该源码包。此时,需要用户添加新的软件源。

9.5.2  获取源码包

在Ubuntu Linux中,使用“apt-get source”命令获取源码包。只需告知源码包的名字,该命令就可主动下载全部源码包文件。通常,源码包中包含3个文件,分别以dsc、 orig.tar.gz和diff.gz为后缀名。“apt-get source”会将源码包下载到用户当前所在目录,并在命令执行过程中,调用dpkg-source命令,根据dsc文件中的信息,将源码包解压到同名目 录中,应用程序的源代码就存放在这里。

以下命令执行结果,将tree源码包下载到当前目录“TreeSourceCode”中,又在这个目录下新建了tree-1.5.1目录,并将源码包解压到tree-1.5.1中。

wdl@UbuntuFisher:~/TreeSourceCode$ sudo  apt-get  source  tree

正在读取软件包列表... 完成

正在分析软件包的依赖关系树

读取状态信息... 完成

需要下载 35.6kB 的源代码包。

获取:1 http://ubuntu.cn99.com feisty/universe tree 1.5.1-2 (dsc) [545B]

获取:2 http://ubuntu.cn99.com feisty/universe tree 1.5.1-2 (tar) [30.8kB]

获取:3 http://ubuntu.cn99.com feisty/universe tree 1.5.1-2 (diff) [4277B]

下载 35.6kB,耗时 2s (15.7kB/s)

gpg: 于 2007年01月25日 星期四 07时31分00秒 CST 创建的签名,使用 DSA,钥匙号 514B3E7C

gpg: 无法检查签名:找不到公钥

dpkg-source:正在解压 tree 于 tree-1.5.1

dpkg-source:正在解包 tree_1.5.1.orig.tar.gz

在下载tree源码包结束后,查看当前目录 TreeSourceCode中的内容,可以看到三个文件(tree_1.5.1-2.diff.gz、tree_1.5.1-2.dsc、 tree_1.5.1.orig.tar.gz)和一个目录(tree-1.5.1)。其中,存放在tree-1.5.1目录中的tree.c文件就是 tree程序的源代码。

wdl@UbuntuFisher:~/TreeSource$ ls –l

总用量 48

drwxr-xr-x 4 root  root  4096  2007-10-03 06:58  tree-1.5.1

-rw-r--r—1  root  root  4277  2007-02-08 02:03  tree_1.5.1-2.diff.gz

-rw-r--r-- 1  root  root  545   2007-02-08 02:03  tree_1.5.1-2.dsc

-rw-r--r-- 1  root  root  30806 2007-02-08 02:03  tree_1.5.1.orig.tar.gz

需要强调的是,在下载源码包前,必须确保安装了dpkg-dev(执行“apt-get install dpkg-dev”安装)。否则,只下载源码包的3个文件,而不解压源码包。当然用户可以直接使用dpkg-source命令解压源码包。

9.5.3  构建源码包编译环境

通常,将源代码编译成二进制可执行的应用程序,还需 要很多的头文件或共享库。因此,在编译源码包之前,需要安装具有依赖关系的相关软件包。例如,在9.5.1节中,使用“apt showsrc”命令查询tree源码包信息,“Build-Depends”项列出了编译该源码包所关联的软件包。可以看到,若要正确编译tree源码 包必须先安装debhelper。

在Ubuntu Linux中,只需告知源码包的名字,使用“apt-get build-dep”命令可以主动获取并安装所有关联的软件包。

wdl@wdl-desktop:~/TreeCode$ sudo apt-get  build-dep  tree

正在读取软件包列表... 完成

正在分析软件包的依赖关系树

Reading state information... 完成

下列【新】软件包将被安装:

debhelper

共升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 1 个软件未被升级。

需要下载514kB的软件包。

解压缩后会消耗掉 9384kB 的额外空间。

您希望继续执行吗?[Y/n]y

获取:1 http://ubuntu.cn99.com feisty/main debhelper 5.0.42ubuntu1 [514kB]

下载514kB,耗时 1m37s (25.3kB/s)

正在解压缩 debhelper (从 .../debhelper_5.0.42ubuntu1_all.deb) ...

正在设置 debhelper (5.0.42ubuntu1) ...

以上命令的执行结果是,获取并安装软件包debhelper,以备后期编译tree源码包。

9.5.4  编译源码包

用户获取应用程序源代码的目的,大多是为了按照自己的需求修改源程序。在完成必要的修改后,仍需要编译成二进制可执行程序,并打包生成Deb软件包,以便发布。在完成构建编译环境后,就可以着手开始编译源码包。

如前所述,在“apt-get source”命令下载源码包过程中,调用了“dpkg-source”命令,将源码包解压到同名目录中,应用程序的源代码就存放在这里。编译源码包时, 需要进入这个目录,使用dpkg-buildpackage命令编译源码包,并将生成的Deb软件包放置在上层目录中。

例如,在下载tree源码包时,由“dpkg- source”命令将源代码解压放置在tree-1.5.1文件夹中。编译源码包时,进入tree-1.5.1目录,执行“dpkg- buildpackage”命令开始编译tree源码包。编译过程可能需要一段时间。最后,生成的可执行程序tree放置在tree-1.5.1目录中, 生成的软件包tree_1.5.1-2_i386.deb放置在tree-1.5.1目录的上一层目录中。

wdl@UbuntuFisher:~/TreeCode$ cd  tree-1.5.1

wdl@UbuntuFisher:~/TreeCode/tree-1.5.1$ sudo  dpkg-buildpackage

dpkg-buildpackage: source package is tree

dpkg-buildpackage: source version is 1.5.1-2

dpkg-buildpackage: source changed by Florian Ernst < florian@debian.org>

dpkg-buildpackage: host architecture i386

dpkg-buildpackage: source version without epoch 1.5.1-2

debian/rules clean

dpkg-source -b tree-1.5.1

dpkg-source:构建中的 tree 使用已存在的 tree_1.5.1.orig.tar.gz

dpkg-source:正在构建 tree 于 tree_1.5.1-2.diff.gz

dpkg-source:正在构建 tree 于 tree_1.5.1-2.dsc

debian/rules build

gcc -o tree tree.o

dpkg-deb:正在新建软件包"tree",包文件为"../tree_1.5.1-2_i386.deb"。

signfile tree_1.5.1-2.dsc

通过以上编译过程,生成的软件包同样可以使用软件包管理器进行管理。下面使用“dpkg-i”命令安装刚刚编译生成的软件包,将tree实用程序安装在系统中。

wdl@UbuntuFisher:~/ TreeCode $ sudo  dpkg –i  tree_1.5.1-2_i386.deb

(正在读取数据库 ... 系统当前总共安装有 117915 个文件和目录。)

正预备替换 tree 1.5.1-2 (使用 tree_1.5.1-2_i386.deb) ...

正在解压缩将用于更替的包文件 tree ...

正在设置 tree (1.5.1-2) ...

现在可以使用tree命令查看以上编译工作目录中的内容。

wdl@UbuntuFisher:~/TreeCode$ tree  -L 2

.                            #当前目录为TreeCode

|-- tree-1.5.1            #dpkg-source命令将源码包解压到该目录中

|  |-- CHANGES

|  |-- LICENSE

|  |-- Makefile

|  |-- README

|  |-- build-stamp

|  |-- debian                  #在debian目录存放了打包用的控制文件

|  |-- man

|  |-- tree                    #编译生成的可执行文件

|  |-- tree.c                   #应用程序的源代码

|  `-- tree.o                   #编译生成的目标文件

|-- tree_1.5.1-2.diff.gz

|-- tree_1.5.1-2.dsc

|-- tree_1.5.1-2_i386.changes

|-- tree_1.5.1-2_i386.deb         #编译生成的软件包

`-- tree_1.5.1.orig.tar.gz

3 directories, 13 files


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值