Purelfs安装手记
所有文档和软件包已经上传到fdl兄的ftp:ftp://linuxsir:linuxsir@218.5.64.133
现在在upload的pure lfs目录里。
我使用的文档:
Pure lfs 1.0 (http://lfs.cosoft.org.cn/plfs)
lfs-20030219 (http://lfs.cosoft.org.cn)
01-buildscripts-2.2.6(http://www.linuxsir.com/bbs/attachm...p?postid=165148)
先是按照build-init-2.2.6.sh脚本里所使用的软件包版本号下载,下载的地址可以到freshmeat.net上搜。由于我将使用coreutils,所以就没有下载 fileutils, sh-utils 和 textutils.又到http://www.linuxfromscratch.org/~greg
那里下载了所有补丁。
详细的版本:
BINUTILS_VER=2.13.2.1(还下了2.13.90.0.18和2.13.2)
GCC_VER=3.2.2(还下了一个2.95.3的)
KERNEL_VER=2.4.20
GLIBC_VER=2.3.2(以及配套的linux-threads)
ZLIB_VER=1.1.4
GAWK_VER=3.1.1
COREUTILS_VER=4.5.9
BZIP2_VER=1.0.2
GZIP_VER=1.3.3
DIFFUTILS_VER=2.8.1
FINDUTILS_VER=4.1.7(如果是4.1版,还需要findutils-4.1.patch,在http://downloads.linuxfromscratch.org/)
BISON_VER=1.875
FLEX_VER=2.5.27
M4_VER=1.4
MAKE_VER=3.80
GREP_VER=2.5.1
SED_VER=4.0.5
GETTEXT_VER=0.11.5
NCURSES_VER=5.3
PATCH_VER=2.5.4
TAR_VER=1.13(还需要一个补丁,tar-1.13.patch,在http://downloads.linuxfromscratch.org/)
TEXINFO_VER=4.5(脚本里是用的4.3,我没找到,又懒得patch -R,就用了4.5的)
BASH_VER=2.05b
UTILLINUX_VER=2.11z
PERL_VER=5.8.0
TCL_VER=8.4.2
EXPECT_VER=5.38
DEJAGNU_VER=1.4.3
MAKEDEV_VER=1.7
然后是创建分区,创建文件系统(reiserfs),分区加载到/mnt/plfs。创建文件系统的命令可以参考blfs文档章 5. 文件系统的安装reiserfsprogs的内容(应该都装了吧),安装了以后:
mkreiserfs /dev/hdx
添加lfs用户后,按照pure lfs文档里的内容来创建$LFS/stage1:
mkdir $LFS/stage1
chown lfs $LFS/stage1
ln -s $LFS/stage1 /
我建立了$LFS/stage1目录,把源码和补丁都拷贝进去,又把源码的所有者改成lfs用户:
chown -R lfs /mnt/plfs/stage1/
然后就切换到lfs用户:
su - lfs
又设置lfs用户的环境变量:
cat > ~/.bash_profile << "EOF"
set +h
umask 022
LFS=/mnt/plfs
LC_ALL=POSIX
LDFLAGS="-s"
PATH=/stage1/bin:$PATH
unset LANG CFLAGS CXXFLAGS CC
export LFS LC_ALL LDFLAGS PATH
EOF
source ~/.bash_profile
上面的内容里,我加了一行unset命令,主要是用来去掉我系统里的影响,因为我在系统里是设置了这几个变量的,如果不unset,有可能影响到pure lfs的编译。这里不用优化的,因为没有这个必要,现在编译的包,只有binutils,gcc和glibc在最后的系统里用到,而这几个包最好不要用优化。在脚本里有两个设置:
unset LD_LIBRARY_PATH
unset LD_PRELOAD
我在lfs用户下echo了一下,这两个变量并没有值,所以就没加上。
脚本里还有关于时区和locale的设置,我都没有设。
下面就开始安装了。
在主系统里安装tcl,expect和dejagnu。这是为了测试静态的binutils和gcc,并且,在装了这三个包以后,第五章所有的测试都可以用它们来完成。
这三个包的安装很简单,都是:
./configure --prefix=/usr &&
make &&
make install
其中expect要先打一个补丁。在文档里说:额外的注意事项 - 你必须加载了/dev/pts(或使用devfs)才能让dejagnu测试套件工作正常。
所以我进/dev/pts里看了一下,有0,1两个终端,挺正常的。
第五章 - 安装 binutils - Pass 1 (静态)
这一步有一些周折,看完了再装。
我首先看了一下脚本(init)里的check-binutils函数。它主要是测试三个变量是否应该设置上,还可能做一处修改(下面的第三处)。
然后尝试安装2.13.90.0.18:
手动做check-binutils里面的测试:
grep configure-host Makefile.in > /dev/null 2>&1 &&
export BINUTILS_CONF_HOST=Y ||
export BINUTILS_CONF_HOST=N
echo -e " o Requires 'make configure-host' ........... ${BINUTILS_CONF_HOST}"
grep with-lib-path ld/configure > /dev/null 2>&1 &&
export BINUTILS_WITH_LIB_PATH=Y ||
export BINUTILS_WITH_LIB_PATH=N
echo -e " o Has '--with-lib-path=' configure option .. ${BINUTILS_WITH_LIB_PATH}\n"
grep "GENSCRIPTS = LIB_PATH" ld/Makefile.in > /dev/null 2>&1 ||
{
echo " o adding 'LIB_PATH = \$(LIB_PATH)' to GENSCRIPTS definition"
echo " in ld/Makefile.in"
echo " ( Passes value of LIB_PATH to genscripts.sh environment"
echo -e " for ldscript creation. )\n"
}
前两步测试的结果都把变量设置成Y了,记住这两个变量的值,以后会用到。第三步测试的结果是不用修改。 如果要修改,命令应该是:
test -f ld/Makefile.in-ORIG ||
cp ld/Makefile.in ld/Makefile.in-ORIG
cd ld
sed 's@GENSCRIPTS = \$\(SHELL\)@GENSCRIPTS = LIB_PATH=\$\(LIB_PATH\) @g' Makefile.in-ORIG > Makefile.in
然后开始编译:
mkdir ../binutils-static-build &&
cd ../binutils-static-build &&
CFLAGS="-O2 -pipe" ../binutils-2*/configure --prefix=/stage1 \
--disable-nls | tee mybinutils.log
注意上面的命令里有通配符。如果有两个目录都符合,就麻烦了。
这时候出错了:
checking for i686-pc-linux-gnu-ar... no
后面一串都是no
换版本。换了2.13.2.1,重复上面的测试,前两个是N,后一个要修改。可是我的LIB_PATH变量是空的啊!不管,先做了再说。用了修改命令后,查看一下ld/Makefile.in,发现没有改过来,只好手动来改,找到:
GENSCRIPTS = $(SHELL)
只有一处,改成:
@GENSCRIPTS = LIB_PATH=$(LIB_PATH)
再编译:
mkdir ../binutils-static-build &&
cd ../binutils-static-build &&
CFLAGS="-O2 -pipe" ../binutils-2*/configure --prefix=/stage1 \
--disable-nls | tee mybinutils.log &&
make LDFLAGS="-all-static -s" &&
make check &&
make install
因为BINUTILS_CONF_HOST=N,就不用make configure-host了。make check也顺利通过。
下面是为了以后做准备:
cd ld &&
make clean &&
make LIB_PATH=/stage1/lib
第五章 - 安装 gcc - Pass 1 (静态)
我用的是完整的大包,而不是gcc-core。
运用gcc-3.2.2.mmap_test补丁,但不运用nofixincludes补丁,而是用命令来代替:
cd gcc
test -f Makefile.in-ORIG ||
cp Makefile.in Makefile.in-ORIG
grep -Ev '(README| ./fixinc.sh )' Makefile.in-ORIG | \
sed 's@LIBGCC2_DEBUG_CFLAGS = -g@LIBGCC2_DEBUG_CFLAGS =@g' \
> Makefile.in
用diff命令看了一下,修改的确做了。
我又用了gcc-3.2.2.libgcc_no_debug.patch补丁,没用上,说是已经改过了,看了一下,的确在上面的sed命令里改的就是这个,所以没有必要用它了。
编译:
mkdir ../gcc-static-build &&
cd ../gcc-static-build &&
CFLAGS="-O2 -pipe" ../gcc-3*/configure --prefix=/stage1 \
--with-local-prefix=/stage1 --enable-languages=c \
--disable-nls --enable-shared &&
make BOOT_LDFLAGS="-static -s" BOOT_CFLAGS="-O2 -pipe" \
STAGE1_CFLAGS="-pipe" bootstrap &&
make -k check | tee mygcccheck.log
make ins