Difference between revisions of "Arch Build System (简体中文)"

From ArchWiki
Jump to: navigation, search
m (/etc/abs/abs.conf)
m (/etc/abs.conf: rm all traces of [unstable] (and other cruft))
Line 64: Line 64:
 
  nano /etc/abs.conf
 
  nano /etc/abs.conf
 
删除除你想要的软件仓库前的叹号,比如:
 
删除除你想要的软件仓库前的叹号,比如:
  SUPFILES=(core extra unstable community !testing)
+
  REPOS=(core extra community !testing)
  
 
==== 创建ABS树 ====
 
==== 创建ABS树 ====

Revision as of 19:03, 14 December 2008

Template:I18n links start Template:I18n entry Template:I18n entry Template:I18n entry Template:I18n entry Template:I18n entry Template:I18n entry Template:I18n entry Template:I18n links end

ABS是什么?

ABS指的是Arch的打包系统(the Arch Build System)。这是一种用于从源代码编译软件的类ports系统。在Arch中,pacman专门管理二进制软件包(包括那些由ABS创建的),而ABS则专门负责把源代码编译成可安装的.pkg.tar.gz软件包。

类ports系统又是什么?

'Ports'是FreeBSD使用的一种系统,它对源码包进行下载、解压缩、打补丁、编译和安装等一系列操作。一个“port”仅仅是指用户电脑上的一个目录,根据即将安装的相应软件来命名,包含一些文件来指导源码的下载和编译安装,典型的方式是找到那个目录(或者说port),进行make和make install。然后系统就会下载、编译和安装你想要的软件了。

ABS的概念与之相似

ABS由一个目录树构成(the ABS Tree),位于/var/abs。它包含许多子目录,每个子目录都属于某一类别,都以相应的可创建的软件包命名。你可以把一个子目录称为一个“ABS”,就像称呼“port“那样。这些“ABS”(或者说子目录)并不包含软件包或源代码, 相对地,它包含一个PKGBUILD文件(有时也会有其它文件)。PKGBUILD是一个简单的脚本——文本文件(包含对编译和打包过程的指示、包含源码包的下载地址)。ABS最重要的部分就是PKGBUILD

漫游ABS

用 pacman -Sy abs 安装abs。以root身份运行'abs',通过与Arch Linux服务器同步来创建ABS树。举例来说,如果你打算从源代码编译nano,就把/var/abs/core/base/nano复制到某一目录,然后到那个目录里运行makepkg'。就这么简单。Makepkg会试着读取并执行包含在PKGBUILD中的指示。适当的源码包将被自动下载和解压,根据/etc/makepkg.conf指定的CFLAGS编译,最后压缩成扩展名为.pkg.tar.gz的软件包,每一步都依照PKGBUILD中相应的指示来进行。安装只需要运行pacman -U nano.pkg.tar.gz。卸载同样由pacman来解决。

PKGBUILD和其它的文件当然可以被定制,以满足你的需求。你也可以用ABS makepkg功能从外来的代码编译你自己的软件包。(参照/var/abs/core/下原始的PKGBUILD和install文件)


有了ABS树,一个Arch用户只要稍动手就能自动地从源代码编译获得任何Arch软件。

ABS概览

'ABS'可以被看成一种伞形结构,因为它包括了、并依赖于其它的一些部件。因此,虽然从技术上讲并不准确,但ABS可以指代包含以下结构和工具的完整工具箱:

  • The ABS tree:/var/abs/下的ABS目录结构。包含众多以Arch的cvs软件命名的子目录,但并不包含软件包。
  • ABS:撷取和创建Arch官方PKGBUILD的工具。同样包括PKGBUILD范例。
  • PKGBUILDs:位于ABS目录下的文本文件,记录有创建软件包的指示和源代码地址。
  • makepkg: ABS的shell命令工具。读取PKGBUILD,编译源代码并创建.pkg.tar.gz包。
  • Pacman: Pacman是完全独立的,但是在安装或移除软件包、解决依赖性时都是必需的。它或者被makepkg调用或者被手动执行。
  • AUR: ArchLinux社区的用户维护的软件仓库(The Arch User-Community Repository),独立于ABS,在AUR中,即使是[unsupported]的PKGBUILDs,也可以通过ABS的makepkg工具来编译并打包成可安装软件。AUR主要包含社区用户贡献的、Arch官方没有提供的软件的PKGBUILDs。

我为什么要用ABS?

ABS是用来做这些的:

  • 从源代码编译Arch官方源里没有的软件。(详情请参照The Arch package making HOW-TO - with guidelines)
  • 定制现有的软件包以满足你的特定需求。(通过开启或禁用相关选项)
  • 用你的编译器的flags重新构建整个系统,“就像FreeBSD那样” 。
  • 干净地编译安装你自己定制的内核。(参照Kernel Compilation)
  • 使内核模块(比如某些显卡驱动)在你定制的内核下正常工作。

使用Arch Linux不一定会用到ABS,但ABS确实可以令特定的源码编译工作实现自动化。

本文意在给你描绘一个ABS和Arch软件包的大体轮廓;它不是完整的参考指南!如果你想了解更多,去读man page。

起步:安装软件包

使用abs首先要从core软件软件仓库安装它:

pacman -Sy abs

需要的依赖会被自动安装。

/etc/abs.conf

编辑/etc/abs.conf:

nano /etc/abs.conf

删除除你想要的软件仓库前的叹号,比如:

