新增Port其实是一件很容易的事情,它可不像FreeBSD src的开发那么复杂。
想要让一个软件进入官方的ports tree,大致需要如下步骤:
当然,想要Port一个软件,你还得掌握一些编程能力,能读懂一些构建脚本,必要时还要修改源代码!
小建议:一般递交PR后大家都想很快知道结果,但是有时候由于种种原因,PR递交上去后十天半个月甚至一直都没有人理会。
你给wen@FreeBSD.org发个邮件,告诉你的PR号,他会很快处理你的PR的:>
这个目录存放了FreeBSD Ports系统的基本脚本,其中bsd.port.mk是必读的,
bsd.sites.mk记录了很多固定的下载站点,应该也要看一下。
其他取决于你用到了哪些软件,文件名内有相关软件名的也应该读一下。
make不仅仅可以构建,FreeBSD的make有个-V参数,
它可以显示一些变量的值,如WRKDIR、WRKSRC、DISTDIR、PATCHFILES等。
“make -V variable”的返回结果有时候会派上用场。
比如当前在某个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目录下。
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所有脚本的文件夹。
这个工具能方便生成pkg-plist文件
它的Ports位置是:/usr/ports/ports-mgmt/genplist
什么是Porttools,这个问题,自己找资料吧
先看看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"
维护Ports软件包(更新)
如果你维护的软件有了更新,你又有些空,那就可以更新Ports了、、
更新总要比第一次做要容易
修改版本信息
PORTNAME= linnya -PORTVERSION= 2.2.1 +PORTVERSION= 2.3.0 CATEGORIES= audio
之后再目录执行make makesum(本例中,Ports会自动下载linnya-2.3.0,之后生成对于的distinfo信息)