当前位置:操作系统 > Unix/Linux >>

ABS - the Arch Build System

  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 Vinet
pkgname=foo
pkgver=0.99
pkgrel=1
pkgdesc="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=/usr
make || return 1
make 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=$1
shift
$op $*

  说明:

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

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


  ①新的软件包的版本

  ②老的软件包的版本[page_break]

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

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

  4.build函数

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

  ①源文件解压

  tar -xzf foo-0.99.tar.gz

  tar -xjf foo-0.99.tar.bz2

  ②进入源码目录

  cd foo-0.99

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,