Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1458110
  • 博文数量: 122
  • 博客积分: 340
  • 博客等级: 一等列兵
  • 技术积分: 2967
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-01 11:50
个人简介

斑竹网络专注为中小企业客户提供以管理服务为核心的IT全方位服务 https://www.sysadm.cn

文章分类

全部博文(122)

文章存档

2018年(2)

2017年(1)

2015年(2)

2014年(30)

2013年(81)

2011年(5)

2009年(1)

分类: LINUX

2013-12-03 14:04:39

lfs_6.7安装

(2013-10-16)

一、安装环境及前期准备

1、安装环境

软件环境:VMWARE 6.5+ lfslivecd-x86-6.3-r2145 +lfs6.7安装包

2、磁盘分区

fdisk  /dev/sda

  创建一个主分区和一个扩展分区,大小分别为100M和磁盘的剩余空间。扩展分区里创建两个逻辑分区,分别做为lfs系统的root分区和swap分区。在创建分区时,swap分区要使用fdisk 中的t命令将其修改成swap分区。

 mkswap /dev/sda5  创建swap分区的文件系统。

 swapon /dev/sda5   启用交换分区swap

3、创建文件系统

mke2fs -jv /dev/sda1 

mke2fs -jv /dev/sda6

注意: 

    有些发行版的E2fsprogs工具会在创建文件时增加自己的特性,而这会导致在安装好LFS系统后,重启时提示类似:“unsupported filesystem features, upgrade your e2fsprogs”的错误提示。使用下列命令检查是否有类似这类增强型的特性:

debugfs -R feature /dev/sda1

上述命令输出中不应包括除了以下特性以外的其它特性:

has_ journal, ext_ attr, resize_ inode, dir_ index, filetype, sparse_ super, large_ file needs_ recovery

4、挂载新的分区

export LFS=/mnt/lfs

mkdir -pv $LFS

mount -v -t ext3 /dev/sda6 $LFS 

mkdir -v $LFS/boot

mount -v -t ext3 /dev/sda1 $LFS/boot

5、准备安装包和安装补丁

mkdir -v $LFS/sources

chmod -v a+wt $LFS/sources

上传lfs6.7的安装包

tar -xvf lfs-packages-6.7.tar 

6、其它准备或需要注意的事项

a.关于LFS

环境变量$LFS是极其重要的,在整个LFS的安装过程中都会使用它,它是指向LFS安装分区的挂载点的。所以,在离开当前的工作环境或重新回来时都应该确认这个环境的设置是正确的。

b.创建$LFS/tools目录

在下面构建临时系统时,所有的程序都是编译安装在$LFS/tools目录下,以别与最终的LFS系统能够分开。

mkdir -v $LFS/tools

ln -sv $LFS/tools /

c.创建用户和用户组

groupadd lfs

useradd -s /bin/bash -g lfs -m -k /dev/null lfs

passwd lfs

chown -v lfs $LFS/tools

chown -v lfs $LFS/sources

d.设置环境配置文件

su - lfs

cat > ~/.bash_profile << "EOF"

exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash

EOF

上述内容是创建一个.bash_profile文件。在登陆到系统中时,正常情况下,shell会读取主机中的/etc/profile文件,并根据这个文件里的内容设置一些环境变量等。而上述的exec env -i .../bin/bash是让shell不要读取/etc/profile文件内容,从而清空所有的可能带来影响的环境变量。

cat > ~/.bashrc << "EOF"

set +h

umask 022

LFS=/mnt/lfs

LC_ALL=POSIX

LFS_TGT=$(uname -m)-lfs-linux-gnu

PATH=/tools/bin:/bin:/usr/bin

export LFS LC_ALL LFS_TGT PATH

EOF

上述的set +h是关闭bash的啥希功能。Hash功能是一个比较有用的功能,它维护着一张hash表,用来记录之前运行过的可执行文件的完整路径,这样,当需要重启运行相同的可执行文件时,就不需要从PATH环境变量所指定的路径去搜索了。这样可以节省时间。但是,因为在安装LFS时,刚刚安装好的工具可能立即就会被使用,这样避免系统使用相同的过时的可执行文件,就关闭hash功能。

 LC_ ALL 是本地化的一个环境变量。

source ~/.bash_profile

二、构建临时系统(手册中的第5)

1、注意点

a. 临时动态库是交叉编译的。因为一个交叉编译器可以不依赖于其主机提供的头文件和动态库,从而减小了对目标系统所带来的影响。同时,交叉编译也可以在64位硬件上同时编译32位的应用和64位的应用。

b. 下述的编译安装默认是提前解压好对应的安装包,并切换到新产生的目录下;

c. 编译安装好一个安装包后,应删除之前解压的源码包目录,和编译的临时目录,以勉重复安装或带来的其它影响;

三、第一阶段编译安装

1、编译安装Binutils工具包

Binutils工具包包含连接器、装载器和其它处理文件对象的工具。

tar -jxvf binutils-2.20.1.tar.bz2 

mkdir -v ../binutils-build

../binutils-2.20.1/configure \

    --target=$LFS_TGT --prefix=/tools \

    --disable-nls --disable-werror

make

make install

cd ..

rm -rf binutils-2.20.1

rm -rf binutils-build 

注意:

  Binutils是需要第一个被编译和安装的工具包,因为Glibc GCC需要使用这个工具包提供的连接器和装载器进行检查哪些特性是可用的。

Binutils文档推荐编译binutils需要在源码包目录之外的目录下进行编译。

2、编译安装GCC-4.5.1

Gcc包含C/C++编译器GNU编译器套件。

Gcc现在需要GMP,MPFRMPC包。因为这些包不包含在主机系统中,所以这里将其与GCC一同编译。

tar -jxvf gcc-4.5.1.tar.bz2 

cd gcc-4.5.1

tar -jxf ../mpfr-3.0.0.tar.bz2

mv -v mpfr-3.0.0 mpfr

tar -jxf ../gmp-5.0.1.tar.bz2

mv -v gmp-5.0.1 gmp

tar -zxf ../mpc-0.8.2.tar.gz

mv -v mpc-0.8.2 mpc

mkdir -v ../gcc-build

cd ../gcc-build

../gcc-4.5.1/configure \

    --target=$LFS_TGT --prefix=/tools \

    --disable-nls --disable-shared --disable-multilib \

    --disable-decimal-float --disable-threads \

    --disable-libmudflap --disable-libssp \

    --disable-libgomp --enable-languages=c \

    --with-gmp-include=$(pwd)/gmp --with-gmp-lib=$(pwd)/gmp/.libs \

    --without-ppl --without-cloog

   --disable-shared选项迫使GCC连接其内部的连接库,这样可以尽量避免主机带来的影响。

--disable-decimal-float,  --disable-threads,  --disable-libmudflap,

--disable-libssp, --disable-libgomp选项禁止浮点,线程,libmudflap,libssplibgomp等特性。这些特性将会导致构建交叉编译器的时候出错,而这些特性在交叉编译临时libc时不需要。

make

