热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux发行版>LFS>

如何提高LFS的成功率以及部分问题的解决方法

来源: 作者: 时间:2008-06-22 Tag: 点击:

ls\
*
将被翻译为ls*,这样的指令自然是无效的
ls \
*
和ls\
*
都将被翻译成ls *,这样才能够正常运行命令。

4、命令的大小写(这个问题其实不能算问题,因为如果稍微了解Linux都知道Linux下命令是对大小写敏感的),不注意大小写问题可能导致命令的错误而最终演化为失败。

5、如何打补丁,补丁通常是在原代码的目录下进行的,比如glibc-2.3.4-fix_test-1.patch这个补丁的打法是首先应该要进入到 glibc-2.3.4这个目录下,而不是进入glibc-build也不是在sources目录下,补丁打成功应该是自动回到bash的提示符上的,而不会出现一个让你输入文件名的提示,如果出现了通常是打补丁的位置错误造成的,检查一下你所在的目录。

6、到了第五章调整工具链(5.7. Adjusting the Toolchain)的地方可以算整个LFS制作过程中最容易出错的地方,也是最容易导致LFS失败的地方,也是初次接触LFS的朋友们最不易察觉的地方,因为即使调整错误也一样能让整个第五章完成,但到了第六章就无法继续了。
  比较明显的错误表现就是到了第六章的chroot部分(6.3. Entering the Chroot Environment),在输入完chroot命令后提示:/tools/bin/env: No such file or directory这样的信息,而如果到/tools/bin/下找env命令,却明明白白的在那里,这通常都是由第五章调整工具链的地方没有正确完成的结果。
检查,输入命令:ldd /tools/bin/env,正确的输出应该是
  linux-gate.so.1 => (0x......)
  libc.so.6 => /tools/lib/libc.so.6 (0x......)
  /tools/lib/ld-linux.so.2 (0x.....)
  这里的(0x.....)可能会不一样,但应该是有一个十六进制的地址,绝不应该有not found。
  如果真的在这个地方出了错误通常都比较棘手,我的建议就是不要浪费时间,直接重头开始LFS。
  如果你不想重头开始最好的方法就是在源头上解决这个问题,也就是在做第五章调节工具链的时候就要确定工具链调整正确,如果发现结果不正确绝对不要继续,否则浪费的是时间。

  需要主要的地方
  SPECFILE=`gcc --print-file specs` &&
  sed 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g' \
   $SPECFILE > tempspecfile &&
  mv -f tempspecfile $SPECFILE &&
  unset SPECFILE
  这段命令中SPECFILE=`gcc --print-file specs`使用的是“`”,也就是键盘上“1”左边的那个键,千万别打错了!而sed 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g' $SPECFILE > tempspecfile则是“'”,是单引号
“`”和“'”两者的意思完全不同,千万要注意这里,错误往往发生在这里。
  还有需要注意的是's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g'里面的空格千万不要多了,也不要少了,否则都有可能导致结果的错误。这里面有两处空格,每处一个空格。
  
检查,这步非常关键,特别是对LFS的新手
  echo 'main(){}' > dummy.c
  cc dummy.c
  readelf -l a.out | grep ': /tools'
  要保证输出一定有[Requesting program interpreter: /tools/lib/ld-linux.so.2],否则绝对不要继续
  如果没有这个输出,则用
  readelf -l a.out | grep 'ld-linux'来代替readelf -l a.out | grep ': /tools',应该会有输出,如果输出为[Requesting program interpreter: /lib/ld-linux.so.2],则一定是前面的
  SPECFILE=`gcc --print-file specs` &&
  sed 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g' \
    $SPECFILE > tempspecfile
出了错误,仔细检查是否有命令输入错误,通常都是由输入错误造成的。

如果测试的结果正确,那么恭喜你过了一个重要的一关,可以继续了。


7、安装tcl的时候也经常会有人出错,通常都出在./configure上,但似乎在LFS的LiveCD上不会出问题,在一些发行版做主系统来做LFS的时候容易出现,比如Debian,分析可能是主系统中的命令造成的。
  如果你遇到了可以在./configure之前用命令
  
sed -i "s/relid'/relid/" configure
  来修正后再./configure
  如果你没出现这个问题就不要用这个命令了


8、到了第五章perl(5.32. Perl-5.8.6)之前的包基本上没有太大问题,只要注意命令大小写,只打需要的补丁,基本上都不会有什么问题,只是这个perl倒是经常有人安装出问题,因为是第五章最后安装的,所以出了问题通常要到第六章才能显示出来。
  如果你遇到了第六章在glibc的make过程中出现/bin/sh: no: command not found,那应该是这个问题了。
  如果想解决,可以尝试重新安装Perl的方法,具体步骤如下:
  (1)退出第六章的chroot环境:exit
  (2)进入到lfs用户环境:su - lfs
  (3)删除perl相关文件和目录:rm -rf /tools/bin/{perl,pod2man} /tools/lib/perl5/5.8.6
  (4)按照LFS手册第五章perl的步骤重新安装perl。

9、关于stripping,strip这个命令还有具有一定的“危险”性的,按照手册上的命令通常不会出问题,如果你不清楚strip参数的意思,那么请不要随意修改或去掉这些参数,否则可能有导致整个工具链“全毁”的结果。对于LFS新手而言,可以跳过第五章的strip,因为最后/tools目录是要被删除的,所以不会有什么影响,但如果磁盘空间紧张,或者想要备份工具链,那还是strip一下可以释放出很多占用的空间。


10、进入第六章,要记得在6.2. Mounting Virtual Kernel File Systems之前就要退出lfs用户,进入root用户再继续。
  从6.2. Mounting Virtual Kernel File Systems到6.9. Linux-Libc-Headers-2.6.11.2之间的几节内容也是非常重要的,通常执行过程中不会有什么错误提示,只有在6.8中的mount 部分会有can't open /etc/fstab: No such file or directory.提示,手册中也提到了,没有关系,但其它命令如果出现错误,或者mount的时候出现其它错误提示,则不要继续,请确定问题所在再继续,但如果你是这几节中退出计算机后又重新恢复到工作状态的话,则有可能某些目录已经建立而导致命令有错误提示,总之这里出现错误一定要搞清楚问题所在。
上一篇:换个角度看LFS——反向分析LFS
下一篇:没有了
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册