REPOS=(core extra community !testing)

创建ABS树

以root身份运行:

abs

ABS树会在/var/abs下创建。你会发现ABS树有几个分枝,这些分枝与你在/etc/abs/abs.conf中的选择相对应。

abs命令也用于定期地同步和更新你的ABS树。

/etc/makepkg.conf

/etc/makepkg.conf指明环境变量和编译器的flags。如果你使用SMP系统也许会希望编辑它。默认的设置是为i686和 x86_64优化的,在这些架构的单CPU系统上很有效。(默认设置可以在SMP机器上使用,但只会利用一个核心/CPU——参见 Safe Cflags.).

ABS树

当你第一次运行abs时,它用cvs系统令ABS树与Arch服务器同步。那么ABS树到底是什么呢?它位于/var/abs下,看起来是这样的:

| -- core/
|     || -- base/
|     ||     || -- acl/
|     ||     ||     || -- PKGBUILD
|     ||     || -- attr/
|     ||     ||     || -- PKGBUILD
|     ||     || -- ...
|     || -- devel/
|     ||     || -- abs/
|     ||     ||     || -- PKGBUILD
|     ||     || -- autoconf/
|     ||     ||     || -- PKGBUILD
|     ||     || -- ...
|     || -- ...
| -- extra/
|     || -- daemons/
|     ||     || -- acpid/
|     ||     ||     || -- PKGBUILD
|     ||     ||     || -- ...
|     ||     || -- apache/
|     ||     ||     || -- ...
|     ||     || -- ...
|     || -- ...
| -- community/
|     || -- ...

所以说ABS树与软件包数据库有着完全一致的结构:

  • 第一级目录代表类别
  • 第二级目录代表ABS本身,目录名就是你打算创建的软件的名字。
  • PKGBUILD文件包含所有有关软件包的信息。
  • 而且,ABS目录可能还包含了补丁和(或)其它打包所需的文件。

你必须明白ABS目录中并没有编译软件所需的源代码,相对的,PKGBUILD文件包含了一个URL,源码包将从那里自动下载。

建立一个工作目录

你必须建立一个工作目录,编译将在那里进行。所有的事情都在那里完成;千万不要直接在ABS树里编译。在你的home文件夹下就很好,当然,有些使用者更愿意在/var/abs/下创建一个属于普通用户的“local“文件夹。把ABS从ABS树(var/abs/branch/category/pkgname)复制到你的工作目录/path/to/build/dir。

建立你的工作目录。比如:

mkdir -p /home/yourusername/abs/local/

注意:ABS树的第一次下载量是最大的,以后只需要小更新。所以即使你只有56k的带宽也不必担心数据的下载,只有一些文本文件,在传输的过程中还被压缩了。

现在你知道什么是ABS树了吧?那么,怎么用呢?

编译安装过程,传统方法

如果你还不熟悉编译源代码,那么你需要知道大多数软件包(但不是所有的)都可以通过这种“传统方式”从源代码编译创建:

  • 下载源码包(浏览器、wget或什么其它的方法)
  • 解压缩:
  tar -xzf foo-0.99.tar.gz
  tar -xjf foo-0.99.tar.bz2
  • 进入目录:
cd foo-0.99
  • 配置软件包:一般来说,在源码目录里都有一个叫做configure的脚本用来配置软件包(添加或移除某些支持、选择安装位置,等等)并检查在你的电脑上是否有该软件包所需的全部软件。这样来运行它:
./configure [[option]]

你应该先试试help选项以更好地理解它的工作方式:

./configure --help

如果没有--prefix选项,大多数脚本会把/usr/local作为安装路径,而另一些使用/usr。为了协调一致,一般建议使用--prefix=/usr/local选项。把个人的程序安装到/usr/local是很好的做法,把/usr留给发行版所管理的包。这样就保证了个人程序的版本能与发行版的包管理系统(在Arch上是pacman)所管辖的那些共存。

./configure --prefix=/usr/local
  • 编译:
make
  • 安装:
make install
  • 卸载可以这样完成,进入源码目录,运行:
make uninstall

无论如何,你每次都应该读一读INSTALL文件以了解软件包被编译和安装的方式。并非所有的包都使用configure; make; make install系统

当然,上述传统方法依然可以在Arch Linux中使用,但是ABS提供了一种更有效率、简洁并且精致的替代方案,下面你就会看到它。

编译安装过程,ABS方式

ABS是一种精致的工具,它为包创建过程提供强大的协助和高度的可定制性,并且生成一个可安装的包文件。ABS方式包括从ABS树自制ABS到工作目录和执行makepkg。在下面的例子中,我们将创建slim软件包。

  • 1. 把slim的ABS复制到工作目录。
cp  /var/abs/extra/x11/slim/* /home/yourusername/abs/local/slim
  • 2. 登入工作目录。
cd /home/yourusername/abs/local/slim
  • 3. 用普通用户执行makepkg:
makepkg -c

以root身份安装:

# pacman -U slim 1.3.0-2-i686.pkg.tar.gz

这样就行了。你已经从源代码编译了slim并用pacman把它干净地安装到了系统中。卸载软件也用pacman来解决。(pacman -R slim)

  • ABS方式在某种程度上实现了自动化,为我们增添了便利。同时,通过PKGBUILD,它也保持了完全的透明度以及对编译安装流程的控制。

阅读ABS PKGBUILD解析来全面地了解一份PKGBUILD实例。

更多ABS相关信息