make install

ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \

    sed 's/libgcc/&_eh/'`

 cd ..

rm -rf gcc-build 

rm -rf gcc-4.5.1

注意: 

   gcc文档推荐编译gcc需要在源码包目录之外的目录下进行编译

3、安装Linux-2.6.35.4 API头文件

Linux API头暴露linux内核的API接口给Glibc使用,即提供内核调用接口。

tar -jxvf linux-2.6.35.4.tar.bz2 

cd linux-2.6.35.4

make mrproper     清除之前编译的影响

make headers_check

make INSTALL_HDR_PATH=dest headers_install

cd ..

rm -rf linux-2.6.35.4

4、Glibc-2.12.1编译安装

Glibc包包含主要的C库。这些库提供最基本的内存分配、目录搜索、文件的打开和关闭、文件的打开和读写、字符串处理、模板匹配、算术等功能。

为了修复gcc-4.5.1bug,应打如下补丁。

tar -jxvf glibc-2.12.1.tar.bz2 

cd glibc-2.12.1

patch -Np1 -i ../glibc-2.12.1-gcc_fix-1.patch

patch -Np1 -i ../glibc-2.12.1-makefile_fix-1.patch

mkdir -v ../glibc-build

cd ../glibc-build

因为Glibc现在不支持i386的架构,它的开发者说在编译的时候使用 - march=i486标志可以解决支持i386架构的问题。有多种方法可以解决这个问题,但是实验下来,将标志放置在“CFLAGS”变量里是最好的方法。在Glibc内部中最彻底的替换CGLAGS变量是将新的标志添加到configparms文件里的现有的CFLAGS变量的后面。

case `uname -m` in

  i?86) echo "CFLAGS += -march=i486 -mtune=native" > configparms ;;

esac

../glibc-2.12.1/configure --prefix=/tools \

    --host=$LFS_TGT --build=$(../glibc-2.12.1/scripts/config.guess) \

    --disable-profile --enable-add-ons \

    --enable-kernel=2.6.22.5 --with-headers=/tools/include \

    libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes

make

make install

cd ..

rm -rf glibc-build 

rm -rf glibc-2.12.1

5、调整工具链

到这里C语言库被安装了,在接下来的工具包的安装将会针对这些C语言库进行连接。为了达到这个目的,交叉编译器的 specs文件需要被调整,以便指到新的在/tools目录下的连接器。

将编译器的specs文件导到它默认搜索位置就可以做到这一点,通过简单的sed替换来完成这个操作。

SPECS=`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/specs

$LFS_TGT-gcc -dumpspecs | sed \

  -e 's@/lib\(64\)\?/ld@/tools&@g' \

  -e "/^\*cpp:$/{n;s,$, -isystem /tools/include,}" > $SPECS 

echo "New specs file is: $SPECS"

unset SPECS

echo 'main(){}' > dummy.c

$LFS_TGT-gcc -B/tools/lib dummy.c

readelf -l a.out | grep ': /tools'

rm -v dummy.c a.out

6、Binutils-2.20.1第二阶段

本次安装Binutils也可以当作是前面工具链是否编译安装正常的检查,如果本次binutils编译安装出错,则说明前面工具链编译安装部分不正确,需要重新安装工具链部分。

tar -jxvf binutils-2.20.1.tar.bz2 

cd binutils-2.20.1

mkdir -v ../binutils-build

cd ../binutils-build

CC="$LFS_TGT-gcc -B/tools/lib/" \

   AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \

   ../binutils-2.20.1/configure --prefix=/tools \

   --disable-nls --with-lib-path=/tools/lib

make

make install

make -C ld clean

make -C ld LIB_PATH=/usr/lib:/lib

cp -v ld/ld-new /tools/bin

cd ..

rm -rf binutils-build 

rm -rf binutils-2.20.1

7、编译安装GCC-4.5.1第二阶段

 tar -jxvf gcc-4.5.1.tar.bz2 

cd gcc-4.5.1

patch -Np1 -i ../gcc-4.5.1-startfiles_fix-1.patch

cp -v gcc/Makefile.in{,.orig}

sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in

cp -v gcc/Makefile.in{,.tmp}

sed 's/^T_CFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp \

  > gcc/Makefile.in

for file in \

 $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)

do

  cp -uv $file{,.orig}

  sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \

  -e 's@/usr@/tools@g' $file.orig > $file

  echo '

#undef STANDARD_INCLUDE_DIR

#define STANDARD_INCLUDE_DIR 0

#define STANDARD_STARTFILE_PREFIX_1 ""

#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file

  touch $file.orig

Done

tar -jxf ../mpfr-3.0.0.tar.bz2

mv -v mpfr-3.0.0 mpfr

tar -jxf ../gmp-5.0.1.tar.bz2

mv -v gmp-5.0.1 gmp

tar -zxf ../mpc-0.8.2.tar.gz

mv -v mpc-0.8.2 mpc

mkdir -v ../gcc-build

cd ../gcc-build

CC="$LFS_TGT-gcc -B/tools/lib/" \

    AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \

    ../gcc-4.5.1/configure --prefix=/tools \

    --with-local-prefix=/tools --enable-clocale=gnu \

    --enable-shared --enable-threads=posix \

    --enable-__cxa_atexit --enable-languages=c,c++ \

    --disable-libstdcxx-pch --disable-multilib \

    --disable-bootstrap --disable-libgomp \

    --with-gmp-include=$(pwd)/gmp --with-gmp-lib=$(pwd)/gmp/.libs \

    --without-ppl --without-cloog

make

make install

ln -vs gcc /tools/bin/cc

echo 'main(){}' > dummy.c

cc dummy.c

readelf -l a.out | grep ': /tools'

rm -v dummy.c a.out

cd ..

rm -rf gcc-build 

rm -rf gcc-4.5.1

8、编译安装Tcl-8.5.8工具包

Tcl包包含工具体命令语言。这个包和接下来要安装的两包Expect 和 DejaGNU是用于GCCBinutils在程序运行进行测试的工具。

tar -zxvf tcl8.5.8-src.tar.gz

cd tcl8.5.8

cd unix

./configure --prefix=/tools

make

TZ=UTC make test

make install

chmod -v u+w /tools/lib/libtcl8.5.so

make install-private-headers

ln -sv tclsh8.5 /tools/bin/tclsh

cd ../../

rm -rf tcl8.5.8

9、编译安装Expect-5.44.1.15

Expect包含了与其它脚本程序会话的程序

 tar -jxvf expect-5.44.1.15.tar.bz2 

 cd expect-5.44.1.15

patch -Np1 -i ../expect-5.44.1.15-no_tk-1.patch

cp -v configure{,.orig}

sed 's:/usr/local/bin:/bin:' configure.orig > configure

./configure --prefix=/tools --with-tcl=/tools/lib \

  --with-tclinclude=/tools/include --with-tk=no

make

make test

make SCRIPTS="" install

cd ..

rm -rf expect-5.44.1.15

10、编译安装DejaGNU-1.4.4

dejaGNU软件包含测试其它软件的一个框架。

 tar -zxvf dejagnu-1.4.4.tar.gz 

cd dejagnu-1.4.4

patch -Np1 -i ../dejagnu-1.4.4-consolidated-1.patch

./configure --prefix=/tools

make install

make check

cd ..

rm -rf dejagnu-1.4.4

11、编译安装Ncurses-5.7

Ncurses包提供不依赖于终端的库文件,以用于处理字符。

tar -zxvf ncurses-5.7.tar.gz 

cd ncurses-5.7

./configure --prefix=/tools --with-shared \

    --without-debug --without-ada --enable-overwrite

make

make install

cd ..

 rm -rf ncurses-5.7

12、编译安装Bash-4.1

Bash包含Bourne-Again Shell

 tar -zxvf bash-4.1.tar.gz 

cd bash-4.1

patch -Np1 -i ../bash-4.1-fixes-2.patch

./configure --prefix=/tools --without-bash-malloc

  注:

   --without-bash-malloc选项关闭bash内存分配函数。这个函数可能引起段错误,关闭它,bash将使用Glibc提供的malloc函数,而Glibc提供的函更稳定一些。

