Chinaunix首页 | 论坛 | 博客
  • 博客访问: 171723
  • 博文数量: 133
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 93
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-07 17:33
文章分类

全部博文(133)

文章存档

2014年(1)

2013年(134)

我的朋友

分类: LINUX

2013-04-22 23:50:29

   LFS官网早已经不开发livecd了,我想玩LFS只能自己制作livecd~
   我用过ubuntu,federal,centos,但还是ubuntu用的时间最长。大家都说小白适合用ubuntu,我用linux的时间不长,还算是小白一枚,小白就开始折腾LFS,也不知道是不是我的期望值太高,听说LFS是linux系统里最难折腾的系统?汗颜~~ubuntu用着感觉也还好,就决定用ubuntu制作livecd。网上还真有相关教程,这里要膜拜各路大神~小弟站您们肩膀上了,谢谢!~
   我把ubuntu装在虚拟机上,然后裁掉软件,就这个我都折腾了两天主要原因是:卸载得太狠了,把不该卸载的卸载了,系统重启就没法登录了,可以卸载的,好多是它认识我,我不认识它,不敢删~那几天只是在机械的装系统,卸载软件什么的。我用LFS提供的那个版本测试脚本测试系统,并安装缺少的软件,本来我想跟官方提供的那个LFS一样,把78个软件和补丁都放系统里,可惜,系统太大了,足有900多M~只能麻烦点了,我让软件包在编译过程中导入系统,系统明显小了好多,只有635M(还是大,可惜我不想再删软件了,实在是浪费时间)
   我用ssh远程登录方式编译安装,只需要复制粘贴就行了
   简单吧?不简单~与手动一个字母一个字母输入也就省了点儿时间和精力而已,实际上还是相当繁琐的~我从昨天下午一点多开始折腾,昨晚12点10分休息,今天早上7点16接着开始,一直到9点37(还有课要上的孩子你伤不起啊),中午12点买饭回来边吃边折腾,中午没睡,一直到13点47跑去上课,4点10回来,一直到5点左右才编译完成~可想而知,有多要人命!
   最要人命的事,最后还没法登录,提示没有那个部分~
   我仔细回忆了一下编译过程,从头开始一直没错误,因为编译中间有好几处需要测试工具链,我的测试结果跟LFS文档上一模一样,分毫不差~只是到第二次剥离软件,并清理退出时(第一次是剥离工具链),显示的都是文件无法识别,我一看差点哭出来,只剩下最后一点了,给我来个这,后来硬着头皮往下编译,果然,最后没法成功~
   我分析了一下,我的编译步骤应该没多大问题,那么问题应该出现在ubuntu自身的特性上了,而ubuntu就我所知,有一个很与众不同的特性:那就是它的root权限默认是关闭的,即使您用sudo passwd root命令开启了root权限,在编译LFS时也可能有某些限制~
   只是推测,知道具体原因的高人请轻喷,并希望您转告我具体的解决办法,小弟不胜感激~

   下一步,我准备折腾一阵arch,arch也是需要手工编译,我可以安装一些我认识的软件,以及我不得不认识的软件,不管其他那些我不要的软件了,没有图形界面也行,server版的ubuntu我也折腾了几天,感觉没什么问题,就是看图片什么的,我想是个蛋疼活~我不是想着三天打渔,两天晒网,我的最终目的是利用LFS制作一个熟悉的系统,不求没有漏洞,只求能满足我的要求,可以随处装B的自己的系统(是不是特庸俗?轻喷)~所以我折腾arch即是为了多了解一点配置命令的含义,又是为了我未来的操作系统制作宿主~

   感觉我这个小白太异想天开了,不过谁知道呢 :)

是我的操作过程
P { margin-bottom: 0.21cm; direction: ltr; color: rgb(0, 0, 0); text-align: justify; }

分区:

点击(此处)折叠或打开

  1. fdisk /dev/sda

输入:n,p,4,2048,+2Gw

点击(此处)折叠或打开

  1. fdisk /dev/sda

输入:n,p,3,4*,+8G,w


查看分区情况:

点击(此处)折叠或打开

  1. fdisk /dev/sda

输入:p

格式化分区:

点击(此处)折叠或打开

  1. mke2fs -jv /dev/sda3
  2. mkswap /dev/sda4

挂载分区:

点击(此处)折叠或打开

  1. export LFS=/mnt/lfs
  2. mkdir -pv $LFS
  3. mount -v -t ext3 /dev/sda3 $LFS
  4. /sbin/swapon -v /dev/sda4

创建目录:

点击(此处)折叠或打开

  1. mkdir -v $LFS/sources
  2. chmod -v a+wt $LFS/sources

检查:

点击(此处)折叠或打开

  1. echo $LFS

显示的应该是/mnt/lfs

创建工作链目录:

点击(此处)折叠或打开

  1. mkdir -v $LFS/tools
  2. ln -sv $LFS/tools /

创建用户:


点击(此处)折叠或打开

  1. groupadd lfs
  2. useradd -s /bin/bash -g lfs -m -k /dev/null lfs
  3. passwd lfs

修改拥有者:


点击(此处)折叠或打开

  1. chown -v lfs $LFS/tools

  2. chown -v lfs $LFS/sources

lfs登录:


点击(此处)折叠或打开

  1. su - lfs

改变工作环境:

点击(此处)折叠或打开

  1. cat > ~/.bash_profile << "EOF"
  2. exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
  3. EOF

  4. cat > ~/.bashrc << "EOF"
  5. set +h
  6. umask 022
  7. LFS=/mnt/lfs
  8. LC_ALL=POSIX
  9. LFS_TGT=$(uname -m)-lfs-linux-gnu
  10. PATH=/tools/bin:/bin:/usr/bin
  11. export LFS LC_ALL LFS_TGT PATH
  12. EOF

是刚创建的配置文件生效:

点击(此处)折叠或打开

  1. source ~/.bash_profile

最后一遍检查:

点击(此处)折叠或打开

  1. echo $LFS

进入编译目录:

点击(此处)折叠或打开

  1. cd $LFS/sources

这一部分所有对软件的编译安装都是为了大家一个可以摆脱宿主系统的环境,所以所有的操作基本都是必不可少的

所有软件的解压包必须删除,因为在搭建环境时,软件包里面的内容已经改变,若不删除直接进行下一步操作,可能导致不可测的结果


########################

#编译安装环境——》》编译安装工具链#

########################


Binutils-2.22 - Pass 1



点击(此处)折叠或打开

  1. tar xvf binutils-2.22.tar.bz2

  2. cd binutils-2.22

  3. patch -Np1 -i ../binutils-2.22-build_fix-1.patch

  4. mkdir -v ../binutils-build

  5. cd ../binutils-build

  6. ../binutils-2.22/configure \

  7. --prefix=/tools \

  8. --with-sysroot=$LFS \

  9. --with-lib-path=/tools/lib \

  10. --target=$LFS_TGT \

  11. --disable-nls \

  12. --disable-werror

  13. make

  14. make install

  15. cd ..

  16. rm -rf binutils-build

  17. rm -rf binutils-2.22

GCC-4.7.1 - Pass 1


