linux系统定制(一)

概述

         LFS ( Linux From Scratch  http://www.linuxfromscratch.org )此篇博客是一个LFS的制作手册, 内容涵盖使用宿主系统或liveCD来制作LFS的详细过程.从开始到结束手把手教你制作属于你自己的linux系统.也能帮助你更清楚的知道linux系统是如何组成的, 这里就简单的说下LFS ,什么linux开机流程,linux系统原理等等网上都有说明,这里就不说了,至于linux系统的组成,将文档从头做到尾你就知道linux系统是怎么组成的啦,嘿嘿!

        这是一个比较漫长的旅途,需要做的是细心,耐心,再细心, 这里提醒下使用VMware虚拟机制作的朋友,快照才是王道,在此旅途中确定在此之前的操作是无误并制作正确的, 可以做下快照备份下当前虚拟机状态,以免后面不小心的操作而导致不可恢复性的错误,所以请务必阶段性的做快照。当然如果使用物理机制作的朋友就是细心,小心啦........

       制作的过程需要编译大量的源码,而编译源代码需要占用大量的CPU时钟周期,建议大家使用配置相对比较好的计算机,如果有PC Server的话建议在PC Server上面制作.我的环境是在一台8核CPU,4G内存的PC Server上装了一个虚拟机,(虚拟机分配的资源是8核CPU,2G内存),在这样的配置下我编译一个GCC跟glibc花了1个小时,所以建议大家有好的资源不要浪费啊.嘿嘿

好了,闲话不多说, Are you ready

准备工作  

       如果使用liveCD作为宿主系统的朋友需要去LFS官方下载liveCD镜像包,里面包含制作过程中所需的软件包,等,当然如果使用原有的操作系统来作为宿主系统的朋友也需要去LFS官方下载liveCD镜像,为什么呢?因为liveCD里面包含有制作过程中所需要的软件包,这样我们就不用一个一个去互联网上下载了,呵呵,

       这里介绍下我的环境,在一台8核CPU 4G内存的PCserver上装了一个VMware虚拟机工具,然后在虚拟机上装了个rhel5.4 32位系统(8核CPU/2G内存),我是通过现有的系统来制作的,那有些朋友说了,使用liveCD跟现有的宿主系统制作的步骤都是一眼的吗?  没错,步骤是一样的, 无论使用liveCD或者现有的宿主系统在制作过程上没有什么差别,

liveCD的下载地址  

http://ftp.osuosl.org/pub/lfs-livecd/lfslivecd-x86_64-6.3-r2145.iso

1,添加硬盘

       关闭虚拟机添加一块10G大小的IDE接口的虚拟硬盘,并将虚拟硬盘存为一个文件,步骤见下图.

创建一块新硬盘

650) this.width=650;" onsubmit onchange onunload onselect onreset>

选择虚拟硬盘的类型为IDE

650) this.width=650;" onsubmit onchange onunload onselect onreset>

设置虚拟硬盘的大小并设置将虚拟硬盘存储为1个文件

650) this.width=650;" onsubmit onchange onunload onselect onreset>

选择虚拟硬盘的存储位置,根据自己需要定义

650) this.width=650;" onsubmit onchange onunload onselect onreset>

磁盘添加完成后启动计算机待开机完成后安装基本开发库及GCC编译器

#使用liveCD制作的不需要执行此蓝色字体的命令
#yum –y groupinstall "Development Libraries" "Development Tools"
#yum –y install gcc*
#然后将下载好的liveCD的镜像文件放入虚拟光驱中,并挂载使用
#mount /dev/cdrom /media
#cp –avf /media/lfs-sources  / 

 

2,分区并格式化

 
 
  1. fdisk /dev/hda 
  2.  
  3. +300 
  4.  
  5. +7G 
  6.  
  7. mkfs.ext3 /dev/hda1    #/boot分区 
  8. mkfs.ext3 /dev/hda2    #/分区  

3,建立制作车间

 
 
  1. mkdir /mnt/lfs 
  2. mount /dev/hda2 /mnt/lfs 
  3. mkdir -pv /mnt/lfs/{sources,tools} 
  4. chmod -v a+wt /mnt/lfs/sources 
  5. ln -s /mnt/lfs/tools / 

