我是Linux新手,文章有不对的地方欢迎指正,谢谢。
我做的是LFS7.1,不过听说LFS7.0也会遇到同样的错误。
Google上搜索看国外也很多人遇到这样的错误,有人说是/bin目录到/tools/bin目录下的符号链接错误,于是全部重建一次,依然解决不了,虽然我解决不了,但还是建议遇到这样的错误的童鞋们尝试一下。
也有这样的说法,shell的解析器默认为dash,#!/bin/sh可能使用了默认的dash而不是我们在第五章所安装的bash,但是LFS在chroot,何来的dash?况且在安装glibc之前已经执行下面命令,更改了默认的解析器:
sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in
我能进行到这一步,前面已经遇到类似的问题,也就是在chroot后只要使用')'就会出错,当然还是用其他方法解决了。如:
DL=$(readelf -l /bin/sh | sed -n 's@.*interpret.*/tools\(.*\)]$@\1@p')
sed -i "s|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=$DL -o|" \
scripts/test-installation.pl
unset DL
执行第一行时报错syntax error near unexpected token `)'
于我的解决办法是,先执行
readelf -l /bin/sh | sed -n 's@.*interpret.*/tools\(.*\)]$@\1@p'
得到结果xxxxxxx,
然后在执行
DL=xxxxxxx
在LinuxSir论坛上问也没回答,于是开始怀疑是bash的问题。。
LFS7.1安装的是bash4.2,我尝试返回到第五章的环境,把bash安装涉及的内容删除,然后重新安装了bash4.1.
也就是把bash4.2换称bash4.1。记住按步骤安装
回到chroot环境,我先把/bin目录删除,重建。再重建符号链接到/tools/bin
ln -sv /tools/bin/{bash,cat,echo,pwd,stty} /bin
冲动地试了一个命令
DD=$(uname -m)
成功了,没报错,泪奔啊,从此可以用括号了。
回去安装glibc。
make
一帆风顺。
不知道这次把bash4.2改为4.1会不会影响后续的安装。总之,见招拆招就是了。