前些天装 Solaris 时因为它不认 Linux 下 fdisk 建立的分区表,要用我的整个硬盘而放弃了。再次开始尝试 FreeBSD。Linux 用着也很好,但就是想尝试更 Unix 的系统,在一年之后再次看 BSD vs Linux 这篇文章时终于感觉看明白了,理解 BSD 系统为什么要采取集中式的开发以及它那样做的好处。Linux 各个发行版更多的是在组装了一个可用的系统,各个发行版可以用不同的组件来组装出这个系统,有差异那是当然的。而 FreeBSD 则本身就是一个可用的系统,所以这个基本系统中的各个组件都能确保良好的合作。下面这句话也是很有意思的:
BSD is what you get when a bunch of Unix hackers sit down to try to port a Unix system to the PC. Linux is what you get when a bunch of PC hackers sit down and try to write a Unix system for the PC.
总之是又想尝鲜了,正好刚考完试,可以先折腾一段时间了。下面记录安装时候的笔记。都是从网上能找到的东西,主要是方便自己以后查看。
- 安装
- 这个不想多说什么了,装过那么多 Linux 以后感觉 FreeBSD 的安装也是很方便的。Arch 的安装程序倒是和 FreeBSD 的很像。(二进制包的打包方式还有启动脚本 rc.conf 之类的都很像。)要注意的是 FreeBSD 下的分区概念和我平时接触的不一样。FreeBSD 必须要安装在我们平时所说的主分区上,在这一个分区上 FreeBSD 又会建立多个 slice,系统的根目录,swap 等是挂载到 slice 上,而不是直接挂载到分区上的。
- ADSL 上网
- 网上找到的,原文在这里,不知道为什么以前在自己家的时候总是失败,现在在学校是没有问题。文件为 /etc/ppp/ppp.conf,注意default 和 adsl 之前没有空格,其他行首为空格。
# $FreeBSD: src/etc/ppp/ppp.conf,v 1.2.2.5 2001/07/13 10:55:23 brian Exp $ default: set log Phase Chat LCP IPCP CCP tun command ident user-ppp VERSION (built COMPILATIONDATE) set device PPPoE:bge0 # 我的是 BroadCom 的网卡 set speed sync set mru 1492 set mtu 1492 set ctsrts off set timeout 30 # 3 minute idle timer (the default) disable lqr deny lqr add default HISADDR enable dns # request DNS info (for resolv.conf) adsl: # 注意:这里的hz163是你的ISP名,要比下面的set语句多出一点(一个空格). set authname user(把这里的user换成你的ADSL用户名) set authkey password (把这里的password换成你的ADSL密码) set dial set login set ifaddr 10.0.0.1/0 10.0.0.2/0 nat enable yes
执行 ppp -ddial adsl 后就可以上网了。 - 升级
- 因为我只有 6.0 的光盘,但是现在都已经到 6.2 了,所以决定先升级。
- 安装 cvsup-without-gui。6.2 里面可以使用 csup,怕 6.0 直接装 csup 会有问题,所以还是先用 cvsup。我是用 pkg_add 来安装的。可能因为版本较老,直接用 pkg_add -r cvsup-without-gui 找不到文件,所以到 ftp://ftp.freebsd.org.cn 手工下载以后安装。
- 更新内核源代码。找到文件 /usr/share/examples/cvsup/standard-supfile,拷贝一份,然后把里面的 *default=xxxxx 改成 cvsup2.FreeBSDChina.org,国内的更新笔记快。然后执行 cvsup -g -L 1 ,-g 表示不要图形界面,-L 控制输出内容,可以是 0 - 3。
注意要升级到 6.2 的话把文件里面的 *default release=cvs tag=RELENG_6 改成 RELENG_6_2(这个表示取出修订标签为 6.2 的版本,如果要升级到 CURRENT,改成 tag=.),这样才能更新到 6.2 的源代码。 - 更新 ports。找到文件 /usr/share/examples/cvsup/ports-supfile,解下来的步骤同上,不过对 ports collection,tag 只能是 “.”。执行完 cvsup 之后 ports 就也更新完了。
- 修改 /etc/make.conf。可以拿了 /usr/share/examples/etc/make.conf 来修改。我现在的配置是:
CPUTYPE=pentium-m CFLAGS=-O2 -pipe COPTFLAGS=-O2 -pipe NO_ATM=true NO_BLUETOOTH=true NO_INET6=true NO_OBJC=true NO_BIND=true ENABLE_WPA_SUPPLICANT_EAPOL=true
看到 Gentoo 的影子了。编辑完以后拷贝回原来的地方或者建个链接。最好先备份一下原来的配置。 - 接下来就到 /usr/src 目录下 make buildworld 了。这个要耐心等了,又想起 Gentoo 了。
- 趁着编译的时间来配置内核。拷贝一份 /usr/src/sys/i386/conf/GENERIC 出来,然后打开编辑器修改了。配置文件很简单,都是名称–值这样的对(其实是选项–参数),而且都有注释,配置起来还是很方便的。
- 等 make buildworld 结束,就 make buildkernel 了。
- 接下来先 make installkernel。重启进入单用户模式,依次运行 mergemaster -p,make installworld,mergemaster。mergemaster 是为了合并有变化的配置文件而运行的,在第二次执行 mergemaster 时会显示有差异文件的 diff 输出,然后让你选择是保留原来的、安装新的还是合并。(又看到 Gentoo 的影子了。)最后重启,如果一切顺利的话就大功告成了。