尝试 FreeBSD
早就想除实验室服务器上的 ubuntu server 而后快,趁着近来总是有人出现 ssh 连接遭拒绝的问题,便下手了。在挑选继任系统上,第一个想到的就是 FreeBSD。也许是一只深受 ESR 的《Unix 编程艺术》的忽悠,对 Unix 始终存在着莫名其妙的神秘感,相对于自己天天都在用的 Linux,前者仿若皇室贵胄,深沉威严;后者则很像与我一样苦出身的平头百姓。
安装
下了 FreeBSD 7.1 amd64 版,然后装上了,是那个系统的最小集。
重启。
失败。发现是在硬盘分区时,忘记设定 FreeBSD 分区的 Bootable 标志了。
重装……重启……成功了!
比当年第一次安装 Linux (Fedora Core 4) 时的效率高多了。一天之内重装系统 8 次,也许再去装任何一个系统都感觉效率很高。
Packages 和 Ports
一直都想寻找一个提供了既适合懒人,又适合爱折腾的人的软件包管理器的 Unix-like 系统,传说 ArchLinux 可以,FreeBSD 也可以,现在我来尝试 FreeBSD 的。
Packages 里提供软件包的二进制版本,Ports 则允许用户从软件包的源码编译安装。很完美,只是觉得许多软件包的版本比较老。比如,我在 Gentoo 里已经用了小半年的 gnome 2.24 了,FreeBSD 7.1 中的版本依然是 2.22,是为了追求稳定么?幸好只是在服务器上用用,如果 FreeBSD 作为我的桌面系统使用,肯定是难投我被 Gentoo 惯出的系统无限升级的癖好。
在 Ports 中编译安装一个软件包,需要进入 ports 目录。比方说,我要安装 nano (似乎那个 ee 不支持 Unicode),要这样做:
$ whereis nano
nano: /usr/ports/editors/nano
# 进入 ports 目录
$ cd /usr/ports/editors/nano
# 编译,安装,清除中间文件
$ sudo make install clean
感觉要比 Gentoo Portage 的软件安装方式罗嗦一点。
我很喜欢在 ports 配置软件包的编译选项。一个软件包在首次 make 时,会给出一个类似 Linux 内核配置那样的终端交互界面。如果事后,想调整编译选项,可以进入对应的 ports 目录,执行 "make config" 打开配置界面调整选项。与 Gentoo Portage 向 /etc/portage/package.use 文件中写入 USE 标识的软件包编译选项配置方式,FreeBSD 更用户友好一些。
Gentoo 当初从 FreeBSD 借鉴的许多思想都很有用,两个都要很感谢。
用户使用 Packages 和 Ports 所安装的软件包默认是放在 /usr/local 中的。感觉这样做很好,即使是把 /usr/local 都删除了,起码还有个基本的系统可以用。Gentoo Portage 所安装的软件包,一股脑都放在 /usr 目录,我觉得不是很合理。
软件包的删除
FreeBSD 在删除软件包时,似乎没有很好的清除依赖包的命令,google 了许多篇文章,也没发现与 Gentoo Portage 提供的 "emerge --depclean" 相若的命令。有人说 pkg_cutleaves 可以,试了试,似乎只能依赖于自己的判断来选择删除哪些包。
比方说,我用 Packages 安装 wmaker。在安装过程中,看到了许多的库被依赖安装了。后来,我后悔了,使用 pkg_delete 删除了 wmaker。有人说 pkg_delete 会检测软件包的依赖,并将它们清除掉,但事实上我看到它仅仅是删除了 wmaker 本身而已。
"pkg_delete -a" 这个命令很绝,一刀下去,就只剩下最初安装的那个基本系统了。为了试验依赖包清除,我胡乱装了许多包,这个命令让我一下回到了起点,不过所删除的那些软件的配置文件还在。
开启 SSH 服务
不想在我的机器与服务器之间辗转反侧,便需要 ssh 来帮忙。FreeBSD 开启 ssh 服务实在是太简单了,只需:
另一种方法就是让 FreeBSD 的 inetd 程序来启动 ssh 服务,这种方法也很简单,只需要打开 /etc/inetd.conf 文件,将下面这行语句的注释符号 "#" 去除即可。
这样,在系统重启后,如无意外,ssh 服务自动就会开启。如果暂时不想重启系统,但又需要开启 ssh 服务,可如此这般:
我更喜欢 Bash
FreeBSD 默认的 shell 是 tcsh,这个让我一开始非常地不适应。特别是我在自己的机器上 ssh 到服务器时,不知道如何使用方向键找回前几次输入的命令。另外,在输入一条命令时,不知道怎么将光标向后移以修改输错的命令。我迫切需要将默认的 shell 设置为 bash。
FreeBSD 默认是没有装 bash 的,便首先 ports 一个,其信息会被自动记录在 /etc/shells 文件中。凡是在 /etc/shells 文件中出现的 shell 都可以设置成用户登陆时的默认 shell,这样做:
启用了 bash 作为 m2 的默认 shell 后,我还需要进行一些配置,譬如修改命令提示符。按照以往的经验,需要将下面这行语句写入 ~/.bashrc 文件。
让我感到很奇怪,FreeBSD 中的 bash 启动后,并不自动去访问 ~/.bashrc 文件。查了一番资料,才知道需要将上述语句写到 ~/.profile 文件。在查资料的时候,我偶然知道在 FreeBSD 中的 bash 中如何让 ls 命令命令产生带颜色的输出,很简单,只需在 ~/.profile 文件中写入:
文档,很典范
那日,装上 FreeBSD 之后,已经凌晨 1 点多了。当时,对装上之后再做什么,茫然无措。于是找到 FreeBSD 手册的中文译本,看了一会,感觉很长见识,一发不可收拾地就把第一部分看完了。以前我一直都认为 Gentoo 的官方文档非常规整,现在看了 FreeBSD 的,感觉也异常的难得。以后抽空就看一些,然后跑到服务器上修炼一番 :)
FreeBSD 社区还出了一本书——《FreeBSD操作系统设计与实现》,我早就在学校的图书馆里见过。现在,似乎是到了应该借阅的时机了。
还有更多好玩的
现在,我对 FreeBSD 所怀有的神秘感渐渐消退,不过兴味依旧盎然。也许有一天,难以忍受 Linux 里太多的聒噪,完全的将 FreeBSD 作为主系统来用也不是不可能的。这两天我在 FreeBSD 里做的几件比较得意的事情,譬如匿名 FTP 配置、lighttpd +fastcgi + moinmoin 的安装与配置……这些事情,我打算在后续的几篇文章中逐一介绍。
2009年1月14日 17:28
刻好的FreeBSD 7.1的dvd一直没装
在台式机上安的FreeBSD 7.0 平时没咋用,一直用GENTOO太懒了
分区很不习惯,在虚拟机下试用gentoo-bsd 不错,很快就能让gentoo用户上手
fb 的ports下还是挺多 ports管理工具的,只是目前用起来还不熟,要是有eix 就爽了
博主以后多出些此类的文章,:D 偷懒学习
2009年1月14日 17:40
@ GunsNRose:
分区,我也不习惯,并且一直都不明白为啥把我的硬盘命名为 aacd0
2009年1月14日 19:38
freebsd从来都是一个强大的系统,但正是因为版权和维护者的不同,一直都比较安静,不如linux热闹。
系统用得顺手就好,平头百姓又有什么自卑的呢?
2009年1月14日 19:58
@ transtone:
在没尝试之前,只是敬畏 FB 的大家风范,搞得比较严谨。现在尝试过了,对 FB 有了一些粗浅的认识之后,感觉在个人桌面上还是 Linux 比较适合我。
可能第一段的文字有点矫情,误让你感觉我自卑
2009年1月14日 21:53
嗯。手里的服务器一直都用FreeBSD。从管理员的角度看,最大的好处是干净。默认安装里,可有可无的服务都关着,但很容易打开。服务器上装的软件还是越少越好。gentoo我没用过,不过arch的软件包的质量不是很好...
现在的FreeBSD的port系统比4.x时代好很多了。保存port的配置选项这个功能,似乎就是最近几年才加上的。
其实在linux2.6之后,freebsd内核的性能并没有绝对优势。两个阵营各自做的测试结果都是相差不多。
http://people.freebsd.org/~kris/scaling/7.0%20Preview.pdf
http://www.kernel.org/pub/linux/kernel/people/npiggin/sysbench/
所以用什么系统似乎更多还是个人偏好吧。
另外,建议楼主重新编译kernel,把不必要的模块去掉。然后配置一下ipfw。
2009年1月14日 23:02
好,这个周末折腾一下 kernel。那个 ipfw 暂且可免,因为那台所谓的“服务器”,并不直接对外连接,平日只是让它对内提供 ftp、git 仓库、wiki 等服务。
2009年1月28日 00:35
楼上的各位童鞋,archlinux编译内核狠简单,实际上,只是选好模块,,就是很简单啦!
2009年1月29日 03:30
首先我个人觉得FreeBSD安装比较快而且方便。我安装一个FreeBSD只需要一到两分钟。
其次,FreeBSD中Gnome半个月前应该就是2.24了,你应该更新ports树,而不是拿7.1光盘中的来。而且ports不分版本的,任何的FreeBSD版本都用相同的ports树。
ports升级其实很频繁,在我这里如果让它自动每天升级的话,每天得占用很多时间编译。更不用说每天都有一堆kernel和userland的更新。
至于ports滞后的问题,确实如此,考虑到稳定性会做出牺牲的。但是很多开发者自己的网页上都会给小白鼠提供当前版本的svn。比如kde现在你可以直接用4.2 beta之类的。QT可以直接上4.5。当然不建议用户使用.
至于罗嗦的安装,自然可以用portmaster,也就一条命令。
FreeBSD提供了一些recursive的清除包的命令,但是这些都不安全,不建议使用。
FreeBSD的文档自然是相当地好,呵呵。 FreeBSD 操作系统设计与实现这本书中一些内容已经过时,看的时候需要注意。
to邱焜: Linux的内核编译要比BSD的复杂得多,选项多得简直不是给人看的,呵呵.
另外,恐怕FreeBSD最好的地方还是代码.我看过一些opensource的代码,比如tex, metapost, gnu-binutils, lua, sqlite, latex, context等等,还是觉得FreeBSD中的代码是最为清晰可读,质量最为上乘的. (当然lua也不错,呵呵)
2009年1月31日 08:16
to楼上:arch那种不是搞选项的,没那么细,模块都是编译好的,可以自己选择编译进开机镜像。
2009年7月01日 18:30
"相对于自己天天都在用的 Linux,前者仿若皇室贵胄,深沉威严;后者则很像与我一样苦出身的平头百姓。"
深有同感啊!
哪天我也来试试看。