(持续更新)LFS笔记之一:宿主系统搭建和其他预备工作,该怎么解决

(持续更新)LFS笔记之一:宿主系统搭建和其他预备工作
 
  LFS(Linux From Scratch),不是一个真正意义上的实体Linux发行版,而是提供了一组文档,帮助你从源码一步一步地创建自己定制的Linux系统,相对于其他基于源码发行版(如gentoo),LFS更为基础,他没有提供基本CD,没有一个基本的系统环境,这个基本系统和编译所需的工具链全部要自己制作。换句话说,LFS就是创建一个自己的Linux发行版。

  虽然从3月份才开始在真机器上是用Linux,按照通常说法,LFS通常需要一年以上Linux使用经验,不过,我自认为基础还可以,从编程到操作系统机制都有一定了解,决定利用这次的LFS,让自己的Linux的理解快速上一个台阶。

  我已经通读了LFS的文档,6.8最新版和6.6中文版对照阅读,以确保不会只阅读英文版而遗漏一些重要细节,该文档十分详细,而且许多东西并不需要你去理解,类似于“手把手”的教学,感觉甚至基本没有什么Linux基础的人也能够完成,这也是我决定做LFS的原因。

  我的目标不只是做出一个可用的LFS,我将按照我长期以来学习技术的套路——纵向对比,构建不同版本的LFS,计划至少构建四套——2.6内核的较近期版本,2.6内核较早期版本,2.4内核,2.2内核,当然先从LFS 6.8(2.6内核近期版本2.6.37)开始构建。最新的文档相对来说最详细最完善,而且也有6.6中文版可以对比查漏(2.6.32内核,2.6.3x系列内核最稳定版本,Debian 6稳定版,RHEL和SUSE企业版,Ubuntu 10.04LTS,最稳定的Linux发行版都在用,我现在用的就是Debian 6)。2.6版内核时间跨度很长(2003-至今),看《深入Linux内核架构》这本书时,讲了在2.6.1X~2.6.2x这段时间内加入了不少新功能,那本书基于2.6.24,作者当时还提到了一些新功能将在2.6.26之后实现,因此2.6早期内核和近期内核差距会比较大,因此2.6内核我会做两个版本。

  今天记述的是重要的预备工作——宿主系统构建和LFS源码包的准备。

  LFS是从头构建Linux系统,但这个“头”不是没有基础的,LFS的构建需要一个宿主操作系统环境,简单的总结LFS的步骤就是:
1.利用宿主系统的编译工具链,编译LFS的编译工具链。
2.重新编译LFS工具链,摆脱对宿主系统各种运行库的依赖。
3.利用LFS工具链,建立文件系统和目录树,编译LFS的各种源码包,调整启动脚本,完成LFS系统。

  既然如此,那就先做宿主系统吧。其实,LFS系统构建对宿主系统基本不会造成什么危害,各种编译和修改都在独立的目录甚至分区中进行,决不会扰乱宿主,但我还是决定用VMWare来实现LFS,原因有三:
1.VMware的快照功能太好用了,万一LFS过程出了差错,快照可以完美回溯,不必重头再来。
2.我要构建多个版本,手头上只有Debian 6,他适合构建LFS 6.8,那些较早版本的LFS能否在较新的Linux2.6.32+gcc4.4.5环境下正确构建是未知数,而且我的硬盘已经没有多余分区来引导LFS了
3.不用其他虚拟机软件的原因是VMWare是bug相对比较少功能也比较强的,网上都到的说法也是VirtualBox构建LFS失败的可能性更大,在版权有等于没有的天朝,就不必在意VMWare的价格了。

  我手头上有全套的Red Hat Enterprise 6/5/4/3/2,Red Hat 9/8/7/6/5/4虚拟机,涵盖了从Linux 2.0~2.6,从1997年~2011年,做四个版本LFS的宿主系统绰绰有余了,不过我还是决定从新构建一套Debian宿主系统,原因如下:
