LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 22860|回复: 31

[原创]玩点新鲜的,做一个功能单一,体积小巧的LFS

[复制链接]
发表于 2005-11-29 17:08:00 | 显示全部楼层 |阅读模式
前言
  来来回回编译LFS不知道多少次了,总觉得都是这个步骤,出来的东西也都差不多,所以就想玩点变化的,这次想做一个功能单一,但体积要非常小巧的LFS出来。
  听说过有人把httpd的系统做到只有5M大小,我也想尝试一下,所以这次要做的是一个只有简单的http功能的系统,方法其实并不复杂,制作出来的系统体积虽然不算大,但功能也很有限,只是用来研究用可以,如果用来实际应用还需要增加许多东西。
  在下文中并没有给出详细的命令,只是给了一个方法和需要注意的一些地方,这是为了能让读者亲手制作一下,这样才能最大程度的获得知识。
  如果你有兴趣可以继续看下去。

原理
  其实很简单,就是按照Linux启动的顺序只放需要的东西,其它东西一律不装。
启动过程
  介绍Linux启动过程的文章有很多,所以我这里就不多说了,不过这个启动过程也是我们制作系统的过程,按照Grub->Kernel->INIT

制作工具链
  制作这个“小”系统当然也需要一个工具链,目的和LFS是一致的,但必须要支持静态编译才行,当然这个工具链可以按照LFS的步骤制作,但还有另一种更快速的方法就是在完成了工具链glibc的编译后就可以开始制作这个小系统了。

建立目录
  在完成了工具链的制作后就可以开始建立必要的目录了,这步也可以完全按照LFS中的建立过程建立,也可以用省事的方法,你只需要建立/boot/grub、/etc、/dev、/bin、/sbin/init、/var/log就可以了。

编译GRUB
  编译GRUB只需要./configure && make就可以了,不需要make install,因为这个最终的LFS在运行过程中并不需要grub这套工具的支持,我们编译它只是为了能够建立起bootloader而已,所以只需要复制stage1和stage2以及支持启动盘的文件系统的xxfs_stage1_5到/boot/grub中,再使用grub/grub命令来启动grub的环境,这部分可以参考LFS中的grub这部分,最后建立/boot/grub/menu.lst文件就可以了,现在可以删除state1和xxfs_stage1_5了,因为已经不需要了。

编译Kernel
  这步十分重要也很关键,编译选择中不要使用模块支持,因为要缩小体积就把需要的选上,并将其编译进内核,这样大概编译完成后的Kernel也就1M多,不过这里要注意的是一定要选上需要使用的文件系统,磁盘的驱动以及使用的网卡驱动(因为需要支持http所以必须要支持网络)。这次我用的kernel是2.6.14.2的版本

UDEV
  UDEV用来建立/dev下的设备驱动,这里我们可以有两种方式来使用它,一种是在编译完成后直接用udevstart来建立好/dev下面的内容,还有一种方法则是LFS的标准方式,在运行目标系统的时候建立/dev下的内容,这里为了减少系统体积使用了第一种方式,这样就可以在启动时减少一步。

INIT
  通常INIT是包含在sysinit这个包中的,但我们这个系统是不需要这么复杂的INIT,因为INIT不一定要是二进制可执行的文件,使用可执行的脚本也是可以的,所以只需要建立一个脚本文件来代替INIT就可以了,在脚本中加入启动网络和http的脚本即可。这里要注意的是init必须具备可执行的属性。

BASH
  因为INIT是使用脚本的方式,那么就必须要安装一个支持他的脚本的SHELL,这里我选择了LFS标准的BASH,这里我们用静态编译的方法来编译BASH,然后将编译好的bash复制到目标系统的目录中,然后将sh的连接指向该文件即可

iproute2
  一个有http支持的系统没有网络设置是不可能的,这里我使用LFS6以后使用的iproute2,静态编译它之后只需要使用它的ip这个文件即可。在INIT中加入启动网络的命令即可。

Apache
  这个当然是用来做http服务的,同样静态编译它,然后只需要复制httpd到/bin目录下即可,不过要建立一个httpd.conf文件,当然你还要根据httpd.conf中的设置在相应的目录下放置网页文件。
  在INIT中加入启动httpd的命令这样就完成了这个系统的制作。

启动
  现在可以重新启动了,如果你的内核配置得当,启动的速度应该是相当快的。

  另外找台机器打开浏览器输入配置给这太机器的地址,看看能不能看到你的页面。

