LFS 6.6 安装心得
第一次搭建LFS,考虑到最新版本网上资料比较少,且没有中文版,所以选择LFS6.6作为切入点,且这个版本与我的宿主系统也比较匹配;
宿主系统: CentOS 6.2,并且采用VMWare虚拟机,采用虚拟机的原因:
1>. 由于LFS的搭建耗时比较长,且涉及到很多步骤,采用虚拟机可以充分利用其快照、暂停功能
2.> 对于硬件要求可以根据情况啦配置,比如我就是在VMWare中虚拟了一个新的SCSI硬盘给LFS使用。
下面是LFS6.6中文版的教程:
http://www.ha97.com/book/lfs-book-6.6/index.html
我是完全按照教程来搭建的LFS的,所以对于这些流程,我就不详述了,只记录我在搭建过程中的心得。
1. 下载软件包
教程中提供的软件包下载地址,现在有部分已经不可用,可以去LFS官网去找最新的下载链接,然后把教程中下载的 wget-list中的下载地址更新为可用的,通过wget下载软件包;对于个别下载失败的可以手动从网上搜索。
2. 安装软件包的过程中,一定要细心,我就是因为在第二次安装coreutils的过程中,没有拷贝/bin/true文件,导致后来设置grub引导时出错。
安装软件过程中,有好多测试步骤耗时时间比较长,我后来都放弃执行这些步骤了;如果我搭建过程中感觉比较顺利的话,我觉得可以放弃这些步骤,执行这些测试也就图个心安。
3. 在编译内核时,需要做些简单的设置,因为默认生成的配置文件一般都不能成功使用,我当时从网上搜集了一个,大家可以参考下:
1> 虚拟机的硬盘使用的 SCSI, 适配器为 LSI Logic。
需要增加对 Fusion MPT base driver 的支持
Device Drivers —>
— Fusion MPT device support
<*> Fusion MPT ScsiHost drivers for SPI
<*> Fusion MPT ScsiHost drivers for FC
<*> Fusion MPT ScsiHost drivers for SAS
(128) Maximum number of scatter gather entries (16 – 128)
<*> Fusion MPT misc device (ioctl) driver
注:如果硬盘适配器采用BusLogic, 选则Device Drivers->SCSI device support->SCSI low-level drivers下加入BusLogic SCSI support的支持 Device Drivers
|—> SCSI device support
|—> <*> SCSI device support
|—> <*> SCSI disk support
2> 我采用的文件系统为ext3,需要增加对该文件系统的支持
File systems
|—> <*> Ext3 journalling file system support
|—> [*] Ext3 extended attributes
|—> [*] Ext3 POSIX Access Control Lists
此外,我是直接编译到内核来避免未用initrd脚本来加载模块而导致启动失败
4. 配置grub
由于我是完全按照教程,在宿主系统中增加了一个新的硬盘来搭建LFS的,所以又两种方式配置grub:
1> 按照教程中的步骤,不过我在这个步骤中测试Configure环节出了问题,执行reboot失败,但是这个只是个测试步骤,我由于搞不定就直接Pass了,不影响最终的结果(成功启动LFS),不要按照教程需要进行下面的设置:
设置系统将LFS所在的硬盘作为第一个启动盘,否则启动的就是宿主系统。对于VMWare来说,启动时在Power菜单中选择Bios启动,进入Bios界面来配置。
2>可以直利用宿主系统的grub,我宿主系统安装的时grub 0.97,需要修改配置文件menu.lst;
不过这里我也遇到问题,我修改了menu.lst没起作用,且在/boot/grub目录下自动生成了个grub.cfg文件,而且系统启动时grub也是通过这个配置文件来引导,我没能找到原因,怀疑是搭建LFS时安装的grub对宿主系统有影响。
由于我也是第一次,除了上述提到的问题,整个过程还比较顺利,最后还留有两个遗憾一直没解决,我在考虑重新构建几次试试:
1> 利用宿主系统grub引导LFS时,明明宿主系统grub是0.97,但是读取的确实grub.cfg的配置文件
2> 在chroot模式下,执行reboot时失败:
WARNING: could not determine runlevel - doing soft reboot
(it's better to use shutdown instead of reboot from the command line)
shutdown: timeout opening/writing control channel /dev/initctl
init: timeout opening/writing control channel /dev/initctl
且执行runlevel时,提示:unknown