无惊无险:FreeBSD浅度历险
可能是刚刚过完年的原故,也可能是因为家里刚刚添了一个小宝宝的原因。过完年的这一个多月,我怎么也没有办法刹下心来写程序。每天坐在计算机前不是看电影就是在网上毫无目地的闲逛。一天在 www.linuxsir.com 的bbs上看到一个关于FreeBSD启动Gnome速度神速的帖子。这引起了我极大的兴趣,顿感手痒难奈。我以前听说过FreeBSD,但从来没玩过。在我以前的感觉中,FreeBSD是专门运行在服务器上,用命令行操作的专用操作系统。哈哈,纯粹一个 FreeBSD菜鸟。这篇文章记录了我安装、配置FreeBSD的过程。写这篇文章的目的一方面是为了防止我过一段时间忘记了安装的细节;另一方面是为了 同FreeBSD迷们分享经验,对于像我一样的初学者可以少走一些弯路。
1、安装哪个版本的FreeBSD
由于我对FreeBSD一无所知,因此像这么简单的问题都成了大问题。为了找到答案,我翻遍了linuxsir的bbs。在那里有很多FreeBSD大虾关于版本问题的介绍,大致情况如下:
a)4.7。它是FreeBSD-4的当前稳定发行版。
b)4.8。它当前的版本是RC2。
c)5.0。它是FreeBSD的一个新分支,据说对中文支持不是太好。
我选择了4.7版。呵呵,我这人就是落后。当别人都在装RedHat 8.0的时候,我却装7.3。呵呵,比较省心嘛。
2、如何获取FreeBSD
这对我来说,也是一个大问题。我在网上找了半天,也没找到一个比较快的下载FreeBSD的FTP站点。最后没办法了,就去FreeBSD的老家 ftp.freebsd.org 试试,居然易做图是150k/s,爽。如果使用wget访问 ftp.freebsd.org ,需要附加参数--passive-ftp。
wget --passive-ftp -r ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/4.7/
FreeBSD 4.7一共有5张光盘:
-rw-r--r-- 1 ftpuser ftpusers 639729664 Oct 10 00:11 4.7-disc1.iso
-rw-r--r-- 1 ftpuser ftpusers 666075136 Oct 9 09:17 4.7-disc2.iso
-rw-r--r-- 1 ftpuser ftpusers 654835712 Oct 8 12:13 4.7-disc3.iso
-rw-r--r-- 1 ftpuser ftpusers 648937472 Oct 8 12:47 4.7-disc4.iso
-rw-r--r-- 1 ftpuser ftpusers 198672384 Oct 10 01:07 4.7-mini.iso
我后来才知道,其实只需要下载4.7-mini.iso这张光盘就行了。在FreeBSD中,安装软件基本上都是通过Ports完成的。
3、安装FreeBSD
在写安装系统这部分前,我现介绍一下我的机器配置:
CPU PIII 733
Memory 512M
IDE0 60G Dos
IDE1 15G
IDE2 15G Linux
IDE3 CDROM
Sound cs4281
Video Radeon7500
Mouse ps/2
Network VIA VT6102 Rhine II 10/100BaseTX + ADSL
我使用FreeBSD的硬盘安装方式安装FreeBSD。把FreeBSD的光盘镜像拷到一个FAT32分区里。制作了两张安装启动软盘。这两张软盘的镜像分别是floppies/kern.flp和floppies/mfsroot.flp。
DOS/Windows下执行:
TOOLS\RAWRITE FLOPPIES\KERN.FLP A:
TOOLS\RAWRITE FLOPPIES\MFSROOT.FLP A:
Linux下执行:
dd if=kern.flp of=/dev/fd0
dd if=mfsroot.flp of=/dev/fd0
用 软盘引导机器,终于看到了FreeBSD的安装界面了。呵呵,真是出奇的简陋,甚至还比不上早期SCO UNIX的安装界面。在安装界面里我选择硬盘安装,结果提示我找不到FreeBSD安装文件,什么原因?切换到Windows下,上网查了半天资料才知道 FreeBSD的安装文件必需方在一个Dos主分区里,而且存放文件的目录必需是分区根目录下的FREEBSD目录。这安装程序真是够弱智的了,远远比不 上现在RedHat的安装程序。一顿翻箱倒柜后,终于找到了一块4年前的2G硬盘。把FreeBSD安装文件拷这块硬盘上,并把它挂到IDE0上。这回 FreeBSD的安装程序终于找到的安装文件。
在网上看到FreeBSD的分区概念与Windows和Linux有所不同。下面这段话是我摘录自 http://www.powerba.com/develop/os/unix/article/20010601003.htm 。
在FreeBSD中,分区的概念略有不同。FreeBSD将硬盘分成最多四个slice(片段),每一个slice上又可以分成最多8个 partition(分区)。也就是说FreeBSD将DOS/Windows里的一个分区看作一个slice。在以后的叙述中,将采用FreeBSD的 概念,即slice和partition的硬盘分区术语。
我个人感觉slice的作用应该等同于windows的扩展分区。我打算在IDE1上的硬盘上安装FreeBSD。由于没有经验,一切采取默认设置:
a)在整块硬盘上建立一个slice。
b)在slice建立FreeBSD分区,默认分区方式。
c)安装Boot Manager到IDE1的MBR(ad1)。
d)安装软件种类选择All,安装Ports。呵呵,当时我根本就不知道Ports是什么。反正,让安装就先装上。
很快,安装就结束了。这可不是FreeBSD有多快,而是安装程序根本就没装多少Package。修改Bios,令IDE1为引导硬盘。于是,我就进入了FreeBSD。
3、Boot Manager
在进行其他配置之前,我想先解决多重引导问题。毕竟来回切换BIOS太麻烦了。当把Windows和Unix类操作系统安装在一台机器上时,安装各 种Boot Mananger的时候一定要小心。以前,在使用RedHat 6.2的时候就曾经吃过大亏。那时候,胡里胡都地把lilo安装在Windows所在硬盘的MBR上,结果Windows引导不起来了。后来,为了避免出 错,我都是每种操作系统单独使用一块硬盘,并在各自的MBR上安装Boot Manager。在以前,我甚至把Lilo安装在软盘上,反正启动的时候只是读一个sector,慢也慢不到哪里。后来,我用Windows NT的OS Loader进行多重引导。
像以前在Linux下作的那样,我进行了一下操作:
a)dd if=/dev/ad1 of=bootsect.bsd bs=512 count=1
b)把bootsect.bsd拷贝到Windows的c:\下。
c)编辑boot.ini,添加一行c:\bootsect.bsd="FreeBSD 4.7"。
d)重新引导系统。
这时候,我看到了NT OS Loader的Boot选择菜单。我想测试一下FreeBSD是否能够正常引导,于是我选择了FreeBSD 4.7菜单项。OK,显示出来FreeBSD的Boot Manager菜单。我按键F1,想引导FreeBSD。这时候:
..........................灾难发生了!!!
..........................别拦这我,我要跳楼!!!
发生什么事情了?FreeBSD的Boot Manager居然又跳回了Windows OS Loader菜单了。怎么回事?不清楚。我选择了Windows 2000,想进入Windows后,上网查查是怎么回事。但.........Windows启动不起来了。我重新启动,再次尝试进入Windows结果 还是一样。晕。我赶紧跑到Linux下,用FDisk看看Windows的分区。..........发现,IDE0上的Windows分区变成了 IDE1上的FreeBSD分区了。也就是说IDE0上的硬盘的分区和IDE1上的硬盘的分区完全一样了。晕毙。
怎么会这样呢?Windows完蛋了,上不了网,我只好跑到FreeBSD里去查阅FreeBSD的HandBook。HandBook关于FreeBSD和NT OS Loader是这样描述的:
a)如果FreeBSD和Windows安装在同一块硬盘上,可以把/boot/boot1直接拷贝到windows下当做引导文件。
b)如果不是安装在同一块硬盘上,/boot/boot1不能引导FreeBSD。这时候就需要/boot/boot0。但是不能简单的把boot0拷贝 到Windows下。boot0相当于FreeBSD的Boot Manager。该Manager每次运行的时候读取分区表,通过分区的active标志判断上次启动的操作系统。当用Manager启动某个操作系统 时,该Manager重写分区表。
现在我知道了,刚才我执行的操作相当于(其实就是)把boot0拷贝到windows里了。这是我见过的最缺德的一种Boot Manager了。你见过更缺德的么?
至于说如何把Windows NT OS Loader和boot0联合到一起使用,我就不知道了。因为,我再也没敢尝试。毕竟重新安装Windows需要很长的时间。在安装FreeBSD前,为 了安全起见,我把我现在正在做的项目Looking备份到我的数码相机中。但我的硬盘中的大量的资料全都丢失了,特别是我们家宝宝从出生到现在的400多 张相片。真是心疼呀!
于是安装FreeBSD变成了安装Windows 2000。在安装Windows 2000的过程中,我在想:如果Looking也没了,我该怎么办?改行,去开小买店。
经过这次沉重的打击后,我真想放弃FreeBSD。呵呵,但那不是我的风格。不仅要FreeBSD,而且一定要解决多重启动问题。FreeBSD的Boot Mannager不敢使了,就换一个更好的Boot Mananger。我选择了Grub。
cd /usr/ports/sysutils/grub
make install clean
OK,grub安装好了。FreeBSD的Ports真是个好东西。
mkdir /boot/grub
cp /usr/local/share/grub/i386-freebsd/* /boot/grub
为了安全起见,我制作了一个grub启动软盘。
dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
dd if=/boot/stage2 of=/dev/fd0 bs=512 seek=1
用软盘启动进入grub交互界面。
进入FreeBSD:
root (hd1,0,a)
kernel /boot/loader
进入Windows 2000
rootnoverify (hd0,0)
chainloader +1
统统OK