点击(此处)折叠或打开

  1. tar xvf gcc-4.7.1.tar.bz2

  2. cd gcc-4.7.1

  3. tar -Jxf ../mpfr-3.1.1.tar.xz

  4. mv -v mpfr-3.1.1 mpfr

  5. tar -Jxf ../gmp-5.0.5.tar.xz

  6. mv -v gmp-5.0.5 gmp

  7. tar -zxf ../mpc-1.0.tar.gz

  8. mv -v mpc-1.0 mpc

  9. for file in \

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

  11. do

  12. cp -uv $file{,.orig}

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

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

  15. echo '

  16. #undef STANDARD_STARTFILE_PREFIX_1

  17. #undef STANDARD_STARTFILE_PREFIX_2

  18. #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"

  19. #define STANDARD_STARTFILE_PREFIX_2 ""' >> $file

  20. touch $file.orig

  21. done

  22. sed -i '/k prot/agcc_cv_libc_provides_ssp=yes' gcc/configure

  23. mkdir -v ../gcc-build

  24. cd ../gcc-build

  25. ../gcc-4.7.1/configure \

  26. --target=$LFS_TGT \

  27. --prefix=/tools \

  28. --with-sysroot=$LFS \

  29. --with-newlib \

  30. --without-headers \

  31. --with-local-prefix=/tools \

  32. --with-native-system-header-dir=/tools/include \

  33. --disable-nls \

  34. --disable-shared \

  35. --disable-multilib \

  36. --disable-decimal-float \

  37. --disable-threads \

  38. --disable-libmudflap \

  39. --disable-libssp \

  40. --disable-libgomp \

  41. --disable-libquadmath \

  42. --enable-languages=c \

  43. --with-mpfr-include=$(pwd)/../gcc-4.7.1/mpfr/src \

  44. --with-mpfr-lib=$(pwd)/mpfr/src/.libs

  45. make

  46. make install

  47. ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/'`

  48. cd ..

  49. rm -rf gcc-build

  50. rm -rf gcc-4.7.1

Linux-3.5.2 API Headers


点击(此处)折叠或打开

  1. xz -d linux-3.5.2.tar.xz

  2. tar -xvf linux-3.5.2.tar

  3. cd linux-3.5.2

  4. make mrprope

  5. make headers_check

  6. make INSTALL_HDR_PATH=dest headers_install

  7. cp -rv dest/include/* /tools/include

  8. cd ..

  9. rm -rf linux-3.5.2

Glibc-2.16.0


点击(此处)折叠或打开

  1. xz -d glibc-2.16.0.tar.xz

  2. tar -xvf glibc-2.16.0.tar

  3. cd glibc-2.16.0

  4. if [ ! -r /usr/include/rpc/types.h ]; then

  5. su -c 'mkdir -p /usr/include/rpc'

  6. su -c 'cp -v sunrpc/rpc/*.h /usr/include/rpc'

  7. fi

  8. sed -i 's/ -lgcc_s//' Makeconfig

  9. mkdir -v ../glibc-build

  10. cd ../glibc-build

  11. ../glibc-2.16.0/configure \

  12. --prefix=/tools \

  13. --host=$LFS_TGT \

  14. --build=$(../glibc-2.16.0/scripts/config.guess) \

  15. --disable-profile \

  16. --enable-add-ons \

  17. --enable-kernel=2.6.25 \

  18. --with-headers=/tools/include \

  19. libc_cv_forced_unwind=yes \

  20. libc_cv_ctors_header=yes \

  21. libc_cv_c_cleanup=yes

  22. make

  23. make install

  24. cd ..

  25. rm -rf glibc-build

  26. rm -rf glibc-2.16.0

【测试工具链】


点击(此处)折叠或打开

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

  2. $LFS_TGT-gcc dummy.c

  3. readelf -l a.out | grep ': /tools'
输出结果类似:

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

删除测试工具:

点击(此处)折叠或打开

  1. rm -v dummy.c a.out

Binutils-2.22 - Pass 2

点击(此处)折叠或打开

  1. tar xvf binutils-2.22.tar.bz2

  2. cd binutils-2.22

  3. patch -Np1 -i ../binutils-2.22-build_fix-1.patch

  4. mkdir -v ../binutils-build

  5. cd ../binutils-build

  6. CC=$LFS_TGT-gcc \

  7. AR=$LFS_TGT-ar \

  8. RANLIB=$LFS_TGT-ranlib \

  9. ../binutils-2.22/configure \

  10. --prefix=/tools \

  11. --disable-nls \

  12. --with-lib-path=/tools/lib

  13. make

  14. make install

  15. make -C ld clean

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

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

  18. cd ..

  19. rm -rf binutils-build

  20. rm -rf binutils-2.22

GCC-4.7.1 - Pass 2

点击(此处)折叠或打开

  1. tar xvf gcc-4.7.1.tar.bz2

  2. cd gcc-4.7.1

  3. cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \

  4. `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h

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

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

  7. > gcc/Makefile.in

  8. for file in \

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

  10. do

  11. cp -uv $file{,.orig}

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

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

  14. echo '

  15. #undef STANDARD_STARTFILE_PREFIX_1

  16. #undef STANDARD_STARTFILE_PREFIX_2

  17. #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"

  18. #define STANDARD_STARTFILE_PREFIX_2 ""' >> $file

  19. touch $file.orig

  20. done

  21. tar -Jxf ../mpfr-3.1.1.tar.xz

  22. mv -v mpfr-3.1.1 mpfr

  23. tar -Jxf ../gmp-5.0.5.tar.xz

  24. mv -v gmp-5.0.5 gmp

  25. tar -zxf ../mpc-1.0.tar.gz

  26. mv -v mpc-1.0 mpc

  27. mkdir -v ../gcc-build

  28. cd ../gcc-build

  29. CC=$LFS_TGT-gcc \

  30. AR=$LFS_TGT-ar \

  31. RANLIB=$LFS_TGT-ranlib \

  32. ../gcc-4.7.1/configure \

  33. --prefix=/tools \

  34. --with-local-prefix=/tools \

  35. --with-native-system-header-dir=/tools/include \

  36. --enable-clocale=gnu \

  37. --enable-shared \

  38. --enable-threads=posix \

  39. --enable-__cxa_atexit \

  40. --enable-languages=c,c++ \

  41. --disable-libstdcxx-pch \

  42. --disable-multilib \

  43. --disable-bootstrap \

  44. --disable-libgomp \

  45. --with-mpfr-include=$(pwd)/../gcc-4.7.1/mpfr/src \

  46. --with-mpfr-lib=$(pwd)/mpfr/src/.libs

  47. make

  48. make install

  49. ln -vs gcc /tools/bin/cc

  50. cd ..

  51. rm -rf gcc-build

  52. rm -rf gcc-4.7.1

【再次测试工具链】

点击(此处)折叠或打开

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

  2. cc dummy.c

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

输出结果类似:

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

删除测试工具:

点击(此处)折叠或打开

  1. rm -v dummy.c a.out

#########################

#编译安装环境——》》编译安装测试套件#

#########################


Tcl-8.5.12 and Expect-5.45 and DejaGNU-1.5 and Check-0.9.8

点击(此处)折叠或打开

  1. tar xvf tcl8.5.12-src.tar.gz

  2. cd tcl8.5.12/unix

  3. ./configure --prefix=/tools

  4. make

  5. make install

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

  7. make install-private-headers

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

  9. cd $LFS/sources

  10. tar xvf expect5.45.tar.gz

  11. cd expect5.45

  12. cp -v configure{,.orig}

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

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

  15. --with-tclinclude=/tools/include

  16. make

  17. make SCRIPTS="" install

  18. cd $LFS/sources

  19. tar xvf dejagnu-1.5.tar.gz

  20. cd dejagnu-1.5

  21. ./configure --prefix=/tools

  22. make install

  23. cd $LFS/sources

  24. tar xvf check-0.9.8.tar.gz

  25. cd check-0.9.8

  26. ./configure --prefix=/tools

  27. make

  28. make install

  29. cd ..

  30. rm -rf check-0.9.8

  31. rm -rf tcl8.5.12

  32. rm -rf expect5.45

  33. rm -rf dejagnu-1.5

#############################
#编译安装环境——》》搭建环境以摆脱宿主系统#
#############################

Ncurses-5.9


点击(此处)折叠或打开

  1. tar xvf ncurses-5.9.tar.gz

  2. cd ncurses-5.9

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

  4. --without-debug --without-ada --enable-overwrite

  5. make

  6. make install

  7. cd ..

  8. rm -rf ncurses-5.9

Bash-4.2

点击(此处)折叠或打开

  1. tar xvf bash-4.2.tar.gz

  2. cd bash-4.2

  3. patch -Np1 -i ../bash-4.2-fixes-8.patch

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

  5. make

  6. make install

  7. ln -vs bash /tools/bin/sh

  8. cd ..

  9. rm -rf bash-4.2

Bzip2-1.0.6


点击(此处)折叠或打开

  1. tar xvf bzip2-1.0.6.tar.gz

  2. cd bzip2-1.0.6

  3. make

  4. make PREFIX=/tools install

  5. cd ..

  6. rm -rf bzip2-1.0.6

Coreutils-8.19

点击(此处)折叠或打开

  1. xz -d coreutils-8.19.tar.xz

  2. tar -xvf coreutils-8.19.tar

  3. cd coreutils-8.19

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

  5. make

  6. make install

  7. cd ..

  8. rm -rf coreutils-8.19

Diffutils-3.2


点击(此处)折叠或打开

  1. tar xvf diffutils-3.2.tar.gz

  2. cd diffutils-3.2

  3. sed -i -e '/gets is a/d' lib/stdio.in.h

  4. ./configure --prefix=/tools

  5. make

  6. make install

  7. cd ..

  8. rm -rf diffutils-3.2

File-5.11

点击(此处)折叠或打开

  1. tar xvf file-5.11.tar.gz

  2. cd file-5.11

  3. ./configure --prefix=/tools

  4. make

  5. make install

  6. cd ..

  7. rm -rf file-5.11

Findutils-4.4.2


点击(此处)折叠或打开

  1. tar xvf findutils-4.4.2.tar.gz

  2. cd findutils-4.4.2

  3. ./configure --prefix=/tools

  4. make

  5. make install

  6. cd ..

  7. rm -rf findutils-4.4.2

Gawk-4.0.1

点击(此处)折叠或打开

  1. xz -d gawk-4.0.1.tar.xz

  2. tar -xvf gawk-4.0.1.tar

  3. cd gawk-4.0.1

  4. ./configure --prefix=/tools

  5. make

  6. make install

  7. cd ..

  8. rm -rf gawk-4.0.1

Gettext-0.18.1.1

点击(此处)折叠或打开

  1. tar xvf gettext-0.18.1.1.tar.gz

  2. cd gettext-0.18.1.1

  3. sed -i -e '/gets is a/d' gettext-*/*/stdio.in.h

  4. cd gettext-tools

  5. EMACS="no" ./configure --prefix=/tools --disable-shared

  6. make -C gnulib-lib

  7. make -C src msgfmt

  8. cp -v src/msgfmt /tools/bin

  9. cd $LFS/sources

  10. rm -rf gettext-0.18.1.1

