linux系統定製-LFS-( 一 )

此博客PDF格式文檔下載地址 http://down.51cto.com/data/596015

概述

         LFS ( Linux From Scratch  http://www.linuxfromscratch.org )此篇博客是一個LFS的製做手冊, 內容涵蓋使用宿主系統或liveCD來製做LFS的詳細過程.從開始到結束手把手教你製做屬於你本身的linux系統.也能幫助你更清楚的知道linux系統是如何組成的, 這裏就簡單的說下LFS ,什麼linux開機流程,linux系統原理等等網上都有說明,這裏就不說了,至於linux系統的組成,將文檔從頭作到尾你就知道linux系統是怎麼組成的啦,嘿嘿!html

        這是一個比較漫長的旅途,須要作的是細心,耐心,再細心, 這裏提醒下使用VMware虛擬機制做的朋友,快照纔是王道,在此旅途中肯定在此以前的操做是無誤並製做正確的, 能夠作下快照備份下當前虛擬機狀態,以避免後面不當心的操做而致使不可恢復性的錯誤,因此請務必階段性的作快照。固然若是使用物理機制做的朋友就是細心,當心啦........linux

       製做的過程須要編譯大量的源碼,而編譯源代碼須要佔用大量的CPU時鐘週期,建議你們使用配置相對比較好的計算機,若是有PC Server的話建議在PC Server上面製做.個人環境是在一臺8CPU,4G內存的PC Server上裝了一個虛擬機,(虛擬機分配的資源是8CPU,2G內存),在這樣的配置下我編譯一個GCCglibc花了1個小時,因此建議你們有好的資源不要浪費啊.嘿嘿c++

好了,閒話很少說, Are you ready數據庫

準備工做  

       若是使用liveCD做爲宿主系統的朋友須要去LFS官方下載liveCD鏡像包,裏面包含製做過程當中所需的軟件包,,固然若是使用原有的操做系統來做爲宿主系統的朋友也須要去LFS官方下載liveCD鏡像,爲何呢?由於liveCD裏面包含有製做過程當中所須要的軟件包,這樣咱們就不用一個一個去互聯網上下載了,呵呵, bootstrap

       這裏介紹下個人環境,在一臺8CPU 4G內存的PCserver上裝了一個VMware虛擬機工具,而後在虛擬機上裝了個rhel5.4 32位系統(8CPU/2G內存),我是經過現有的系統來製做的,那有些朋友說了,使用liveCD跟現有的宿主系統製做的步驟都是一眼的嗎沒錯,步驟是同樣的, 不管使用liveCD或者現有的宿主系統在製做過程上沒有什麼差異,bash

liveCD的下載地址  less

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

1,添加硬盤函數

       關閉虛擬機添加一塊10G大小的IDE接口的虛擬硬盤,並將虛擬硬盤存爲一個文件,步驟見下圖.工具

建立一塊新硬盤

選擇虛擬硬盤的類型爲IDE

設置虛擬硬盤的大小並設置將虛擬硬盤存儲爲1個文件

選擇虛擬硬盤的存儲位置,根據本身須要定義

磁盤添加完成後啓動計算機待開機完成後安裝基本開發庫及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 

因爲博客限制一篇博客不能超過8W字符,餘下內容見下面的連接

 http://ant595.blog.51cto.com/5074217/1054407

相關文章
相關標籤/搜索