FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章与书籍
  • UNIX 四分之一世纪
  • Unix 痛恨者手册
  • 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 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

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

10.6.PREFIX 和 DESTDIR

上一页10.5.Port 工具下一页10.7.Poudriere

最后更新于18天前

PREFIX 决定了 Port 的安装位置。默认情况下,它是 /usr/local,但用户可以设置为自定义路径,如 /opt。Port 必须遵守该变量的值。

DESTDIR 如果由用户设置,决定了完整的替代环境,通常是 jail 或者是挂载在 / 以外的安装系统。Port 实际上会安装到 DESTDIR/PREFIX,并在 DESTDIR/var/db/pkg 中注册到包数据库。DESTDIR 由 Ports 基础设施通过 自动处理。无需修改或额外注意编写 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 中缺少的文件以及 Port 未安装但出现在 plist 中的文件。

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

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

PREFIX 不得在 Port 的 Makefile 中显式设置。安装 Port 的用户可能已将 PREFIX 设置为自定义位置,Port 必须遵守该设置。

通过上述变量引用其他 Port 的程序和文件,而不是使用显式的路径。例如,如果 Port 需要宏 PAGER 来获取 less 的完整路径名,不能使用 /usr/local/bin/less 的字面路径。应改为使用 ${LOCALBASE}:

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

使用 LOCALBASE 的路径在管理员将整个 /usr/local 树移动到其他地方时,更有可能仍然有效。

技巧

所有这些测试都在运行 poudriere testport 或 poudriere bulk -t 时自动完成。强烈建议每个 Port 贡献者安装并用其测试自己的 Port。有关更多信息,请参见 。

chroot(8)
Staging
poudriere