make

make tests

make install

ln -vs bash /tools/bin/sh

 cd ..

rm -rf bash-4.1

13、编译安装Bzip2-1.0.5

tar -zxvf bzip2-1.0.5.tar.gz 

cd bzip2-1.0.5

make

make PREFIX=/tools install

cd ..

rm -rf bzip2-1.0.5

14、编译安装Coreutils-8.5

Coreutils包含显示和设置系统基本特性的工具。

tar -zxvf coreutils-8.5.tar.gz 

cd coreutils-8.5

./configure --prefix=/tools --enable-install-program=hostname

make

make install

cp -v src/su /tools/bin/su-tools

cd ..

rm -rf coreutils-8.5

15、编译安装Diffutils-3.0

Diffutils工具包包含比较两个文件或目录不同的工具。也就是diff

tar -zxvf diffutils-3.0.tar.gz 

cd diffutils-3.0

./configure --prefix=/tools

make

make install

cd ..

rm -rf diffutils-3.0

16、编译安装File-5.04工具包

File工具包里包含检测文件类型的工具。

tar -zxvf file-5.04.tar.gz

cd file-5.04

./configure --prefix=/tools

make

make install

 cd ..

rm -rf file-5.04

17、编译安装Findutils-4.4.2工具包

Findutil工具包包含查找文件的程序。 

tar -zxvf findutils-4.4.2.tar.gz

cd findutils-4.4.2

./configure --prefix=/tools

make

make install

cd ..

rm -rf findutils-4.4.2

18、编译安装Gawk-3.1.8工具包

 Gawk工具包里包含编辑文本文件的工具。也就是包含awk工具。

tar -jxvf gawk-3.1.8.tar.bz2 

 cd gawk-3.1.8

./configure --prefix=/tools

make

make install

cd ..

rm -rf gawk-3.1.8

19、编译安装Gettext-0.18.1.1工具包

Gettext包里包含支持国际化和本地化的工具。有了这引起工具,在编译程序时可以支持NLS(Native Language Support,本地化语言支持),可以支持程序输出用户本地化的语言信息。

tar -zxvf gettext-0.18.1.1.tar.gz

cd gettext-0.18.1.1

cd gettext-tools

./configure --prefix=/tools --disable-shared

make -C gnulib-lib

make -C src msgfmt

cp -v src/msgfmt /tools/bin

cd ../../

rm -rf gettext-0.18.1.1

20、编译安装Grep-2.6.3工具包

Grep工具包提供在文件中进行搜索的工具,也就是grep 

tar -zxvf grep-2.6.3.tar.gz 

cd grep-2.6.3

./configure --prefix=/tools \

    --disable-perl-regexp

make

make install

cd ..

rm -rf grep-2.6.3

21、编译安装 Gzip-1.4工具包

 tar -zxvf gzip-1.4.tar.gz

cd gzip-1.4

./configure --prefix=/tools

make

make install

 cd ..

rm -rf gzip-1.4

22、编译安装M4-1.4.14工具包

M4包含处理器的宏

tar -jxvf m4-1.4.14.tar.bz2 

cd m4-1.4.14

sed -i -e '/"m4.h"/a\

#include ' src/path.c

./configure --prefix=/tools

make

make install

cd ..

rm -rf m4-1.4.14

23、编译安装Make-3.82工具包

tar -jxvf make-3.82.tar.bz2 

cd make-3.82

./configure --prefix=/tools

make

make install

cd ..

rm -rf make-3.82

24、编译Patch-2.6.1工具包

 tar -jxvf patch-2.6.1.tar.bz2 

cd patch-2.6.1

./configure --prefix=/tools

make

make install

 cd ..

rm -rf patch-2.6.1

25、编译安装Perl-5.12.1工具包

tar -jxvf perl-5.12.1.tar.bz2 

cd perl-5.12.1

patch -Np1 -i ../perl-5.12.1-libc-1.patch

sh Configure -des -Dprefix=/tools \

                  -Dstatic_ext='Data/Dumper Fcntl IO'

make perl utilities ext/Errno/pm_to_blib

cp -v perl pod/pod2man /tools/bin

mkdir -pv /tools/lib/perl5/5.12.1

