分享
 
 
 

ABS-theArchBuildSystem

王朝other·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

Arch Build System(以下简称ABS)用于:

①制作新的软件包

②根据自己的需要定制软件包(使用enabling或disabling选项)

③用你自己的编译选项重新编译整个系统(就像gentoo一样了)

对于Arch Linux来说,ABS不是必须的,但很有用。

本文将简要介绍ABS及Arch的软件包,这不是一个完全参考指南!如果您想详细了解,您应该去读一读手册页。

1.安装软件包

使用ABS之前,你必须先安装cvsup及wget:

pacman -Sy cvsup wget

如果你已将软件包下载到一个名为foo的目录中:

cd foo

pacman -A cvsup-*.pkg.tar.gz wget-*.pkg.tar.gz

2.什么是软件包文件?

a.一般地,软件包文件就是一个名如foo.pkg.tar.gz的文件。

b.实际上,软件包文件只是一个用gzip压缩的tar档,包含:

①需安装的文件

②.PKGINFO :包含pacman处理该软件包的所有信息,依赖关系等等

③.FILELIST :软件包中所有文件的列表,用来删除软件或检查文件冲突

④.INSTALL :存放在安装/升级/删除软件后执行的命令(只有在PKGBUILD中指定,才会有此文件)。

3.PKGBUILD是什么?它包含哪些内容?

PKGBUILD文件包含软件包有关的一些信息,它只是一个简单的纯文本文件。这儿有一个例子:

# $Id: PKGBUILD,v 1.12 2003/11/06 08:26:13 dorphell Exp $# Maintainer: judd# Contributor: Judd Vinetpkgname=foopkgver=0.99pkgrel=1pkgdesc="short description of foo"url="http://www.foo.org"groups=provides=depends=('qt' 'python')makedepends=('guile')conflicts=('yafoo')replaces=('mffoo')backup=('/etc/foo/foo.conf')install=('foo.install')source=('http://www.foo.org/download/$pkgname-$pkgver.tar.gz')md5sums=('2c0cca3ef6330a187c6ef4fe41ecaa4d35175bee593a7cc7d6205584a94d8625')build() {cd $startdir/src/$pkgname-$pkgver./configure --prefix=/usrmake || return 1make prefix=$startdir/pkg/usr install}

以下是说明:

# :#后为注释

# $Id: PKGBUILD,v ... : 该软件包的cvs-tag(cvs标记),是由archlinux-cvs系统建立的。

# Maintainer : 维护者。维护者负责维护此软件包的官方版本。

# Contributor : 贡献人。为这个软件包写第一个PKGBUILD的人。

pkgname : 该软件包的名字。

pkgver : 该软件包的版本号。

pkgrel : Arch软件包的发布号。它与版本号是不同的,发布号随PKGBUILD的修改而改变。有很多原因导致修改PKGBUILD,例如,你可能会为打开compile-time支持而改变PKGBUILD。