Grep-2.14

点击(此处)折叠或打开

  1. xz -d grep-2.14.tar.xz

  2. tar -xvf grep-2.14.tar

  3. cd grep-2.14

  4. ./configure --prefix=/tools

  5. make

  6. make install

  7. cd ..

  8. rm -rf grep-2.14

Gzip-1.5

点击(此处)折叠或打开

  1. xz -d gzip-1.5.tar.xz

  2. tar -xvf gzip-1.5.tar

  3. cd gzip-1.5

  4. ./configure --prefix=/tools

  5. make

  6. make install

  7. cd ..

  8. rm -rf gzip-1.5

M4-1.4.16

点击(此处)折叠或打开

  1. tar xvf m4-1.4.16.tar.bz2

  2. cd m4-1.4.16

  3. sed -i -e '/gets is a/d' lib/stdio.in.h

  4. ./configure --prefix=/tools

  5. make

  6. make install

  7. cd ..

  8. rm -rf m4-1.4.16

Make-3.82

点击(此处)折叠或打开

  1. tar xvf make-3.82.tar.bz2

  2. cd make-3.82

  3. ./configure --prefix=/tools

  4. make

  5. make install

  6. cd ..

  7. rm -rf make-3.82

Patch-2.6.1

点击(此处)折叠或打开

  1. tar xvf patch-2.6.1.tar.bz2

  2. cd patch-2.6.1

  3. ./configure --prefix=/tools

  4. make

  5. make install

  6. cd ..

  7. rm -rf patch-2.6.1

Perl-5.16.1