cp -Rv lib/* /tools/lib/perl5/5.12.1

cd ..

rm -rf perl-5.12.1

26、编译安装Sed-4.2.1

tar -jxvf sed-4.2.1.tar.bz2 

cd sed-4.2.1

./configure --prefix=/tools

make

make install

cd ..

rm -rf sed-4.2.1

27、编译安装Tar-1.23

tar -jxvf tar-1.23.tar.bz2 

cd tar-1.23

sed -i /SIGPIPE/d src/tar.c

./configure --prefix=/tools

make

make install

cd ..

rm -rf tar-1.23

28、编译安装Texinfo-4.13a

Texinfo工具包包含读、写和转换info页的工具

tar -zxvf texinfo-4.13a.tar.gz 

 cd texinfo-4.13

./configure --prefix=/tools

make

make install

cd ..

rm -rf texinfo-4.13

chown -R root:root $LFS/tools

四、构建LFS系统

1、准备虚拟内核文件系统

注意:

   以下操作均在root用户下进行,帮在操作之前需要确认$LFS环境变量已经正常设置。

mkdir -v $LFS/{dev,proc,sys}

mknod -m 600 $LFS/dev/console c 5 1

mknod -m 666 $LFS/dev/null c 1 3

mount -v --bind /dev $LFS/dev

mount -vt devpts devpts $LFS/dev/pts

mount -vt tmpfs shm $LFS/dev/shm

mount -vt proc proc $LFS/proc

mount -vt sysfs sysfs $LFS/sys

2、进入chroot环境

chroot "$LFS" /tools/bin/env -i \

    HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \

    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \

    /tools/bin/bash --login +h

注意:

    本节之后的所有操作操作都需要在chroot环境下操作。如果因为某种原因离开了当前环境重新回来,那么需要确保虚拟内核文件系统已经被挂载,并且进入到chroot环境之后才能进行余下的操作。

3、创建目录

mkdir -pv /{bin,boot,etc/opt,home,lib,mnt,opt}

mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}

install -dv -m 0750 /root

install -dv -m 1777 /tmp /var/tmp

mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}

mkdir -pv /usr/{,local/}share/{doc,info,locale,man}

mkdir -v  /usr/{,local/}share/{misc,terminfo,zoneinfo}

mkdir -pv /usr/{,local/}share/man/man{1..8}

for dir in /usr /usr/local; do

  ln -sv share/{man,doc,info} $dir

done

case $(uname -m) in

 x86_64) ln -sv lib /lib64 && ln -sv lib /usr/lib64 ;;

esac

mkdir -v /var/{lock,log,mail,run,spool}

mkdir -pv /var/{opt,cache,lib/{misc,locate},local}

4、创建基本文件和连接

ln -sv /tools/bin/{bash,cat,echo,pwd,stty} /bin

ln -sv /tools/bin/perl /usr/bin

ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib

ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib

ln -sv bash /bin/sh

touch /etc/mtab

cat > /etc/passwd << "EOF"

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/dev/null:/bin/false

nobody:x:99:99:Unprivileged User:/dev/null:/bin/false

EOF

cat > /etc/group << "EOF"

root:x:0:

bin:x:1:

sys:x:2:

kmem:x:3:

tty:x:4:

tape:x:5:

daemon:x:6:

floppy:x:7:

disk:x:8:

lp:x:9:

dialout:x:10:

audio:x:11:

video:x:12:

utmp:x:13:

usb:x:14:

cdrom:x:15:

mail:x:34:

nogroup:x:99:

EOF

exec /tools/bin/bash --login +h

touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}

chgrp -v utmp /var/run/utmp /var/log/lastlog

chmod -v 664 /var/run/utmp /var/log/lastlog

5、Linux-2.6.35.4 API 头编译安装第三阶段

cd sources/

tar -jxvf linux-2.6.35.4.tar.bz2 

cd linux-2.6.35.4

make mrproper

make headers_check

make INSTALL_HDR_PATH=dest headers_install

find dest/include \( -name .install -o -name ..install.cmd \) -delete

cp -rv dest/include/* /usr/include

cd ..

rm -rf linux-2.6.35.4

6、编译安装Man-pages-3.25第三阶段

tar -jxvf man-pages-3.25.tar.bz2 

cd man-pages-3.25

make install

cd ..

rm -rf man-pages-3.25

7、编译安装Glibc-2.12.1

tar -jxvf glibc-2.12.1.tar.bz2 

cd glibc-2.12.1

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

sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in

patch -Np1 -i ../glibc-2.12.1-gcc_fix-1.patch

patch -Np1 -i ../glibc-2.12.1-makefile_fix-1.patch

mkdir -v ../glibc-build

case `uname -m` in

  i?86) echo "CFLAGS += -march=i486 -mtune=native -O3 -pipe" > configparms ;;

esac

../glibc-2.12.1/configure --prefix=/usr \

    --disable-profile --enable-add-ons \

    --enable-kernel=2.6.22.5 --libexecdir=/usr/lib/glibc

make

cp -v ../glibc-2.12.1/iconvdata/gconv-modules iconvdata

make -k check 2>&1 | tee glibc-check-log

grep Error glibc-check-log

touch /etc/ld.so.conf

make install

mkdir -pv /usr/lib/locale

localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8

localedef -i de_DE -f ISO-8859-1 de_DE

localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro

localedef -i de_DE -f UTF-8 de_DE.UTF-8

localedef -i en_HK -f ISO-8859-1 en_HK

localedef -i en_PH -f ISO-8859-1 en_PH

localedef -i en_US -f ISO-8859-1 en_US

localedef -i en_US -f UTF-8 en_US.UTF-8

localedef -i es_MX -f ISO-8859-1 es_MX

localedef -i fa_IR -f UTF-8 fa_IR

localedef -i fr_FR -f ISO-8859-1 fr_FR

localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro

localedef -i fr_FR -f UTF-8 fr_FR.UTF-8

localedef -i it_IT -f ISO-8859-1 it_IT

localedef -i ja_JP -f EUC-JP ja_JP

localedef -i tr_TR -f UTF-8 tr_TR.UTF-8

localedef -i zh_CN -f GB18030 zh_CN.GB18030

make localedata/install-locales

cat > /etc/nsswitch.conf << "EOF"

# Begin /etc/nsswitch.conf

passwd: files

group: files

shadow: files

hosts: files dns

networks: files

protocols: files

services: files

ethers: files

rpc: files

# End /etc/nsswitch.conf

EOF

tzselect

cp -v --remove-destination /usr/share/zoneinfo/Asia/Shanghai \

/etc/localtime

cat > /etc/ld.so.conf << "EOF"

# Begin /etc/ld.so.conf

/usr/local/lib

/opt/lib

# End /etc/ld.so.conf

EOF

cd ..

rm -rf glibc-build

rm -rf glibc-2.12.1

8、重新调整工具链

mv -v /tools/bin/{ld,ld-old}

mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}

mv -v /tools/bin/{ld-new,ld}

ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld

gcc -dumpspecs | sed -e 's@/tools@@g' \

    -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \

    -e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' > \

    `dirname $(gcc --print-libgcc-file-name)`/specs

检查工具链调整的是否正确

echo 'main(){}' > dummy.c

cc dummy.c -v -Wl,--verbose &> dummy.log

readelf -l a.out | grep ': /lib'

如果工具链调整的正确,那么上面最后一行命令的输出的最后一行类似如下内容:

 [Requesting program interpreter: /lib/ld-linux.so.2]

注意:

   a) 如果平台不行,上述输出的连接器的名称可能稍有不同;

   b) 注意上述的连接是放在/lib目录下的,如果不是,那么说明连接器的调整不正确;

   检查所使用的启动文件是否正确:

grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log

如果没有错误输出,并且输出如下内容即表示所使用的启动文件正确:

/usr/lib/crt1.o succeeded

/usr/lib/crti.o succeeded

/usr/lib/crtn.o succeeded

检查编译器所搜索的头文件的路径正确:

grep -B1 '^ /usr/include' dummy.log

上述命令执行成功并输出如下内容:

#include <...> search starts here:

 /usr/include

检查新的连接器的路径正确:

输出内容如下:

SEARCH_DIR("/tools/i686-pc-linux-gnu/lib")

SEARCH_DIR("/usr/lib")

SEARCH_DIR("/lib");

检查所使用的libc正确:

grep "/lib.*/libc.so.6 " dummy.log

输出内容如下:

attempt to open /lib/libc.so.6 succeeded

检查GCC使用的是正确的动态连接器:

输出如下:

found ld-linux.so.2 at /lib/ld-linux.so.2

rm -v dummy.c a.out dummy.log

9、 编译安装Zlib-1.2.5

tar -jxvf zlib-1.2.5.tar.bz2 

cd zlib-1.2.5

sed -i 's/ifdef _LARGEFILE64_SOURCE/ifndef _LARGEFILE64_SOURCE/' zlib.h

CFLAGS='-mstackrealign -fPIC -O3' ./configure --prefix=/usr

make

make check

make install

mv -v /usr/lib/libz.so.* /lib

ln -sfv ../../lib/libz.so.1.2.5 /usr/lib/libz.so

cd ..

rm -rf zlib-1.2.5

10、编译安装Binutils-2.20.1

 tar -jxvf binutils-2.20.1.tar.bz2 

 cd binutils-2.20.1

验证PTYchroot环境下工作正常:

expect -c "spawn ls"

上述命令应该输出如下内容:

spawn ls

如果输出内容中包含以下内容则说明PTY工作正常,需要解决后方可继续:

The system has no more ptys.

Ask your system administrator to create more.

rm -fv etc/standards.info

sed -i.bak '/^INFO/s/standards.info //' etc/Makefile.in

mkdir -v ../binutils-build

cd ../binutils-build

../binutils-2.20.1/configure --prefix=/usr \

    --enable-shared

make tooldir=/usr

make check

  如果检查失败,则需要查找原因,并修正后才能继续

make tooldir=/usr install

cp -v ../binutils-2.20.1/include/libiberty.h /usr/include

cd ..

rm -rf binutils-build/

rm -rf binutils-2.20.1

11、编译安装GMP-5.0.1

tar -jxvf gmp-5.0.1.tar.bz2 

cd gmp-5.0.1

ABI=32 ./configure --prefix=/usr --enable-cxx --enable-mpbsd

make

需要保证测试通过

make check 2>&1 | tee gmp-check-log

需要确认162个测试都测试通过

awk '/tests passed/{total+=$2} ; END{print total}' gmp-check-log

make install

mkdir -v /usr/share/doc/gmp-5.0.1

