ABS (简体中文)
From ArchWiki
i18n |
---|
Česky |
Dansk |
English |
正體中文 |
Polski |
Русский |
简体中文 |
Contents |
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相关信息
- ABS PKGBUILD Explained
- Makepkg
- The Arch package making HOW-TO - with guidelines
- Safe Cflags
- Kernel Compilation with ABS
- ArchLinux User-community Repository (AUR)
- Custom local repository with ABS and gensync