pkgdesc : 该软件包的主要描述,这就是你在浏览软件包数据库(http://archlinux.org/packages.php)时所看到的。

url : 包中软件的主页(当你在浏览软件包数据库时,点击软件包名就进入包中的软件的主页)。

groups : 用于软件包组。例如,当你试图安装kde时,所有属于kde组的软件包都将被安装。

provides : 表示该软件包作为另一个软件包的补充。例如,kernel-scsi作为kernel的补充。

depends : 软件包的依赖关系(它需要哪些软件包)。

makedepends : 编译该软件包时才需要的包,一旦完成编译就不再需要了。

conflicts : 相冲突的包,这些包不能同时安装。本例中,foo与yafoo相冲突。

replaces : 该软件包所取代的旧包。本例中,foo取代了mffoo,并且不再提供对mffoo的支持。

backup : 当软件包被卸载时需备份的文件(备份后的文件加上.pacsave后缀,形如file.pacsave)。

install : 软件包中的安装脚本(必须与PKGBUILD在同一目录中)。

source : 软件包的下载地址,可以是本地、也可以是通过"http"或"ftp"访问的远程地址。软件包以pkgname和pkgver两个变量来命名,以免每次升级都要改变源码。

md5sums : 软件包的MD5校验和。

下面是函数的说明:

build : 建立软件包所需的所有步骤(下文将详细说明)。

现在,你可以发现PKGBUILD文件所包含的信息是软件包管理者所必须的,它是pacman与abs的核心。

还有安装脚本,上例中,PKGBUILD指定"foo.install"作为安装脚本。举例如下:

post_install() {/bin/true}post_upgrade() {/bin/true}pre_remove() {/bin/true}op=$1shift$op $*

说明:

post_install : 这段脚本在文件安装后立即执行,它只有一个参数:软件包的版本。

post_upgrade : 这段脚本在所有文件升级后执行,它有两个参数:

①新的软件包的版本

②老的软件包的版本

pre_remove : 这段脚本在文件被删除之前执行(例如,停止一个守护进程),它也只有一个参数:软件包的版本

最后三行是每个安装脚本都必须的,因此,它们都会被执行。

4.build函数

如果你对建立软件包不太熟悉,你应该知道大多数(不是全部)软件包可以这样建立:

①源文件解压

tar -xzf foo-0.99.tar.gz

tar -xjf foo-0.99.tar.bz2

②进入源码目录

cd foo-0.99

③配置软件包 : 一般来说,源码目录中有一个名为configure的短小脚本文件,这就是用来配置软件包的(添加或删除支持信息,选择安装目的目录等等)。检查你的系统,确保已安装此软件所需的所有包,然后执行:

./configure [option]

在正式配置之前,你应该试试help选项,以便更好地理解如何配置:

./configure --help

④编译源码

make

⑤安装

make install

不论怎样,你都应该看看INSTALL文件,搞清软件应怎样配置和安装!并不所有的软件都可以configure; make; make install这样配置安装的!

那么,我们来看一看一个“标准的”build函数:

build() {cd $startdir/src/$pkgname-$pkgver./configure --prefix=/usrmake || return 1make prefix=$startdir/pkg/usr install}

我们所做的是:

①进入解压后的源码目录:

cd $startdir/src/$pkgname-$pkgver

但如果你尝试去建立自己的软件包,注意一定要进入正确的目录。有时,解压后的目录名是不同的:

tar -xzf foo-0.99.tar.gz

执行ls会返回:

.

..

foo-0.99.tar.gz

foo/

并不是

.

..

foo-0.99.tar.gz

foo-0.99/

②配置,安装目录为/usr:

./configure --prefix=/usr

③编译

make || return 1

④安装,不是在/usr中,而是在$startdir/pkg/usr目录中,这样,pacman就可以控制这些文件。

make prefix=$startdir/pkg/usr install

我们所要做的是建立软件包,而不是要安装它。所以,我们告诉make将所有文件放在我们指定的目录:$startdir/pkg/usr,而不是安装到标准位置/usr。这样,makepkg就可以查找并发现哪些文件是软件包要安装的,并将他们压缩进Arch软件包。

注意:有时Makefile中并没有prefix选项,通常使用DESTDIR代替。如果所生成的文件数明显少于应有的数目(译注:也就是说有文件已经被安装进你的系统),试试make DESTDIR=$startdir/pkg install。如果仍旧不行,你就必须仔细查找以“make <...> install”形式执行的install命令的参数。

5.The ABS tree

当你第一次运行abs命令时:

root @ localhost # abs

它将使用CVS,确保“the ABS tree(以下称为ABS树)”与arch服务器同步。那么,ABS树到底是什么?它位于/var/abs目录下,看起来如下图:

| -- base/| |-- autoconf/| |-- automake/| |-- ...| -- devel/| -- ...| -- extra/| | -- deamons/| | | -- acpid/| | | | -- PKGBUILD... ... ... ...

ABS树的结构与软件包数据库的结构精确地相同:

①第一级目录代表类别

②第二级目录代表软件包

③PKGBUILD文件包含软件包所需的所有信息

不管怎样,/var/abs下还有一个特定的目录:local,这个目录是你的。你可以在此目录中做任何事——但你不应该改变ABS树的其他部份。

注意:第一次下载的ABS树大一点,接下来就只需要下载升级的部份就可以了。所以即使你是用56k的小猫,也不必担心:这些只是文本文件,并且在传输过程中是被压缩的。

现在你知道什么是ABS树了,那我们怎么利用它呢?

6.第一次使用ABS:定制软件包

这种情况比你想到的要多得多:官方软件包编译的选项仅仅是--enable或--disable,并没有你所必需的选项。

举个例子:foo软件的arts支持被禁止了,假如我们要打开arts支持,可以按下面的方法来做:

①找到foo包

在http://archlinux.org/packages.php查找foo

使用find命令:

find /var/abs -name "foo"

使用slocate命令:

slocate foo | grep /var/abs

无论如何,你会发现foo是extra中multimedia的一部份(仅仅是举例)

②拷贝foo的PKGBUILD文件至/var/abs/local/foo:

mkdir /var/abs/local/foo

cp /var/abs/extra/multimedia/foo/PKGBUILD /var/abs/local/foo

cd /var/abs/local/foo

③修改PKGBUILD文件,加入我们需要的arts支持:

build() {cd $startdir/src/$pkgname-$pkgver./configure --prefix=/usrmake || return 1make prefix=$startdir/pkg/usr install}

改成

build() {cd $startdir/src/$pkgname-$pkgver./configure --enable-arts --prefix=/usrmake || return 1make prefix=$startdir/pkg/usr install}

④运行makepkg:

makepkg

⑤用下面的两条命令中的一条来安装(-A表示安装,-U表示升级已安装的软件包):

pacman -A foo-*.pkg.tar.gz

pacman -U foo-*.pkg.tar.gz

7.ABS的其他用途

WiKi上还有两篇文章,所述更深入:

* The Arch package making HOW-TO - with guidelines

* Custom local repository with ABS and gensync

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有