1.RedHat研发能力强,而且是商业版本,对包括Linux内核在内的各种软件包改动较大,Debian相对来说比较原汁原味,大多数软件包都和原始的默认配置差不多,Debian构建LFS更可靠。
2.经过真机器跑Debian,一来我更熟悉Debian的操作,二来对Debian的印象也比以前装虚拟机时好得多,Debian在VMWare虚拟机中遇到的各种莫名其妙的问题,我基本上也能够解决(RedHat通常会主动配合VMWare进行调整,debian则不一定,因为根据GNU方面的观点,开源软件和闭源软件相配合时出错,GNU会归罪与闭源软件通常不会主动审视自己)。
3.既然要构建历史版本,我也得构建多个历史版本的宿主系统以确保LFS文档的要求(不是必须的,因为最终的工具链肯定是自举编译,与宿主系统无关,但是LFS文档明确说明某些软件包太新可能出问题,主要是第一遍编译工具链的时候,这次不是自举编译)。这就需要宿主系统的历史足够长,现在的主流发行版里,够格的也只有Redhat、Debian、Slackware、SUSE等少数几个,他们涵盖了Linux 2.0以来的内核版本,Slackware那套操作方式我实在不习惯,SUSE 7.3以前的版本已经失踪了(archive.kernel.org也说找不到了),RH有但我不想用,那就只有Debian了。
4.LFS很pure,没有initrd,没有package manager,我打算移植Debian的部分特性。
5.我已经有Window从1.0~Me(dos核),Windows NT 3.51~7(NT核)的全套虚拟机,MSDOS1.0~7.1的全套虚拟机,RedHat系列的几乎全套(RH1/2/3/4没提供光盘镜像,懒得用软盘镜像折腾了,4.2我都是自己封转光盘装的),想趁此机会,收集Debian全套虚拟机。
6.Debian喜欢跳票,发布一般比同期的RHEL晚,所以Debian的软件包更新一点点,也敢于在稳定版提供新内核(这个Debian的优点和和LFS无关……这是我选择Debian做真机系统的理由之一)。

  Debian到目前为止大版本号到6,但Debian的稳定版不只6个,比如3.0(woody)和3.1(sarge)虽然只差了个次版本号,但之间却有3年的跨度,软件版本和特性都相差很大(差别超过了Debian 5和6),目前我收集的Debian稳定版有1.3.1(bo),2.0r0(hamm),2.1r2(slink),2.2r7(potato),3.0r6(woody),3.1r8(sarge),4.0r9(etch),5.0.8(lenny),6.0.1a(squeeze),其中1.3.1没有光盘镜像。遂决定从2.2开始安装,一直到6.0.1a。(Debian从5.0后,安全更新版本的版本号发生变化,如前文所示)

  既然不仅仅是为了LFS,而是收集Debian虚拟机,那么每台虚拟机就不仅仅要能启动能编译,还要尽量完美才行(桌面环境、vmware-tools等)。

  具体过程不赘述,如果玩LFS还的家伙连虚拟机都不会装那还是多练几年吧……

  我只提示下在VMWare Workstation 7.1.4环境下Debian几个版本安装注意事项。

  Debian的安装介质很好取得,CD、DVD、蓝光介质随意(如果只是做LFS宿主系统的话,基本系统加上Build-essential、linux-headers基本够了),我最近入手了两块2T硬盘,专门收集软件和系统,空间不缺,Debian 5和6下的都是蓝光版本,5是一张蓝光20G,6是两张蓝光30多G(这只是一个架构的,amd64+i386、linux内核+kfreebsd内核一共4张蓝光+14张DVD,大家要下不必下这么大的,除非是我这样的收集狂)。架构的话LFS推荐i386,amd64需要做一些调整,也不复杂。

  软件源请选择sohu或网易的镜像,速度基本上都能达到外网最大带宽,不过搜狐网易只有两个稳定版本5/6,再早的版本用日本的镜像ftp.riken.go.jp/Linux/debian/debian-archive/,这个镜像我这里网通白天比较慢,30~100K,夜里也是最大带宽。如果你下载的光盘比较全,用光盘做源也可以,几个历史版本如果用的是最新的更新发布的话(如5.0.8、4.0r9),网络镜像和光盘元基本一样,通常用网络源aptitude upgrade也就几个软件包而已。

  2.2r7,有两个内核,2.0.38和2.2.19,vmware-tools请在2.2.19下装,而且perl版本太老,vmware 7的tools装不了,你下一个5.5.9的可以装上,不过gnome启动不了,X可以,不过这个1.0版本的gnome有没有没什么区别……2.2是Debian接近现代化的起始,apt是在这个版本加入的,之前只有dpkg,命令行上用起来没太大差别,早期的vi/vim你可能得忍他一下,操作比现在的vim还要反人类……按退格删不掉字符、按del字符越删越多、功能键会产生字符、莫名其妙退回命令模式等等等等。引导器老老实实用lilo,那个0.5版的grub比lilo还难用、难配置。