在 FreeBSD ports 树中管理本地补丁的首选方法是什么。例如,请看textproc/urlview
。此 port 安装脚本url_handler.sh
。此脚本定义用于不同 url 类型的应用程序。默认应用程序与我的系统不匹配。
那么该怎么办呢?我过去曾使用过两种不太令人满意的方法:
- 构建并安装 vanilla 端口并直接编辑 `/usr/local/bin/url_handler.sh`。这会弄乱已安装端口的删除,因为校验和已更改。可以通过直接弄乱 `/var/db/pkg` 中的文件来避免这种情况,但这是最不礼貌的做法。
- 在 `/usr/ports/textproc/urlview/files` 中创建一个补丁文件,在 `patch` 阶段相应地修补脚本。但是,如果您使用 `portsnap`,此操作会失败,因为它会在更新 ports 树之前清除目录。
你们是如何处理这类事情的?
答案1
选项 2。我有一些针对特定端口的补丁。如果有较新的版本,请更新您的端口树,然后复制修改后的补丁并手动运行“make patch”以查看它是否干净地修补。然后“make”以查看是否构建。
答案2
我会建议选择 2,但要使用脚本来复制补丁。脚本有助于记录流程,这对您一年后回过头来弄清楚自己做了什么非常有用。
尽管你可以编写一些花哨的东西来将目录结构“覆盖”到端口树上,但我发现越简单越好:
#/bin/sh
PORTSTREE="/usr/ports"
MYPATCHDIR="/wherever/you/put/these"
# my textproc/urlview patch
cp ${MYPATCHDIR}/myurlview.patch ${PORTSTREE}/textproc/urlview/files
现在,您可以在一个文件中列出所有修改,并将所有补丁放在一个目录中。在 portsnap 或(现在)svn 新的 ports 树后运行该脚本。
答案3
我已经开始使用 git repo (https://github.com/freebsd/freebsd-ports.git),然后拥有包含我需要的更改的本地分支。当我创建端口树中没有的自己的端口时,我也使用这个。