首页 > 系统管理 > LFS > LFS7.6 000 开始前的准备工作
2015
02-18

LFS7.6 000 开始前的准备工作

LFS7.6 000开始前的准备工作

0.简介    

    本篇主要内容是LFS制作前的准备工作。

1.关于LFS。

LFS全称 Linux From Scratch.官网地址为:http://www.linuxfromscratch.org/

想学习LFS,自然要用官方的手册和规定工具的压缩包(也可以下载wgetlist然后一个一个下,为了省事,下载了整合好的压缩包)
下载LFS7.6书籍:
http://www.linuxfromscratch.org/lfs/downloads/7.6/LFS-BOOK.pdf
下载LFS的压缩包:http://mirrors-usa.go-parts.com/lfs/lfs-packages/lfs-packages-7.6.tar

2.主系统要求(Host System Requirements)

下载好LFS-BOOK.pdf之后,将其打开,全是英文,我的英文不是很好,但是基本可以理解,英文的重要性啊

找到书签目录中的Preface  →  Host System Requirements,点开,看一下内容,这是对本地系统的要求,然后下面有代码,就是用来测试工具的。

会看到:

? Bash-3.2 (/bin/sh should be a symbolic or hard link to bash)
? Binutils-2.17 (Versions greater than 2.24 are not recommended as they have not been tested)
? Bison-2.3 (/usr/bin/yacc should be a link to bison or small script that executes bison)
? Bzip2-1.0.4
? Coreutils-6.9
? Diffutils-2.8.1
? Findutils-4.2.31
? Gawk-4.0.1 (/usr/bin/awk should be a link to gawk)
? GCC-4.1.2 including the C++ compiler, g++ (Versions greater than 4.9.1 are not recommended as they have not
been tested)
? Glibc-2.5.1 (Versions greater than 2.20 are not recommended as they have not been tested)
? Grep-2.5.1a
? Gzip-1.3.12
? Linux Kernel-2.6.32
? M4-1.4.10
? Make-3.81
? Patch-2.5.4
? Perl-5.8.8
? Sed-4.1.5
? Tar-1.18
? Xz-5.0.0

    再找到Part II. Preparing for the Build  →  Chapter 5. Constructing a Temporary System  →  5.5. GCC-4.9.1 – Pass 1中写到

“GCC doesn't detect stack protection correctly, which causes problems for the build of Glibc-2.20, so fix that by issuing the following command:……”
粗体字写出了GLibc的版本为2.20,同样为了省事,我开始查找版本为Glibc-2.20的Linux发行版。

我发现了Fedora21,但是听过很多大神说,基于Debian的版本的系统对LFS的制作上兼容性更好,于是我就直接去了Ubuntu的官网,下载并安装了Ubuntu:

这是Ubuntu的下载地址:http://cdimage.ubuntu.com/ubuntukylin/releases/14.04.2/release/ubuntukylin-14.04.2-desktop-amd64.iso

当然你也可以从其他的镜像站获得下载:

关于开源镜像的下载网站,我也进行过整理,详细细节是这个http://tshare365.com/?p=471

3.主系统和LFS所需的环境

有了书、压缩包、还有主系统,下面就差一个合适的环境,我这里使用虚拟机VMware,我的版本为11,另外为了方便我还使用了ssh工具SecureCRT。

在虚拟机安装Ubuntu,虚拟机的使用教程就不在这里赘述,网上有很多。在这里我只是说下几点建议:

blob.png

Ubuntu将安装在那个40G的硬盘里(sda),而我们的LFS将会被创建在那个100G硬盘里(sdb)。

线程为4,在使用make的时候就可以使用,make -j4,加快编译速度。

关于Ubuntu的安装过程,只要一路下一步就好了。

关于SecureCRT这类工具,我也只是为了传文件罢了,在制作的过程建议使用虚拟机的挂起和快照功能,这样不用频繁地进行重启了。

4.根据主系统要求做出一些测试和修改

一共有两段测试代码。

打开LFS书中的书签Preface  →  Host System Requirements之后,复制并执行第一段测试代码:

cat > version-check.sh << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools
export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
echo "/bin/sh -> `readlink -f /bin/sh`"
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1
if [ -e /usr/bin/yacc ];
then echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
else echo "yacc not found"; fi
bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
if [ -e /usr/bin/awk ];
then echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
else echo "awk not found"; fi
gcc --version | head -n1
g++ --version | head -n1
ldd --version | head -n1 | cut -d" " -f2- # glibc version
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
sed --version | head -n1
tar --version | head -n1
xz --version | head -n1
echo 'main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
then echo "g++ compilation OK";
else echo "g++ compilation failed"; fi
rm -f dummy.c dummy
EOF
bash version-check.sh