点击(此处)折叠或打开

  1. tar xvf perl-5.16.1.tar.bz2

  2. cd perl-5.16.1

  3. patch -Np1 -i ../perl-5.16.1-libc-2.patch

  4. sh Configure -des -Dprefix=/tools

  5. make

  6. cp -v perl cpan/podlators/pod2man /tools/bin

  7. mkdir -pv /tools/lib/perl5/5.16.1

  8. cp -Rv lib/* /tools/lib/perl5/5.16.1

  9. cd ..

  10. rm -rf perl-5.16.1

Sed-4.2.1

点击(此处)折叠或打开

  1. tar xvf sed-4.2.1.tar.bz2

  2. cd sed-4.2.1

  3. ./configure --prefix=/tools

  4. make

  5. make install

  6. cd ..

  7. rm -rf sed-4.2.1

Tar-1.26

点击(此处)折叠或打开

  1. tar xvf tar-1.26.tar.bz2

  2. cd tar-1.26

  3. sed -i -e '/gets is a/d' gnu/stdio.in.h

  4. ./configure --prefix=/tools

  5. make

  6. make install

  7. cd ..

  8. rm -rf tar-1.26

Texinfo-4.13a

点击(此处)折叠或打开

  1. tar xvf texinfo-4.13a.tar.gz

  2. cd texinfo-4.13

  3. ./configure --prefix=/tools

  4. make

  5. make install

  6. cd ..

  7. rm -rf texinfo-4.13

Xz-5.0.4

点击(此处)折叠或打开

  1. xz -d xz-5.0.4.tar.xz

  2. tar -xvf xz-5.0.4.tar

  3. cd xz-5.0.4

  4. ./configure --prefix=/tools

  5. make

  6. make install

  7. cd ..

  8. rm -rf xz-5.0.4

#################

#编译安装环境——》》完成#

#################


【剥离】【Stripping

点击(此处)折叠或打开

  1. strip --strip-debug /tools/lib/*

  2. strip --strip-unneeded /tools/{,s}bin/*

  3. rm -rf /tools/{,share}/{info,man,doc}

【退出lfs

点击(此处)折叠或打开

  1. exit

【改变归属】【Changing Ownership

点击(此处)折叠或打开

  1. chown -R root:root $LFS/tools

【创建用于挂载文件系统的目录】

点击(此处)折叠或打开

  1. mkdir -v $LFS/{dev,proc,sys}
【创建初始设备节点】

点击(此处)折叠或打开

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

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

【挂载

点击(此处)折叠或打开

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

【挂载虚拟内核文件设备】

点击(此处)折叠或打开

  1. mount -vt devpts devpts $LFS/dev/pts

  2. mount -vt proc proc $LFS/proc

  3. mount -vt sysfs sysfs $LFS/sys

  4. if [ -h /dev/shm ]; then

  5. rm -f $LFS/dev/shm

  6. mkdir $LFS/dev/shm

  7. fi

  8. mount -vt tmpfs shm $LFS/dev/shm

【进入chroot环境】

点击(此处)折叠或打开

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

  2. HOME=/root \

  3. TERM="$TERM" \

  4. PS1='\u:\w\$ ' \

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

  6. /tools/bin/bash --login +h

【创建目录】

点击(此处)折叠或打开

  1. mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib,mnt,opt,run}

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

  3. install -dv -m 0750 /root

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

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

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

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

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

  9. for dir in /usr /usr/local; do

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

  11. done

  12. case $(uname -m) in

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

  14. esac

  15. mkdir -v /var/{log,mail,spool}

  16. ln -sv /run /var/run

  17. ln -sv /run/lock /var/lock

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

【创建必要的文件及符号链接】

点击(此处)折叠或打开

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

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

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

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

  5. sed 's/tools/usr/' /tools/lib/libstdc++.la > /usr/lib/libstdc++.la

  6. ln -sv bash /bin/sh

  7. touch /etc/mtab

【配置passwd信息

点击(此处)折叠或打开

  1. cat > /etc/passwd << "EOF"

  2. root:x:0:0:root:/root:/bin/bash

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

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

  5. EOF

【创建/etc/group文件】

点击(此处)折叠或打开

  1. cat > /etc/group << "EOF"

  2. root:x:0:

  3. bin:x:1:

  4. sys:x:2:

  5. kmem:x:3:

  6. tape:x:4:

  7. tty:x:5:

  8. daemon:x:6:

  9. floppy:x:7:

  10. disk:x:8:

  11. lp:x:9:

  12. dialout:x:10:

  13. audio:x:11:

  14. video:x:12:

  15. utmp:x:13:

  16. usb:x:14:

  17. cdrom:x:15:

  18. mail:x:34:

  19. nogroup:x:99:

  20. EOF

【启动一个新的shell

点击(此处)折叠或打开

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

【创建和设置几个临时文件和日志文件】


点击(此处)折叠或打开

  1. touch /var/log/{btmp,lastlog,wtmp}

  2. chgrp -v utmp /var/log/lastlog

  3. chmod -v 664 /var/log/lastlog

  4. chmod -v 600 /var/log/btmp

######################

#正式编译开始——》》安装必要软件#

######################


【切换到编译目录

点击(此处)折叠或打开

  1. cd /sources

  2. export LFS=/sources

Linux-3.5.2 API Headers


点击(此处)折叠或打开

  1. tar -xvf linux-3.5.2.tar

  2. cd linux-3.5.2

  3. make mrproper

  4. make headers_check

  5. make INSTALL_HDR_PATH=dest headers_install

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

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

  8. cd ..

  9. rm -rf linux-3.5.2

Man-pages-3.42

点击(此处)折叠或打开

  1. xz -d man-pages-3.42.tar.xz

  2. tar -xvf man-pages-3.42.tar

  3. cd man-pages-3.42

  4. make install

  5. cd ..

  6. rm -rf man-pages-3.42

Glibc-2.16.0


点击(此处)折叠或打开

  1. tar -xvf glibc-2.16.0.tar

  2. cd glibc-2.16.0

  3. sed -i 's##"rpc/types.h"#' sunrpc/rpc_clntout.c

  4. sed -i '/test-installation.pl/d' Makefile

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

  6. patch -Np1 -i ../glibc-2.16.0-res_query_fix-1.patch

  7. mkdir -v ../glibc-build

  8. cd ../glibc-build

  9. ../glibc-2.16.0/configure \

  10. --prefix=/usr \

  11. --disable-profile \

  12. --enable-add-ons \

  13. --enable-kernel=2.6.25 \

  14. --libexecdir=/usr/lib/glibc

  15. make

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

  17. grep Error glibc-check-log

  18. touch /etc/ld.so.conf

  19. make install

  20. cp -v ../glibc-2.16.0/sunrpc/rpc/*.h /usr/include/rpc

  21. cp -v ../glibc-2.16.0/sunrpc/rpcsvc/*.h /usr/include/rpcsvc

  22. cp -v ../glibc-2.16.0/nis/rpcsvc/*.h /usr/include/rpcsvc

  23. mkdir -pv /usr/lib/locale

  24. localedef -i zh_CN -f GB18030 zh_CN

  25. localedef -i zh_CN -f GBK zh_CN

  26. localedef -i zh_CN -f UTF-8 zh_CN

  27. localedef -i zh_CN -f GB2312 zh_CN

  28. localedef -i zh_HK -f UTF-8 zh_CN

  29. localedef -i zh_HK -f BIG5-HKSCS zh_CN

  30. localedef -i zh_TW -f EUC-TW zh_CN

  31. localedef -i zh_TW -f UTF-8 zh_CN

  32. localedef -i zh_TW -f BIG5 zh_CN
这里我安装的是中文,你可以安装自己想安装的语言,具体安装方法请参考官方发布的LFS

【配置glibc

点击(此处)折叠或打开

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

  2. # Begin /etc/nsswitch.conf

  3. passwd: files

  4. group: files

  5. shadow: files

  6. hosts: files dns

  7. networks: files

  8. protocols: files

  9. services: files

  10. ethers: files

  11. rpc: files

  12. # End /etc/nsswitch.conf

  13. EOF

【安装时区数据】

点击(此处)折叠或打开

  1. tar -xf ../tzdata2012e.tar.gz

  2. ZONEINFO=/usr/share/zoneinfo

  3. mkdir -pv $ZONEINFO/{posix,right}

  4. for tz in etcetera southamerica northamerica europe africa antarctica \

  5. asia australasia backward pacificnew solar87 solar88 solar89 \

  6. systemv; do

  7. zic -L /dev/null -d $ZONEINFO -y "sh yearistype.sh" ${tz}

  8. zic -L /dev/null -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz}

  9. zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz}

  10. done

  11. cp -v zone.tab iso3166.tab $ZONEINFO

  12. zic -d $ZONEINFO -p America/New_York

  13. unset ZONEINFO

  14. tzselect

  15. cp -v --remove-destination /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
【配置动态加载器】

点击(此处)折叠或打开

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

  2. # Begin /etc/ld.so.conf

  3. /usr/local/lib

  4. /opt/lib

  5. EOF

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

  7. # Add an include directory

  8. include /etc/ld.so.conf.d/*.conf

  9. EOF

  10. mkdir /etc/ld.so.conf.d

  11. cd ..

  12. rm -rf glibc-build

  13. rm -rf glibc-2.16.0

【调整工具链】

点击(此处)折叠或打开

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

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

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

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

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

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

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

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

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

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

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

输出类似:
【Requesting program interpreter: /lib/ld-linux.so.2】

点击(此处)折叠或打开

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

输出类似:

/usr/lib/crt1.o succeeded

/usr/lib/crti.o succeeded

/usr/lib/crtn.o succeeded

点击(此处)折叠或打开

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

输出类似:

#include <...> search starts here:

/usr/include

点击(此处)折叠或打开

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

输出类似:

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

SEARCH_DIR("/usr/lib")

SEARCH_DIR("/lib");

点击(此处)折叠或打开

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

输出类似:

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

点击(此处)折叠或打开

  1. grep found dummy.log

输出类似:

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

删除

点击(此处)折叠或打开

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

Zlib-1.2.7

点击(此处)折叠或打开

  1. tar xvf zlib-1.2.7.tar.bz2

  2. cd zlib-1.2.7

  3. ./configure --prefix=/usr

  4. make

  5. make check

  6. make install

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

  8. ln -sfv ../../lib/libz.so.1.2.7 /usr/lib/libz.so

  9. cd ..

  10. rm -rf zlib-1.2.7

File-5.11

点击(此处)折叠或打开

  1. tar xvf file-5.11.tar.gz

  2. cd file-5.11

  3. ./configure --prefix=/usr

  4. make

  5. make check

  6. make install

  7. cd ..

  8. rm -rf file-5.11

Binutils-2.22

点击(此处)折叠或打开

  1. tar xvf binutils-2.22.tar.bz2

  2. cd binutils-2.22

  3. expect -c "spawn ls"

输出类似:

spawn ls

点击(此处)折叠或打开

  1. rm -fv etc/standards.info

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

  3. patch -Np1 -i ../binutils-2.22-build_fix-1.patch

  4. mkdir -v ../binutils-build

  5. cd ../binutils-build

  6. ../binutils-2.22/configure --prefix=/usr --enable-shared

  7. make tooldir=/usr

  8. make -k check

  9. make tooldir=/usr install

  10. cp -v ../binutils-2.22/include/libiberty.h /usr/include

  11. cd ..

  12. rm -rf binutils-build

  13. rm -rf binutils-2.22

GMP-5.0.5

点击(此处)折叠或打开

  1. xz -d gmp-5.0.5.tar.xz

  2. tar -xvf gmp-5.0.5.tar

  3. cd gmp-5.0.5

  4. ./configure --prefix=/usr --enable-cxx --enable-mpbsd

  5. make

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

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

  8. make install

  9. mkdir -v /usr/share/doc/gmp-5.0.5

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

  11. /usr/share/doc/gmp-5.0.5

  12. cd ..

  13. rm -rf gmp-5.0.5

MPFR-3.1.1

点击(此处)折叠或打开

  1. xz -d mpfr-3.1.1.tar.xz

  2. tar -xvf mpfr-3.1.1.tar

  3. cd mpfr-3.1.1

  4. ./configure --prefix=/usr \

  5. --enable-thread-safe \

  6. --docdir=/usr/share/doc/mpfr-3.1.1

  7. make

  8. make check

  9. make install

  10. make html

  11. make install-html

  12. cd ..

  13. rm -rf mpfr-3.1.1

MPC-1.0

点击(此处)折叠或打开

  1. tar xvf mpc-1.0.tar.gz

  2. cd mpc-1.0

  3. ./configure --prefix=/usr

  4. make

  5. make check

  6. make install

  7. cd ..

  8. rm -rf mpc-1.0

GCC-4.7.1

点击(此处)折叠或打开

  1. tar xvf gcc-4.7.1.tar.bz2

  2. cd gcc-4.7.1

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

  4. case `uname -m` in

  5. i?86) sed -i 's/^T_CFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in ;;

  6. esac

  7. sed -i -e /autogen/d -e /check.sh/d fixincludes/Makefile.in

  8. mkdir -v ../gcc-build

  9. cd ../gcc-build

  10. ../gcc-4.7.1/configure --prefix=/usr \

  11. --libexecdir=/usr/lib \

  12. --enable-shared \

  13. --enable-threads=posix \

  14. --enable-__cxa_atexit \

  15. --enable-clocale=gnu \

  16. --enable-languages=c,c++ \

  17. --disable-multilib \

  18. --disable-bootstrap \

  19. --with-system-zlib

  20. make

  21. ulimit -s 32768

  22. make -k check

  23. ../gcc-4.7.1/contrib/test_summary

  24. make install

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

  26. ln -sv gcc /usr/bin/cc

  27. cd ..

  28. rm -rf gcc-build

  29. rm -rf gcc-4.7.1

【测试工具链】

点击(此处)折叠或打开

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

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

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

输出结果类似:

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

点击(此处)折叠或打开

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

输出结果类似:

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

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

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

点击(此处)折叠或打开

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

输出结果类似:

#include <...> search starts here:

/usr/local/include

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

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

/usr/include

点击(此处)折叠或打开

  1. 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");

点击(此处)折叠或打开

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

输出结果类似:

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

点击(此处)折叠或打开

  1. grep found dummy.log

输出结果类似:

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

删除

点击(此处)折叠或打开

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

  2. mkdir -pv /usr/share/gdb/auto-load/usr/lib

  3. mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib

Sed-4.2.1

点击(此处)折叠或打开

  1. tar xvf sed-4.2.1.tar.bz2

  2. cd sed-4.2.1

  3. patch -Np1 -i ../sed-4.2.1-testsuite_fixes-1.patch

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

  5. make

  6. make html

  7. make check

  8. make install

  9. make -C doc install-html

  10. cd ..

  11. rm -rf sed-4.2.1

Bzip2-1.0.6

点击(此处)折叠或打开

  1. tar xvf bzip2-1.0.6.tar.gz

  2. cd bzip2-1.0.6

  3. patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch

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

  5. sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile

  6. make -f Makefile-libbz2_so

  7. make clean

  8. make

  9. make PREFIX=/usr install

  10. cp -v bzip2-shared /bin/bzip2

  11. cp -av libbz2.so* /lib

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

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

  14. ln -sv bzip2 /bin/bunzip2

  15. ln -sv bzip2 /bin/bzcat

  16. cd ..

  17. rm -rf bzip2-1.0.6

Pkg-config-0.27

点击(此处)折叠或打开

  1. tar xvf pkg-config-0.27.tar.gz

  2. cd pkg-config-0.27

  3. ./configure --prefix=/usr \

  4. --with-internal-glib \

  5. --docdir=/usr/share/doc/pkg-config-0.27

  6. make

  7. make check

  8. make install

  9. cd ..

  10. rm -rf pkg-config-0.27

Ncurses-5.9

点击(此处)折叠或打开

  1. tar xvf ncurses-5.9.tar.gz

  2. cd ncurses-5.9

  3. ./configure --prefix=/usr --mandir=/usr/share/man --with-shared \

  4. --without-debug --enable-widec

  5. make

  6. make install

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

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

  9. for lib in ncurses form panel menu ; do \

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

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

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

  13. done

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

  15. rm -vf /usr/lib/libcursesw.so

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

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

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

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

  20. mkdir -v /usr/share/doc/ncurses-5.9

  21. cp -v -R doc/* /usr/share/doc/ncurses-5.9

  22. cd ..

  23. rm -rf ncurses-5.9

Util-linux-2.21.2

点击(此处)折叠或打开

  1. xz -d util-linux-2.21.2.tar.xz

  2. tar -xvf util-linux-2.21.2.tar

  3. cd util-linux-2.21.2

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

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

  6. mkdir -pv /var/lib/hwclock

  7. ./configure

  8. make

  9. make install

  10. cd ..

  11. rm -rf util-linux-2.21.2

Psmisc-22.19

点击(此处)折叠或打开

  1. tar xvf psmisc-22.19.tar.gz

  2. cd psmisc-22.19

  3. ./configure --prefix=/usr

  4. make

  5. make install

  6. mv -v /usr/bin/fuser /bin

  7. mv -v /usr/bin/killall /bin

  8. cd ..

  9. rm -rf psmisc-22.19

E2fsprogs-1.42.5

点击(此处)折叠或打开

  1. tar xvf e2fsprogs-1.42.5.tar.gz

  2. cd e2fsprogs-1.42.5

  3. mkdir -v build

  4. cd build

  5. ../configure --prefix=/usr \

  6. --with-root-prefix="" \

  7. --enable-elf-shlibs \

  8. --disable-libblkid \

  9. --disable-libuuid \

  10. --disable-uuidd \

  11. --disable-fsck

  12. make

  13. make -k check

  14. make install

  15. make install-libs

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

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

  18. install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info

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

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

  21. install-info --dir-file=/usr/share/info/dir /usr/share/info/com_err.info

  22. cd ../..

  23. rm -rf e2fsprogs-1.42.5

Shadow-4.1.5.1

点击(此处)折叠或打开

  1. tar xvf shadow-4.1.5.1.tar.bz2

  2. cd shadow-4.1.5.1

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

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

  5. sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \

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

  7. ./configure --sysconfdir=/etc

  8. make

  9. make install

  10. mv -v /usr/bin/passwd /bin

  11. pwconv

  12. grpconv

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

  14. passwd root

  15. cd ..

  16. rm -rf shadow-4.1.5.1

Coreutils-8.19

点击(此处)折叠或打开

  1. tar -xvf coreutils-8.19.tar

  2. cd coreutils-8.19

  3. sed -i -e 's/! isatty/isatty/' \

  4. -e '45i\ || errno == ENOENT' gnulib-tests/test-getlogin.c

  5. patch -Np1 -i ../coreutils-8.19-i18n-1.patch

  6. FORCE_UNSAFE_CONFIGURE=1 ./configure \

  7. --prefix=/usr \

  8. --libexecdir=/usr/lib \

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

  10. make

  11. make NON_ROOT_USERNAME=nobody check-root

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

  13. chown -Rv nobody .

  14. su nobody -s /bin/bash \

  15. -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes -k check || true"

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

  17. make install

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

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

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

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

  22. mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8

  23. sed -i s/\"1\"/\"8\"/1 /usr/share/man/man8/chroot.8

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

  25. cd ..

  26. rm -rf coreutils-8.19
Iana-Etc-2.30

点击(此处)折叠或打开

  1. tar xvf iana-etc-2.30.tar.bz2

  2. cd iana-etc-2.30

  3. make

  4. make install

  5. cd ..

  6. rm -rf iana-etc-2.30

M4-1.4.16

点击(此处)折叠或打开

  1. tar xvf m4-1.4.16.tar.bz2

  2. cd m4-1.4.16

  3. sed -i -e '/gets is a/d' lib/stdio.in.h

  4. ./configure --prefix=/usr

  5. make

  6. sed -i -e '41s/ENOENT/& || errno == EINVAL/' tests/test-readlink.h

  7. make check

  8. make install

  9. cd ..

  10. rm -rf m4-1.4.16

Bison-2.6.2

点击(此处)折叠或打开

  1. xz -d bison-2.6.2.tar.xz

  2. tar -xvf bison-2.6.2.tar

  3. cd bison-2.6.2

  4. ./configure --prefix=/usr

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

  6. make

  7. make check

  8. make install

  9. cd ..

  10. rm -rf bison-2.6.2

Procps-3.2.8

点击(此处)折叠或打开

  1. tar xvf procps-3.2.8.tar.gz

  2. cd procps-3.2.8

  3. patch -Np1 -i ../procps-3.2.8-fix_HZ_errors-1.patch

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

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

  6. make

  7. make install

  8. cd ..

  9. rm -rf procps-3.2.8

Grep-2.14

点击(此处)折叠或打开

  1. tar -xvf grep-2.14.tar

  2. cd grep-2.14

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

  4. make

  5. make check

  6. make install

  7. cd ..

  8. rm -rf grep-2.14

Readline-6.2

点击(此处)折叠或打开

  1. tar xvf readline-6.2.tar.gz

  2. cd readline-6.2

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

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

  5. patch -Np1 -i ../readline-6.2-fixes-1.patch

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

  7. make SHLIB_LIBS=-lncurses

  8. make install

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

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

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

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

  13. mkdir -v /usr/share/doc/readline-6.2

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

  15. /usr/share/doc/readline-6.2

  16. cd ..

  17. rm -rf readline-6.2

Bash-4.2

点击(此处)折叠或打开

  1. tar xvf bash-4.2.tar.gz

  2. cd bash-4.2

  3. patch -Np1 -i ../bash-4.2-fixes-8.patch

  4. ./configure --prefix=/usr \

  5. --bindir=/bin \

  6. --htmldir=/usr/share/doc/bash-4.2 \

  7. --without-bash-malloc \

  8. --with-installed-readline

  9. make

  10. chown -Rv nobody .

  11. su nobody -s /bin/bash -c "PATH=$PATH make tests"

  12. make install

  13. exec /bin/bash --login +h

  14. cd ..

  15. rm -rf bash-4.2

Libtool-2.4.2

点击(此处)折叠或打开

  1. tar xvf libtool-2.4.2.tar.gz

  2. cd libtool-2.4.2

  3. ./configure --prefix=/usr

  4. make

  5. make check

  6. make install

  7. cd ..

  8. rm -rf libtool-2.4.2

GDBM-1.10

点击(此处)折叠或打开

  1. tar xvf gdbm-1.10.tar.gz

  2. cd gdbm-1.10

  3. ./configure --prefix=/usr --enable-libgdbm-compat

  4. make

  5. make check

  6. make install

  7. cd ..

  8. rm -rf gdbm-1.10
Inetutils-1.9.1

点击(此处)折叠或打开

  1. tar xvf inetutils-1.9.1.tar.gz

  2. cd inetutils-1.9.1

  3. sed -i -e '/gets is a/d' lib/stdio.in.h

  4. ./configure --prefix=/usr \

  5. --libexecdir=/usr/sbin \

  6. --localstatedir=/var \

  7. --disable-ifconfig \

  8. --disable-logger \

  9. --disable-syslogd \

  10. --disable-whois \

  11. --disable-servers

  12. make

  13. make check

  14. make install

  15. make -C doc html

  16. make -C doc install-html docdir=/usr/share/doc/inetutils-1.9.1

  17. cd ..

  18. rm -rf inetutils-1.9.1

Perl-5.16.1

点击(此处)折叠或打开

  1. tar xvf perl-5.16.1.tar.bz2

  2. cd perl-5.16.1

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

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

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

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

  7. cpan/Compress-Raw-Zlib/config.in

  8. sh Configure -des -Dprefix=/usr \

  9. -Dvendorprefix=/usr \

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

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

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

  13. -Duseshrplib

  14. make

  15. make -k test

  16. make install

  17. cd ..

  18. rm -rf perl-5.16.1

Autoconf-2.69

点击(此处)折叠或打开

  1. xz -d autoconf-2.69.tar.xz

  2. tar -xvf autoconf-2.69.tar

  3. cd autoconf-2.69

  4. ./configure --prefix=/usr

  5. make

  6. make check

  7. make install

  8. cd ..

  9. rm -rf autoconf-2.69

Automake-1.12.3

点击(此处)折叠或打开

  1. xz -d automake-1.12.3.tar.xz

  2. tar -xvf automake-1.12.3.tar

  3. cd automake-1.12.3

  4. ./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.12.3

  5. make

  6. make install

  7. cd ..

  8. rm -rf automake-1.12.3

Diffutils-3.2

点击(此处)折叠或打开

  1. tar xvf diffutils-3.2.tar.gz

  2. cd diffutils-3.2

  3. sed -i -e '/gets is a/d' lib/stdio.in.h

  4. ./configure --prefix=/usr

  5. make

  6. make check

  7. make install

  8. cd ..

  9. rm -rf diffutils-3.2

Gawk-4.0.1

点击(此处)折叠或打开

  1. tar -xvf gawk-4.0.1.tar

  2. cd gawk-4.0.1

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

  4. make

  5. make check

  6. make install

  7. mkdir -v /usr/share/doc/gawk-4.0.1

  8. cp -v doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk-4.0.1

  9. cd ..

  10. rm -rf gawk-4.0.1

Findutils-4.4.2

点击(此处)折叠或打开

  1. tar xvf findutils-4.4.2.tar.gz

  2. cd findutils-4.4.2

  3. ./configure --prefix=/usr \

  4. --libexecdir=/usr/lib/findutils \

  5. --localstatedir=/var/lib/locate

  6. make

  7. make check

  8. make install

  9. mv -v /usr/bin/find /bin

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

  11. cd ..

  12. rm -rf findutils-4.4.2

Flex-2.5.37

点击(此处)折叠或打开

  1. tar xvf flex-2.5.37.tar.bz2

  2. cd flex-2.5.37

  3. patch -Np1 -i ../flex-2.5.37-bison-2.6.1-1.patch

  4. ./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info

  5. make

  6. make -k check

  7. make install

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

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

  10. #!/bin/sh

  11. # Begin /usr/bin/lex

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

  13. # End /usr/bin/lex

  14. EOF

  15. chmod -v 755 /usr/bin/lex

  16. mkdir -v /usr/share/doc/flex-2.5.37

  17. cp -v doc/flex.pdf /usr/share/doc/flex-2.5.37

  18. cd ..

  19. rm -rf flex-2.5.37

Gettext-0.18.1.1

点击(此处)折叠或打开

  1. tar xvf $LFS/gettext-0.18.1.1.tar.gz

  2. cd gettext-0.18.1.1

  3. sed -i -e '/gets is a/d' gettext-*/*/stdio.in.h

  4. ./configure --prefix=/usr \

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

  6. make

  7. make check

  8. make install

  9. cd ..

  10. rm -rf gettext-0.18.1.1
