LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1401|回复: 2

lfs6.0第5,6章辅助编译脚本

[复制链接]
发表于 2005-5-14 23:18:39 | 显示全部楼层 |阅读模式

*** 2005-05-15 附件已更改!

本脚本的目地是为了帮助对于已经熟悉LFS的编译过程的人,在要编译多个LFS的过程中,能够减少劳动量!因为本脚本是辅助性质的,对于想要全自动编译的人,本脚本并不适合你。nAlfs可能更适合些。

注意:
1. 本脚本只是个辅助工具,应该以LFS书为主,脚本为辅。
2. 你需要至少手动编译过一遍LFS,并且掌握了shell编程知识,以便能够读懂本脚本。

在读懂脚本的基础上,需要适当的作一些修改。
在第6章中有关测试的部分,因为在我的机子上都可以通过,所以为了省时间,我把测试都略过了。如果你需要,可以自行增加。

申明:对于使用本脚本不当,给你的系统带来的任何破坏,后果自负。

为了帮助更好的使用,做一些提示:
要编译第5章,只需把chap变量值赋为5,即:chap=5以及换一下数组,即STEP=${lfs6_5}即可。
编译第6章,同理该一下数字即可。

因为本脚本是LFS书的辅助工具,编译过程是按照LFS书中的步骤来的。所以我说要以LFS书为主嘛。你可以从头到尾编译整个一章,也可以只编译书中的一个或几个小节。当然顺序不能变,这是书中规定的。主要的控制都交给两个变量,start和end。

拿第5章为说明:
如果你要完全编译只需令:start=0 end=32
如果你只想编译书中的第一节,只需:start=0 end=1

所以你在编译过程中因为种种原因中断的话,是可以续接的。

本脚本提供完善的log功能,你可以查看确定是否正确编译。

以下是主脚本build.sh的代码

  1. #!/bin/sh
  2. #
  3. # By Harold Lee
  4. #
  5. # Aided build script for Chapter 5,6 in LFS 6.0 BOOK
  6. #
  7. chap=5
  8. offset=(4 9)    #for chapter 5 offset is 4 and chapter 6 is 9

  9. source chap$((chap))

  10. if ((chap == 6));then
  11.     LFS=''
  12. else
  13.     LFS=/mnt/lfs
  14. fi
  15. SOURCE=$LFS/sources/lfs-6.0
  16. LOG=$SOURCE/log

  17. # There are 32 stages in Chapter 5 and 50 stages in chapter 6
  18. STAGES5=32
  19. STAGES6=50

  20. lfs6_5=(BINUTILSPASS1 GCCPASS1 LINUX_LIBC LINUX_2 GLIBC TOOLCHAIN TCL EXPECT
  21.         DEJAGNU GCCPASS2 BINUTILSPASS2 GAWK COREUTILS BZIP2 GZIP DIFFUTILS
  22.         FINDUTILS MAKE GREP SED GETTEXT NCURSES PATCH TAR TEXINFO BASH M4 BISON
  23.         FLEX UTIL_LINUX PERL UDEV)

  24. lfs6_6=(LINUX_LIBC MAN_PAGES GLIBC RETOOLCHAIN BINUTILS GCC COREUTILS
  25.         ZLIB MKTEMP IANA_ETC FINDUTILS GAWK NCURSES READLINE VIM M4 BISON
  26.         LESS GROFF SED FLEX GETTEXT INETUTILS IPROUTE2 PERL TEXINFO AUTOCONF
  27.         AUTOMAKE BASH FILE LIBTOOL BZIP2 DIFFUTILS KBD E2FSPROGS GREP GRUB
  28.         GZIP MAN MAKE MODULE_INIT_TOOLS PATCH PROCPS PSMISC SHADOW SYSKLOGD
  29.         SYSVINIT TAR UDEV UTIL_LINUX)


  30. start=0
  31. end=32

  32. # main loop
  33. for ((s=start;s<end;s++));do
  34.     STEP=${lfs6_5[s]}

  35.     if [[ ${STEP:((-5)):5} == PASS1 ]];then
  36.         POSTFIX=Pass1
  37.     elif [[ ${STEP:((-5)):5} == PASS2 ]];then
  38.         POSTFIX=Pass2
  39.     else
  40.         POSTFIX=""
  41.     fi

  42.     # now cast the upper case into lower case and merge the real filename
  43.     step=$(echo $STEP|tr [A-Z] [a-z]|sed -e 's/_/-/'g -e 's/pass.*//')
  44.         
  45.     if [ $STEP == TOOLCHAIN ];then
  46.         buildname="Adjusting the Toolchain"
  47.     elif [ $STEP == RETOOLCHAIN ];then
  48.         buildname="Re-adjusting the Toolchain"
  49.     elif [ $step == gcc ];then
  50.         buildname="GCC-3.4.1"
  51.     else
  52.         buildname=$(echo $step*.bz2|sed 's/\(.*\).tar.*/\1/')
  53.     fi
  54.    
  55.     # log the procedure
  56.     echo $(date +%c) "Build Start: $chap.$((s+${offset[chap - 5]})) $buildname $POSTFIX" >> $LOG

  57.     if [[ $STEP != TOOLCHAIN && $STEP != RETOOLCHAIN ]];then
  58.         for k in ${step}*;do
  59.             if [ -d $k ];then
  60.                 if rm -fr $k;then
  61.                     echo $(date +%c) "Delete the $k directory." >> $LOG
  62.                 else
  63.                     echo $(date +%c) "Build Interrupt: Delete error." >> $LOG
  64.                     echo >> $LOG
  65.                     exit
  66.                 fi
  67.             fi
  68.         done

  69.         # now we can unpack the tarball safely
  70.         for tarball in $(echo ${step}*.bz2);do

  71.             if tar xvfj $tarball;then
  72.                 echo $(date +%c) "Unpack the $tarball." >> $LOG
  73.             else
  74.                 echo $(date +%c) "Build Interrupt: Unpack error." >> $LOG
  75.                 echo >> $LOG
  76.                 exit
  77.             fi
  78.         done
  79.         
  80.         # cd the directory
  81.         for j in ${step}*;do
  82.             if [ -d $j ];then
  83.                 if cd $j;then
  84.                     echo $(date +%c) "Cd the $j directory." >> $LOG
  85.                     break
  86.                 else
  87.                     echo $(date +%c) "Build Interrupt: Change Directory error" >> $LOG
  88.                     echo >> $LOG
  89.                     exit
  90.                 fi
  91.             fi
  92.         done
  93.     fi      
  94.                
  95.     # build     
  96.     # before build disable filename expansion
  97.     set -f      
  98.     echo $(date +%c) "Build command: ${!STEP}" >> $LOG

  99.     if ! eval ${!STEP};then
  100.         echo $(date +%c) "Build Interrupt: build error" >> $LOG
  101.         echo >> $LOG
  102.         exit
  103.     fi

  104.     # after enable filename expansion
  105.     set +f

  106.     echo $(date +%c) "Build Completed!" >> $LOG
  107.     echo >> $LOG
  108. done
复制代码


还有两个编译命令脚本chap5和chap6,在附件中

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2005-5-15 10:33:10 | 显示全部楼层
这么好的东西应该是精华,谢谢兄弟!
回复 支持 反对

使用道具 举报

发表于 2005-9-4 19:52:20 | 显示全部楼层
好东西,好东西,呵呵,谢拉。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表