使用Arch Linux近半年,实在是越来越喜欢这个轻量级的发行版,尤其是它的软件包制作以及管理机制让人感觉很是方便。基础的pacman的功能就不说了,大体和debian系的apt-get类似,功能也很强大,主要用于安装二进制包。今天主要说说Arch灵活而强大的软件包制作机制——makepkg。
makepkg是一种基于脚本的软件包制作工具,其脚本格式除了固定的区域划分格式以外,主要脚本部分以shell脚本方式执行,所以说对大多数人来说上手很方便。
makepkg基于脚本的自动化工作方式
使用makepkg制作软件包时,最核心的文件就是PKGBUILD,就是上面说的软件包制作脚本。只要我们得到一个正确的脚本,只要在脚本所在目录执行makepkg命令,它就能自动从网上或本地获取制作软件包所需的资源(如源代码或现成的二进制包),自动检查软件包依赖关系是否满足,然后进行编译/加工,得到可以直接用pacman进行安装的pkg格式软件包。需要注意的是Arch Linux的所有二进制软件包就是基于makepkg制作的。
makepkg的安装&配置
要开始使用makepkg,先执行下列命令进行安装[code=bash]pacman -Sy base-devel
[/code]然后根据你的机子配置,修改“/etc/makepkg.conf”设置,使得编译出来的软件包更加适合你的硬件配置。其中主要的配置项包括GCC的FLAG设置,可以根据你的CPU来选择一个架构相关的优化选项(如-march=core2);包建立环境设置;软件包默认安装位置设置…不过如果你不熟悉完全可以不管它,默认设置已经可以有很不错的效果了。
makepkg的使用
然后就可以利用makepkg建立自己的软件包了。这里以AUR( ArchLinux User-community Repository,后面会介绍)上的linux-fetion客户端(一个开源的跨平台飞信客户端)为例说明makepkg的使用过程。
- 首先到这里下载linux-fetion的PKGBUILD脚本
- 在PKGBUILD脚本所在目录执行makepkg,你就能看到makepkg开始自动下载linux-fetion的源码,并开始编译,编译完成后还会自动打成PKG包
- 执行完毕后,如果没有出错,当前目录下应该出现了一个.pkg.tar.gz为后缀的文件,这个文件就是刚刚创建的软件包了,执行pacman -U ***.pkg.tar.gz即可安装
从上面的步骤可以看出makepkg制作软件包的过程非常简单。更重要的是,以软件包的形式进行软件安装,在很大程度上方便了后期对软件进行更新和卸载。另外,结合后面介绍的工具,你可以轻松安装&管理大量丰富的软件。
ABS
前面提到Arch Linux中的所有软件包都是利用makepkg工具制作成pkg安装包,那么哪里能找到这些软件包的PKGBUILD脚本呢?这就要提到ABS(the Arch Build System)。ᗜABS是一个类似于BSD的ports(ports-like)的源代码级软件管理系统。利用ABS,我们可以方便地获取Arch官方提供的软件包的PKGBUILD,并根据我们自己的需要进行软件包的定制或修改,然后再利用makepkg打包为pkg软件包。所以ABS使得我们自行定制预安装软件包的过程变得更加方便,尤其在内核等核心组件方面。
安装和配置ABS
要使用ABS,先使用pacman进行安装。以root权限执行[code=bash]pacman -Syu[/code]
安装完毕后,我们先修改一下/etc/abs.conf,其中主要设置”REPOS=(core extra !community !testing)”这一项,即分别选择是否同步core,extra,community,testing软件仓库。这里根据自己需要修改的软件包所属分支,自行设置。!testing表示不同步testing软件仓库。
同步ABS的PKGBUILD脚本
上面的配置完成后,先以root权限执行[code=bash]abs[/code]执行完毕后,我们可以看到“/var/abs”目录下出现了我们所需要的PKGBUILD脚本以及一些必须的配置文件。按照官方推荐做法,我们先建立“/var/abs/local”目录,并赋予非root用户对于该目录的完全访问权限(以便于以非root用户建立软件包,以非root身份运行makepkg是一个有助于安全的好习惯)。然后我们需要定制哪个软件包时,就可以在这个local目录下进行。
举例说明吧,我需要修改transmission以打开IPV6支持,就可以这么做
- 先在/var/abs/local下建立一个transmission目录并进入该目录[code=bash]mkdir /var/abs/local/transmission & cd /var/abs/local/transmission[/code]
- 将ABS提供的transmission脚本复制过来[code=bash]cp -r /var/abs/extra/transmission-gtk/* .[/code]
- 打开PKGBUILD脚本,先查看其源代码下载地址,从该地址手动下载源码,在本地解包,并针对IPV6进行相应修改
- 修改PKGBUILD脚本,使得它直接使用上一步修改过的源码进行编译,而不是从网上重新下载源码
- 执行makepkg,编译&制作软件包
- 直接使用pacman将我们定制好的transmission更新到系统中
可以看到利用ABS配合makepkg可以非常方便的进行软件包定制。
AUR
虽然Arch Linux提供了一个很好用的软件包管理系统,但是我们使用的一些软件Arch 的官方软件仓库并没有提供,难道我们必须一个一个自己写PKGBUILD脚本吗?当然这也是一个方法,尤其对于那些牛人们来说,但是有了AUR,对于大多数人来说就有了更方便的方法。
AUR(the Arch User-Community Repository)是一个由用户社区自行维护的庞大的软件仓库,常用的软件基本都可以在这里找到相应的PKGBUILD脚本,方便地建立软件包,进行安装。其最大的特点就是开发性,你可以将自己写的某个软件包的PKGBUILD脚本上传,与他人共享,而他人对此脚本有什么意见,都可以直接向你提出,或提醒你脚本已过期等等。比如我上面举例提到的linux-fetion,就是利用AUR提供的PKGBUILD脚本。
AUR的站点是http://aur.archlinux.org/,你现在就可以根据自己需要去下载需要的PKGBUILD脚本,构建需要的软件包了。不过你也可以忍耐一下,看完下面对yaourt工具的介绍,你就可以用yaourt这一强大工具让这一过程更加自动化。
Yaourt
yaourt(Yet AnOther User Repository Tool)是一位大牛写的Arch软件包管理工具,提供了对pacman的封装,但最主要的功能就是使得从AUR构建软件包更加方便。
首先从这里下载yaourt的PKGBUILD脚本,按照一般的makepkg方法安装该软件包。
安装完成后,试试执行[code=bash]yaourt fetion[code]我们可以看到yaourt自动从AUR上搜索fetion关键字,找到相应Repo信息。我们可以按序号选择一个,yaourt就会自动下载PKGBUILD脚本,并提示你做需要的修改之后,即可自动构建、安装软件包。安装完成还会自动对软件包进行投票。总之,功能非常强大,你可以自己去探索探索。
参考来源
Arch Wiki:
http://wiki.archlinux.org/index.php/Makepkg
http://wiki.archlinux.org/index.php/ABS
http://wiki.archlinux.org/index.php/AUR
AUR
近期评论