Groff-1.21

点击(此处)折叠或打开

  1. tar xvf groff-1.21.tar.gz

  2. cd groff-1.21

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

  4. make

  5. make install

  6. ln -sv eqn /usr/bin/geqn

  7. ln -sv tbl /usr/bin/gtbl

  8. cd ..

  9. rm -rf groff-1.21

Xz-5.0.4

点击(此处)折叠或打开

  1. tar -xvf xz-5.0.4.tar

  2. cd xz-5.0.4

  3. ./configure --prefix=/usr --libdir=/lib --docdir=/usr/share/doc/xz-5.0.4

  4. make

  5. make check

  6. make pkgconfigdir=/usr/lib/pkgconfig install

  7. cd ..

  8. rm -rf xz-5.0.4

GRUB-2.00

点击(此处)折叠或打开

  1. xz -d grub-2.00.tar.xz

  2. tar -xvf grub-2.00.tar

  3. cd grub-2.00

  4. sed -i -e '/gets is a/d' grub-core/gnulib/stdio.in.h

  5. ./configure --prefix=/usr \

  6. --sysconfdir=/etc \

  7. --disable-grub-emu-usb \

  8. --disable-efiemu \

  9. --disable-werror

  10. make

  11. make install

  12. cd ..

  13. rm -rf grub-2.00

