Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18925966
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: BSD

2008-04-07 21:33:04

对于许多电脑用户来说,FreeBSD还是一个比较陌生的系统。本文将以FreeBSD 4.7 Release为例,一步一步地带您安装一份完整的FreeBSD操作系统。

  安装前的准备

  FreeBSD对于系统的硬件适应能力比较强(相比Linux可能稍差,特别是对于新的显示卡的支持;但对于服务器常用的硬件,包括SCSI设备的支持是相当完善的)。IA平台的多数处理器,下至386,上至Pentium-4及其兼容的CPU,都能够运行FreeBSD。为了有效地安装、运行FreeBSD,我个人推荐安装FreeBSD的系统至少要有2GB的剩余硬盘空间,以及至少64MB内存。这样配置的电脑在今天是很容易找到的。考虑到FreeBSD一般都被配置作为服务器使用,上面的配置要求显然是很容易做到的。

  对于服务器来说,双启动是不合适的(服务器往往要求持续、长时间工作,而切换操作系统无疑需要停止服务。此外,双启动的系统稳定性比较差,某个操作系统的崩溃很可能破坏另一个操作系统)。FreeBSD支持和其他操作系统并存、并在开机时通过菜单选择使用的操作系统,但我个人非常反对以这种方式使用FreeBSD。

  那么,让我来从头到尾地安装一台FreeBSD服务器,并说明FreeBSD的安装。为了安装FreeBSD,我准备了这样一台电脑:

  CPU: Pentium II-233, 内存64MB, 硬盘(IDE)6GB, PS/2键盘、鼠标,20x光驱、无软驱、RealTek8139网卡(TP-LINK)。

  上述配置在今天是很容易做到的。当然,就服务器而言,这个配置确实惨了点,不过FreeBSD在上面运行,并承担数据库、动态网页等服务是完全没有问题的。

  首先是准备FreeBSD的安装盘。FreeBSD有许多种安装方式,最简单易行的方式就是使用光盘安装;不过尽管如此,在没有软驱、光驱的计算机上也是可以通过BOOTP服务采用远程引导的方式来安装的。考虑到这种情况比较少见(笔者曾经在一台没有软驱、光驱的计算机上成功安装过FreeBSD,但方法是将硬盘挂接在另一台计算机上,而不是通常的BOOTP),在此不介绍。

  为了安装FreeBSD,我准备了一张空的CD-R。安装FreeBSD最少只需要2张1.44MB的空白软盘(其余文件使用FTP获得),而安装FreeBSD只需要第一张光盘就够了。除非你的计算机很慢,或无法接入Internet,否则一般情况只需要下载第一张光盘的镜像。由于网络中心的FTP上提供了FreeBSD 4.6全部四张光盘的镜像,以及4.6.2的前两张光盘,因此我直接下载并刻了后者的第一张光盘。

  打开计算机,进入BIOS Setup。在其中选择让计算机从光盘启动(这是关键步骤,虽然FreeBSD也可以从DOS环境中启动安装过程,但那可能会有一些问题)、禁用一切用不到的设备,包括串口、并口、软驱控制器(这么做主要是为了提高性能,因为外围设备可能会向主机发送中断请求,而用不到的设备发送请求除了浪费CPU的时间之外没有什么其他作用)。

  FreeBSD安装光盘上的系统使用的是GENERIC内核,这个内核可以适应绝大多数系统的情况。当然,正如他的名字“GENERIC(通用)”,这也带来的较低的性能,例如,这个内核不能够发挥双CPU的能力,等等。不过既然安装过程只会进行一次,我们也不必过分地在意它。

  安装光盘启动(对于软盘启动来说,是根据提示将两张软盘的内容全部加载到内存中)完成后,首先出现的是配置内核。

  配置内核通常不是必需的,因为FreeBSD能够自动识别硬件。然而,如果你的硬件配置比较特殊(例如,有两块网卡,使用特殊的IRQ,比较古老,等等),那么可能需要手工配置一下内核。对于绝大多数情况来说,只要删除那些用不到的设备,就能够正常完成FreeBSD的安装;如果你对于自己的硬件不熟悉,这一过程甚至可以跳过。

  我个人比较喜欢删除不用的设备,于是选择Visual方式,将不需要的设备统统删除。最后,按Q保存配置,进入FreeBSD的安装程序sysinstall(8)。

  FreeBSD基本系统的安装

  作为一个服务器管理员,经常性的服务器软件更新是必不可少的。FreeBSD提供了非常便捷的升级方式——cvsup,它可以从FreeBSD中央cvsup服务器,或某个cvsup镜像上获取FreeBSD的部分或全部源代码,而且,它只下载那些修改过的源代码,并且可以根据需要选择适合你的版本(使用-STABLE可以提供较好的稳定性以及操作系统的最新特性,多数管理员都会选择这个;使用-RELEASE能够获得成熟产品的品质,尽管话是这样说,但实际上选择这一分支的人很少;使用-CURRENT的用户主要是参与FreeBSD开发的人员,这个分支包含了所有即将进入-STABLE分支的新特性,但不要指望这个分支能够提供必要的稳定性保证,也不要指望它能够带来很好的性能,但所有的安全问题都是首先在这个分支内修正的。我将在后面详细介绍这些)。

  一旦最初的内核配置完成,它就会立即启动,并根据配置文件启动sysinstall(8)。我们将看到一个标准的文字模式配置界面,这有点类似于早期Visual Basic For MS-DOS编写的应用程序的界面。

  选择Standard进入标准的FreeBSD安装过程。首先是对磁盘进行分区。

  FreeBSD对于磁盘的管理和Windows有比较大的差别。一个磁盘上通常有一个Partition就够了,而一个Partition又可以分成若干个slice,并加以标记(label)。实际上,FreeBSD的slice基本上可以等同于Windows的磁盘分区,或卷的概念。

  为了保证与FreeBSD共存的系统能够启动,默认情况下FreeBSD会保留一部分磁盘空间(64 cyl)。对于单一操作系统的计算机来说,这是完全没有必要的。分区时按Shift+F可以选择不使用这个特性,不过这种情况下,除了彻底毁掉这套FreeBSD之外,恐怕就没有其他方法能够从这块硬盘上引导其他操作系统了。为了完全使用磁盘空间,我选择了不保留预留空间。



  随后是在这个Partition上创建slice。和Linux的情况类似,FreeBSD也使用单独的交换区。这种设计可以避免碎片,也防止了对文件系统的影响,性能较好。通常情况下交换分区是内存的2-2.5倍,这足以应付日常的突发事件。/var用于保存那些不在集群中共享的文件,/tmp用来保存临时文件,而/usr用来保存那些需要在集群中同步的文件。/就不用说了,它保存的是启动系统需要的文件。

  通常给/分配的空间是128MB,/tmp和/var各256MB,剩下的都分给/usr。不过也有例外,如果打算做一个大型的邮件系统,则/var要大一些(通常邮件系统依赖/var来保存邮件)。当然,各个slice可以mount到不同的地方(例如,你可以把曾经的/usr变成/var),不过最开始配置好可以减少很多麻烦。



  当然,偷懒的方法也是有的。在没有slice,或没有完全配完slice的情况下按A,系统会给出一组(或对剩下的label)默认的配置。如果你打算单纯提供Web+数据库这样的服务,完全可以直接接受这组配置。

  从FreeBSD 4.x开始,ufs支持了一个叫做SoftUpdates的技术。SoftUpdates的主要设计目标是提高文件系统性能。除了/所在的slice之外,所有的ufs slice都应打开SoftUpdates,这样对于提高系统整体性能很有好处。(/虽然也是ufs slice,但打开SoftUpdates会造成系统不稳定——FreeBSD文档如此警告,而笔者确实也吃过这个亏。不过,由于/的内容不需要经常变化,不打开SoftUpdates和打开了SoftUpdates几乎没有性能上的差别) 。SoftUpdates可以随时通过tunefs(8)来打开或关闭。在label(8)程序中,打开SoftUpdates的标志是文件系统显示为ufs+s。

  之后是选择安装介质和要装的Distribution。它提供了几组常见的情况。Minium安装最小系统,包括一些基本的Unix程序。Developer包括了一些开发工具;X-Developer和Kernel-Developer分别是X和内核开发人员用的。此外还有可选的ports,它可以帮助我们来安装应用程序。

  当然,偷懒的方法也是有的。在没有slice,或没有完全配完slice的情况下按A,系统会给出一组(或对剩下的label)默认的配置。如果你打算单纯提供Web+数据库这样的服务,完全可以直接接受这组配置。

  从FreeBSD 4.x开始,ufs支持了一个叫做SoftUpdates的技术。SoftUpdates的主要设计目标是提高文件系统性能。除了/所在的slice之外,所有的ufs slice都应打开SoftUpdates,这样对于提高系统整体性能很有好处。(/虽然也是ufs slice,但打开SoftUpdates会造成系统不稳定——FreeBSD文档如此警告,而笔者确实也吃过这个亏。不过,由于/的内容不需要经常变化,不打开SoftUpdates和打开了SoftUpdates几乎没有性能上的差别) 。SoftUpdates可以随时通过tunefs(8)来打开或关闭。在label(8)程序中,打开SoftUpdates的标志是文件系统显示为ufs+s。

  之后是选择安装介质和要装的Distribution。它提供了几组常见的情况。Minium安装最小系统,包括一些基本的Unix程序。Developer包括了一些开发工具;X-Developer和Kernel-Developer分别是X和内核开发人员用的。此外还有可选的ports,它可以帮助我们来安装应用程序。

  我通常使用的是Custom(定制安装),不安装源代码、ports(因为这些可以从cvsup同步得到最新的,安装一遍浪费时间),只安装XFree86(主要是为了运行cvsup,因为编译不需要X的cvsup需要很长时间,而且很多其他的东西,如php要用到的gd等等,需要XFree86的库文件的支持)、基本系统以及一部分库文件。当然,您也可以根据需要选择安装其他组件。

  完成之后系统就开始安装了。注意,一旦安装开始,所有前面做的分区、建立文件系统等操作就结结实实地写到了硬盘上,再没有反悔的机会了。如果您的硬盘上包含重要数据,那么请在这之前备份。

  根据计算机速度的不同,这个过程可能持续10分钟到数小时不等。在此过程中,除了光盘或硬盘出问题之外,基本上不会出现节外生枝的情况。按Alt+F2可以切换到用于调试sysinstall(8)的控制台,Alt+F4可以切换到一个命令行控制台,这些都是调试FreeBSD安装过程,或应付紧急情况的,通常用不到。

  全部系统文件安装完成之后,sysinstall(8)会给出一个祝贺画面。同时,它也告诉你如何在以后运行sysinstall(8)进行其他操作,如配置等等。实际上,在FreeBSD中sysinstall(8)基本上相当于Windows控制面板的作用。

  随后可以根据自己的情况配置网络、设置时区、显示字体、XWindow等等,并且创建新的用户(FreeBSD中的内建管理员叫做root,但由于它拥有一切特权,因此完全靠它来做日常工作有时会不太方便,笔者自己就曾不慎以root身分删除了modules,然后战战兢兢地重新编译内核)。



  FreeBSD安装盘上还提供了一些packages。这些packages是预先遍一号的应用程序。对于一台拥有很好的Internet连接的、速度足够快的机器来说,并不需要安装packages(KDE和X除外,编译它们各需要花上一天一夜的功夫)。这台机器速度还称不上“足够快”,所以我安装了cvsup,它在devel中。



  到目前为止,我们已经安装了FreeBSD的基本系统。由于FreeBSD基本系统中包括很多库文件,并且,这些库文件可能已经被发现存在问题,因此现在立刻安装应用程序或服务(如Apache等等)是不合适的。此后我们将讲解FreeBSD的在线升级(cvsup)、应用程序的安装,以及优化。

  更新FreeBSD

  完成了安装、配置,FreeBSD基本上就算装完了。不过,目前为止没有哪个通用操作系统能够保证“bug-free”,FreeBSD也一样。在重新启动之后,我们需要做一些调整;并且,通过重新配置内核,我们可以得到一个更小、更快的操作系统。

  第一步要做的是同步源代码。FreeBSD是一套开放源代码的操作系统,它的全部源代码都可以通过cvsup与中央cvsup服务器,或它的某个镜像同步。

  cvsup是一个可选的package,同样的,它也可以从ports里面安装(/usr/ports/devel/cvsup和/usr/ports/devel/cvsup-nogui)。考虑到许多应用程序都依赖X的库文件,在前面安装的部分我安装了它,并且直接安装了cvsup的package。不过,如果你有足够的耐心去一个一个地make需要的ports,那么先安装ports collection,然后make cvsup-nogui也是一个不错的主意,尽管这需要比较长的时间。

  创建一个用于cvsup(1)的supfile,命名为stable-supfile:

  (default host中选定的cvsup服务器——ftp.bjpu.edu.cn对访问的IP进行了限制,笔者只在北京工业大学校内使用过,因此如果您无法连接这个服务器,请尝试,或cvsup.freebsd.org)

