FreeBSD Porter 手册

The FreeBSD Documentation Project

FreeBSD 中文计划


目录
第1章 介绍
第2章 自行制作新 port
第3章 简单的 port
3.1 编写 Makefile
3.2 创建描述文件
3.2.1 pkg-descr (关于 port 的冗长描述文件)
3.2.2 pkg-plist (port 的装箱单)
3.3 创建校验和文件
3.4 测试 port
3.5 portlint 来检查 port
3.6 提交新 port
第4章 复杂的 Porting
4.1 整个系统是如何运转的?
4.2 获取源代码
4.3 修改 port
4.4 打补丁
4.5 配置
4.6 处理用户输入
第5章 配置 Makefile
5.1 作者发布的代码
5.2 命名
5.2.1 PORTNAMEPORTVERSION
5.2.2 PORTREVISIONPORTEPOCH
5.2.3 PKGNAMEPREFIXPKGNAMESUFFIX
5.2.4 LATEST_LINK
5.2.5 包命名规则
5.3 分类
5.3.1 CATEGORIES (所属分类)
5.3.2 目前的分类表
5.3.3 选择正确的分类
5.3.4 如何提议建立新的分类
5.3.5 如何提议对分类进行重新组织
5.4 源码包文件
5.4.1 DISTVERSION/DISTNAME (源码包版本号/名称)
5.4.2 MASTER_SITES (主流下载站点)
5.4.3 EXTRACT_SUFX (压缩包所用的扩展名)
5.4.4 DISTFILES (全部源代码包)
5.4.5 EXTRACT_ONLY (只解压缩部分源文件)
5.4.6 PATCHFILES (通过下载得到的补丁文件)
5.4.7 来自不同站点的多个源代码包或补丁文件 (MASTER_SITES:n)
5.4.8 DIST_SUBDIR (独立的源码包子目录)
5.4.9 ALWAYS_KEEP_DISTFILES (一直保存源码包)
5.5 MAINTAINER (监护人)
5.6 COMMENT (一句话说明)
5.7 依赖关系
5.7.1 LIB_DEPENDS (依赖的函数库/共享库)
5.7.2 RUN_DEPENDS (依赖的运行环境)
5.7.3 BUILD_DEPENDS (依赖的联编环境)
5.7.4 FETCH_DEPENDS (依赖的下载环境)
5.7.5 EXTRACT_DEPENDS (依赖的解压缩环境)
5.7.6 PATCH_DEPENDS (依赖的打补丁环境)
5.7.7 USE_*
5.7.8 在依赖关系中指定最低版本
5.7.9 关于依赖关系的补充说明
5.7.10 循环的依赖关系是致命的
5.8 MASTERDIR (主 port 所在的目录)
5.9 联机手册
5.10 Info 文件
5.11 Makefile 选项
5.11.1 开关 (Knobs)
5.11.2 OPTIONS (菜单式可选项)
5.11.3 自动激活的特性
5.12 指定工作临时目录
5.12.1 WRKSRC (开始联编操作的目录名)
5.12.2 NO_WRKSUBDIR (不需要临时的联编目录)
5.13 处理冲突
5.13.1 CONFLICTS_INSTALL
5.13.2 CONFLICTS_BUILD
5.13.3 CONFLICTS
5.14 安装文件
5.14.1 INSTALL_* 宏
5.14.2 对可执行文件和动态连接库做脱模 (strip) 操作
5.14.3 安装一个目录下的全部文件
5.14.4 安装附加的文档
5.14.5 子目录
第6章 特殊情况
6.1 共享库
6.2 Ports 的发行限制
6.2.1 NO_PACKAGE (禁止编译结果打包)
6.2.2 NO_CDROM (禁止以 CDROM 发行预编译包)
6.2.3 NOFETCHFILES (不自动抓取指定的文件)
6.2.4 RESTRICTED (禁止任何形式的再分发)
6.2.5 RESTRICTED_FILES (禁止某些文件的再分发)
6.3 联编机制
6.3.1 Ports 的并行联编
6.3.2 makegmake, 以及 imake
6.3.3 configure 脚本
6.3.4 使用 scons
6.4 利用 GNU autotools
6.4.1 入门
6.4.2 libtool
6.4.3 libltdl
6.4.4 autoconfautoheader
6.4.5 automakeaclocal
6.5 使用 GNU gettext
6.5.1 基本用法
6.5.2 可选用法
6.5.3 处理消息编录目录
6.6 使用 perl
6.7 使用 X11
6.7.1 X.Org 组件
6.7.2 需要使用 Motif 的 port
6.7.3 X11 字体
6.7.4 通过 Xvfb 来获得虚拟的 DISPLAY
6.7.5 桌面项
6.8 使用 GNOME
6.9 使用 Qt
6.9.1 在 port 中使用 Qt
6.9.2 组件的选择 (仅限 Qt 4.x)
6.9.3 其他考虑
6.10 使用 KDE
6.10.1 变量定义 (只用于 KDE 3.x)
6.10.2 用于 KDE 4 的变量定义
6.11 使用 Java
6.11.1 变量定义
6.11.2 采用 Ant 进行联编
6.11.3 最佳实践
6.12 Web 应用, Apache 和 PHP
6.12.1 Apache
6.12.2 Web 应用
6.12.3 PHP
6.12.4 PEAR 模块
6.13 使用 Python
6.14 使用 Tcl/Tk
6.15 使用 Emacs
6.16 使用 Ruby
6.17 使用 SDL
6.18 使用 wxWidgets
6.18.1 介绍
6.18.2 版本的选择
6.18.3 选择组件
6.18.4 Unicode
6.18.5 检测已安装的版本
6.18.6 定义的变量
6.18.7 bsd.port.pre.mk 中进行处理
6.18.8 额外的 configure 参数
6.19 使用 Lua
6.19.1 介绍
6.19.2 选择版本
6.19.3 组件的选择
6.19.4 检测系统中已安装的版本
6.19.5 定义的变量
6.19.6 bsd.port.pre.mk 时进行处理
6.20 使用 Xfce
6.21 使用 Mozilla
6.22 使用数据库
6.23 启动和停止服务 (rc 脚本)
6.23.1 卸载时停止服务
6.24 添加用户和用户组
6.25 依赖内核源代码的 Ports
第7章 高级 pkg-plist 用法
7.1 根据 make 变量对 pkg-plist 进行修改
7.2 空目录
7.2.1 清理空目录
7.2.2 如何建立空目录
7.3 配置文件
7.4 动态装箱单与静态装箱单的对比
7.5 装箱单 (package list) 的自动化制作
第8章 pkg-* 文件
8.1 pkg-message (安装预编译包时显示的消息文件)
8.2 pkg-install (安装预编译包时执行的脚本文件)
8.3 pkg-deinstall (卸载时执行的脚本文件)
8.4 pkg-req (安装预编译包时检测是否应执行操作的脚本文件)
8.5 改变 pkg-* 文件的名字
8.6 使用 SUB_FILESSUB_LIST
第9章 测试您的 port
9.1 运行 make describe
9.2 Portlint
9.3 使用 Port Tools 来完成测试
9.4 PREFIX (安装时的顶级目录名) 和 DESTDIR
9.5 Tinderbox
第10章 升级一个 port
10.1 使用 CVS 制作补丁
10.2 UPDATING 和 MOVED 文件
第11章 Ports 的安全
11.1 安全为何如此重要
11.2 修复安全漏洞
11.3 通知整个用户群体
11.3.1 VuXML 数据库
11.3.2 VuXML 简介
11.3.3 测试您对 VuXML 数据库所作的修改
第12章 该做什么和不该做什么
12.1 介绍
12.2 WRKDIR (联编时使用的临时目录)
12.3 WRKDIRPREFIX (用于联编的临时目录的父目录名)
12.4 区分不同的操作系统, 以及 OS 的版本
12.5 __FreeBSD_version 值
12.6 bsd.port.mk 之后写一些内容
12.7 在 wrapper 脚本中使用 exec 语句
12.8 理性行事
12.9 遵循 CCCXX 设置
12.10 遵循 CFLAGS
12.11 线程库
12.12 反馈
12.13 README.html
12.14 使用 BROKENFORBIDDENIGNORE 阻止用户安装 port
12.14.1 变量
12.14.2 实现说明
12.15 使用 DEPRECATEDEXPIRATION_DATE 表示某个 port 将被删除
12.16 避免使用 .error 结构
12.17 对于 sysctl 的使用
12.18 重新发布的 distfiles
12.19 杂记
第13章 示范的 Makefile
第14章 保持同步
14.1 FreshPorts
14.2 代码库的 Web 访问界面
14.3 FreeBSD Ports 邮件列表
14.4 位于 pointyhat.FreeBSD.org 的 FreeBSD Port 联编集群
14.5 FreeBSD 的 Ports Distfile 扫描器
14.6 FreeBSD 的 Ports 追踪系统
表格清单
表5-1. 常用的魔术 MASTER_SITES
表5-2. 常用的 USE_* 变量
表5-3. 常见的 WITH_*WITHOUT_* 变量
表6-1. gmake 有关的 port 变量
表6-2. 用于用到了 configure 脚本的 port 的变量
表6-3. 使用 scons 的 port 会用到的变量
表6-4. 用于用到 perl 的 port 的变量
表6-5. 用到 X 的 port 可以使用的变量
表6-6. 用于表示对 X11 某些组件的依赖关系的变量
表6-7. 用于使用 Qt 的 port 的变量
表6-8. 其他用于使用 Qt 4.x 的变量
表6-9. 可用的 Qt4 函数库组件
表6-10. 可用的 Qt4 工具组件
表6-11. 可用的 Qt4 插件组件
表6-12. 用于使用 KDE 3.x 的 port 的变量
表6-13. 可用的 KDE4 组件
表6-14. 用到 Java 的 port 可以使用的变量
表6-15. 向使用了 Java 的 port 提供的变量
表6-16. 为使用 Java 的 port 定义的常量
表6-17. 用到 Apache 的 port 可以使用的变量
表6-18. 在移植 Apache 模块时比较有用的变量
表6-19. 用到 PHP 的 port 中可以使用的变量
表6-20. 对用到 Python 的 port 最有用的一些变量
表6-21. 用到 Tcl/Tk 的 port 可以使用的变量
表6-22. 使用 Ruby 的 port 可以使用的变量
表6-23. 使用 Ruby 的 port 中的一些可用的只读变量
表6-24. 用于选择 wxWidgets 版本的变量
表6-25. 可用的 wxWidgets versions
表6-26. wxWidgets 版本
表6-27. 用于选择希望的版本的 wxWidgets versions
表6-28. 可用的 wxWidgets 组件
表6-29. 可用的 wxWidgets 依赖类型
表6-30. 默认的 wxWidgets 依赖关系类型
表6-31. 用以在 Unicode 版本的 wxWidgets 的变量
表6-32. 为使用 wxWidgets 的 port 定义的变量
表6-33. 可用于 WX_CONF_ARGS 的值
表6-34. 用于选择 Lua 版本的变量
表6-35. 可用的 Lua 版本
表6-36. 指定 Lua 版本
表6-37. 用于选择推荐 Lua 版本的变量
表6-38. 可用的 Lua 组件
表6-39. 可用的 Lua 依赖关系类型
表6-40. 默认的 Lua 依赖关系类型
表6-41. 为用到 Lua 的 port 定义的变量
表6-42. 用到 Mozilla 的 port 使用的变量
表6-43. ports 中有关数据库的变量
表10-1. cvs update 文件名前字母前缀的含义
表12-1. __FreeBSD_version 值
范例清单
例5-1. 简化的 MASTER_SITES:n 用法, 每个文件来自一个站点
例5-2. 简化的 MASTER_SITES:n 用法, 其中同一个站点上提供了不止一个文件
例5-3. MASTER_SITE_SUBDIRMASTER_SITES:n 的详细用法
例5-4. 用到逗号分隔符、 多个文件, 多个站点和 不同子目录的 MASTER_SITES:n 详细用法
例5-5. MASTER_SITE_SOURCEFORGEMASTER_SITES:n 的详细用法
例5-6. 简化的 PATCH_SITES 中的 MASTER_SITES:n 用法。
例5-7. 如何使用 ALWAYS_KEEP_DISTFILES
例5-8. 简单的 OPTIONS 用法
例5-9. Old style use of OPTIONS
例5-10. 处理选项时的错误做法
例5-11. 处理选项时的正确做法
例6-1. 使用 USE_XORG 的例子
例6-2. 在变量中使用与 X11 有关的变量
例6-3. 选择 Qt4 组件
例6-4. USE_KDE4 示例
例6-5. 用于 PEAR 类的 Makefile 例子
例6-6. 选择 wxWidgets 组件
例6-7. 检测已安装的 wxWidgets 版本和组件
例6-8. 在命令中使用 wxWidgets 变量
例6-9. 选择 Lua 版本
例6-10. 选择 Lua 组件
例6-11. 检测已安装的 Lua 版本和组件
例6-12. 告诉 port 到什么地方去找 Lua
例6-13. 在命令中使用 Lua 变量
例12-1. 怎样避免使用 .error
若您有关于 FreeBSD ports 系统的问题, 请发送电子邮件至 <[email protected]>。
关于此文档的任何问题, 请致函 <[email protected]>。