自从大学二年级的寒假没日没夜地用了整整两个月的时间编译了lfs之后,就再也没做过。这两天在linux中国的微信公众号上看到lfs都升级到7.7了,故而觉得是时候重新再编译一遍的时候了。
诚然lfs是linux学习和深入理解的终南捷径,每个真心希望了解linux的人都建议去做一遍lfs,因为每做一次就会获得新的知识,对linux有更多更深入的理解。

(题图来自: techradar.com)
此时我把debian更新到了最新,并且为了使用显卡驱动让它能够在我的显示器上全屏显示,就用tasksel装上了debian desktop environment。
1-tasksel-debiandesktopenv
我在自己的home目录中新建了一个目录lfs,用于整个工程的存储。这时候我在~/lfs/中新建了一个checkscript目录,用于存储事前的环境检查脚本。
我们来编写第一个检查脚本,这个脚本会检查各个需要的工具及内核版本号,看看是否符合lfs7.7的列表要求,如果没有,会报not found。
<code>cd ~/lfs/checkscript</code>
<code></code>
<code>vi check_env.sh</code>
<code>#/bin/sh</code>
<code>export lc_all=c</code>
<code>bash –version | head -n1 | cut -d” ” -f2-4</code>
<code>echo “/bin/sh -> `readlink -f /bin/sh`”</code>
<code>echo -n “binutils: “; ld –version | head -n1 | cut -d” ” -f3-</code>
<code>bison –version | head -n1</code>
<code>if [ -h /usr/bin/yacc ]; then</code>
<code>echo “/usr/bin/yacc -> `readlink -f /usr/bin/yacc`”;</code>
<code>elif [ -x /usr/bin/yacc ]; then</code>
<code>echo yacc is `/usr/bin/yacc –version | head -n1`</code>
<code>else</code>
<code>echo “yacc not found”</code>
<code>fi</code>
<code>bzip2 –version 2>&1 < /dev/null | head -n1 | cut -d” ” -f1,6-</code>
<code>echo -n “coreutils: “; chown –version | head -n1 | cut -d”)” -f2</code>
<code>diff –version | head -n1</code>
<code>find –version | head -n1</code>
<code>gawk –version | head -n1</code>
<code>if [ -h /usr/bin/awk ]; then</code>
<code>echo “/usr/bin/awk -> `readlink -f /usr/bin/awk`”;</code>
<code>elif [ -x /usr/bin/awk ]; then</code>
<code>echo yacc is `/usr/bin/awk –version | head -n1`</code>
<code>echo “awk not found”</code>
<code>gcc –version | head -n1</code>
<code>g++ –version | head -n1</code>
<code>ldd –version | head -n1 | cut -d” ” -f2- # glibc version</code>
<code>grep –version | head -n1</code>
<code>gzip –version | head -n1</code>
<code>cat /proc/version</code>
<code>m4 –version | head -n1</code>
<code>make –version | head -n1</code>
<code>patch –version | head -n1</code>
<code>echo perl `perl -v:version`</code>
<code>sed –version | head -n1</code>
<code>tar –version | head -n1</code>
<code>makeinfo –version | head -n1</code>
<code>xz –version | head -n1</code>
<code>echo ‘main(){}’ > dummy.c && g++ -o dummy dummy.c</code>
<code>if [ -x dummy ]; then</code>
<code>echo “g++ compilation ok”;</code>
<code>echo “g++ compilation failed”;</code>
<code>rm -f dummy.c dummy</code>
2-checkscript-check_env.sh
此时的脚本是不能直接执行的,需要加执行权限,也就是x权限
<code>chmod +x check_env.sh</code>
现在可以执行脚本了
3-checkscript-check_env.run
从检查结果中可以看到,我的debian太干净了,缺了好几样东西,bison gawk g++,所以我用aptitude装上他们就好了。
4-checkscript-install
5-checkscript-check_env-ok
此时环境检查没有报错信息了,需要的工具也已经正确显示了版本号。
下面检查需要用到的库,一共有三个,gmp, mpfr和mpc
<code>vi check_lib.sh</code>
<code>#!/bin/bash</code>
<code>for lib in lib{gmp,mpfr,mpc}.la; do</code>
<code>echo $lib: $(</code>
<code>if find /usr/lib* -name $lib | grep -q $lib; then</code>
<code>:;</code>
<code>echo not;</code>
<code>) found</code>
<code>done</code>
<code>unset lib</code>
6-checkscript-check_lib.sh
7-checkscript-check_lib.run
从检查结果来看,三个库目前都不具备,不过没关系,现在还用不到这三个货,先把脚本写好。
原文发布时间:2015-04-02
本文来自云栖合作伙伴“linux中国”