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
4. 编译过程中要注意指令的大小写,否则很容易出现问题
这是个细节问题,因为Linux中是区分大小写的,所以要格外注意。因为我是一边在VMWare中操作,一边看LFS Book,LFS Book不是最大化的显示,所以输入指令的时候不容易区分大小写,像C和c,S和s,容易出错,结果编译不过去,仔细一些就可以了
5. 安装完成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
6. 调整/etc/ftab和/boot/grub/grub.cfg以正确引导独立的LFS并加载分区
因为我的目的是在独立的硬盘中编译LFS,这样将LFS的虚拟硬盘文件拷贝到新的虚拟机中就可以加载运行了,所以目标系统中是只有一个硬盘的,需要调整上面的两个文件,将原来的sdb对应的改成sda即可,因为LFS所在硬盘是以第二硬盘的形式挂到虚拟机中的。
grub.cfg是在加载Linux时使用的,这里需要调整;fstab是在Linux启动时,加载分区中的文件系统的,这里也需要修改。
声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。