cp    -v doc/{isa_abi_headache,configuration} doc/*.html \

         /usr/share/doc/gmp-5.0.1

cd ..

rm -rf gmp-5.0.1

12、编译安装MPFR-3.0.0

tar -jxvf mpfr-3.0.0.tar.bz2 

 cd mpfr-3.0.0

./configure --prefix=/usr --enable-thread-safe \

  --docdir=/usr/share/doc/mpfr-3.0.0

make check

make install

make html

make install-html

cd ..

rm -rf mpfr-3.0.0

13、编译安装MPC-0.8.2

 tar -zxvf mpc-0.8.2.tar.gz 

cd mpc-0.8.2

./configure --prefix=/usr

make

make check

make install

 cd ..

rm -rf mpc-0.8.2

14、编译安装GCC-4.5.1

tar -jxvf gcc-4.5.1.tar.bz2 

cd gcc-4.5.1

sed替换禁止掉gcc里编译libiberty.aLibierty.a文件将使用binutils工具包里的。

sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in

使用sed来使gcc 在编译时强制-fomit-frame-pointer编译选项,以保证编译正确。

case `uname -m` in

  i?86) sed -i 's/^T_CFLAGS =$/& -fomit-frame-pointer/' \

        gcc/Makefile.in ;;

esac

sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in

mkdir -v ../gcc-build

cd ../gcc-build

../gcc-4.5.1/configure --prefix=/usr \

    --libexecdir=/usr/lib --enable-shared \

    --enable-threads=posix --enable-__cxa_atexit \

    --enable-clocale=gnu --enable-languages=c,c++ \

    --disable-multilib --disable-bootstrap --with-system-zlib

make

ulimit -s 16384

make -k check

../gcc-4.5.1/contrib/test_summary

make install

ln -sv ../usr/bin/cpp /lib

ln -sv gcc /usr/bin/cc

echo 'main(){}' > dummy.c

 cc dummy.c -v -Wl,--verbose &> dummy.log

readelf -l a.out | grep ': /lib'

输出应为:

[Requesting program interpreter: /lib/ld-linux.so.2]

grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log

如果没有出错,且输出信息类似如下内容:

/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../crt1.o succeeded

/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../crti.o succeeded

/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../crtn.o succeeded

检查编译器能搜索出正确的头文件

grep -B4 '^ /usr/include' dummy.log

输出内容类似如下:

#include <...> search starts here:

 /usr/local/include

 /usr/lib/gcc/i686-pc-linux-gnu/4.5.1/include

 /usr/lib/gcc/i686-pc-linux-gnu/4.5.1/include-fixed

 /usr/include

检查新的连接器已经被正确使用:

grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'

输出类似如下内容:

SEARCH_DIR("/usr/i686-pc-linux-gnu/lib")

SEARCH_DIR("/usr/local/lib")

SEARCH_DIR("/lib")

SEARCH_DIR("/usr/lib");

验证使用的是正确的libc:

grep "/lib.*/libc.so.6 " dummy.log

输出不报错,内容如下所示:

attempt to open /lib/libc.so.6 succeeded

最后,验证GCC使用的是正确的连接器:

grep found dummy.log

输出内容类似:

found ld-linux.so.2 at /lib/ld-linux.so.2

rm -v dummy.c a.out dummy.log

 cd ..

rm -rf gcc-build 

rm -rf gcc-4.5.1

15、编译安装Sed-4.2.1

tar -jxvf sed-4.2.1.tar.bz2 

cd sed-4.2.1

./configure --prefix=/usr --bindir=/bin --htmldir=/usr/share/doc/sed-4.2.1

make

make html

make check

make install

make -C doc install-html

cd ..

 rm -rf sed-4.2.1

16、编译安装 Pkg-config-0.25

tar -zxvf pkg-config-0.25.tar.gz 

 cd pkg-config-0.25

sed -i -e 's/XT])dnl/XT])[]dnl/' \

       -e 's/\.])dnl/\.])[]dnl/' pkg.m4

./configure --prefix=/usr

make

make check

make install

cd ..

rm -rf pkg-config-0.25

17、编译安装Ncurses-5.7

tar -zxvf ncurses-5.7.tar.gz 

cd ncurses-5.7

./configure --prefix=/usr --with-shared --without-debug --enable-widec

make

make install

mv -v /usr/lib/libncursesw.so.5* /lib

ln -sfv ../../lib/libncursesw.so.5 /usr/lib/libncursesw.so

for lib in ncurses form panel menu ; do \

    rm -vf /usr/lib/lib${lib}.so ; \

    echo "INPUT(-l${lib}w)" >/usr/lib/lib${lib}.so ; \

    ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a ; \

done

ln -sfv libncurses++w.a /usr/lib/libncurses++.a

rm -vf /usr/lib/libcursesw.so

echo "INPUT(-lncursesw)" >/usr/lib/libcursesw.so

ln -sfv libncurses.so /usr/lib/libcurses.so

ln -sfv libncursesw.a /usr/lib/libcursesw.a

ln -sfv libncurses.a /usr/lib/libcurses.a

mkdir -v       /usr/share/doc/ncurses-5.7

cp -v -R doc/* /usr/share/doc/ncurses-5.7

make distclean

./configure --prefix=/usr --with-shared --without-normal \

  --without-debug --without-cxx-binding

make sources libs

cp -av lib/lib*.so.5* /usr/lib

cd ..

rm -rf ncurses-5.7

18、编译 Util-linux-ng-2.18工具包

tar -jxvf util-linux-ng-2.18.tar.bz2 

cd util-linux-ng-2.18

sed -e 's@etc/adjtime@var/lib/hwclock/adjtime@g' \

    -i $(grep -rl '/etc/adjtime' .)

mkdir -pv /var/lib/hwclock

./configure --enable-arch --enable-partx --enable-write

make

make install

cd ..

rm -rf util-linux-ng-2.18

19、编译安装E2fsprogs-1.41.12

 tar -xvf e2fsprogs-1.41.12.tar.gz 

cd e2fsprogs-1.41.12

mkdir -v build

cd build

../configure --prefix=/usr --with-root-prefix="" \

    --enable-elf-shlibs --disable-libblkid --disable-libuuid \

    --disable-uuidd --disable-fsck

make

make check

make install

make install-libs

chmod -v u+w /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a

gunzip -v /usr/share/info/libext2fs.info.gz

install-info --dir-file=/usr/share/info/dir \

             /usr/share/info/libext2fs.info

makeinfo -o      doc/com_err.info ../lib/et/com_err.texinfo

install -v -m644 doc/com_err.info /usr/share/info

install-info --dir-file=/usr/share/info/dir \

             /usr/share/info/com_err.info

cd ../../

rm -rf e2fsprogs-1.41.12

20、编译安装 Coreutils-8.5

tar -xvf coreutils-8.5.tar.gz 

 cd coreutils-8.5

case `uname -m` in

 i?86 | x86_64) patch -Np1 -i ../coreutils-8.5-uname-2.patch ;;

esac

patch -Np1 -i ../coreutils-8.5-i18n-1.patch

./configure --prefix=/usr \

    --enable-no-install-program=kill,uptime

make

make NON_ROOT_USERNAME=nobody check-root

echo "dummy:x:1000:nobody" >> /etc/group

chown -Rv nobody .

su-tools nobody -s /bin/bash -c "make RUN_EXPENSIVE_TESTS=yes check"

sed -i '/dummy/d' /etc/group

make install

mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin

mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin

mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin

mv -v /usr/bin/chroot /usr/sbin

mv -v /usr/bin/{head,sleep,nice} /bin

cd ..

rm -rf coreutils-8.5

21、编译安装Iana-Etc-2.30

 tar -jxvf iana-etc-2.30.tar.bz2 

 cd iana-etc-2.30

make

make install

cd ..

rm -rf iana-etc-2.30

22、编译安装M4-1.4.14

tar -jxvf m4-1.4.14.tar.bz2 

 cd m4-1.4.14

sed -i -e '/"m4.h"/a\

#include ' src/path.c

./configure --prefix=/usr

make

make check

make install

cd ..

rm -rf m4-1.4.14

23、编译安装Bison-2.4.3

tar -jxvf bison-2.4.3.tar.bz2 

cd bison-2.4.3

./configure --prefix=/usr

echo '#define YYENABLE_NLS 1' >> lib/config.h

make check

make install

cd ..

rm -rf bison-2.4.3

24、编译安装Procps-3.2.8

tar -zxvf procps-3.2.8.tar.gz 

cd procps-3.2.8

patch -Np1 -i ../procps-3.2.8-watch_unicode-1.patch

sed -i -e 's@\*/module.mk@proc/module.mk ps/module.mk@' Makefile