Less-444

点击(此处)折叠或打开

  1. tar xvf $LFS/less-444.tar.gz

  2. cd less-444

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

  4. make

  5. make install

  6. cd ..

  7. rm -rf less-444

Gzip-1.5

点击(此处)折叠或打开

  1. tar -xvf gzip-1.5.tar

  2. cd gzip-1.5

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

  4. make

  5. make check

  6. make install

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

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

  9. cd ..

  10. rm -rf gzip-1.5

IPRoute2-3.5.1

点击(此处)折叠或打开

  1. xz -d iproute2-3.5.1.tar.xz

  2. tar -xvf iproute2-3.5.1.tar

  3. cd iproute2-3.5.1

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

  5. sed -i /ARPD/d Makefile

  6. sed -i 's/arpd.8//' man/man8/Makefile

  7. make DESTDIR=

  8. make DESTDIR= \

  9. MANDIR=/usr/share/man \

  10. DOCDIR=/usr/share/doc/iproute2-3.5.1 install

  11. cd ..

  12. rm -rf iproute2-3.5.1

Kbd-1.15.3

点击(此处)折叠或打开

  1. tar xvf kbd-1.15.3.tar.gz

  2. cd kbd-1.15.3

  3. patch -Np1 -i ../kbd-1.15.3-upstream_fixes-1.patch

  4. patch -Np1 -i ../kbd-1.15.3-backspace-1.patch

  5. sed -i '/guardado\ el/s/\(^.*en\ %\)\(.*\)/\14\$\2/' po/es.po

  6. sed -i 's/\(RESIZECONS_PROGS=\)yes/\1no/' configure &&

  7. sed -i 's/resizecons.8 //' man/man8/Makefile.in &&

  8. touch -d '2011-05-07 08:30' configure.ac

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

  10. make

  11. make install

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

  13. mkdir -v /usr/share/doc/kbd-1.15.3

  14. cp -R -v doc/* \

  15. /usr/share/doc/kbd-1.15.3

  16. cd ..

  17. rm -rf kbd-1.15.3

Kmod-9

点击(此处)折叠或打开

  1. xz -d kmod-9.tar.xz

  2. tar -xvf kmod-9.tar

  3. cd kmod-9

  4. patch -Np1 -i ../kmod-9-testsuite-1.patch

  5. ./configure --prefix=/usr \

  6. --bindir=/bin \

  7. --libdir=/lib \

  8. --sysconfdir=/etc \

  9. --with-xz \

  10. --with-zlib

  11. make

  12. make check

  13. make pkgconfigdir=/usr/lib/pkgconfig install

  14. for target in depmod insmod modinfo modprobe rmmod; do

  15. ln -sv ../bin/kmod /sbin/$target

  16. done

  17. ln -sv kmod /bin/lsmod

  18. cd ..

  19. rm -rf kmod-9

Libpipeline-1.2.1

点击(此处)折叠或打开

  1. tar xvf libpipeline-1.2.1.tar.gz

  2. cd libpipeline-1.2.1

  3. sed -i -e '/gets is a/d' gnulib/lib/stdio.in.h

  4. PKG_CONFIG_PATH=/tools/lib/pkgconfig ./configure --prefix=/usr

  5. make

  6. make check

  7. make install

  8. cd ..

  9. rm -rf libpipeline-1.2.1

Make-3.82

点击(此处)折叠或打开

  1. tar xvf $LFS/make-3.82.tar.bz2

  2. cd make-3.82

  3. patch -Np1 -i ../make-3.82-upstream_fixes-2.patch

  4. ./configure --prefix=/usr

  5. make

  6. make check

  7. make install

  8. cd ..

  9. rm -rf make-3.82

Man-DB-2.6.2

点击(此处)折叠或打开

  1. xz -d man-db-2.6.2.tar.xz

  2. tar -xvf man-db-2.6.2.tar

  3. cd man-db-2.6.2

  4. sed -i -e '/gets is a/d' gnulib/lib/stdio.in.h

  5. ./configure --prefix=/usr \

  6. --libexecdir=/usr/lib \

  7. --docdir=/usr/share/doc/man-db-2.6.2 \

  8. --sysconfdir=/etc \

  9. --disable-setuid \

  10. --with-browser=/usr/bin/lynx \

  11. --with-vgrind=/usr/bin/vgrind \

  12. --with-grap=/usr/bin/grap

  13. make

  14. make check

  15. make install

  16. cd ..

  17. rm -rf man-db-2.6.2

Patch-2.6.1

点击(此处)折叠或打开

  1. tar xvf patch-2.6.1.tar.bz2

  2. cd patch-2.6.1

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

  4. ./configure --prefix=/usr

  5. make

  6. make -k check

  7. make install

  8. cd ..

  9. rm -rf patch-2.6.1

Sysklogd-1.5

点击(此处)折叠或打开

  1. tar xvf sysklogd-1.5.tar.gz

  2. cd sysklogd-1.5

  3. make

  4. make BINDIR=/sbin install

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

  6. # Begin /etc/syslog.conf

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

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

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

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

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

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

  13. *.emerg *

  14. # End /etc/syslog.conf

  15. EOF

  16. cd ..

  17. rm -rf sysklogd-1.5

Sysvinit-2.88dsf

点击(此处)折叠或打开

  1. tar xvf sysvinit-2.88dsf.tar.bz2

  2. cd sysvinit-2.88dsf

  3. sed -i 's@Sending processes@& configured via /etc/inittab@g' src/init.c

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

  5. -e '/= mountpoint/d' \

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

  7. make -C src

  8. make -C src install

  9. cd ..

  10. rm -rf sysvinit-2.88dsf

Tar-1.26

点击(此处)折叠或打开

  1. tar xvf tar-1.26.tar.bz2

  2. cd tar-1.26

  3. sed -i -e '/gets is a/d' gnu/stdio.in.h

  4. FORCE_UNSAFE_CONFIGURE=1 \

  5. ./configure --prefix=/usr \

  6. --bindir=/bin \

  7. --libexecdir=/usr/sbin

  8. make

  9. make check

  10. make install

  11. make -C doc install-html docdir=/usr/share/doc/tar-1.26

  12. cd ..

  13. rm -rf tar-1.26

Texinfo-4.13a

点击(此处)折叠或打开

  1. tar xvf texinfo-4.13a.tar.gz

  2. cd texinfo-4.13

  3. ./configure --prefix=/usr

  4. make

  5. make check

  6. make install

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

  8. cd /usr/share/info

  9. rm -v dir

  10. for f in *

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

  12. done

  13. cd /sources

  14. rm -rf texinfo-4.13

Udev-188 (Extracted from systemd-188)

点击(此处)折叠或打开

  1. xz -d systemd-188.tar.xz

  2. tar -xvf systemd-188.tar

  3. cd systemd-188

  4. tar -xvf ../udev-lfs-188-3.tar.bz2

  5. make -f udev-lfs-188/Makefile.lfs

  6. make -f udev-lfs-188/Makefile.lfs install

  7. bash udev-lfs-188/init-net-rules.sh

  8. cd ..

  9. rm -rf systemd-188

Vim-7.3

点击(此处)折叠或打开

  1. tar xvf vim-7.3.tar.bz2

  2. cd vim73

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

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

  5. make

  6. make test

  7. make install

  8. ln -sv vim /usr/bin/vi

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

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

  11. done

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

  13. cat > /etc/vimrc << "EOF"

  14. " Begin /etc/vimrc

  15. set nocompatible

  16. set backspace=2

  17. syntax on

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

  19. set background=dark

  20. endif

  21. " End /etc/vimrc

  22. EOF

  23. cd ..

  24. rm -rf vim73

Stripping Again

点击(此处)折叠或打开

  1. logout

  2. chroot $LFS /tools/bin/env -i \

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

  4. PATH=/bin:/usr/bin:/sbin:/usr/sbin \

  5. /tools/bin/bash --login

  6. /tools/bin/find /{,usr/}{bin,lib,sbin} -type f \

  7. -exec /tools/bin/strip --strip-debug '{}' ';'

Cleaning Up

点击(此处)折叠或打开

  1. chroot "$LFS" /usr/bin/env -i \

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

  3. PATH=/bin:/usr/bin:/sbin:/usr/sbin \

  4. /bin/bash --login

我的操作到这里出错了,原因还是未明,以下没多少了,我也就不贴出来,贻笑大方了~
阅读(3456) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~