当前位置:操作系统 > Unix/Linux >>

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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,