make

make install

cd ..

rm -rf /procps-3.2.8

25、编译安装Grep-2.6.3

tar -zxvf grep-2.6.3.tar.gz

cd grep-2.6.3

./configure --prefix=/usr \

    --bindir=/bin

make

make check

make install

cd ..

 rm -rf grep-2.6.3 

26、编译安装Readline-6.1

tar -zxvf readline-6.1.tar.gz 

cd readline-6.1

sed -i '/MV.*old/d' Makefile.in

sed -i '/{OLDSUFF}/c:' support/shlib-install

sed -i -e 's/0x0600/0x0601/' \

       -e 's/6\.0/6.1/' \

       -e 's/RL_VERSION_MINOR\t0/RL_VERSION_MINOR\t1/' readline.h

./configure --prefix=/usr --libdir=/lib

make SHLIB_LIBS=-lncurses

make install

mv -v /lib/lib{readline,history}.a /usr/lib

rm -v /lib/lib{readline,history}.so

ln -sfv ../../lib/libreadline.so.6 /usr/lib/libreadline.so

ln -sfv ../../lib/libhistory.so.6 /usr/lib/libhistory.so

mkdir   -v       /usr/share/doc/readline-6.1

install -v -m644 doc/*.{ps,pdf,html,dvi} \

                 /usr/share/doc/readline-6.1

 cd ..

rm -rf readline-6.1

27、编译安装Bash-4.1

 tar -zxvf bash-4.1.tar.gz

cd bash-4.1

patch -Np1 -i ../bash-4.1-fixes-2.patch

./configure --prefix=/usr --bindir=/bin \

    --htmldir=/usr/share/doc/bash-4.1 --without-bash-malloc \

    --with-installed-readline

make

chown -Rv nobody .

su-tools nobody -s /bin/bash -c "make tests"

make install

exec /bin/bash --login +h

cd ..

rm -rf bash-4.1

28、编译安装Libtool-2.2.10

tar -zxvf libtool-2.2.10.tar.gz 

cd libtool-2.2.10

./configure --prefix=/usr

make

make check

make install

cd ..

rm -rf libtool-2.2.10

29、编译安装 GDBM-1.8.3

 tar -zxvf gdbm-1.8.3.tar.gz

 cd gdbm-1.8.3

./configure --prefix=/usr

 make

make install

make install-compat

install-info --dir-file=/usr/info/dir /usr/info/gdbm.info

cd ..

rm -rf gdbm-1.8.3

30、编译安装Inetutils-1.8

tar -zxvf inetutils-1.8.tar.gz 

 cd inetutils-1.8

./configure --prefix=/usr --libexecdir=/usr/sbin \

    --localstatedir=/var --disable-ifconfig \

    --disable-logger --disable-syslogd --disable-whois \

    --disable-servers

make

make install

mv -v /usr/bin/{hostname,ping,ping6} /bin

mv -v /usr/bin/traceroute /sbin

 cd ..

rm -rf inetutils-1.8

31、编译安装Perl-5.12.1

tar -jxvf perl-5.12.1.tar.bz2 

cd perl-5.12.1

创建基本的/etc/hosts文件,以便perl的配置文件要求使用它。

echo "127.0.0.1 localhost $(hostname)" > /etc/hosts

这个版本的Perl需要编译Compress::Raw::Zlib模块。默认情况下Perl使用其内部的Zlib源代码来编译。下列的命令是让Perl使用已经安装在系统上的Zlib库代替其内容的源代码参与编译。

sed -i -e "s|BUILD_ZLIB\s*= True|BUILD_ZLIB = False|"           \

       -e "s|INCLUDE\s*= ./zlib-src|INCLUDE    = /usr/include|" \

       -e "s|LIB\s*= ./zlib-src|LIB        = /usr/lib|"         \

    cpan/Compress-Raw-Zlib/config.in

sh Configure -des -Dprefix=/usr \

                  -Dvendorprefix=/usr           \

                  -Dman1dir=/usr/share/man/man1 \

                  -Dman3dir=/usr/share/man/man3 \

                  -Dpager="/usr/bin/less -isR"  \

                  -Duseshrplib

make

make test

make install

cd ..

rm -rf perl-5.12.1

32、编译安装Autoconf-2.67

tar -jxvf autoconf-2.67.tar.bz2 

cd autoconf-2.67

make

make install

cd .. 

rm -rf autoconf-2.67

33、编译安装Automake-1.11.1

tar -jxvf automake-1.11.1.tar.bz2 

cd automake-1.11.1

./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.11.1

make

make install

cd ..

rm -rf automake-1.11.1

34、编译安装Bzip2-1.0.5

tar -zxvf bzip2-1.0.5.tar.gz 

cd bzip2-1.0.5

patch -Np1 -i ../bzip2-1.0.5-install_docs-1.patch

patch -Np1 -i ../bzip2-1.0.5-version_fixes-1.patch

sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile

make -f Makefile-libbz2_so

make clean

make

make PREFIX=/usr install

cp -v bzip2-shared /bin/bzip2

cp -av libbz2.so* /lib

ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so

rm -v /usr/bin/{bunzip2,bzcat,bzip2}

ln -sv bzip2 /bin/bunzip2

ln -sv bzip2 /bin/bzcat

cd ..

rm -rf bzip2-1.0.5

35、编译安装Diffutils-3.0

tar -zxvf diffutils-3.0.tar.gz 

 cd diffutils-3.0

./configure --prefix=/usr

make

make install

cd ..

rm -rf diffutils-3.0

36、编译安装Gawk-3.1.8

tar -jxvf gawk-3.1.8.tar.bz2 

cd gawk-3.1.8

./configure --prefix=/usr --libexecdir=/usr/lib

make

make check

make install

mkdir -v /usr/share/doc/gawk-3.1.8

cp    -v doc/{awkforai.txt,*.{eps,pdf,jpg}} \

         /usr/share/doc/gawk-3.1.8

cd ..

 rm -rf gawk-3.1.8

37、编译安装File-5.04

tar -zxvf file-5.04.tar.gz

 cd file-5.04

./configure --prefix=/usr

make

make check

make install

cd ..

rm -rf file-5.04

38、编译安装Findutils-4.4.2

tar -zxvf findutils-4.4.2.tar.gz

 cd findutils-4.4.2

./configure --prefix=/usr --libexecdir=/usr/lib/findutils \

    --localstatedir=/var/lib/locate

make

make check

make install

mv -v /usr/bin/find /bin

sed -i 's/find:=${BINDIR}/find:=\/bin/' /usr/bin/updatedb

cd ..

rm -rf findutils-4.4.2

39、编译安装Flex-2.5.35

tar -jxvf flex-2.5.35.tar.bz2 

 cd flex-2.5.35

patch -Np1 -i ../flex-2.5.35-gcc44-1.patch

./configure --prefix=/usr

make

make check

make install

ln -sv libfl.a /usr/lib/libl.a

cat > /usr/bin/lex << "EOF"

#!/bin/sh

# Begin /usr/bin/lex

exec /usr/bin/flex -l "$@"

# End /usr/bin/lex

EOF

chmod -v 755 /usr/bin/lex

mkdir -v /usr/share/doc/flex-2.5.35

cp    -v doc/flex.pdf \

         /usr/share/doc/flex-2.5.35

cd ..

rm -rf flex-2.5.35

40、编译安装Gettext-0.18.1.1

tar -zxvf gettext-0.18.1.1.tar.gz 

cd gettext-0.18.1.1

./configure --prefix=/usr \

            --docdir=/usr/share/doc/gettext-0.18.1.1

make

make install

cd ..

rm -rf gettext-0.18.1.1

41、编译安装Groff-1.20.1

tar -zxvf groff-1.20.1.tar.gz 

cd groff-1.20.1

 PAGE=A4 ./configure --prefix=/usr

make

make docdir=/usr/share/doc/groff-1.20.1 install

ln -sv eqn /usr/bin/geqn

ln -sv tbl /usr/bin/gtbl

cd ..

rm -rf groff-1.20.1

42、编译安装GRUB-1.98

tar -zxvf grub-1.98.tar.gz

cd grub-1.98

./configure --prefix=/usr           \

             --sysconfdir=/etc       \

             --disable-grub-emu-usb  \

             --disable-grub-fstest   \

             --disable-efiemu

make

make install

cd ..

 rm -rf grub-1.98

43、编译安装Gzip-1.4

tar -zxvf gzip-1.4.tar.gz 

cd gzip-1.4

./configure --prefix=/usr --bindir=/bin

make

make check

make install

mv -v /bin/{gzexe,uncompress,zcmp,zdiff,zegrep} /usr/bin

mv -v /bin/{zfgrep,zforce,zgrep,zless,zmore,znew} /usr/bin

 cd ..

rm -rf gzip-1.4

44、编译安装IPRoute2-2.6.35

tar -jxvf iproute2-2.6.35.tar.bz2

cd iproute2-2.6.35

sed -i '/^TARGETS/s@arpd@@g' misc/Makefile

sed -i '1289i\\tfilter.cloned = 2;' ip/iproute.c

make DESTDIR=

make DESTDIR= SBINDIR=/sbin MANDIR=/usr/share/man \

     DOCDIR=/usr/share/doc/iproute2-2.6.35 install

cd ..

rm -rf iproute2-2.6.35

45、编译安装Kbd-1.15.2

tar -zxvf kbd-1.15.2.tar.gz 

cd kbd-1.15.2

patch -Np1 -i ../kbd-1.15.2-backspace-1.patch

./configure --prefix=/usr --datadir=/lib/kbd

make

make install

mv -v /usr/bin/{kbd_mode,loadkeys,openvt,setfont} /bin

mkdir -v /usr/share/doc/kbd-1.15.2

cd ..

rm -rf kbd-1.15.2

46、编译安装 Less-436

 tar -zxvf less-436.tar.gz

cd less-436

./configure --prefix=/usr --sysconfdir=/etc

make

make install

 cd ..

rm -rf less-436

47、编译安装Make-3.82

tar -jxvf make-3.82.tar.bz2 

cd make-3.82

./configure --prefix=/usr

make

make check

make install

cd ..

rm -rf make-3.82

48、编译安装Man-DB-2.5.7

tar -zxvf man-db-2.5.7.tar.gz 

cd man-db-2.5.7

patch -Np1 -i ../man-db-2.5.7-fix_man_assertion-1.patch

./configure --prefix=/usr --libexecdir=/usr/lib \

    --docdir=/usr/share/doc/man-db-2.5.7 --sysconfdir=/etc --disable-setuid \

    --with-browser=/usr/bin/lynx --with-vgrind=/usr/bin/vgrind \

    --with-grap=/usr/bin/grap

make

make check

make install

cd ..

rm -rf man-db-2.5.7

49、编译安装Module-Init-Tools-3.12

tar -jxvf module-init-tools-3.12.tar.bz2 

 cd module-init-tools-3.12

echo '.so man5/modprobe.conf.5' > modprobe.d.5

./configure

make check

./tests/runtests

make clean

./configure --prefix=/ --enable-zlib-dynamic --mandir=/usr/share/man

make

make INSTALL=install install

cd ..

 rm -rf module-init-tools-3.12

50、编译Patch-2.6.1

 tar -jxvf patch-2.6.1.tar.bz2 

cd patch-2.6.1

patch -Np1 -i ../patch-2.6.1-test_fix-1.patch

./configure --prefix=/usr

make

make check

make install

cd ..

 rm -rf patch-2.6.1

51、编译安装Psmisc-22.12

tar -zxvf psmisc-22.12.tar.gz

cd psmisc-22.12

sed -i 's@#include @#include \n&@' configure

./configure --prefix=/usr

make

make install

mv -v /usr/bin/fuser /bin

mv -v /usr/bin/killall /bin

cd ..

rm -rf psmisc-22.12

52、编译安装

 tar -jxvf shadow-4.1.4.2.tar.bz2 

 cd shadow-4.1.4.2

sed -i 's/groups$(EXEEXT) //' src/Makefile.in

find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \;

sed -i -e 's/ ko//' -e 's/ zh_CN zh_TW//' man/Makefile.in

sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD MD5@' \

       -e 's@/var/spool/mail@/var/mail@' etc/login.defs

./configure --sysconfdir=/etc

make

make install

mv -v /usr/bin/passwd /bin

pwconv

grpconv

sed -i 's/yes/no/' /etc/default/useradd

passwd root

 cd ..

rm -rf shadow-4.1.4.2

53、编译安装Sysklogd-1.5

 tar -zxvf sysklogd-1.5.tar.gz 

 cd sysklogd-1.5

make

make BINDIR=/sbin install

cat > /etc/syslog.conf << "EOF"

# Begin /etc/syslog.conf

auth,authpriv.* -/var/log/auth.log

*.*;auth,authpriv.none -/var/log/sys.log

daemon.* -/var/log/daemon.log

kern.* -/var/log/kern.log

mail.* -/var/log/mail.log

user.* -/var/log/user.log

*.emerg *

# End /etc/syslog.conf

EOF

 cd ..

rm -rf sysklogd-1.5

54、编译安装Sysvinit-2.88dsf

tar -jxvf sysvinit-2.88dsf.tar.bz2 

cd sysvinit-2.88dsf

sed -i 's@Sending processes@& configured via /etc/inittab@g' \

    src/init.c

sed -i -e 's/utmpdump wall/utmpdump/' \

       -e 's/mountpoint.1 wall.1/mountpoint.1/' src/Makefile

make -C src

make -C src install

cat > /etc/inittab << "EOF"

# Begin /etc/inittab

id:3:initdefault:

si::sysinit:/etc/rc.d/init.d/rc sysinit

l0:0:wait:/etc/rc.d/init.d/rc 0

l1:S1:wait:/etc/rc.d/init.d/rc 1

l2:2:wait:/etc/rc.d/init.d/rc 2

l3:3:wait:/etc/rc.d/init.d/rc 3

l4:4:wait:/etc/rc.d/init.d/rc 4

l5:5:wait:/etc/rc.d/init.d/rc 5

l6:6:wait:/etc/rc.d/init.d/rc 6

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

su:S016:once:/sbin/sulogin

1:2345:respawn:/sbin/agetty tty1 9600

2:2345:respawn:/sbin/agetty tty2 9600

3:2345:respawn:/sbin/agetty tty3 9600

4:2345:respawn:/sbin/agetty tty4 9600

5:2345:respawn:/sbin/agetty tty5 9600

6:2345:respawn:/sbin/agetty tty6 9600

# End /etc/inittab

EOF

cd ..

rm -rf sysvinit-2.88dsf

55、编译安装Tar-1.23

tar -jxvf tar-1.23.tar.bz2

cd tar-1.23

sed -i /SIGPIPE/d src/tar.c

patch -Np1 -i ../tar-1.23-overflow_fix-1.patch

./configure --prefix=/usr --bindir=/bin --libexecdir=/usr/sbin

make

sed -i '35 i\

AT_UNPRIVILEGED_PREREQ' tests/remfiles01.at

make check

make install

cd ..

rm -rf tar-1.23

56、编译安装Texinfo-4.13a

 tar -zxvf texinfo-4.13a.tar.gz 

cd texinfo-4.13

./configure --prefix=/usr

make

make check

make install

make TEXMF=/usr/share/texmf install-tex

cd /usr/share/info

rm -v dir

for f in *

do install-info $f dir 2>/dev/null

done

cd /sources/

rm -rf texinfo-4.13

57、编译安装Udev-161

tar -jxvf udev-161.tar.bz2 

 cd udev-161

tar -xvf ../udev-config-20100128.tar.bz2

tar -xvf ../udev-161-testfiles.tar.bz2 --strip-components=1

install -dv /lib/{firmware,udev/devices/{pts,shm}}

mknod -m0666 /lib/udev/devices/null c 1 3

./configure --prefix=/usr \

    --sysconfdir=/etc --sbindir=/sbin \

    --with-rootlibdir=/lib --libexecdir=/lib/udev \

    --disable-extras --disable-introspection

make

make check

make install

rmdir -v /usr/share/doc/udev

cd udev-config-20100128

make install

make install-doc

cd ..

rm -rf udev-config-20100128/

rm -rf udev-161

58、编译安装Vim-7.3

tar -jxvf vim-7.3.tar.bz2 

cd vim73

echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h

./configure --prefix=/usr --enable-multibyte

make

make test

make install

ln -sv vim /usr/bin/vi

for L in  /usr/share/man/{,*/}man1/vim.1; do

    ln -sv vim.1 $(dirname $L)/vi.1

