ports
1.0、参考
1.1、ports简介

portsFreeBSD源代码软件包的包管理器。

ports的思想被很多其他包管理所借鉴。

1.2、ports tree

ports tree就是一种ports仓库的组织方式。

ports tree通常以/usr/ports目录作为根。

ports tree在安装系统的时候生成好,也可以在安装完系统后,通过portsnap命令从远程ports tree仓库安装到本地机器。

我们进入Vimport看一下:

ports tree仅仅是源码软件包的元信息和索引,并不包含真正的源码, 当需要源码的时候,比如要进行构建的时候,发现本地还没有下载过源码,就会去源码仓库下载源码。

1.3、通过ports管理软件

ports是如何管理软件的呢?答案是使用gmake。我们知道构建系统有很多,gmake是比较老的一种构建系统,现代构建系统有很多,但是由于历史的原因,FreeBSD相对来说比较保守,他们基本上是持有能用就行的态度,所以,就一直用到今天。

每个port的根目录下都有一个Makefile文件,它是gmake的配置文件。 这个Makefile文件是有一定的规则的,可不是随意编写的。比如他们都提供下面这些target

1.5、预定义Makefile变量
1.5.1、__MAKE_CONF

__MAKE_CONF变量的值为全局Makefile的路径。全局Makefile可以设置除了__MAKE_CONF以外的所有预定义Makefile变量的值。

__MAKE_CONF的值有3种可能性:

  • __MAKE_CONF的值为真实的文件路径,就使用该路径;
  • __MAKE_CONF的值为,就使用默认值/etc/make.conf
  • __MAKE_CONF的值为/dev/null,就表示不include全局配置;

示例:

cd /usr/ports/editors/vim
make __MAKE_CONF=/dev/null build
1.5.2、MASTER_SITE_OVERRIDE

MASTER_SITE_OVERRIDE变量的值为一个URL, 此URL源码包补丁包的下载地址。

中国大陆可以使用的URL有如下:

1.5.3、FETCH_CMD

FETCH_CMD变量的值是一个命令,用于指定用哪个软件下载包。

示例 - 使用axel2开启多线程下载:

FETCH_CMD=axel -n 10 -a