|
今天是我开工以来最艰苦同时也是最痛苦,最急也是最烦的一天,从上午开始直到现在,终于看见了LFS系统的提示符!
经过几天的奋战,本来昨天已经差不多了,只剩下编译内核,由于时间已晚,所以就留到今天进行。今天一起床,立即把计算机打开,进入mandrake,chroot之后挂上proc分区,开始按照安装说明书编译内核。谁知开局不利,第一次编译就出错,系统提示找不到文件,难道核心文件也会出错?考虑到如果只是一个文件的问题,只要不用这个文件的所在部分的功能就可以回避,我重新设置内核参数,将一些不必要的选项去掉,同时将一些选项设置成系统默认値,以增加保险系数。再编译,编译成功。然而,编译成功并不等于内核就能正常工作,真正的麻烦还在后面。接下来,按照说明书设置lilo,在执行命令:/sbin/lilo -v之后,系统提示$LFS分区不是可引导分区,当时我看了一下安装说明书的后面部分,看到lfs是先从主系统引导进入lfs,然后再设置成自己独立引导的,所以也就没在意,继续按照说明书完成系统设置。重新启动后,发现不能按系统引导菜单上设置的lfs启动项目启动。急忙察看/etc/lilo.conf文件,发现设置没有任何错误,与安装说明书完全一致。后来发现mandrake是用grub引导的,修改lilo.conf文件当然不起作用。但当时没这么想,怀疑是分区没有激活或者是系统引导程序lilo没有安装好之类的问题。但简单地执行lilo是不行的,而且我的硬盘有9个分区,包括lfs在内有5个操作系统,采用bootstar作为多系统引导程序。一旦安装不好,与bootstar冲突,会造成很大的麻烦。考虑再三,决定先把lfs系统备份,然后在lfs分区上安装一最小最简单的mandrake,再将mandrake删去,把lfs备份回来。用这样的办法来使分区变为可引导分区,虽然笨了点,但是保险系数高。于是,先用df查看了各分区大小,发现lfs居然有2.6G之大,将static删除后还剩下1.8G,接着将lfs备份到另一个w2000分区,执行tar czvf /mnt/w2000/lfs.tar.gz /mnt/lfs,完成之后的lfs.tar.gz文件大小有500M多一点。接下来用mandrake安装启动软盘启动,选择从硬盘安装,只选择最基本的软件包,很快完成安装过程。重新启动,进入安装mandrake的lfs分区,删除/usr,/var等目录,但bin和最基本的目录没有删,执行命令恢复系统:tar xzvf /mnt/w2000/lfs.tar.gz。完成之后,用df察看lfs分区大小,有1.8G左右,看来是恢复了。于是重新启动,还是不能进入系统。启动时出现一堆“99”,这是为什么?急忙用info lilo察看帮助文档,发现99是引导错误代码,表示在引导过程第二阶段出现问题,至于具体是那个阶段出现问题,不得而知。仔细观察$LFS分区下的目录,发现没有boot目录,系统不是恢复了吗?又是那儿出了问题?经过一番查找之后,发现恢复的文件全部解压到lfs分区的/mnt/lfs下面,看来备份文件恢复时是要保留路径的,只好启动到mandrake主系统,挂上$LFS分区,将所有的目录全部删除,再恢复备份。完成之后一看,怎么还和刚才一样?原来我忙中出错,恢复系统时没有把路径调整到备份时所在的路径,只好从头再来。又是一番折腾,才算把系统恢复成功。我相信tar命令中肯定有某个参数可以改变系统恢复的路径,但不碰到这事,谁会去关心这个问题!来来回回折腾好几遍,全都是为自己的无知交了学费。前几天在书店看到一本unix用户手册,是机械工业出版社出版的,大约七八十元一本,当时嫌贵没买,现在想起来可真是后悔莫及。此时要是有一本详尽的参考手册在手,不就省事多了!
由于lfs分区不能启动,又不能用lilo加载,只好考虑用软盘启动进入lfs。我手头上的书对于制作linux启动盘都讲得很简单,让人看得不明不白。于是到网上查了一下,找到四种方法,为了便于下面说明问题,我这里给大家简要介绍一下:
1.使用mkbootdisk为当前系统制作启动盘
mkbootdisk --device /dev/fd0 'uname -r'
这里--device /dev/fd0是要建立启动软盘。接下来的是内核版本号,如2.2.16等。这里用uname -r 获取。
2.将lilo安装在软盘的引导扇区中
lilo -b /dev/fd0
这里-b /dev/fd0是将lilo安装在软盘上。这种方法和第1种一样,都是制作当前系统的启动盘。
3.找一个可引导内核,令它的根设备指向正确的根分区,然后“刻入”软盘
rdev vmlinuz /dev/hda?
dd if=vmlinuz of=/dev/fd0
这里使用rdev命令将可引导内核vmlinuz中的根设备指向/dev/hda?,使用时要将hda?换成你自己的根分区,然后用dd命令写入软盘。
这种方法灵活好,但如果使用的内核与启动系统的内核不一样,会使许多功能无法实现,如加载不了模块。所以启动后,最好在启动的系统上再重新制作启动盘。
4.利用软盘上的装载程序和一个可引导内核启动系统
首先要制作一个dos启动盘,将装载程序loadlin.exe和可引导内核vmlinuz复制到软盘上,然后建立自动执行批处理文件autoexec.bat,其内容如下:
loadlin vmlinuz root=/dev/hda? ro
这种方法在所有方法中是最简单的。
由于要在mandrake主系统中制作lfs启动盘,所以我选用第3种方法。先用mke2fs /dev/fd0在软盘上建立文件系统。然后用badblocks /dev/fd0检查坏块。最后执行下列命令生成启动软盘:
rdev lfskernel /dev/hda3
dd if=lfskernel of=/dev/fd0
这里根设备选用hda3,因为在mandrake主系统上lfs分区是hda3。制作完成后,重新启动。从软盘引导,刚出现Load。。。。。不久,系统突然提示不能识别的压缩格式,system halt!!! 再次启动,还是如此。我当时真是急得直跳,难道直是无路可走了?
看来问题出在编译的内核上。但现在lfs系统没法启动,只好另外想办法。先用刚才的方法制作一张mandrake内核的启动盘,再用这张盘去启动进入lfs分区,结果在启动时系统提示不能mount root分区,VFS有错误,kernel panic。。。等等。看来是不能加载root分区的问题,是不是定义的根分区有问题? 于是重新制作启动盘,这次把根分区改成/dev/hda1,执行下列命令:
rdev vmlinuz-2.4.19-9mdk /dev/hda1
dd if=vimlinuz-2.4.19-9mdk of=/dev/fd0
用软盘重新启动,果然成功。马上重新编译内核,编译完成的将内核和system.map复制到/boot目录下,接着制作新的启动软盘。但是制作失败,系统提示/dev/fd0不是有效的块设备。看来mandrake的内核在lfs分区上启动不了一些模块和设备文件。似乎又没戏唱了,事情已经进行到了这一步,总不能功亏一溃。只好冒险安装lilo。先把硬盘的分区表备份。然后进入lfs分区,重新编辑/etc/lilo.conf文件,如下所示:
default=lfs
image=/boot/lfskernel
label=LFS
root=/dev/hda1
read-only
之后,在命令行输入lilo,系统提示LFS add *,感觉可能有希望,因为在mandrake下执行lilo总是不成功。从硬盘重新启动,在经过一些红色的警告信息(这表明系统启动配置文件有错误)之后,终于看到了lfs系统的login提示符。这一次可真是来之不易呀! |
|