done

ln -sv ../vim/vim73/doc /usr/share/doc/vim-7.3

cat > /etc/vimrc << "EOF"

" Begin /etc/vimrc

set nocompatible

set backspace=2

syntax on

if (&term == "iterm") || (&term == "putty")

  set background=dark

endif

" End /etc/vimrc

EOF

cd ..

 rm -rf vim73

五、设置系统启动脚本

1、编译安装LFS-Bootscripts-20100627

tar -jxvf lfs-bootscripts-20100627.tar.bz2 

cd lfs-bootscripts-20100627

make install

cd ..

 rm -rf lfs-bootscripts-20100627

cat > /etc/sysconfig/clock << "EOF"

# Begin /etc/sysconfig/clock

UTC=1

# Set this to any options you might need to give to hwclock, 

# such as machine hardware clock type for Alphas.

CLOCKPARAMS=

# End /etc/sysconfig/clock

EOF

cat > /etc/sysconfig/console << "EOF"

# Begin /etc/sysconfig/console

KEYMAP="pl2"

FONT="lat2a-16 -m 8859-2"

# End /etc/sysconfig/console

EOF

2、创建/etc/inputrc 文件

cat > /etc/inputrc << "EOF"

# Begin /etc/inputrc

# Modified by Chris Lynn 

