Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1445282
  • 博文数量: 295
  • 博客积分: 10051
  • 博客等级: 上将
  • 技术积分: 3850
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-11 08:50
文章分类

全部博文(295)

文章存档

2011年(1)

2009年(4)

2008年(290)

我的朋友

分类: BSD

2008-04-17 12:54:37

我之前说了这么一大堆东西到底做什么用呢?下面我来解释一下这台中央服务器装NFS有什么用。在整个开发小组都是用FreeBSD的情况下,这样做非常具有意义,主要是在装机上,大家都知道无论是windows还是FreeBSD还是linux,重新装一台机器都是一件极度痛苦的事情。因为要首先要对系统进行升级,之后还有很多常用软件需要安装。虽然FreeBSD上面有ports系统,但是恐怕大家都有感觉,我们常规装一台FreeBSD的机器,需要在装好了之后升级源代码,然后重新编译内核,编译系统,慢点的机器make world一次等到花儿都谢了。还有一个问题就是,很多人其实不太喜欢在工作的机器上装ports和src的,因为这些东西很占地方,一套src差不多200多MB,一套ports也要300多MB。如果编译完了不make clean的话src会增加到350M左右,ports就更多了。但是如果make clean的话,再升级系统或者应用软件的时候你又郁闷了,因为make这个工具有个特点,如果代码部分发生改变的时候,它只会编译发生改变的代码,而没发生改变的代码就不会编译,所以你要是上次编译完了make clean了,再编译就会从头开始,如果不做make clean,再编译一次的速度就很快了。有些人会问为什么不用FreeBSD提供的binary级的升级以及使用ports的package?原因是这样的,对于系统的binary升级补丁,一方面提供的频率比较低,而且我还不知道怎么下载安装。而且有的时候更新少的时候我不是太想升级。对于ports呢,我本人其实不太愿意用package,因为官方生成的package更新的速度很慢,这点很郁闷。自己生成package呢,总有各种各样的问题,虽然现在ports可以make package-recusive 但是,我弄了几次都没弄出一套完成的package出来。还是直接用ports来make install最方便,但是如果这些都在每台机器上重新编译的话,无疑是很痛苦的,如果是一台快机器的话,还可以,可能一天就能完了,如果是一台慢的机器弄不好3、4天…………实在是太烦人了。这个问题怎么解决才好呢?我们怎么才能在1个小时之内装出一个我们能够方便使用的,带有我们所需的应用软件的全新的机器呢?windows、linux恐怕都不太可能,我分析一下为什么这么说。从windows来讲,我想各位装的时候首先也都会升级系统,windows虽然有service pack可用,还有从windows update上下载单独的binary补丁,其实也是比较慢的。装一次windows 2000的sp4也很慢,再去windows update升级零散的补丁少说也得快1个小时。再加上装乱七八糟的软件,恐怕也得装个N小时。而linux呢,升级只升级内核,速度很快,装软件有弄好的rpm,也很快但是还是有几个问题,通常的linux本身装起来很慢,这个大家不能否认。装一下Red hat现在是个非常慢的事,没个几个小时装不完,而我装一套FreeBSD的基本系统不超过15分钟,这一点就没法比了。而且linux升级只升级内核的话,只能修正内核的问题,如果是附带的应用有问题,例如BIND,ftp,apache之类的东西,还需要单独找补丁包升级,也要累死。而且如果需要定制应用的话,rpm也得重新编译才行,用binary就要放弃定制的灵活性。所以要是装一套合用的linux也是要很长时间的。我所说的这些大家恐怕都有体会。但是FreeBSD上是可以解决这个问题的,这个恐怕是源于FreeBSD非常合理的系统设计,ports和src的系统都是非常灵活而且方便的系统,这给我们快速安装创造了条件,只要结合了NFS就可以实现。
我现在从安装一台全新的FreeBSD来讲解一下怎么来实现快速安装。我们之前的那台服务器现在就派上用场了。那台中央服务器上可以安装src和ports,我们用NFS server把它的/usr export出来,而在新装的这台机器上选择不安装src和ports,在系统安装完毕之后,需要在/usr中建立src和ports的目录,然后我们通过下列命令来把中央服务器上的src和ports挂到我们的机器上,我们假设中央服务器ip地址为192.168.0.1,而新装的机器的ip地址为192.168.0.10,我们已经在中央服务器上向这个地址export了它的/usr(方法参考前面提到的)代码:

  mount_nfs 192.168.0.1:/usr/src /usr/srcmount_nfs 192.168.0.1:/usr/ports /usr/ports 这样一来,我们新装的机器上就有了src和ports了。中央服务器在安装的时候也会make kernel和make world的,如果客户机的硬件和希望的配置跟中央服务器不太一样,只要在上面再写个新的内核配置文件,再用这个配置文件编译一个适合客户机的内核就可以了,而make world对于那台机器都是一样的,所以我们在客户机上直接make installworld就完了。把漫长的make world过程都给省了。装应用软件也是一样,只要有一台机器曾经用这套ports make install装过这个软件,并且没有make clean 的话,其他的机器就可以跑到这个目录里面make reinstall一下就行了。我解释一下为什么要make reinstall,而不是make install,这是因为ports有个特点,它会在这个应用装过以后保留下一个install_done的标记,你在每个装完的应用目录里面的work目录中能看到这个名为.install_done.xxxxxx的文件,后面的xxxxxx是这个应用的名字。如果你换了台机器使用这个ports的话,直接make install的时候会发现并没有执行任何的安装就结束了,就是因为make检测到了这个文件,就不会再执行一次安装了。没关系,ports还为我们准备了解决的办法,这就是make reinstall,简单吧。这里还有个问题,我觉得ports解决的很好,因为通常很多软件涉及到很多依赖软件,如果这台客户机已经安装了一些 依赖软件,我在安装一个依赖这些软件的新软件的时候,这些已经安装的依赖软件是不是也会重新来一遍呢?这不会很慢么?其实不会的,这涉及到多个系统共享一个ports时候多个系统安装差异的问题,不过这个考虑其实是多余的了,因为FreeBSD在安装上一个应用软件之后会在/var/db/pkg 中保留一个这个软件的安装记录,所以你在安装一个依赖了很多软件的新软件的时候,它会检测你装了什么,没装什么,已经装过了的就不会再安装一次了。通过这样的方法,我们重新安装一个新的开发环境就变得异常的快速,而且可以灵活的定制。为什么会说灵活定制呢?你这装得不也是binary么?是这样的,以gnome2为例子,gnome2实际上是由一系列的小软件组成的,这个大家应该都清楚,如果我想定制其中一个小软件只要修改那个软件的编译参数重新编译一遍就可以了,其他的部分依然不会受到影响。编译单个的小软件无论对于什么机器来讲都是很快的所以对于安装速度的影响,就很小了。这种方法无论对于批量装机,还是单独定制都是个很爽的办法。但是这个方法我为什么要放在这样一个标题下讲,是因为这个方法需要一台单独的机器来做中央服务器,这对于大多数的个人用户是不现实,也没有意义的。但是却对于有多个人的开发团队来讲,一台机器是个小问题,能够快速的安装出来一台开发环境能够大幅度的提高效率,具有的意义就非同一般了。而且这个方法也只需要这台中央服务器定期更新它的src和ports,定期编译,客户机就可以跟着一起升级了,省得大家重复劳动了。提出这个方案是源于我们这个团队的开发环境都是使用的FreeBSD,因为我们是进行J2EE项目开发的,在FreeBSD上开发的时候我们需要编译jdk、Xfree、gnome2、eclipse等等软件,这都是装起来很慢的软件,每台机器都单独安装的话,大家都得累死。使用这个方法的话,实在是爽的不得了。差不多一个小时左右,一台合用的机器就完成了。补充一个需要注意就是大家如果在共享一个ports的时候使用portupgrade时候需要小心,一定要加上-wW参数,否则把共享的ports内容给清光了,会有人很郁闷的……

  最后我需要感谢黄冬教给我这个方法。其实这个方法是他们以前经常使用的方法,只不过不是用在开发环境的建立上,是他在门户网站的时候他们用来批量安装web服务器的方法,所以对于所有门户网站的管理员来讲这也是一个非常有用的办法。因为据我所知,国内几个用FreeBSD的门户网站,都是有大批量的FreeBSD服务器集群来进行服务的,装机就成为一个工作量很大的工作,如果采用这种方法,大家装机的时候也能够轻松不少了。而我个人的感觉其实在团队开发环境的建立上,使用这个方法其实比服务器的批量装机还更有意义,因为服务器通常装的那些软件还都比较小,而装一台开发用的机器要装得大软件就多的很了,所以我个人认为这对于开发环境来讲具有的意义更大。我把这个方法贡献出来,已经很熟悉这个方法的朋友不要骂我,我只是觉得虽然这个方法用的已经很普遍而且其实非常的简单,但是以前并没有人把它写出来给大家共享一下,另外因为其在使用上有一些小小的技巧需要注意,所以小弟我给大家献丑了。

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