/ 中存储网

告诉你基于Ubuntu 10.10构建LFS 6.7的方法及命令

2015-12-10 09:09:46 来源:中存储网

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启动时,加载分区中的文件系统的,这里也需要修改。