Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1148881
  • 博文数量: 32
  • 博客积分: 8054
  • 博客等级: 中将
  • 技术积分: 892
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-19 14:47
个人简介

感谢大家!

文章分类

全部博文(32)

文章存档

2011年(2)

2010年(1)

2009年(3)

2008年(7)

2007年(8)

2006年(11)

分类: LINUX

2006-01-26 21:28:02

[原创]我们可以做的更小!《功能单一,体积小巧的LFS》续篇


  提示:阅读此文请先阅读《[原创]功能单一,体积小巧的LFS完整版(5M大小的Apache服务器) 》,这样可能对下面的内容更容易理解。

说明:
  先前写了如何制作只有5M大小的Apache服务器后,不知道看过的人是否注意到文中并没有对软件进行优化,所以限制它的大小,有没有想过把这个Apache系统做的更小一些呢?看过一些网友的回复,然后自己又进行了大量的实验裁减,基本上将回复中网友提出的和自己曾想过的方法都应用了进去,最后还是取得了比较满意的结果,下面的内容将逐渐分析如何缩小它的大小,至于能做到多小,看到最后你就知道了,不要惊讶,这是真实的。
  当然最后这个系统基本上就都要使用非标准的LFS组件来制作这个系统了,不过有一个例外的就是Apache,我使用的是Apache1.3目前最新版本1.3.34来制作的。这一点始终没有发生变化,这也是为了达到能制作真正体积小巧的Apache系统的主题,这个变了就没意思了。
  文中提到的数字可能和真实环境中产生的数据有所出入,但基本上是出入不大,可以作为参考。

第一阶段:优化编译
  先来把5M的大小缩一半吧。这步非常简单,用-Os参数代替-O2参数即可,编译后大概能将系统减少到3.4M左右,不过这里要注意,还是根据LFS的提示Glibc不要进行优化编译,只对bash、dhcpcd和Apache进行这样的优化编译即可,当然内核还需要裁减,原来在5M的系统中内核就占用了2M大小,所以这里对内核的裁减效果非常明显。

第二阶段:用busybox代替bash和dhcpcd
  从这个阶段开始,基本上就要使用非标准的LFS组件来制作这个系统了。busybox的特点和优点在很多帖子了都有提到,busybox在编译的时候只需要编译我们最需要的几条命令就可以了,他们是一个sh和一个udhcpc以及ifconfig是需要的,其它的基本上不需要。用他来代替bash和dhcpcd大概可以节约800K左右的空间,这样这步完成后系统大概只有2.6M左右大小了。

第三阶段:用uclibc来代替glibc
  这个系统大小中还有一个举足轻重的部分,那就是glibc,如果用uclibc来代替glibc那么整个系统的体积将立刻发生大幅度的变化,在这里我使用了uclibc-0.9.28这个版本来编译,基本上没有什么问题,完成后一件很重要的事情就是将busybox和Apache重新编译,这里编译busybox没有什么问题,但在编译Apache的时候可能会发生错误,需要打上补丁才能完成编译。(补丁附在文后)
  完成了这些编译后在检查这个系统的时候你会吃一惊,体积能够再次缩小1M多,这样已经基本上在1.5M左右的系统了,不过这还取决你的内核大小,如果你的内核在800~900K左右,那么你的系统可能快可以放入一张软盘里了。这里有点说明,用uclibc代替glibc并不能减少内核的大小,所以内核不重新编译没问题。

第四阶段:扫除所有多余的文件
  这一步比较的麻烦,检查你的Apache系统里是否有一些不太需要的文件,特别是/dev下的文件,在5M大小的系统时,这里的文件基本上可以不考虑,但现在整个系统已经在1M左右大小了,这里的文件是该“清理”一下了,这样确实可以腾出不少空间了,这步完成后基本上就可以小于一张软盘的大小了。

(说明:到这时,系统已经被大幅度裁减了,下面开始的裁减就不像上面的那样1兆接着1兆的裁减了,基本上只能按百K的速度下降,如果你没什么特殊的要求基本上到这里就可以了。)

第五阶段:用2.4的内核来代替2.6的内核
  目前为止我们还是在使用2.6的内核,这个阶段的缩减就把目标定在了这个重要的核心上,这次采用成熟的2.4内核(2.6内核现在也很成熟了,相较而言),如果你大手笔的去掉不需要的功能,到最后和2.6使用同样的功能后,编译得到的内核大概能比2.6小100~200K左右,这样的系统就只有1.2~1.3M左右了。

第六阶段:用initrd来“包装”系统
  这步的处理比较复杂些,把busybox和Apache“包装”压缩后大概比没包装前小100K多些,处理的好基本上系统能在1M左右了。

第七阶段:用lilo来代替grub
  到目前该缩的都缩了,但还有一个角落我一直没注意那就是grub,之前的系统比较大的时候引导程序所占用的体积基本上可以不必考虑,但到了现在再想裁减点大小只好对这里动手了,lilo的使用可以参考网络上的相关文章,基本上体积又能减少50~100K左右,现在的系统大概在900K到1M左右了。

(说明:到现在为止,后面的裁减将越来越困难,基本上每裁减一点都可能带来功能上的损耗,而能够裁减的大小也基本上按10K来计算了,所以想继续靠编译或者什么的已经很难有大作为了,只有对代码的改动也许能够减少一定的空间,所以基本上可不必再继续了。)

  到目前为止,我们已经把原来5M大小的系统减少到1M左右,减少了5倍。总之,裁减越到后面越难,我在做裁减的时候,从5M到2.6M只用了一两天晚上,而从2.6M到1.5M用了四五天的晚上,而1.5M到现在的大小用了将近2个星期的时间。

  我做了一个Apache系统的体验版,大概有600K左右的大小,基本上可以算缩小了10倍了。我还在继续研究看看能不能再缩小一些,欢迎大家提出宝贵意见和想法与我交流。
  体验版文件下来解压后是完整的VMware5的目录,用VMware启动就可以了,启动后会有IP地址的显示,用浏览器访问就可以显示出内容来。
  

                                   作者:youbest(冲天飞豹)
                                   Email:youbest@sina.com
                                   2005年12月21日
阅读(5612) | 评论(8) | 转发(2) |
给主人留下些什么吧!~~

xdsnet2011-10-26 13:36:21

一般有web管理的路由等不会用apache作为服务器端的,有专门小型化的http服务软件,这些软件本身可能就只有<100K