# Allow the command prompt to wrap to the next line

set horizontal-scroll-mode Off

# Enable 8bit input

set meta-flag On

set input-meta On

# Turns off 8th bit stripping

set convert-meta Off

# Keep the 8th bit for display

set output-meta On

# none, visible or audible

set bell-style none

# All of the following map the escape sequence of the value

# contained in the 1st argument to the readline specific functions

"\eOd": backward-word

"\eOc": forward-word

# for linux console

"\e[1~": beginning-of-line

"\e[4~": end-of-line

"\e[5~": beginning-of-history

"\e[6~": end-of-history

"\e[3~": delete-char

"\e[2~": quoted-insert

# for xterm

"\eOH": beginning-of-line

"\eOF": end-of-line

# for Konsole

"\e[H": beginning-of-line

"\e[F": end-of-line

# End /etc/inputrc

EOF

cat > /etc/profile << "EOF"

# Begin /etc/profile

export LANG="zh_CN.GBK"

# End /etc/profile

EOF

 echo "HOSTNAME=lfs.shumenol.com" > /etc/sysconfig/network

3、配置网络脚本

for NIC in /sys/class/net/* ; do

    INTERFACE=${NIC##*/} udevadm test --action=add $NIC

Done

cat /etc/udev/rules.d/70-persistent-net.rules

cd /etc/sysconfig/network-devices

mkdir -v ifconfig.eth0

cat > ifconfig.eth0/ipv4 << "EOF"

ONBOOT=yes

SERVICE=ipv4-static

IP=192.168.5.125

GATEWAY=192.168.5.2

PREFIX=24

BROADCAST=192.168.5.255

EOF

cat > /etc/resolv.conf << "EOF"

# Begin /etc/resolv.conf

nameserver 202.96.209.5

nameserver 202.96.209.133

# End /etc/resolv.conf

EOF

六、创建可启动的LFS系统

1、创建/etc/fstab文件

cat > /etc/fstab << "EOF"

# Begin /etc/fstab

# file system  mount-point  type   options         dump  fsck

#                                                        order

/dev/sda6      /            ext3  defaults        1     1

/dev/sda1      /boot            ext3  defaults        1     1

/dev/sda5      swap         swap   pri=1           0     0

proc           /proc        proc   defaults        0     0

sysfs          /sys         sysfs  defaults        0     0

devpts         /dev/pts     devpts gid=4,mode=620  0     0

tmpfs          /dev/shm     tmpfs  defaults        0     0

# End /etc/fstab

EOF

2、编译安装Linux内核

cd /sources/

tar -jxvf linux-2.6.35.4.tar.bz2 

cd linux-2.6.35.4

make mrproper

make LANG=zh_CN.GBK LC_ALL= menuconfig

make

make modules_install

cp -v arch/x86/boot/bzImage /boot/vmlinux-2.6.35.4-lfs-6.7

cp -v System.map /boot/System.map-2.6.35.4

cp -v .config /boot/config-2.6.35.4

install -d /usr/share/doc/linux-2.6.35.4

cp -r Documentation/* /usr/share/doc/linux-2.6.35.4

install -v -m755 -d /etc/modprobe.d

cat > /etc/modprobe.d/usb.conf << "EOF"

# Begin /etc/modprobe.d/usb.conf

install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true

install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true

# End /etc/modprobe.d/usb.conf

EOF

七、配置Grup

grub-install --grub-setup=/bin/true /dev/sda

grub-mkconfig -o /boot/grub/grub.cfg

grub-setup /dev/sda

阅读(2199) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~