FreeBSD Port 开发者手册
FreeBSD 中文社区
  • FreeBSD Port 开发者手册翻译项目
  • 编辑日志
  • 译者说明
  • FreeBSD Port 开发者手册
    • FreeBSD Port 开发者手册
  • 第1章 简介
    • 1.1.简介
  • 第2章 制作新的 port
    • 2.1.制作新的 port
  • 第3章 简单的 port
    • 3.1.编写 Makefile
    • 3.2.编写描述文件
    • 3.3.创建校验和文件
    • 3.4.测试 port
    • 3.5.用 portlint 来检查 port
    • 3.6.提交新的 port
  • 第4章 复杂的 Port
    • 4.1 Port 工作原理
    • 4.2.获取源代码
    • 4.3.修改 port
    • 4.4.打补丁
    • 4.5.配置
    • 4.6.处理用户输入
  • 第5章 配置 Makefile
    • 5.1.原始来源
    • 5.2.命名
    • 5.3.归类
    • 5.4.源代码包文件
    • 5.5.维护者(MAINTAINER)
    • 5.6.一句话说明(COMMENT)
    • 5.7.项目网站
    • 5.8.许可证
    • 5.9.PORTSCOUT
    • 5.10.依赖
    • 5.11.从属 port 和 MASTERDIR
    • 5.12.man 手册
    • 5.13.info 文件
    • 5.14.Makefile 参数
    • 5.15.特殊的工作目录
    • 5.16.解决冲突
    • 5.17.安装文件
    • 5.18. 使用 BINARY_ALIAS 来重命名命令,而不是在编译中打补丁
  • 第6章 特殊情况
    • 第6章 特殊情况
  • 第7章 Flavors
    • 7.1.Flavors 简介
    • 7.2.使用 FLAVORS
    • 7.3.USES=php 和 Flavors
    • 7.4.USES=python 和 Flavors
    • 7.5.USES=lua 和 Flavors
  • 第8章 高级 pkg-plist 实践
    • 8.1.根据 make 变量对 pkg-plist 进行修改
    • 8.2.空目录
    • 8.3.配置文件
    • 8.4.动态与静态软件包列表
    • 8.5.自动创建软件包列表
    • 8.6.用关键词扩展软件包列表
  • 第9章 pkg-*
    • 9.1.pkg-message(安装二进制包时显示的消息文件)
    • 9.2.pkg-install、pkg-pre-install 和 pkg-post-install(安装二进制包时执行的脚本文件)
    • 9.3.pkg-deinstall、pkg-pre-deinstall 和 pkg-post-deinstall(卸载时执行的脚本文件)
    • 9.4.修改 pkg-* 文件的名字
    • 9.5.使用 SUB_FILES 和 SUB_LIST
  • 第10章 测试 port
    • 10.1.运行 make describe
    • 10.2.运行 make test
    • 10.3.Portclippy / Portfmt
    • 10.4.Portlint
    • 10.5.Port 工具
    • 10.6.PREFIX 和 DESTDIR
    • 10.7.Poudriere
    • 10.8.调试 port
  • 第11章 升级 port
    • 11.1.使用 Git 制作补丁
    • 11.2.UPDATING 和 MOVED
  • 第12章 安全
    • 12.1.安全为何如此重要
    • 12.2.修复安全漏洞
    • 12.3.向社区通报情况
  • 第13章 该做什么和不该做什么
    • 第13章 该做什么和不该做什么
  • 第14章 一个简单的 port
    • 第14章 一个简单的 port
  • 第15章 在 Port Makefile 中变量的顺序
    • 第15章 在 Port Makefile 中变量的顺序
  • 第16章 保持更新
    • 第16章 保持更新
  • 第17章 使用 USES 宏
    • 第17章 使用 USES 宏
  • 第18章 __FreeBSD_version 的值
    • 第18章 __FreeBSD_version 的值
由 GitBook 提供支持

FreeBSD 中文社区

在本页

这有帮助吗?

在GitHub上编辑
导出为 PDF
  1. 第10章 测试 port

10.6.PREFIX 和 DESTDIR

PREFIX 决定了port将安装在哪里。默认为/usr/local,但用户可以将其设置为自定义路径,如/opt。port必须遵守这个变量的值。

DESTDIR ,如果由用户设置,则确定完整的替代环境,通常是一个jail或者安装在除 / 之外的某个地方的系统。port实际上会安装到 DESTDIR/PREFIX,并在 DESTDIR/var/db/pkg 中注册到软件包数据库中。 DESTDIR 由ports基础设施自动处理,使用 chroot(8)。不需要修改或额外注意编写 DESTDIR 兼容的ports。

PREFIX 的值将设置为 LOCALBASE (默认为 /usr/local)。如果设置了 USE_LINUX_PREFIX , PREFIX 将会是 LINUXBASE (默认为/compat/linux)。

在源代码中避免硬编码的 /usr/local 路径会使port更加灵活,能够满足其他站点的需求。通常,这可以通过将port各种 Makefile 中的 /usr/local 替换为 ${PREFIX} 来实现。此变量会自动传递到构建和安装过程的每个阶段。

确保应用程序没有在 /usr/local 而不是 PREFIX 安装东西。对这种硬编码路径的快速测试是:

% make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`

如果有任何东西安装在 PREFIX 之外,软件包创建过程将抱怨找不到文件。

另外,值得检查是否支持阶段目录(请参阅分段):

% make stage && make check-plist && make stage-qa && make package
  • check-plist 检查 plist 中缺失的文件,以及 plist 中未被 port 安装的文件。

  • stage-qa 检查常见问题,如错误的 shebang、符号链接指向阶段目录之外、setuid 文件和未剥离的库文件…

这些测试不会发现 port 文件中的硬编码路径,也不会验证 LOCALBASE 是否被正确用于引用其他 ports 的文件。必须测试 /var/tmp/ 中临时安装的 port,以确保路径没有问题。

PREFIX 不得在 port 的 Makefile 中明确设置。安装 port 的用户可能已将 PREFIX 设置为定制位置,port 必须尊重该设置。

使用上述提到的变量,而不是显式路径名,从其他 ports 引用程序和文件。例如,如果 port 需要一个宏 PAGER 具有 less 的完整路径名,则不要使用文字路径 /usr/local/bin/less。而是使用 ${LOCALBASE} :

-DPAGER=\"${LOCALBASE}/bin/less\"

具有 LOCALBASE 的路径更有可能在系统管理员将整个 /usr/local 树移动到其他位置时仍然有效。

最后更新于10个月前

这有帮助吗?