freebsd的port系统探秘
freebsd以强有力内核,安全稳定,同时方便的port系统也是最吸引人的地方。
不过,这两天用port遇到ruby版本的问题,好在port也是开放系统,略加研究就能搞定。同时对ports有了个很好的了解。
问题:
freebsd下的ruby总是默认用1.8,装gem也都是装到1.8下,而之前用port装的默认即为1.9,非常迷惑!而生产环境也必须要用1.9环境。
探索:
查看ruby-gems, ruby19下的makefile未发现有硬编码用ruby1.8的内容。找资料研究ports系统。ports本质还是unix下的makefile控制软件编译、安装、清理。只是做了一些规整。
如应用的makefile文件都会.include bsd.port.mk,打开发现这是个巨大的文件,根据变量又会引用其它,如bsd.ruby.mk另外的makefile文件。
打开bsd.ruby.mk,找到问题,ruby_default_ver 定义成了1.8了。而原来那台机器是1.9。
在freebsd网站上查阅到其修订记录,http://www.freebsd.org/cgi/cvsweb.cgi/ports/Mk/bsd.ruby.mk?r1=1.211#rev1.211
在8月24日,把ruby version退回到了1.8!!!
总结:
1. port是一个纯正的unix makefile系统,任务问题都可以查阅Makefile来找到问题。
2. 可以查阅port里的应用的修订记录来定位问题。
3. 当port组件要升级用portupgrade 组件名升级 非常方便