精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● FreeBSD>>安装与升级>>转发stormful(原作)的“FreeBSD浅度历险”供大家分享(上)

主题:转发stormful(原作)的“FreeBSD浅度历险”供大家分享(上)
发信人: chienyusin()
整理人: sungang(2003-04-02 19:51:48), 站内信件
FreeBSD浅度历险
stormful(原作)
    可能是刚刚过完年的原故,也可能是因为家里刚刚添了一个小宝宝的原因。过完年的这一个多月,我怎么也没有办法刹下心来写程序。每天坐在计算机前不是看电影就是在网上毫无目地的闲逛。一天在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,Grub真是个好东东。根据上面的Grub命令编辑/boot/grub/menu.lst。我要把GRUB安装到IDE1上,也就是FreeBSD所在硬盘的MBR上。在GRUB中执行以下GRUB命令。 
  find /boot/grub/stage1 
  root (hd1,0,a) 
  setup (hd1) 
   
OK,GRUB成功安装在IDE1的MBR上。reboot。但是,在GRUB中FreeBSD和Windows都不能启动。怎么回事?回到FreeBSD中,我把GRUB安装到软盘上。 
  find /boot/grub/stage1 
  root (hd1,0,a) 
  setup (fd0) 
重新启动,一切正常,无论是Windows还是FreeBSD引导都没有问题。这真是见了鬼了。后来我发现,把GRUB安装到哪个IDE的MBR上,哪个IDE上的硬盘对于GRUB来说就事hd0。在我的这种情况下,GRUB中的hd分布如下: 
   IDE0  hd1 
   IDE1  hd0 
   IDE2  hd2 
   IDE3  hd3 
因此必需修改menu.lst中的hd。但是Windows系统在引导的时候,必需要在hd0上。这时候就需要GRUB的map命令来互换hd0和hd1。修改后的menu.lst如下: 
default 0 
timeout 30 
title Windows 2000 
     map (hd0) (hd1) 
     map (hd1) (hd0) 
     rootnoverify (hd1,0) 
     chainloader +1 
title  FreeBSD 
     root   (hd0,0,a) 
     kernel /boot/loader 
这回,终于一切太平了。 
  

4、crazy mouse 
我玩FreeBSD的最初目的,就是想看看在FreeBSD下启动GNome是否像linuxsir上的那位大虾所说的那么快。因此在解决了多重启动问题后,我立刻开始配置X-Window。 
  /stand/sysinstall 
   
开始配置鼠标和显示卡。但是,在配置鼠标的时候,却又遇到了问题。我的鼠标是PS/2光电鼠标。在配置鼠标时,如果选择mouse type为ps/2,我的鼠标就会在屏幕上乱窜,成了真正的疯狂老鼠。选择其他类型时,要么依然crazy,要么一动不动,变成了死老鼠。我的天呀,我怎么这么倒霉呀。 
上网查资料,但没有什么解决办法。想尽各种办法,还是crazy依然。换个鼠标,立刻好使。呵呵,但那不是我的风格。最后只好在FreeBSD的ps/2鼠标驱动上打主意。FreeBSD有一点特别好,它的man资料非常齐全。查找设备驱动的资料的办法就事“man device—name”。FreeBSD的ps/2鼠标的驱动名是psm。因此只需要man psm就可以查找psm的配置。关键在于psm的flags。我关心的flags bit位如下: 
  bit 0-3 鼠标的采样率。它控制这鼠标的速度。在Windows中,ps/2鼠标的采样率是100ppi。因此bit 3为1。 
  bit 4-7 是鼠标加速。windows中鼠标加速一般为中等。因此该4bit的值是8 
  bit 9  该bit如果置位,psm不去尝试识别鼠标的类型,只是把鼠标当做标准ps/2鼠标来驱动。这是关键。 
   
这个flags可以在启动配置文件中设置,也可以通过编译内核设置。 
  a)在配置文件中设置:修改/boot/kernel.conf添加以下内容。 
   
    en psm0 
    ir psm0 12 
    f psm0 0x284 
     
  b)编译内核。在内核配置文件中把行 
   
    device          psm0    at atkbdc? irq 12 
    修改成 
    device          psm0    at atkbdc? flags 0x284 irq 12 
