已经非常适应Ubuntu的DEB包管理系统,用起来非常爽,即便重灌新机器,在保证网络通畅的情况下,很短的时间用apt-get就可以搭建完整的应用平台,让rails,java,php,django等等全跑起来,整个过程可谓非常平滑.
说实话,我个人对BSD的体验远远不及Ubuntu来得那么平滑,顺利,这里我记下BSD的初体验:
FreeBSD是在虚拟机中安装,Host是Ubuntu 7.10,虚拟机是VirtualBox. 首先是为BSD创建VM Client,这里我在Host上添加了一个tap设备作为虚拟网卡提供给VM Client使用,并为在虚拟网卡和Host的物理网卡之间创建路由,好处是可以让Hout跟VM Client双向通讯(如ssh,scp等等),VM Client通过Host的物理网卡透明访问Internet.(tap配置过程略,不在讨论范围)
用FreeBSD的BootOnly CD镜像文件安装最小系统,文件非常小,大概只有34MB左右.安装过程中根据自己实际局域网情况配置网络,采用ftp被动模式通过ftp: //ftp.cn.freebsd.org安装最小化系统,不安装额外软件包,除了启用ssh服务和选则时区外,不起用其他所有服务,重启.至此得到一个最小BSD系统(完整安装过程略,可以google到大把图文过程)
第一次以root用户登录,输入密码后第一件事是创建一个普通用户,用于执行一般任务
Ruby代码
- # adduser
剩下的就是安装/配置应用程序和服务.FreeBSD提供两种方式安装软件,package和ports,其中package的原理跟 Ubuntu差不多,都是利用命令远程安装预编译的二进制包,而FreeBSD最有特色的就是他的ports系统,这里我重点说ports,因为在FreeBSD上,ports才是王道.怎么理解ports呢?如果站在Ubuntu的角度来看,ports是一个FreeBSD软件仓库的本地镜像,只不过这个镜像只保存了所有的软件的信息和编译用的配置文件,以及软件包依赖信息,如果要安装哪个软件,执行特定的命令,系统会自动到网上抓软件源码和依赖包的源码,用本地配置文件进行编译,安装.
首先是建立这个软件仓库镜像,即ports collection,这里用从FreeBSD 6.0开始引入的portsnap方式建立本地ports,svsup/csup已经不被推荐使用了.创建本地ports的第一步是先配置"去哪里得到软件仓库的镜像",因为访问FreeBSD的官方网站速度实在太慢(我用的是天杀的有线通,sigh~~),修改/etc/postsnap.conf,修改SERVERNAME指向的地址,这里首选安装源是台湾的源,其次是大陆的镜像,据说大陆镜像源里面软件不全,不过我这里访问台湾源速度比较快.Ruby代码
- SERVERNAME=portsnap.tw.freebsd.org
如果是第一次使用portsnap,需要创建/usr/ports,方法是
Ruby代码- # portsnap fetch extract
大概需要下载50M左右的数据,创建成功以后则则只需不定期执行更新ports就可以了
Ruby代码- # portsnap fetch update
这 里有个加速ports安装速度的技巧,安装ports时默认的做法是用fetch去访问官方网站并抓软件,首先官方网站太远,速度很慢.其次是fetch 抓package效率不高,可以通过设置安装源到比较近的镜像站点,并换用比较快的wget替换比较慢的fetch或用支持多线程的axel提高下载/安 装速度(小心用axel开太多线程而被封).
修改安装源,检查/etc目录下是否有make.conf这个文件,如果没有可以从/usr/share/examples/etc/make.conf拷贝一份到/etc下面,修改/etc/make.conf,在尾部添加下面几行
Ruby代码- MASTER_SITE_BACKUP?= \
- ftp://freebsd.csie.nctu.edu.tw/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR} \
- ftp://ftp.cn.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
- ftp://ftp.freebsdchina.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/
- MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}
修改完毕安装源后开始安装程序,首先要安装的程序是"sudo",是为了方便让普通用户可以通过ssh登录BSD后可以用root用户身份执行命令,后面的安装过程均通过普通用户完成,尽量不使用root用户.
Ruby代码- # cd /usr/ports/security/sudo
- # make install clean
在BSD上用ports安装软件全部遵循这一模式,进入到/usr/ports/somepackage,执行"make install clean"然后就可以去喝杯茶,BSD会帮你搞定一切.
装完软件有个小技巧,每个软件安装完毕后执行一次rehash命令(csh shell,如果是sh shell则用hash -r),用以刷新环境变量,这时新安装的软件马上被加载到系统命令路径,软件就马上可用了.
用visudo配置sudo用户权限,添加一个普通用户可以执行sudo的能力,这里我加入'daniel'这个用户,而且我比较懒,设置为执行sudo不需要密码验证用户,添加一行
Ruby代码- daniel ALL=(ALL) NOPASSWD: ALL
好的,现在可以通过Host的终端ssh到BSD服务器了,以后所有操作均通过ssh远程执行
Ruby代码- $ ssh daniel@vm_clent_ip_address
现在我们需要安装wget,为了加速其他的ports的安装
Ruby代码- % cd /usr/ports/ftp/wget
- % sudo make install clean
安装完毕,rehash,配置用wget来作为安装ports的下载工具,编辑/etc/make.conf,添加下面两行
Ruby代码- FETCH_CMD=wget -c -t 1
- DISABLE_SIZE=yes
如果安装了/usr/ports/ftp/axel,那么配置跟wget差不多
Ruby代码- FETCH_CMD=axel -a
- DISABLE_SIZE=yes
===== 安装 & 部署rails应用 =====
安装ruby + rubegems + 相关依赖包Ruby代码- % cd /usr/ports/devel/ruby-gems
- % sudo make install clean
- % rehash
- % sudo gem install rails
- % rehash
- % sudo gem install mongrel mongrel_cluster
安装Sqlite3数据库 + sqlite3-ruby驱动:
Ruby代码- % cd /usr/ports/databases/rubygem-sqlite3/
- % sudo make install clean
安装MySQL:
Ruby代码- % /usr/ports/databases/mysql51-server
- % sudo make install clean
- % sudo mysql_install_db
- % sudo chown -R mysql:mysql /var/db/mysql/
- % sudo /usr/local/bin/mysqld_safe -user=mysql &
- % sudo su
- # echo 'mysql_enable="YES"' >> /etc/rc.conf
- # exit
- % sudo cp /usr/local/share/mysql/my-medium.cnf /var/db/mysql/my.cnf
scaffold测试
Ruby代码- % rails demo
- % cd demo
- % ./script/generate scaffold book title:string author:string
- % rake db:migrate
- % ./script/server
顺便说说FreeBSD的package 方式安装软件吧,这个包管理系统跟Ubuntu的apt-get是最接近的.都是直接下载,安装预编译的二进制软件,因为预编译的二进制软件一般采用比较 保守的配置选项,所以在效能上比不上ports本机自动下载源码并在本机编译出来的软件.同样,用package安装软件也有将源服务器设置为比较近的镜 像服务器来加速的办法.
首先查看当前的shell是哪个版本,FreeBSD提供了几种默认的shell,一般是sh或者csh/tcsh,查看方法是
Ruby代码- % echo $SHELL
如果是sh shell,编辑~/.cshrc,在尾部插入
Ruby代码- setenv PACKAGEROOT "ftp://ftp.freebsdchina.org"
如果是sh shell,编辑~/.shrc,在尾部插入
Ruby代码- export PACKAGEROOT="ftp://ftp.freebsdchina.org"
安装package的一般方法是
Ruby代码- % pkg_add -v -r packagename
说说FreeBSD有 点不爽的地方,更新portsnap太慢,尤其是在第一次,国内暂时找不到稳定高速的源服务器,环顾一周,人们大多选则台湾,日本的源服务器.抱怨源不够 快,不够多,跟新慢的比比皆是.按说portsnap比cvsup要快多了,但是首次下载量也要50MB以上,解压缩后将近 300~400MB,算上跨国际网络传输,情况就更加糟糕了,FreeBSD将ports的 配置信息完整的保存在本机上,对比Debian/Ubuntu的做法,只将源服务器的软件库索引保存在本地,一台新灌的机器,稍加配置,一组apt- get命令就齐活了,第一次更新本地索引大概只4~5MB左右,国内电信,网通,铁通,教育网已有不少稳定快速的源服务器.源里面的软件经过精心维护/测 试,二进制包下载安装快速,安全补丁跟新及时,缺点是没有本地编译带来的性能优势,维护也比较容易.如果不是在大规模计算密集型的场景中,要榨干硬件每一 点资源,硬件负载还有那么多一丁点富裕的情况下,我更加偏向选用这种基于DEB包管理的系统.使用FreeBSD过程中,可以亲身体验了一回那种一切皆从源码编译的快感,耗费的时间确相当可观,人生苦短,多享受生活吧.我更认同了一次编译,众人分享的二进制包管理模式.
========== 后记 ==========
VirtualBox对FreeBSD的支持还存在写bug
总是随机出
sigreturn: eflags = 0x80203
sigreturn: eflags = 0x80247
sigreturn: eflags = 0x80282
console被锁死了,只能通过另外一个终端ssh上去BSD,杀死进程或者执行reboot重启
这个bug已经在VirtualBox网站上被确认了,希望VirtualBox被SUN收购后能做的更好