您查看的文章来源于http://www.oklinux.cn
来自Yarrow’s Wastebasket
你,一个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文件为它打上补丁。例子: