大概三周前被安排做LFS6.8的搭建,今天终于成功启动。顺着LFS book一路走来,也遇到了一些问题,留此记录。
1. 5.7. Glibc-2.13
make的过程中会出现如下错误:
make[1]:*** No rule to make target `/mnt/lfs/sources/glibc-build/Versions.all', neededby `/mnt/lfs/sources/glibc-build/abi-versions.h'. Stop.
这是由于10.10中默认没有安装gawk,在原始用户(lfs用户下权限不够,也不能sudo)下apt-get install gawk,再重新配置再编译即可。
2.6.22. Coreutils-8.10
这个package在测试过程中会出现 FAIL:cp/sparse-fiemap 的错误,这是因为缺少一个patch,可以在LFS网站下载到如下patch:
http://www.linuxfromscratch.org/patches/downloads/coreutils/coreutils-8.10-sparse_fiemap-1.patch
下载后运行如下命令 :patch -Np1 -i ../ coreutils-8.10-sparse_fiemap-1.patch 再重新编译测试即可
3. 启动时提示VFS: Cannot open root device "sdb1" or unknown-block(0,0)
这是由于没有把rootfs所在的磁盘驱动编译进内核的原因,我的平台是 VMware6.5,对应的磁盘是SCSI类型设备中的LSI Logic设备,在配置内核时需要将如下内容选中,注意这里不能编译为模块:
Linux Kernel Configuration--->
Device Drivers --->
<*> SCSI device support
Device Drivers --->
[*] Fusion MPT device support --->
Fusion这个箭头里面的选项有5项,具体哪个需要哪个不需要我也不太清楚,除了logging那项我都勾上了。
对于不同平台,可以通过lspci查看pci设备的名称从而选择不同驱动。
4. 启动时提示没有udev上指定的分区
在启动过程中,出现下列提示:
Activating all swap files/partitions...
swapon: /dev/sdb5: stat failed: No such file or directory [ FAIL ]
Mounting root file system in read-only mode... [ OK ]
Checking file systems...
fsck.ext3: No such file or directory while trying to open /dev/sdb1
Possibly non-existent device? [ FAIL ]
FAILURE:
FILE system errors were encounted that could not be fixed automatically. This
system cannont continue to boot and will therefore be halted until those errors
are fixed manually by a System Administrator.
这里是因为udev和deprecated sysfs有冲突,启动udev必须关闭deprecated sysfs,在内核配置中关闭如下选项即可:
General setup --->
[ ] enable deprecated sysfs features to support old userspace tools
5. LFS备份的方法
LFS book中没有讲到备份方法,我曾经试图以简单的tar和cp来备份,都不太对,tar中途会提示出错,而cp会提示没有权限,总的原因是/dev下设备节点和/proc及/sys文件系统不能简单的拷贝和打包。LFS网站上有一个比较完备的备份方法http://www.linuxfromscratch.org/hints/downloads/files/backing-up-lfs.txt,我这里是搜索lfs-supportmailing list(在LFS主页右上角搜索即可)得到的一个简单方法:
tar -C $LFS --one-file-system -cjvpf lfs-backup.tar.bz2 .
其中,
-C指切换目录至¥LFS,这样创建出来的压缩包根目录是 . ,而不是/mnt/lfs
--one-file-sysem 忽略不在本文件系统上的目录,这样/proc,/sys,/dev中的文件不会被拷贝,以后恢复得时候需要重复LFS book chap6.2来新建设备节点
或者,也可以通过cp命令:
cp -Rav /mnt/lfs/* /mnt/backup
a表示保留原有属性信息