用户工具

站点工具


doc:p:add_new_port

增加新的 Port

为什么需要新的 Port

  1. 有些软件可以在Linux上运行,但是没有提供FreeBSD的版本。
  2. 有些软件开发出了FreeBSD版,但是它没有出现在ports tree中。
  3. 我在FreeBSD上写了一个很棒的软件,我想把它分享给所有FreeBSD用户。

如何新增 Port

新增Port其实是一件很容易的事情,它可不像FreeBSD src的开发那么复杂。
想要让一个软件进入官方的ports tree,大致需要如下步骤:

  1. 合法地获取一份该软件的源代码(暂不讨论二进制形式)。
  2. 成功地在你的机器上编译它,运行它。做了patch之后应该反馈给原作者。
  3. 学习《FreeBSD Porter手册》,编写Makefile等脚本。
  4. 使用必要的工具检测脚本的正确性,以及安装过程是否符合FreeBSD规范。
  5. 提交PR,http://www.freebsd.org/send-pr.html,等待Ports开发者与你联系。
  6. 听取Ports开发者给你的建议,做出必要的改进后,等待Ports committer为你提交吧!

当然,想要Port一个软件,你还得掌握一些编程能力,能读懂一些构建脚本,必要时还要修改源代码!

小建议:一般递交PR后大家都想很快知道结果,但是有时候由于种种原因,PR递交上去后十天半个月甚至一直都没有人理会。
你给wen@FreeBSD.org发个邮件,告诉你的PR号,他会很快处理你的PR的:>

一些要点和技巧

1./usr/ports/Mk/

这个目录存放了FreeBSD Ports系统的基本脚本,其中bsd.port.mk是必读的,
bsd.sites.mk记录了很多固定的下载站点,应该也要看一下。
其他取决于你用到了哪些软件,文件名内有相关软件名的也应该读一下。

2.make不仅仅是make...

make不仅仅可以构建,FreeBSD的make有个-V参数,
它可以显示一些变量的值,如WRKDIR、WRKSRC、DISTDIR、PATCHFILES等。
“make -V variable”的返回结果有时候会派上用场。

3.高效地制作补丁

比如当前在某个ports目录下,想修改源码中一个名为src1.cpp的文件,操作如下:

make patch #patch是一个target,参见/usr/ports/Mk/bsd.port.mk
pushd `make -V WRKSRC`/src #跳至源码目录
cp src1.cpp src1.cpp.orig #修改src1.cpp前先把它复制为src1.cpp.orig
#修改src1.cpp
popd #返回ports目录
make makepatch #自动制作patch文件,存放于files目录下。

4.关于shar

shar存在的意义是,把一系列文件(文件夹)转化为一个单一的、可以通过sh执行的纯文本文件
以后,只要执行这一个纯文本文件(或者说脚本)就可以还原出之前的若干文件。听起来挺好玩的。

首先确保ports目录是干净的,除files下的patch外,不要包含任何源代码以及编译产生的文件。
确保vim/emacs等编辑器已经关闭,避免临时文件也被打包,除非你修改过它们的配置。

cd ../ #进入该ports的上级
find portname #再次确认哪些文件将被打包
shar `find portname` > ~/portname.sh #生成shell压缩文件

还原方法:

sh ~/portname.sh

或者

chmod +x ~/portname.sh
~/portname.sh

这将会在你的主目录下产生一个包含该ports所有脚本的文件夹。

相关工具

1.genplist

这个工具能方便生成pkg-plist文件
它的Ports位置是:/usr/ports/ports-mgmt/genplist

2.portlint

3.porttools

什么是Porttools,这个问题,自己找资料吧8-)

先看看porttools相关选项

FreeBSD Port Tools 0.99_6
Usage:	port <command> [<options>]

Available commands:
commit	- commit a port into the FreeBSD Ports CVS Repository
create	- create new port from template using newfile(1)
diff	- generate diff against original port version
fetch	- fetch distfile(s) of new port version
getpr	- get patch/shar from a PR
help	- display this command summary
install	- install a port
submit	- submit Problem Report with new port, or port change/update
test	- test port (build, install, package, deinstall)
upgrade	- upgrade a port

可以看出来,Port Tools有commit(上传源码到源码库?貌似这个功能一般人用不上)、test(这个命令 会自动帮你测试build, install, package, deinstall相关功能是否正常)、submit(这个是上报RP的)等等功能

看起来功能丰富,怎么安装呢?

%cd /usr/ports/ports-mgmt/porttools &&sudo make config install clean
[*] NEWFILE  Enable newfile support

推荐取消这个选项,这个选项最终会导致Ruby被安装上,如果觉得无所谓,那选上也无妨

安装好了,稍微配置一下,向 ~/.porttools 写入以下内容。(如果不写 porttools 会默认生成一个配置文件)

# FreeBSD Port Tools configuration file - see porttools(5)
# vim: ft=sh
EMAIL="You@Mail"
FULLNAME="You Name"
ORGANIZATION="The FreeBSDChina Project"
BUILDROOT="/tmp"
ARCHIVE_DIR=""
#DIFF_MODE="CVS"
DIFF_MODE=".orig"
DIFF_VIEWER="less"
PORTLINT_FLAGS="abct"

port submit后 生成RP报告相关信息


维护Ports软件包(更新)
如果你维护的软件有了更新,你又有些空,那就可以更新Ports了、、

更新总要比第一次做要容易

修改版本信息

 PORTNAME=      linnya
-PORTVERSION=   2.2.1
+PORTVERSION=   2.3.0
 CATEGORIES=    audio

之后再目录执行make makesum(本例中,Ports会自动下载linnya-2.3.0,之后生成对于的distinfo信息)

4.tindertox

5.redports

后续工作

  1. 为了使你制作的Port“保鲜”,你应该关注该软件的更新状况。
  2. 最好加入开发者的邮件列表,让他们在开发时就考虑到FreeBSD,避免不必要的补丁。
  3. 你的Email肯定是写在Makefile里的,要保持邮箱畅通。

参考

/data/vhosts/wiki-data/pages/doc/p/add_new_port.txt · 最后更改: 2012/10/22 22:28 由 gehaowu