成品下载
  http://www.zdbr.net.cn/download/miniLFS.rar
  采用的是linux-2.6.14.3的内核和Apache-2.0.55实现的系统,通过GCC-4.0.2进行编译,静态库来自Glibc-2.3.6
  下载后解压缩后形成一个VMWare5.0支持的完整目录,直接用VMWare5启动即可。
  采用DHCP来设置IP地址的,在完成启动后会有地址提示,根据提示的地址进行访问即可。

结束语
  我用这个方法制作了一个用Apache来提供httpd的系统,最后不算上文件系统本身占据的空间,这些文件大概就只有5M多一些,其实这个并不是最小的,因为是使用了LFS使用的标准的程序包和一些自己写的脚本,所以体积要稍微大一些,如果使用比如uclibc和busybox这样的包,这个系统还可以做的更小,这篇文章的目的就是为了研究裁减LFS而写的,文中难免有错,如果发现还望谅解,并给予指正,如果能起到抛砖引玉的作用,那就值了。
                                 作者:youbest(冲天飞豹)
                                    2005-11-29
发表于 2005-11-29 20:10:10 | 显示全部楼层
再写详细一些嘛.
回复 支持 反对

使用道具 举报

发表于 2005-11-29 20:16:27 | 显示全部楼层
兄弟玩出名堂来了,恭喜!
回复 支持 反对

使用道具 举报

发表于 2005-11-29 22:24:56 | 显示全部楼层
youbest兄一出手果然不同凡响!PF!
回复 支持 反对

使用道具 举报

发表于 2005-11-29 22:25:19 | 显示全部楼层
LFS手册开首就说把httpd的系统做到只有5M大小,可是众人在mailing list上问及时,高人只回答已被删除,无法提供下载。

偶曾经想过如何做,可是光是kernel就占去约1.5MB,5M的系统确实很有难度啊!

敬请豹兄再详细说明一下,普导众生,功德无量。
回复 支持 反对

使用道具 举报

发表于 2005-11-30 09:55:04 | 显示全部楼层
强……

8过感觉还是不会制作工具链

等待详细的说明,嘿嘿
回复 支持 反对

使用道具 举报

发表于 2005-11-30 13:48:02 | 显示全部楼层
这才叫做真正的lfs玩家,想把lfs怎么搞就怎么搞,变出适合自己的许多东东出来
这篇文章堪称其中的典范,当然还包括制作各种超小型的linux也是很good
顺便问一下
不过你们的时间也太多了,怎么能够有那么多精力搞LFS?
在机器上编译LFS,一定是用脚本搞定的吧??
回复 支持 反对

使用道具 举报

发表于 2005-11-30 15:12:06 | 显示全部楼层
看到kde3.5起来以后,真的不知道应该从什么地方继续下去了!N大的包,有时候需要给一个东西添加一个功能,几乎要从新编译N个大包,估计lfs的精髓就在于此吧,高度制定。
偶还需要举行学习
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-30 17:37:21 | 显示全部楼层
Post by sumargin
这才叫做真正的lfs玩家,想把lfs怎么搞就怎么搞,变出适合自己的许多东东出来
这篇文章堪称其中的典范,当然还包括制作各种超小型的linux也是很good
顺便问一下
不过你们的时间也太多了,怎么能够有那么多精力搞LFS?
在机器上编译LFS,一定是用脚本搞定的吧??


太夸奖我了,有点惭愧。
我想大多数搞LFS的人都有自己维护的一份脚本,有些重复劳动不太必要,用脚本很方便。


Post by d00m3d
LFS手册开首就说把httpd的系统做到只有5M大小,可是众人在mailing list上问及时,高人只回答已被删除,无法提供下载。

偶曾经想过如何做,可是光是kernel就占去约1.5MB,5M的系统确实很有难度啊!

敬请豹兄再详细说明一下,普导众生,功德无量。


我现在做的这个系统大概是5.4M左右,除了能显示静态的网页外,其它的事情基本上都做不了.


详细的文档我还在整理中,这样吧,我可以先传一个做好的文件,有兴趣的可以看一下.
回复 支持 反对

使用道具 举报

发表于 2005-11-30 18:15:54 | 显示全部楼层
建立目录

这一项用 rpm 指定一个 root 然后安装 fedora 自带的 filesystem rpm 会更快更保险,包括权限位之类都可以设置完备。小系统里不必安装 rpm 的,就是安装也不会很大
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表