首 页文章中心

Linux学习网

您的位置Linux学习网 > Linux基本应用 > 文章内容

用apt-build重新编译安装ubuntu上所有软件包

作者:佚名  来源:不详  发布时间:2007-12-13 8:05:00

一个Linux世界的菜鸟,或者一个在其中鏖战许久的战士。无论如何,你并不清楚Debian软件包管理系统的工作原理,并惊奇于居然能通过该系统以完全正确地解决升级、依赖关系的方式来安装程序。安装一个程序的方法有:第一种是下载tarball包,解压缩,运行configure脚本,运行 make install。这对所有linux用户来说都是一件简单的事,但对于Debian包管理系统来说并不适合。第二种方法是使用 stow,用来更好地解决升级问题。但是stow并不能完成依赖管理。最终极的解决方法是使用apt-build来重新编译那些已经编译成deb包的软件。

Try it and you will adopt it
On the first day, it created the repository
要安装apt-build输入
sudo apt-get install apt-build
一旦安装好后,后续的安装脚本会询问你几个问题,build目录,调用gcc时使用的选项,处理器架构等等。这些信息将被写入到/etc/apt/apt-build.conf。如果在回答时出错了,你可以直接修改该文件来更正。这里是一个例子:

[yegle@yegle-laptop]~ $ cat /etc/apt/apt-build.confbuild-dir = /var/cache/apt-build/buildrepository-dir = /var/cache/apt-build/repository

Olevel = -O3

march = -march=pentium2

mcpu = -mcpu=pentium2options =

关于这里的build-dir和repository-dir变量,请确保输入的目录所在的分区有较大的剩余空间。绝大多数(所有?)的软件包采用的是第二级的优化设置,因此如果你选择了第三级的优化,并且指出了你的 CPU属于哪一类架构,软件运行的效率将会有所提升。现在Gentoo fans会问我了: “flag在哪?” ;非常抱歉,没有。 Gentoo用户提到flag时,指的是与软件相关的库文件。在这里,修改软件包的依赖并不是一个简单用户讨论的问题。并且,如果你这么做了,可能会出现在原始软件包中没有的错误。当出现这种错误时,不必向开发者汇报bug了,因为你并不是在使用官方的Debian包,而是你自己的。最后,你需要在 /etc/apt/sources.list中添加一行,如果没有的话:
deb-src ftp://debian_mirror/ [stable|testing|unstable] main contrib译者注:Ubuntu用户添加相关的deb-src源即可,如:

deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/

gutsy main restricted universe multiverse

deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-updates main restricted universe multiverse

deb-src

http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-backports main restricted universe multiverse

deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-security main restricted universe multiverse

运行apt-get update 更新本地的软件包索引文件。现在你已经准备好使用apt-build了。

And now, what do we do?
现在我将详细解说apt-build的主要命令。事实上,和apt-get很象,apt-build也有关键词,例如 update, upgrade, install, source, clean-build。

首先,update 命令;它会更新软件包索引文件(位于/var/lib/apt/lists中)。upgrade命令,更新所有软件包。下面用一个例子来解说install:

[yegle@yegle-laptop]~ $ sudo apt-build install memstat
—–> Installing build dependencies (for memstat) <—–Reading Package Lists… DoneBuilding Dependency Tree… Done

0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.—–> Downloading memstat source (memstat) <—–

Reading Package Lists… Done

Building Dependency Tree… Done

Need to get 22.4kB of source archives.

Get:1 ftp://127.0.0.1

1.0.4/main memstat 0.4-1 (dsc) [482B]

Get:2 ftp://127.0.0.1 1.0.4/main memstat 0.4-1 (tar) [21.9kB]

Fetched 22.4kB in 0s (322kB/s)

dpkg-source: extracting memstat in memstat-0.4

—–> Building memstat <—–







dpkg-genchanges: binary-only upload - not including any source code

dpkg-buildpackage: binary only upload (no source included)

—–> Moving packages to repository <—–

—–> Updating repository <—–

Using: -O3 -mcpu=pentium2 -march=pentium2





Reading Package Lists… Done

Building Dependency Tree… Done

Reading Package Lists… Done

Building Dependency Tree… Done

The following NEW packages will be installed:

memstat

我们可以看到apt-build做了以下的工作:安装编译所需的软件包,下载源代码,然后编译并安装已编译的软件包。当你想自己重新打包时,dpkg- buildpackage并不能像apt-build一样自动安装所需依赖包,并且重新编译可能很难并可能需要一些我们没掌握的技巧。到目前为止,我们看到了一个为了优化软件而重编译的简单的例子,但是如果我们想修改源代码,修改规则文件或者其他在debian/文件夹下的文件,apt-build将变得很有用,并且将带你浏览一个软件包的核心。无论如何,我都推荐你看看这个 maintainer guide.

What else?
让我们看看这个命令: source。它并没有什么神奇的地方,它会下载源代码,以及包含debian/目录(你将从中找到建立软件包所需的文件,rules,control, changelog files等等)的diff文件,将他们放在build文件夹,解压缩并最终用diff文件为它打上补丁。例子:

[yegle@yegle-laptop]~ $ sudo apt-build source ethereal—–> Downloading ethereal source (ethereal) <—–Reading Package Lists… Done

Building Dependency Tree… Done

Need to get 6170kB of source archives.Get:1 ftp://127.0.0.1 1.0.4/main ethereal 0.10.4-2.1 (dsc) [821B]

Get:2 ftp://127.0.0.1 1.0.4/main ethereal 0.10.4-2.1 (tar) [6154kB]

Get:3

ftp://127.0.0.1 1.0.4/main ethereal 0.10.4-2.1 (diff) [14.6kB]

Fetched 6170kB in 1s (3533kB/s)

dpkg-source: extracting ethereal in ethereal-0.10.4

[1] [2]  下一页

收藏本页到: 365Key | del.icio.us | | 添加到雅虎收藏+
  • 网站帮助 - 广告合作 - 网站地图