得到如下结果:

bash, version 4.3.11(1)-release
/bin/sh -> /bin/dash
Binutils: (GNU Binutils for Ubuntu) 2.24
version-check.sh: line 7: bison: command not found
yacc not found
bzip2,  Version 1.0.6, 6-Sept-2010.
Coreutils:  8.21
diff (GNU diffutils) 3.3
find (GNU findutils) 4.4.2
version-check.sh: line 15: gawk: command not found
/usr/bin/awk -> /usr/bin/mawk
gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
version-check.sh: line 20: g++: command not found
(Ubuntu EGLIBC 2.19-0ubuntu6.5) 2.19
grep (GNU grep) 2.16
gzip 1.6
Linux version 3.16.0-30-generic (buildd@kissel) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #40~14.04.1-Ubuntu SMP Thu Jan 15 17:43:14 UTC 2015
version-check.sh: line 25: m4: command not found
GNU Make 3.81
GNU patch 2.7.1
Perl version='5.18.2';
sed (GNU sed) 4.2.2
tar (GNU tar) 1.27.1
xz (XZ Utils) 5.1.0alpha
version-check.sh: line 33: g++: command not found
g++ compilation failed

下面我们进行逐个分析:

(1)按照要求:

Bash-3.2 (/bin/sh should be a symbolic or hard link to bash)

而现在的情况是:

/bin/sh -> /bin/dash

所以:

rm /bin/sh
ln -s /bin/bash /bin/sh

(2)错误:

version-check.sh: line 7: bison: command not found
yacc not found

这里我们要知道bison是yacc的替代工具,所以:

apt-get install bison

(3)错误:

version-check.sh: line 15: gawk: command not found
/usr/bin/awk -> /usr/bin/mawk

gawk未安装而且还有要求:

Gawk-4.0.1 (/usr/bin/awk should be a link to gawk)

所以:

apt-get install gawk
rm /usr/bin/awk
ln -s /usr/bin/gawk /usr/bin/awk

(4)错误:

version-check.sh: line 20: g++: command not found

所以:

apt-get install g++

(5)错误:

version-check.sh: line 25: m4: command not found

所以:

apt-get install m4

然后我们再次运行下测试脚本:

bash version-check.sh

结果如下:

/bin/sh -> /bin/bash
Binutils: (GNU Binutils for Ubuntu) 2.24
bison (GNU Bison) 3.0.2
/usr/bin/yacc -> /usr/bin/bison.yacc
bzip2,  Version 1.0.6, 6-Sept-2010.
Coreutils:  8.21
diff (GNU diffutils) 3.3
find (GNU findutils) 4.4.2
GNU Awk 4.0.1
/usr/bin/awk -> /usr/bin/gawk
gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
g++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
(Ubuntu EGLIBC 2.19-0ubuntu6.5) 2.19
grep (GNU grep) 2.16
gzip 1.6
Linux version 3.16.0-30-generic (buildd@kissel) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #40~14.04.1-Ubuntu SMP Thu Jan 15 17:43:14 UTC 2015
m4 (GNU M4) 1.4.17
GNU Make 3.81
GNU patch 2.7.1
Perl version='5.18.2';
sed (GNU sed) 4.2.2
tar (GNU tar) 1.27.1
xz (XZ Utils) 5.1.0alpha
g++ compilation OK

此时,

/usr/bin/yacc -> /usr/bin/bison.yacc

bison.yacc是一个bison兼容脚本所以符合要求:

Bison-2.3 (/usr/bin/yacc should be a link to bison or small script that executes bison)


第二段测试代码:

cat > library-check.sh << "EOF"
#!/bin/bash
for lib in lib{gmp,mpfr,mpc}.la; do
echo $lib: $(if find /usr/lib* -name $lib|
grep -q $lib;then :;else echo not;fi) found
done
unset lib
EOF
bash library-check.sh

如果出输出结果为 都未安装 或者 都安装 证明没有问题!

切记不可只安装了其中的一个或两个,如果安装了其中的一个或两个,那么请补齐三个库。原因是编译gcc源码的过程中,需要用到这三个库gmp,mpfr mpc。

我的测试结果是:

libgmp.la: not found
libmpfr.la: not found
libmpc.la: not found

即三个都未安装!


THE END:学习LFS前的准备工作已经做好了!下一步是:001制作工具链前环境的搭建





最后编辑:
作者:PurStar
PurStar
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复