4,制作的用户

 
 
  1. groupadd lfs 
  2. useradd -s /bin/bash -g lfs -m -k /dev/null lfs 
  3. passwd lfs 
  4. chown lfs /mnt/lfs/* 
  5. su - lfs 
  6. cat > ~/.bash_profile <<EOF内容如下 
  7. exec env -i HOME=${HOME} TERM=${TERM} PS1='\u:\w\$' /bin/bash 
  8. EOF 
  9.  
  10.  
  11. cat > ~/.bashrc  <<EOF 
  12. set +h 
  13. umask 022 
  14. LC_ALL=POSIX 
  15. PATH=/tools/bin:/bin:/usr/bin 
  16. export PATH LC_ALL  
  17. EOF 
  18.  
  19. source ~/.bash_profile 

5,安装汇编连接器(binutils)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/binutils-2.17.tar.bz2 
  3. mkdir /mnt/lfs/sources/binutils-build 
  4. cd /mnt/lfs/sources/binutils-build 
  5. CC="gcc -B/usr/bin/" ../binutils-2.17/configure --prefix=/tools \
  6. --disable-nls --disable-werror 
  7. make   
  8. make install 
  9. make -C ld clean 
  10. make -C ld LIB_PATH=/tools/lib 
  11. cp ld/ld-new /tools/bin/ 
  12. cd .. 
  13. rm -rf /mnt/lfs/sources/binutils-build 
  14. rm -rf /mnt/lfs/sources/binutils-2.17 

6,安装编译器(GCC)

 
 
  1. cd /mnt/lfs/sources 
  2. tar -xvf /lfs-sources/gcc-4.1.2.tar.bz2 
  3. mkdir /mnt/lfs/sources/gcc-build 
  4. cd /mnt/lfs/sources/gcc-build 
  5. CC="gcc -B/usr/bin/" ../gcc-4.1.2/configure --prefix=/tools \ 
  6. --with-local-prefix=/tools --disable-nls \ 
  7. --enable-shared --enable-languages=c  
  8.  
  9. make bootstrap 
  10. make install 
  11. ln -vs gcc /tools/bin/cc 
  12. cd .. 
  13. rm -rf /mnt/lfs/sources/gcc-build 
  14. rm -rf /mnt/lfs/sources/gcc-4.1.2 

7,安装内核头文件

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/linux-2.6.22.5.tar.bz2 
  3. cd linux-2.6.22.5 
  4. make mrproper 
  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-2.6.22.5 

8,安装基本C库(glibc)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/glibc-2.5.1.tar.bz2 
  3. mkdir /mnt/lfs/sources/glibc-build 
  4. cd /mnt/lfs/sources/glibc-build 
  5. ./glibc-2.5.1/configure --prefix=/tools \ 
  6. --disable-profile --enable-add-ons \ 
  7. --enable-kernel=2.6.0 --with-binutils=/tools/bin \ 
  8. --without-gd --with-headers=/tools/include \ 
  9. --without-selinux 
  10. make 
  11. mkdir /tools/etc 
  12. touch /tools/etc/ld.so.conf 
  13. make install 
  14. cd .. 
  15. rm -rf /mnt/lfs/sources/glibc-2.5.1 
  16. rm -rf /mnt/lfs/sources/glibc-build 

9,调整工具链

 
 
  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 's@^/lib/ld-linux.so.2@/tools&@g' > `dirname $(gcc -print-libgcc-file-name)`/specs 
  6. GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include && 
  7. find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; && 
  8. rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` && 
  9. unset GCC_INCLUDEDIR 

10,测试工具链

 
 
  1. echo 'main() {}' > dummy.c 
  2. cc dummy.c 
  3. readelf -l a.out | grep 'tools' 
  4. 如果有Requesting program interpreter: /tools/lib/ld-linux.so.2则说明成功 
  5. rm -rf aa.out dummy.c 

11,安装测试工具(tcl expect dejagnu)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/tcl8.4.15-src.tar.gz 
  3. cd tcl8.4.15/unix 
  4. /configure --prefix=/tools 
  5. make 
  6. make install 
  7. make install-private-headers 
  8. ln -sv tclsh8.4 /tools/bin/tchsh 
  9.  
  10. cd /mnt/lfs/sources 
  11. tar xvf /lfs-sources/expect-5.43.0.tar.gz 
  12. cd expect-5.43 
  13. patch -Np1 -i /lfs-sources/expect-5.43.0-spawn-1.patch 
  14. cp configure{,.bak} 
  15. sed 's:/usr/local/bin:/bin:' configure.bak > configure 
  16. /configure --prefix=/tools --with-tcl=/tools/lib --with-tclinclude=/tools/include \
  17. --with-x=no 
  18. make 
  19. make SCRIPTS="" install 
  20.  
  21. cd /mnt/lfs/sources 
  22. tar xvf /lfs-sources/dejagnu-1.4.4.tar.gz 
  23. cd dejagnu-1.4.4 
  24. /configure --prefix=/tools 
  25. make install 
  26. cd .. 
  27.  
  28. rm -rf /mnt/lfs/sources/tcl8.4.15 
  29. rm -rf /mnt/lfs/sources/expect-5.43 
  30. rm -rf /mnt/lfs/sources/dejagnu-1.4.4 

 12,安装汇编工具(binutils)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/binutils-2.17.tar.bz2 
  3. mkdir /mnt/lfs/sources/binutils-build 
  4. cd /mnt/lfs/sources/binutils-build 
  5. ./binutils-2.17/configure --prefix=/tools --disable-nls \ 
  6.  --with-lib-path=/tools/lib 
  7. make 
  8. make install 
  9. make -C ld clean 
  10. make -C ld LIB_PATH=/usr/lib:/lib 
  11. cp ld/ld-new /tools/bin 
  12. cd .. 
  13. rm -rf /mnt/lfs/sources/binutils-build 
  14. rm -rf /mnt/lfs/sources/binutils-2.17 

 13,安装GCC

 
 
  1. cd /mnt/lfs/sources/ 
  2. tar xvf /lfs-sources/gcc-4.1.2.tar.bz2 
  3. cd gcc-4.1.2 
  4. cp gcc/Makefile.in{,.orig} 
  5. sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in 
  6. cp -v gcc/Makefile.in{,.tmp} 
  7. sed 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp > gcc/Makefile.in 
  8. patch -Np1 -i /lfs-sources/gcc-4.1.2-specs-1.patch 
  9. mkdir  /mnt/lfs/sources/gcc-build 
  10. cd /mnt/lfs/sources/gcc-build 
  11. ./gcc-4.1.2/configure --prefix=/tools \ 
  12. --with-local-prefix=/tools \ 
  13. --enable-clocale=gnu --enable-shared \ 
  14. --enable-threads=posix --enable-__cxa_atexit \ 
  15. --enable-languages=c,c++ --disable-libstdcxx-pch 
  16. make 
  17. make install 
  18. cd .. 
  19. rm -rf /mnt/lfs/sources/gcc-build 
  20. rm -rf /mnt/lfs/sources/gcc-4.1.2 

14,测试工具链

 
 
  1. echo 'main() {}' > dummy.c 
  2. cc dummy.c 
  3. readelf -l a.out | grep 'tools' 
  4. 如果有Requesting program interpreter: /tools/lib/ld-linux.so.2则说明成功 
  5. rm -rf a.out dummy.c 

15,安装文本交互函数库(ncurses)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/ncurses-5.6.tar.gz 
  3. cd ncurses-5.6 
  4. /configure --prefix=/tools --with-shared --without-debug --without-ada --enable-overwrite 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf /mnt/lfs/sources/ncurses-5.6 

16,安装命令解释器(bash)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/bash-3.2.tar.gz 
  3. cd bash-3.2 
  4. patch -Np1 -i /lfs-sources/bash-3.2-fixes-5.patch 
  5. /configure --prefix=/tools --without-bash-malloc 
  6. make 
  7. make install 
  8. ln -sv bash /tools/bin/sh 
  9. cd .. 
  10. rm -rf bash-3.2 

17,安装压缩工具(bzip2)

 
 
  1. cd /mnt/lfs/sources/ 
  2. tar xvf /lfs-sources/bzip2-1.0.4.tar.gz 
  3. cd bzip2-1.0.4 
  4. make  
  5. make PREFIX=/tools install 
  6. cd .. 
  7. rm -rf bzip2-1.0.4 

18,安装常用命令集(Coreutils)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/coreutils-6.9.tar.bz2 
  3. cd coreutils-6.9 
  4. /configure --prefix=/tools 
  5. make 
  6. make install 
  7. cp src/su /tools/bin/su-tools 
  8. cd .. 
  9. rm -rf coreutils-6.9 

19,安装文件比较工具(diffutils) 

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/diffutils-2.8.1.tar.gz 
  3. cd diffutils-2.8.1 
  4. /configure --prefix=/tools 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf diffutils-2.8.1 
 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/findutils-4.2.31.tar.gz 
  3. cd findutils-4.2.31 
  4. /configure --prefix=/tools 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf findutils-4.2.31 

20,安装查找工具(findutils)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/findutils-4.2.31.tar.gz 
  3. cd findutils-4.2.31 
  4. /configure --prefix=/tools 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf findutils-4.2.31 

21,安装文本处理工具(gawk)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/gawk-3.1.5.tar.bz2 
  3. cd gawk-3.1.5 
  4. /configure --prefix=/tools 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf gawk-3.1.5 

22,安装国际语言支持工具(gettext) 

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/gettext-0.16.1.tar.gz 
  3. cd gettext-0.16.1/gettext-tools 
  4. /configure --prefix=/tools --disable-shared 
  5. make -C gnulib-lib 
  6. make -C src msgfmt 
  7. cp src/msgfmt /tools/bin 
  8. cd ../../ 
  9. rm -rf gettext-0.16.1 

23,安装文件过滤工具(grep)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/grep-2.5.1a.tar.bz2 
  3. cd grep-2.5.1a 
  4. /configure --prefix=/tools --disable-perl-regexp 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf grep-2.5.1a 

24,安装压缩工具(gzip) 

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/gzip-1.3.12.tar.gz 
  3. cd gzip-1.3.12 
  4. /configure --prefix=/tools 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf gzip-1.3.12 

25,安装宏处理工具(M4)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/m4-1.4.10.tar.bz2 
  3. cd m4-1.4.10 
  4. /configure --prefix=/tools 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf m4-1.4.10 

26,安装语法分析工具(bison)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/bison-2.3.tar.bz2 
  3. cd bison-2.3 
  4. /configure --prefix=/tools 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf bison-2.3 

27,安装编译过程控制工具(make)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/make-3.81.tar.bz2 
  3. cd make-3.81 
  4. /configure --prefix=/tools 
  5. make  
  6. make install 
  7. cd .. 
  8. rm -rf make-3.81 

28,安装补丁工具(patch)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/patch-2.5.4.tar.gz 
  3. cd patch-2.5.4 
  4. /configure --prefix=/tools 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf patch-2.5.4 

29,安装脚本语言(perl)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/perl-5.8.8.tar.bz2 
  3. cd perl-5.8.8 
  4. patch -Np1 -i /lfs-sources/perl-5.8.8-libc-2.patch 
  5. /configure.gnu --prefix=/tools -Destatic_ext='Data/Dumper Fcntl IO POSIX' 
  6. make perl utilities 
  7. cp perl pod/pod2man /tools/bin 
  8. mkdir -pv /tools/lib/perl5/5.8.8 
  9. cp -Rv lib/* /tools/lib/perl5/5.8.8 
  10. cd .. 
  11. rm -rf perl-5.8.8 

30,文件处理工具(sed)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/sed-4.1.5.tar.gz 
  3. cd sed-4.1.5 
  4. /configure --prefix=/tools 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf sed-4.1.5 

31,安装打包工具(tar)

 
 
  1. cd /mnt/sources 
  2. tar xvf /lfs-sources/tar-1.18.tar.bz2 
  3. cd tar-1.18 
  4. /configure --prefix=/tools 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf tar-1.18 

32,安装信息阅读工具(Texinfo)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/texinfo-4.9.tar.bz2 
  3. /configure --prefix=/tools 
  4. make  
  5. make install 
  6. cd .. 
  7. rm -rf texinfo-4.9 

33,安装工具集(util-linux)

 
 
  1. cd /mnt/lfs/sources 
  2. tar xvf /lfs-sources/util-linux-2.12r.tar.bz2 
  3. cd util-linux-2.12r 
  4. sed -i 's@/usr/include@/tools/include@g' configure 
  5. /configure 
  6. make -C lib 
  7. make -C mount mount umount 
  8. make -C text-utils more 
  9. cp mount/{,u}mount text-utils/more /tools/bin 
  10. cd .. 
  11. rm -rf util-linux-2.12r 

34,退出lfs用户

 
 
  1. exit 

目标系统 

35,设置环境变量等

 
 
  1. chown -R root:root /mnt/lfs/tools 
  2. mkdir -pv /mnt/lfs/{dev,proc,sys} 
  3. mknod -m 600 /mnt/lfs/dev/console c 5 1 
  4. mknod -m 666 /mnt/lfs/dev/null c 1 3 
  5.  
  6. mount --bind /dev /mnt/lfs/dev 
  7. mount -t devpts devpts /mnt/lfs/dev/pts 
  8. mount -t tmpfs shm /mnt/lfs/dev/shm 
  9. mount -t proc proc /mnt/lfs/proc 
  10. mount -t sysfs sysfs /mnt/lfs/sys 
  11.  
  12. cp -a /lfs-sources/* /mnt/lfs/sources/ 
  13.  
  14. chroot "/mnt/lfs/" /tools/bin/env -i \ 
  15. HOME=/root TERM="$TERM" PS1='\u [\w]\$ ' \ 
  16. PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ 
  17. /tools/bin/bash --login +h 

36,建立目标系统的目录结构

 
 
  1. mkdir -pv /{bin,boot,etc/opt,home,lib,mnt,opt} 
  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 -pv /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. mkdir -pv /var/{lock,log,mail,run,spool} 
  13. mkdir -pv /var/{opt,cache,lib/{misc,locate},local} 
  14.  
  15. ln -sv /tools/bin/{bash,cat,echo,grep,pwd,stty} /bin 
  16. ln -sv /tools/bin/perl /usr/bin 
  17. ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib 
  18. ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib 
  19. ln -sv bash /bin/sh 
  20. touch /etc/mtab 
  21.  
  22. mount /dev/hda1 /boot

37,创建目标系统的用户及组

 
 
  1. cat > /etc/passwd << EOF 
  2. root:x:0:0:root:/root:/bin/bash 
  3. nobody:x:99:99:Unprivileged User:/dev/null:/bin/false 
  4. EOF 
  5. cat > /etc/group << EOF 
  6. root:x:0: 
  7. bin:x:1: 
  8. sys:x:2: 
  9. kmem:x:3: 
  10. tty:x:4: 
  11. tape:x:5: 
  12. daemon:x:6: 
  13. floppy:x:7: 
  14. disk:x:8: 
  15. lp:x:9: 
  16. dialout:x:10: 
  17. audio:x:11: 
  18. video:x:12: 
  19. utmp:x:13: 
  20. usb:x:14: 
  21. cdrom:x:15: 
  22. mail:x:34: 
  23. nogroup:x:99: 
  24. EOF 
  25.  
  26. 重新加载bash 
  27. exec /tools/bin/bash --login +h 

38,建立临时文件和日志文件

 
 
  1. touch /var/run/utmp /var/log/{btmp,lastlog,wtmp} 
  2. chgrp -v utmp /var/run/utmp /var/log/lastlog 
  3. chmod -v 664 /var/run/utmp /var/log/lastlog 

目标系统工具链制作

39,安装linux内核头文件(linux-header)

 
 
  1. cd /sources 
  2. tar xvf linux-2.6.22.5.tar.bz2 
  3. cd linux-2.6.22.5 
  4. make mrproper 
  5. make headers_check 
  6. make INSTALL_HDR_PATH=dest headers_install 
  7. cp -rv dest/include/* /usr/include 
  8. cd .. 
  9. rm -rf linux-2.6.22.5 

40,安装基本C库(glibc)

 
 
  1. cd /sources 
  2. tar xvf glibc-2.5.1.tar.bz2 
  3. cd glibc-2.5.1 
  4. tar xvf /sources/glibc-libidn-2.5.1.tar.gz 
  5. mv glibc-libidn-2.5.1 libidn 
  6. sed -i '/vi_VN.TCVN/d' localedata/SUPPORTED 
  7. sed -i \ 
  8. 's|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.2 -o|' \ 
  9.    scripts/test-installation.pl 
  10. sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in 
  11. mkdir ../glibc-build 
  12. cd ../glibc-build 
  13. ./glibc-2.5.1/configure --prefix=/usr \ 
  14. --disable-profile --enable-add-ons \ 
  15. --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc 
  16. make 
  17. make -k check 2>&1 | tee glibc-check-log 
  18. grep Error glibc-check-log 
  19. touch /etc/ld.so.conf 
  20. make install 
  21. make localedata/install-locales 
  22.  
  23. cat > /etc/nsswitch.conf <<EOF 
  24. passwd: files 
  25. group: files 
  26. shadow: files 
  27. hosts: files dns 
  28. networks: files 
  29. protocols: files 
  30. services: files 
  31. ethers: files 
  32. rpc: files 
  33. EOF 
  34.  
  35. cp -v --remove-destination /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
  36.  
  37. cat > /etc/ld.so.conf <<EOF 
  38. /usr/local/lib 
  39. /opt/lib 
  40. EOF 
  41.  
  42. rm -rf /sources/glibc-build 
  43. rm -rf /sources/glibc-2.5.1 

41,调整工具链 

 
 
  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 \ 
  6. -e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g' \ 
  7. -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \ 
  8. -e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' > \ 
  9. `dirname $(gcc --print-libgcc-file-name)`/specs 

42,正确性检查

 
 
  1. echo 'main(){}' > dummy.c 
  2. cc dummy.c -v -Wl,--verbose &> dummy.log 
  3. readelf -l a.out | grep '/lib' 
  4. 如果显示[Requesting program interpreter: /lib/ld-linux.so.2]表示调整成功,动态库已经连接到了目标系统的/lib下 
  5. grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log  打印信息如下 
  6.   /usr/lib/crt1.o succeeded 
  7.   /usr/lib/crti.o succeeded 
  8.   /usr/lib/crtn.o succeeded 
  9. grep -B1 '^ /usr/include' dummy.log  打印信息如下 
  10.   #include <...> search starts here: 
  11.    /usr/include 
  12. grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'  打印信息如下 
  13.   SEARCH_DIR("/tools/i686-pc-linux-gnu/lib") 
  14.   SEARCH_DIR("/usr/lib") 
  15.   SEARCH_DIR("/lib"); 
  16. grep "/lib/libc.so.6 " dummy.log  打印信息如下 
  17.   attempt to open /lib/libc.so.6 succeeded 
  18. grep found dummy.log  打印信息如下 
  19.   found ld-linux.so.2 at /lib/ld-linux.so.2 
  20.  
  21. 上面的信息均显示正常,则OK! 
  22. rm -v dummy.c a.out dummy.log 

43,安装汇编器(binutils)

 
 
  1. cd /sources 
  2. tar xvf binutils-2.17.tar.bz2 
  3. mkdir binutils-build 
  4. cd binutils-build 
  5. ./binutils-2.17/configure --prefix=/usr --enable-shared 
  6. make tooldir=/usr 
  7. make check 
  8. make tooldir=/usr install 
  9. cp -v ../binutils-2.17/include/libiberty.h /usr/include 
  10. cd .. 
  11. rm -rf binutils-build 
  12. rm -rf binutils-2.17 

44,安装GCC

 
 
  1. cd /sources 
  2. tar xvf gcc-4.1.2.tar.bz2 
  3. cd gcc-4.1.2 
  4. sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in 
  5. sed -i 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in 
  6. sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in 
  7. sed -i 's/@have_mktemp_command@/yes/' gcc/gccbug.in 
  8. mkdir -v ../gcc-build 
  9. cd ../gcc-build 
  10. ./gcc-4.1.2/configure --prefix=/usr \ 
  11. --libexecdir=/usr/lib --enable-shared \ 
  12. --enable-threads=posix --enable-__cxa_atexit \ 
  13. --enable-clocale=gnu --enable-languages=c,c++ 
  14. make 
  15. make -k check 
  16. make install 
  17. ln -sv ../usr/bin/cpp /lib 
  18. ln -sv gcc /usr/bin/cc 
  19. cd .. 
  20. rm -rf gcc-build 
  21. rm -rf gcc-4.1.2 

45,检测gcc是否安装正确

 
 
  1. echo 'main(){}' >dummy.c 
  2. cc dummy.c -v -Wl,--verbose &> dummy.log 
  3.  
  4. readelf -l a.out | grep 'lib'  打印信息为以下内容则表示链接位置正确, 
  5. Requesting program interpreter: /lib/ld-linux.so.2] 
  6.  
  7. grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log 打印信息为以下 
  8.     /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o succeeded 
  9.   /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crti.o succeeded 
  10.   /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crtn.o succeeded 
  11.  
  12. grep -B3 '^ /usr/include' dummy.log  打印信息为 
  13.   #include <...> search starts here: 
  14.    /usr/local/include 
  15.    /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include 
  16.    /usr/include 
  17.  
  18. grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g' 打印信息为 
  19.   SEARCH_DIR("/usr/i686-pc-linux-gnu/lib") 
  20.   SEARCH_DIR("/usr/local/lib") 
  21.   SEARCH_DIR("/lib") 
  22.   SEARCH_DIR("/usr/lib"); 
  23.  
  24. grep "/lib/libc.so.6 " dummy.log  打印信息为 
  25. attempt to open /lib/libc.so.6 succeeded 
  26.  
  27.  
  28. grep found dummy.log 打印信息为 
  29. found ld-linux.so.2 at /lib/ld-linux.so.2 
  30.  
  31. 上面信息显示正常则表示工具链ok 
  32. rm -rf dummy.c a.out dummy.log 

46,安装高性能数据库(berkeley DB)

 
 
  1. cd /sources 
  2. tar xvf db-4.5.20.tar.gz 
  3. cd db-4.5.20 
  4. patch -Np1 -i /sources/db-4.5.20-fixes-1.patch 
  5. cd build_unix 
  6. ./dist/configure --prefix=/usr --enable-compat185 --enable-cxx 
  7. make 
  8. make docdir=/usr/share/doc/db-4.5.20 install 
  9. chown -R root:root /usr/share/doc/db-4.5.20 
  10. cd /sources 
  11. rm -rf db-4.5.20 

47,阶段性检查, 

 
 
  1. type -p gcc cc g++ c++ ld ar ranlib  打印信息如下表示正常 
  2. /usr/bin/gcc 
  3. /usr/bin/cc 
  4. /usr/bin/g++ 
  5. /usr/bin/c++ 
  6. /usr/bin/ld 
  7. /usr/bin/ar 
  8. /usr/bin/ranlib 
  9. find /{,usr/}{bin,sbin,lib}/* -type f -exec ldd '{}' ';' 2>/dev/null | grep tools 没有任何打印信息表示正常

48,安装文本处理工具(sed)

 
 
  1. cd /sources 
  2. tar xvf sed-4.1.5.tar.gz 
  3. cd sed-4.1.5 
  4. /configure --prefix=/usr --bindir=/bin 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf sed-4.1.5 

49,安装ext文件系统管理工具(e2fsprogs)

 
 
  1. cd /sources 
  2. tar xvf e2fsprogs-1.40.2.tar.gz 
  3. cd e2fsprogs-1.40.2 
  4. sed -i -e 's@/bin/rm@/tools&@' lib/blkid/test_probe.in 
  5. mkdir build 
  6. cd build 
  7. ./configure --prefix=/usr --with-root-prefic="" \ 
  8. --enable-elf-shlibs --sysconfdir=/etc 
  9. make 
  10. make install 
  11. make install-libs 
  12. cd ../../ 
  13. rm -rf e2fsprogs-1.40.2 
  14. # 49步在make的时候可能会出现找不到makeinfo命令,  
  15. # 我的解决办法是从宿主机上找到makeinfo命令然后cp到/mnt/lfs/tools/bin/目录下然后再运行make 

50,安装常用命令集(coreutils) 

 
 
  1. cd /sources 
  2. tar xvf coreutils-6.9.tar.bz2 
  3. cd coreutils-6.9 
  4. /configure --prefix=/usr 
  5. make 
  6. make install 
  7. mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin 
  8. mv -v /usr/bin/{false,hostname,ln,ls,mkdir,mknod,mv,pwd,readlink,rm} /bin 
  9. mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin 
  10. mv -v /usr/bin/chroot /usr/sbin 
  11. mv -v /usr/bin/{head,sleep,nice} /bin 
  12. cd .. 
  13. rm -rf coreutils-6.9 

51,安装端口及协议文件(nana-etc)

 
 
  1. cd /sources 
  2. tar xvf iana-etc-2.20.tar.bz2 
  3. cd iana-etc-2.20 
  4. make 
  5. make install 
  6. cd .. 
  7. rm -rf iana-etc-2.20 

52,安装宏处理工具(m4)

 
 
  1. cd /sources 
  2. tar xvf m4-1.4.10.tar.bz2 
  3. cd m4-1.4.10 
  4. /configure --prefix=/usr 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf m4-1.4.10 

53,安装语法分析工具(bison)

 
 
  1. cd /sources 
  2. tar xvf bison-2.3.tar.bz2 
  3. cd bison-2.3 
  4. /configure --prefix=/usr 
  5. echo '#define YYENABLE_NLS 1' >> config.h 
  6. make 
  7. make install 
  8. cd .. 
  9. rm -rf bison-2.3 

54,安装交互式函数库(ncurses)

 
 
  1. cd /sources 
  2. tar xvf ncurses-5.6.tar.gz 
  3. cd ncurses-5.6 
  4. patch -Np1 -i /sources/ncurses-5.6-coverity_fixes-1.patch 
  5. /configure --prefix=/usr --with-shared --without-debug --enable-widec 
  6. make 
  7. make install 
  8. chmod -v 644 /usr/lib/libncurses++w.a 
  9. mv -v /usr/lib/libncursesw.so.5* /lib 
  10. ln -sfv ../../lib/libncursesw.so.5 /usr/lib/libncursesw.so 
  11. for lib in curses ncurses form panel menu ; do \ 
  12. rm -vf /usr/lib/lib${lib}.so ; \ 
  13. echo "INPUT(-l${lib}w)" >/usr/lib/lib${lib}.so ; \ 
  14. ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a ; \ 
  15. done 
  16. ln -sfv libncurses++w.a /usr/lib/libncurses++.a 
  17. rm -vf /usr/lib/libcursesw.so 
  18. echo "INPUT(-lncursesw)" >/usr/lib/libcursesw.so 
  19. ln -sfv libncurses.so /usr/lib/libcurses.so 
  20. ln -sfv libncursesw.a /usr/lib/libcursesw.a 
  21. ln -sfv libncurses.a /usr/lib/libcurses.a 
  22. cd .. 
  23. rm -rf ncurses-5.6 

55,安装进程管理工具(procps)

 
 
  1. cd /sources 
  2. tar xvf procps-3.2.7.tar.gz 
  3. cd procps-3.2.7 
  4. make 
  5. make install 
  6. cd .. 
  7. rm -rf procps-3.2.7 

56,安装通用支持库工具(libtools)

 
 
  1. cd /sources 
  2. tar xvf libtool-1.5.24.tar.gz 
  3. cd libtool-1.5.24 
  4. /configure --prefix=/usr 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf libtool-1.5.24 

57,安装脚本语言(perl) 

 
 
  1. cd /sources 
  2. tar xvf perl-5.8.8.tar.bz2 
  3. cd perl-5.8.8 
  4. echo "127.0.0.1 localhost $(hostname)" >/etc/hosts 
  5. /configure.gnu --prefix=/usr \ 
  6. -Dman1dir=/usr/share/man/man1 \ 
  7. -Dman3dir=/usr/share/man/man3 \ 
  8. -Dpager="/usr/bin/less -isR" 
  9. make 
  10. make install 
  11. cd .. 
  12. rm -rf perl-5.8.8 

58,安装行编辑支持工具(readline)

 
 
  1. cd /sources 
  2. tar xvf readline-5.2.tar.gz 
  3. cd readline-5.2 
  4. sed -i '/MV.*old/d' Makefile.in 
  5. sed -i '/{OLDSUFF}/c:' support/shlib-install 
  6. patch -Np1 -i /sources/readline-5.2-fixes-3.patch 
  7. /configure --prefix=/usr --libdir=/lib 
  8. make SHLIB_XLDFLAGS=-lncurses 
  9. make install 
  10. mv -v /lib/lib{readline,history}.a /usr/lib 
  11. rm -v /lib/lib{readline,history}.so 
  12. ln -sfv ../../lib/libreadline.so.5 /usr/lib/libreadline.so 
  13. ln -sfv ../../lib/libhistory.so.5 /usr/lib/libhistory.so 
  14. cd .. 
  15. rm -rf readline-5.2 

59,安装zip格式支持库(zlib)

 
 
  1. cd /sources 
  2. tar xvf zlib-1.2.3.tar.gz 
  3. cd zlib-1.2.3 
  4. /configure --prefix=/usr --shared --libdir=/lib 
  5. make 
  6. make install 
  7. rm -v /lib/libz.so 
  8. ln -sfv ../../lib/libz.so.1.2.3 /usr/lib/libz.so 
  9. make clean 
  10. /configure --prefix=/usr 
  11. make 
  12. make install 
  13. chmod 644 /usr/lib/libz.a 
  14. cd .. 
  15. rm -rf zlib-1.2.3 

60,安装自动化脚本生成工具(autoconf)

 
 
  1. cd /sources 
  2. tar xvf autoconf-2.61.tar.bz2 
  3. cd autoconf-2.61 
  4. /configure --prefix=/usr 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf autoconf-2.61 

61,安装自动编译脚本生成工具(automake)

 
 
  1. cd /sources 
  2. tar xvf automake-1.10.tar.bz2 
  3. cd automake-1.10 
  4. /configure --prefix=/usr 
  5. make 
  6. make install 
  7. cd .. 
  8. rm -rf automake-1.10 

62,安装命令解释器(bash)

 
 
  1. cd /sources 
  2. tar xvf bash-3.2.tar.gz 
  3. cd bash-3.2 
  4. sed -i "s|htmldir = @htmldir@|htmldir = /usr/share/doc/bash-3.2|" Makefile.in 
  5. patch -Np1 -i /sources/bash-3.2-fixes-5.patch 
  6. /configure --prefix=/usr --bindir=/bin --without-bash-malloc --with-installed-readline 
  7. make 
  8. make install 
  9. cd .. 
  10. rm -rf bash-3.2 

63,使用刚刚编译好的bash

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

64,安装压缩工具(bzip2)

 
 
  1. cd /sources 
  2. tar xvf bzip2-1.0.4.tar.gz 
  3. cd bzip2-1.0.4 
  4. patch -Np1 -i /sources/bzip2-1.0.4-install_docs-1.patch 
  5. make -f Makefile-libbz2_so 
  6. make clean 
  7. make 
  8. make PREFIX=/usr install 
  9. cp -v bzip2-shared /bin/bzip2 
  10. cp -av libbz2.so* /lib 
  11. ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so 
  12. rm -v /usr/bin/{bunzip2,bzcat,bzip2} 
  13. ln -sv bzip2 /bin/bunzip2 
  14. ln -sv bzip2 /bin/bzcat 
  15. cd .. 
  16. rm -rf bzip2-1.0.4 

65,安装文件比较工具(diffutils)

 
 
  1. cd /sources 
  2. tar xvf diffutils-2.8.1.tar.gz 
  3. cd diffutils-2.8.1 
  4. patch -Np1 -i /sources/diffutils-2.8.1-i18n-1.patch  
  5. touch man/diff.1 
  6. /configure --prefix=/usr 
  7. make 
  8. make install 
  9. cd .. 
  10. rm -rf diffutils-2.8.1 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值