我想要在Arch Linux本地构建一个软件包的想法其实是因为我人比较懒散。
由于Arch Linux所带的几套图标主题我不是很喜欢,但是却又喜欢Fedora上的Humman-Dark软件包所带的一套图标集,就想把它搞到Arch Linux上来。
虽然Fedora的软件包格式是rpm的,但这难不倒我。在我看来,仅仅包含一些图标文件的软件包应该是与架构平台等无关的,图标格式也应该是兼容的,在Arch Linux上应该可以正常使用。
事实上,rpm解包之后也只是一堆文件,最初我是用了一个Makefile(可以用来安装,卸载)来完成这个工作的,后来就厌烦了这样做。
听说Arch Linux是可以自己构建软件包的。于是:
最简单的过程类似于以下步骤,更多详细教程可以移步Arch Linux WiKi。
创建一个临时构建目录,并创建PKGBUILD(示例文件可以从/usr/share/pacman/下找到)
它是一个shell脚本,在Bash上能保证运行的很好。随时可以运行makepkg测试创建的PKGBUILD是否工作正常。
makepkg要求下面的几个变量和一个package函数是必须在PKGBUILD脚本中定义的:
pkgname= //定义软件包名
pkgvar= //定义软件包版本
arch = (‘value‘) //定义软件包架构,value可选值有i686,x86_64,如果没有架构,应该是any。如果软件包允许在多个架构上构建,但最终只能运行在一种架构上,可以将多个值使用单引号引起来,然后使用空格隔开
....
source=(‘‘) //source用于指定软件源码包文件名,可以是一个因特网上的路径,也可以是本地上(这时可以引用pkgname和pkgvar变量)的源码包,它也允许像架构一样指定多个值。
md5sum= //校验和可以使用makepkg -g自动生成并追加到PKGBUILD
$ makepkg -g >> PKGBUILD
pkgdir(代表pkg)和srcdir(代表src)这两个变量不需要定义,它们会在构建之前被自动创建,因此可以直接在函数中引用它们。
build函数只有在有需要编译的代码时才会有意义,这个函数定义在package函数之前。
package这个函数是makepkg工具唯一要求必须在PKGBUILD脚本中定义的。
构建环境是在一个faceroot环境,一旦构建成功,那么makepkg会在构建目录下创建一个可以供pacman直接安装的软件包(格式:$(pkgname)-$(pkgvar)-.$(arch).tar.xz)