基于Ubuntu 10.10 构建LFS 6.7总结

  首先扫个盲,呵呵。
  LFS,即Linux From Scratch,LFS不像Ubuntu,Fedora,SUSE等Linux发行版以最终产品的形式发布,而是以文档的形式发布一套构建流程,指导使用者,从源代码自行构建一个LFS系统,也就是说你拿到的LFS实际上只是一个指导手册,其中指明了以下几点::

  1. 什么是LFS
  2. 如何准备构建LFS
  3. 如何获取构建LFS所需的源码包
  4. 如何编译LFS
  5. 如何配置LFS

  从LFS的构建过程中,能够学习到一个常规Linux系统的结构,以及如何去配置Linux系统,毕竟Linus给你的只是Linux内核,而一个真正可用的Linux系统是由很多部件一起工作的。
  当然不能期望通过一个LFS就让你知晓Linux的一切,毕竟这不太现实,而且LFS的目标很明确,就是指导用户构建一个可用的Linux系统,所以LFS不会对其中的操作用动辄几百字去解释透彻,但是对于一个具备Linux基本使用能力的人来说,LFS的解释已经很详细了,能够让使用者知其然,还能知其所以然。

  这里我想把自己的LFS构建经验总结一下,主要是过程中遇到的问题,列出来,欢迎大家围观,呵呵

LFS的主要构建流程:

  1. 准备。包括为LFS分配空间,设置分区,在宿主系统安装相关组件等
  2. 编译一个临时的纯净系统。考虑到现行的发行版中都会或多或少做一些优化调整,这会导致直接编译出来的系统不具备通用性,所以需要基于宿主系统构建一个临时的纯净系统,新的LFS系统所需的相关组件都会在这个纯净的环境中编译
  3. 在上面的纯净系统中编译LFS系统
  4. 配置LFS系统,以使系统能够正常工作
      上面的流程在LFS Book中都以指令的形式列了出来,我们要做的就是按照LFS Book中的说明,一点一点敲字母就可以了,这需要具备一些Linux的基本使用知识来理解操作的含义。

  具体细节这里就不多说了,大家看LFS Book就可以了,这里顺便共享几个文件,方便大家使用。

  我这里主要想把自己编译LFS时遇到的问题总结一下,共享出来:

  我这次编译的LFS是最新(2011.2.12)的6.7版本,用的宿主系统是Ubuntu 10.10,基于VMware WOrkstation 7.1虚拟机。虚拟机使用的是双硬盘,其中一个/dev/sda安装了Ubuntu 10.10,LFS则编译在了另一个硬盘/dev/sdb,这也是为了在制作完LFS后,能够方便的在独立的虚拟机中运行。

Ubuntu的安装就不说了,下面直接说说编译LFS时出现的问题:

  1. 编译Binutls出错
    一开始的时候就出错了,比较打击人。。。
    这里需要安装build-essential和texinfo两个包,因为Ubuntu中没有

  2. 编译gcc出错
    原因很简单,查找问题很恼火。。。
    因为在输出指令的时候,输入languages时少输了末尾的s

  3. 编译glibc出错

因为Ubuntu中安装的是mawk,不是gawk
这里需要安装gawk

  1. 编译过程中要注意指令的大小写,否则很容易出现问题
      这是个细节问题,因为Linux中是区分大小写的,所以要格外注意。因为我是一边在VMWare中操作,一边看LFS Book,LFS Book不是最大化的显示,所以输入指令的时候不容易区分大小写,像C和c,S和s,容易出错,结果编译不过去,仔细一些就可以了

  2. 安装完成LFS后,启动出现问题
      重新启动以引导LFS的时候卡在了这里:kernel_thread_helper 0x6/0x10,原因是根文件系统无法加载,这个问题被称作kernel panic,似乎遇到的朋友还比较多。
      我之前没有编译过Linux内核,并不懂内核配置,但是LFS Book对这里没有任何说明,所以在这里郁闷了很久。最后,找到原因是Linux内核的默认编译选项对sata硬件的支持不完整,有些sata硬件的驱动没有编译进去,比如我使用的VMware 7.1中的sata驱动:
    LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI
      这里需要修改编译选项,以支持该sata驱动。我想其他的驱动支持,道理也差不多,注意添加对应的驱动支持就可以了。可以通过lspci命令了解到系统中的pci设备都有哪些,便于在编译内核时选择正确的驱动。这里的lspci是pciutils包中的工具,没有的话需要安装。

我这里说说我选择的编译选项,这里参考了网上的一些资料,对于同样使用VMWare体验LFS的朋友或许会有帮助:

Linux Kernel Configuration
    -> Device Drivers
        -> SCSI device support
            - > SCSI disk support   选中

Linux Kernel Configuration
   -> Device Drivers
       -> Fusion MPT device support   选中
            -> 选中子项(不确定的话就全部选中好了)

Linux Kernel Configuration
    -> Device Drivers
        -> SCSI device support
            - > SCSI low-level drivers  选中
                -> 选中和Fusion-MPT相关的底层驱动以及VMWare PVSCSI driver support
  1. 调整/etc/ftab和/boot/grub/grub.cfg以正确引导独立的LFS并加载分区

  因为我的目的是在独立的硬盘中编译LFS,这样将LFS的虚拟硬盘文件拷贝到新的虚拟机中就可以加载运行了,所以目标系统中是只有一个硬盘的,需要调整上面的两个文件,将原来的sdb对应的改成sda即可,因为LFS所在硬盘是以第二硬盘的形式挂到虚拟机中的。

  grub.cfg是在加载Linux时使用的,这里需要调整;fstab是在Linux启动时,加载分区中的文件系统的,这里也需要修改。

  好了一切正常,截几张图过来看看,呵呵:
1.png

2.png

用PuTTY Telnet过去的效果,算是临时解决了中文无法显示的问题
3.jpg

标签: none

添加新评论