手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

Bash 实例:探讨 ebuild 系统

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
# /etc/ebuild.conf: set system-wide ebuild options in this file # MAKEOPTS are options passed to make MAKEOPTS="-j2"

在该例中,只包括了一个配置选项,但是,您能够包括更多。bash 的一个妙处是:通过执行该文档,就能够对他进行语法分析。在大多数解释型语言中,都能够使用这个设计窍门。执行 /etc/ebuild.conf 之后,在 ebuild 脚本中定义 "$MAKEOPTS"。将利用他允许用户向 make 传递选项。通常,将使用该选项来允许用户告诉 ebuild 执行并行 make。

这里是 ebuild 程式的最终版本:

ebuild,最终版本

#!/usr/bin/env bash



if [ $# -ne 2 ]

then 

    echo "Please specify ebuild file and unpack, compile or all"

    exit 1

fi



source /etc/ebuild.conf



if [ -z "$DISTDIR" ]

then 

    # set DISTDIR to /usr/src/distfiles if not already set

    DISTDIR=/usr/src/distfiles

fi

export DISTDIR



ebuild_unpack() {

    #make sure we're in the right directory 

    cd $

    

    if [ -d $ ]

    then    

        rm -rf $

    fi



    mkdir $

    cd $

    if [ ! -e $/$ ]

    then

        echo "$/$ does not exist.  Please download first."

        exit 1

    fi

    tar xzf $/$

    echo "Unpacked $/$."

    #source is now correctly unpacked

}



user_compile() {

    #we're already in $

    if [ -e configure ]

    then

        #run configure script if it exists

        ./configure --prefix=/usr

    fi

        #run make

        make $MAKEOPTS MAKE="make $MAKEOPTS"  

} 



ebuild_compile() {

    if [ ! -d "$" ]

    then

        echo "$ does not exist -- please unpack first."

        exit 1

    fi

        #make sure we're in the right directory  

    cd $

    user_compile

}



export ORIGDIR=`pwd`

export WORKDIR=$/work



if [ -e "" ]

then 

    source 

else

    echo "Ebuild file  not found."

    exit 1

fi



export SRCDIR=$/$



case "" in

    unpack)

        ebuild_unpack

        ;;

    compile)

        ebuild_compile

        ;;

    all)

        ebuild_unpack

        ebuild_compile

        ;;

    *)

        echo "Please specify unpack, compile or all as the second arg"

        exit 1

        ;;

esac

请注意,在文档的开始部分执行 /etc/ebuild.conf。另外,还要注意,在缺省 user_compile() 函数中使用 "$MAKEOPTS"。您可能在想,这管用吗 - 毕竟,在执行实际上事先定义 "$MAKEOPTS" 的 /etc/ebuild.conf 之前,我们引用了 "$MAKEOPTS"。对我们来说幸运的是,这没有问题,因为变量扩展只在执行 user_compile() 时才发生。在执行 user_compile() 时,已执行了 /etc/ebuild.conf,并且 "$MAKEOPTS" 也被配置成正确的值。

八。结束语


本文已讲述了很多 bash 编程技术,但是,只触及到 bash 能力的一些皮毛。例如,Gentoo Linux ebuild 产品不但自动解包和编译每个包,还能够:

  • 假如在 "$DISTDIR" 没找到源代码,则自动下载
  • 通过使用 MD5 消息摘要,验证源代码没有受到破坏
  • 假如请求,则将编译过的应用程式安装到正在使用的文档系统,并记录任何安装的文档,以便日后能够方便地将包卸载。
  • 假如请求,则将编译过的应用程式打包成 tar 压缩包(以您希望的形式压缩),以便以后能够在另一台电脑上,或在基于 CD 的安装过程中(假如在构建发行版 CD)安装。


另外,ebuild 系统产品更有几个全局配置选项,允许用户指定选项,例如在编译过程中使用什么优化标志,在那些支持他的包中是否应该缺省启用可选的包支持(例如 GNOME 和 slang)。

显然,bash 能够实现的功能远比本系列文章中所触及的要多。关于这个不可思议的工具,希望您已学到了很多,并鼓舞您使用 bash 来加快和增强研发项目。

参考资料

  • 从 ftp://ftp.gnu.org/pub/gnu/sed 下载源代码 tar 压缩包 (sed-3.02.tar.gz)。
  • developerWorks 上阅读 “Bash 实例:第 1 部分”。
  • developerWorks 上阅读 “Bash 实例:第 2 部分”。
  • 造访 Gentoo Project 主页。
  • 造访 GNU 的 bash 主页。
  • 查看 bash online reference manual。

关于作者
Daniel Robbins 居住在美国新墨西哥州 Albuquerque。他是 Gentoo 项目 的总设计师,Gentoo Technologies, Inc. 的 CEO,Linux Advanced Multimedia Project (LAMP) 的顾问,Macmillan 书籍 Caldera OpenLinux Unleashed

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!