*default host=ftp.bjpu.edu.cn
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_4
*default delete use-rel-suffix
src-all
ports-all tag=.


  随后执行

  cvsup -g -L 2 stable-supfile

  这里需要稍微解释一下FreeBSD的几种版本。

  FreeBSD包括3类分支:-RELEASE,-STABLE和-CURRENT。FreeBSD 3.x、4.x和5.0是目前受到维护的版本,如果你期待稳定运行,那么,可以选择的最新版本将是FreeBSD 4.6-STABLE(如果你是在4.6.2-RELEASE发行之后更新的,那么它实际上比4.6.2-RELEASE新,并且,它正式的CVS tag是RELENG_4,即FreeBSD 4-STABLE)。

  那么,三类分支有什么区别呢?

  FreeBSD的开发是非常活跃的。系统中可能会随时引入一些新的特性。最新的代码是在-CURRENT分支中引入的。-CURRENT的修改非常频繁,每天都可能有数百处修改。使用-CURRENT分支的FreeBSD需要耐心和勇气,因为你的系统随时可能崩溃(随着FreeBSD 5.0开发尾声的接近,这种现象已经越来越少),make world也可能空手而归(没有人保证-CURRENT分支能够正常编译),此外,这个分支的性能也不好(因为调试的原因,这个分支引入了大量的调试选项,这意味着运行速度不会太快)。当然,正像它的名字那样,-CURRENT分支的版本也是最新的5.0,而且,一切FreeBSD的错误和漏洞的修正都是首先在-CURRENT分支引入的。目前,-CURRENT分支硕果仅存的只有FreeBSD 5-CURRENT(指定cvs tag时写“.”),这个分支包括了FreeBSD 5.0开发的最新进展。

  FreeBSD 5中将引入大量的新特性,包括核心级线程(目前FreeBSD中的线程支持仅限于用户级线程,这在多处理器的环境下性能不够好,当然,目前使用fork()来支持的多进程线程模拟能够提供类似核心级线程的功能,但并不是所有的程序员都知道如何使用fork)、完整的Soft Updates(这一变化将提供更好的文件系统性能,同时提供更好的稳定性),等等。如果你有快速的Internet连接,一台或一些空余的机器(当然,不是生产用的服务器),并且希望为FreeBSD的开发作贡献,或者你关心操作系统的最新发展,那么,-CURRENT分支是最好的选择。

  此外,由于-CURRENT分支性能不好、稳定性不够等这些缺点,对于生产的服务器来说,通常运行的应该是FreeBSD-STABLE。如同它的名字那样,FreeBSD-STABLE的目的是“稳定地运行”。-CURRENT分支中的代码,在经过一段时间(通常是7到90天,但安全更新属于特例,通常会在几个小时)的验证之后,符合版本条件(有些新特性只能用于FreeBSD 5.0)的代码会被FreeBSD-STABLE吸收,这个操作称作MFC(Merge From -CURRENT,不是Microsoft Foundation Classes:P)。

  由于FreeBSD 5.0的第一个RELEASE至今仍然没有发布,因此,目前还没有5.0-STABLE。目前,FreeBSD-STABLE有两个版本,FreeBSD 3-STABLE和FreeBSD 4-STABLE,分别对应3.x和4.x的最新稳定版代码(对应的cvs tag分别是RELENG_3和RELENG_4)。由于版本的更新换代,其中3.x的-STABLE正在逐渐消亡。FreeBSD-STABLE每天平均会修改10个左右的文件。

  每隔一段时间,FreeBSD的发行工程组(Release Engineering Team)会对FreeBSD-STABLE的源代码树进行锁定。这段时间(目前的规定是30天,之前还有30天准备)内,所有的MFC操作都需要发行工程组的批准,因此,FreeBSD-STABLE在这个阶段基本不会引入任何新的特性。经过这段时间之后,发行工程组会在最后锁定ports树,并build一份所有的package,之后,这份锁定的-STABLE,可能经过若干RC(Release Candidate),被命名为RELEASE,并制作光盘发行。

  顾名思义,-RELEASE的设计目标是“发行”。一个版本一旦RELEASE,那么他的功能就不会再增加了。此后的所有维护的目标都只有一个,那就是绝对稳定。如果你和-RELEASE分支同步,那么绝不会出现make无法通过的情况,而且,通常这也可以保证你的系统“绝对”稳定,因为它不会引入任何新功能(例如,4.6就是4.6,如果你想要4.6.2的功能,必须明确地指定4.6.2)。

  目前,FreeBSD有很多RELEASE版本,它们的cvs tag如下。我个人建议使用最新的4.6.2-RELEASE。

  对于多数人来说,-RELEASE是一个比较极端的选择。无论何时出现版本升级,如果你想跟进,那都必须修改supfile,如果你选择不跟进,那么就可能造成ports工作异常。如果经常更新,-RELEASE可以保证操作系统本身的安全性,但同其他分支一样,如果ports出了问题,那么也得一块make,而既然这样,还不如使用-STABLE。

  如果你符合下面的条件,那么RELEASE分支可能比-STABLE分支更适合你

  • 你使用的软件对于操作系统的变化非常敏感,比如,它只能FreeBSD 4.5,而无法在4.6上运行;同时,你不打算采用它的更新版本,或者它的作者拒绝更新
  • 操作系统的更新对于你来说没有任何意义,比如,你打算把FreeBSD当作一个相对固定的嵌入式操作系统来使用,例如,作为防火墙的一部分
  • 更新会对你造成困扰,操作系统的绝大多数新特性对于你来说除了增加烦恼之外,不能带来任何其他东西。