这样,疯狂老鼠终于被制服了。不过我也损失了一些东西:我不能使用鼠标的滚轮。尽管我用不了mouse wheel,不过还是把mouse wheel的配置方法写在这里吧。首先要安装imwheel软件包,该软件包把鼠标的4、5健转换成相应的热键。因此要使用mouse wheel必需安装该软件包。 
cd /usr/ports/x11/imwheel 
make install clean 
cp /usr/X11R6/etc/imwheelrc ~/.imwheelrc 
你可以根据个人喜好修改.imwheelrc文件。在.xinitrc中添加下面这行来启动imwheel。 
imwheel -k 
wheel ps/2鼠标一共有5个健。 
  1 left click 
  2 right click 
  3 middle click 
  4 wheel up 
  5 wheel down 
因此,你必需告诉moused哪个键是wheel健。在/stand/sysinstall程序的鼠标配置中,设置mouse flages中加入'-z 4'。或者在/etc/rc.conf文件中加入一行: 
   moused_flags="-z 4" 
呵呵,这里所说的flages和上面的哪个flags可不是一回事呀。上面的那个是psm的flags,这个是moused的flags。 
同时,你要告诉X-Windows关于wheel的信息。在InputDevice mouse中加入一下两行: 
        Option      "Buttons" "5" 
        Option      "ZAxisMapping" "4 5" 
当然,上面所说的配置只是对于5健ps/2鼠标而言。如果鼠标健多于5个,修改相应的数字。 
  
5、ADSL 
在96年的时候,我使用Modem上网。那时候上网速度慢,而且花费昂贵,因此也没觉得Internet对我有多么重要,主要的知识来源是书店。但现在的我没有Internet几乎不能活了。每天查资料、写程序就是我的生活。 
配置完鼠标,我立刻就开始配置ADSL。这次比较顺利,在网上查查资料很快就配置成功了。 
首先,查看kernel配置文件,是否有以下几项。如果没有把他们加上,并重新编译内核。FreeBSD 4.7对ADSL是默认支持的,一般不用重新编译内核。 
  options NETGRAPH 
  options NETGRAPH_PPPOE 
  options NETGRAPH_SOCKET 
  options NETGRAPH_ETHER 
  options NETGRAPH_IFACE 
其次,修改/etc/ppp/ppp.conf添加以下内容: 
adsl: 
 set device PPPoE:网卡设备 #例如我的配置是set device PPPoE:vr0。 
 set mru 1492 
 set mtu 1492 
 set dial 
 set login 
 set ifaddr 10.0.0.1/0 10.0.0.2/0 
 add default HISADDR 
 nat enable yes 
 set authname a   #用户名 
 set authkey a   #口令 
如果不清楚设备是什么,查看rc.conf查找ifconfig_???。???一般就是具体的网络设备,我的是vr0。如果没有,使用/stand/sysinstall配置。 
现在,就可以通过一下命令启动pppoe了。 
 ppp -dedicated adsl 
  
如果,你的ADSL是包月的,你可能更希望一开机就启动pppoe。特别是在FreeBSD中,没有网络实在是寸步难行。可以在/etc/rc.conf中加入一下内容,来自动启动pppoe。 
  ppp_enable="YES" 
  ppp_mode="ddial" 
  ppp_nat="YES" 
  ppp_profile="adsl" 
上面的例子的最后一行中的adsl与/etc/ppp/ppp.conf的adsl段相对应,也就是二者要保持一致。如果你的pppoe提供商也支持nat(NETWORK ADDRESS TRANSLATION),你不需要配置gateway和dns。 
adsl modem不一定非要插在网卡上。可以把adsl modem插在hub上。我在网上看到很多文章说用两块网卡配置adsl局域网接入的文章,我非常不理解。把adsl modem直接插到hub上不是更简单么?这只需要把modem和hub之间的网线改成交叉线。对于如何制作交叉线感兴趣的朋友,可参看http://data.96963.com/20030117/1037437.shtml。以前我有3台电脑,就是用这种方法上网的,呵呵,天天约朋友到我家,上网打Diablo。


[关闭][返回]