-并且,符合以下的全部条件-

  • 你每天察看FreeBSD,以及使用的全部软件的安全公告
  • 你的Internet连接比较通畅

  目前我本人维护的所有主机,除了作为防火墙的那台之外,使用的都是FreeBSD-STABLE。

  一旦同步完源代码,就应该对整个系统进行更新。如果你没有每天察看安全公告的习惯,那就应该关心一下cvsup到底更新了哪些代码。nectar是目前FreeBSD的Security Officer。如果你发现他一下子更新了许多代码,那么对你来说立即make world和kernel很可能是必需的。

  为了更新整个系统,在/usr/src中执行

  make world

  以及

  make kernel KERNCONF=内核配置文件名

  当然,也可以连起来执行:

  make world kernel KERNCONF=内核配置文件名

  如果你的计算机运行速度较慢,那么,对于基本系统的更新(相当于不包括库的一次world),可以用

  make most

  替代make world,但make world是一个不错的主意,因为它能够保证对C运行环境的改变应用到所有的程序中,如果修正的不是动态连接的C函数库,那么make world可以保证代码的一致性。

  make kernel是一个需要重新启动的操作。如果你的make world修改了系统的关键服务,那么最好也重新启动一下。我很少有耐心看完make world和kernel的执行,根据系统的运行速度不同,这需要一个小时到一天的时间,而且,不是所有的SSH客户端都能够长时间正确的执行,例如,SecureCRT的多个版本都有内存泄漏问题。

  为了解决这个问题,我用下面的命令来完成更新:

  make world kernel KERNCONF=内核配置文件名 clean > /var/log/world,out && reboot &

  这个命令能够记录更新的全过程,如果在什么地方编译失败,你可以很快地找到原因。对于多数人来说,由于后面的&&,只需要察看uptime就能知道便以是否成功。

  需要说明的是,FreeBSD的make world并不总能成功。有时需要修改一些环境变量才能成功完成make。为了保证make成功,在/usr/src中执行任何make操作之前,建议你看一眼UPDATING中是否有特殊的要求(这种要求并不是在FreeBSD Release的时候才会出现,很多时候他会在某个CURRENT中引入,然后随着MFC进入-STABLE分支),并且,在进行大的版本升级之前(跨RELEASE,甚至主版本号),首先执行下面的命令

  mergemaster -p

  并在make world之后执行

  mergemaster -i

  运行mergemaster脚本需要一定的Unix配置知识,不过,由于配置文件中包含很多帮助信息,因此,只要master.passwd、group这样的文件不出大问题(如果cvsup更新了master.passwd,那么就需要留神,因为master.passwd标准配置是root口令为空,这时需要用m来合并,而不是使用i安装),mergemaster并不会引入什么新的问题。

  前一条命令是更新make的配置(/etc/defaults/make.conf和/etc/make.conf)。对于多数人来说,除非进行跨版本升级,否则一般情况下是不需要这样做的。后一条命令是同步全部配置,并安装以前不存在的配置文件,而不进行提示。

  笔者曾经遇到过FreeBSD因为系统日期不正确而无法make的情况,因此,再次特别提醒大家,如果你的系统日期不正确,最好是用date命令修改一下,或者干脆用ntpdate或ntpd来同步时间。关于如何使用ntp,将在以后说明。

  以后我们将讲解FreeBSD内核的配置,以及如何配置make.conf来优化FreeBSD的编译结果。

阅读(511) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~