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

Bash 实例:探讨 ebuild 系统

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

另外,还在 ebuild_compile() 函数的开始处添加了一个有用的检查。现在,他检查以确保 "$SRCDIR" 存在,假如不存在,则打印一条告诉用户首先解包档案然后退出的错误消息。假如愿意,能够改变这种行为,以便在 "$SRCDIR" 不存在的情况下,ebuild 脚本将自动解包源代码档案。能够用以下代码替换 ebuild_compile() 来做到这点:

ebuild_compile() 上的新代码

ebuild_compile() {

    #make sure we're in the right directory  

    if [ ! -d "$" ]

    then

        ebuild_unpack

        fi

    cd $

    ./configure --prefix=/usr

    make     

}

ebuild 脚本第二版中最明显的改变之一就是代码末尾新的 case 语句。这条 case 语句只是检查第二个命令行自变量,然后根据其值执行正确操作。假如现在输入:

$ ebuild sed-3.02.ebuild

就会得到一条错误消息。现在需要告诉 ebuild 做什么,如下所示:

$ ebuild sed-3.02.ebuild unpack

$ ebuild sed-3.02.ebuild compile

$ ebuild sed-3.02.ebuild all

假如提供上面所列之外的第二个命令行自变量,将得到一条错误消息(* 子句),然后,程式退出。

六。使代码模块化


既然代码很高级并且实用,您可能很想创建几个更高级的 ebuild 脚本,以解包和编译所喜爱的程式。假如这样做,迟早会碰到一些不使用 autoconf ("./configure") 的源代码,或可能碰到其他使用非标准编译过程的脚本。需要再对 ebuild 系统做一些改变,以适应这些程式。但是在做之前,最好先想一下如何完成。

将 "./configure --prefix=/usr; make" 硬编码到编译阶段的妙处之一是:大多数时候,他能够正确工作。但是,还必须使 ebuild 系统适应那些不使用 autoconf 或正常 make 文档的源代码。要解决这个问题,建议 ebuild 脚本缺省执行以下操作:

  1. 假如在 "$" 中有一个配置脚本,则按如下执行他:
    ./configure --prefix=/usr
    否则,跳过这步。

  2. 执行以下命令:
    make

既然 ebuild 只在 configure 实际存在时才运行他,现在能够自动地适应那些不使用 autoconf 但有标准 make 文档的程式。但是,在简单的 "make" 对某些源代码无效时该怎么办?需要一些处理这些情况的特定代码来覆盖合理的缺省值。要做到这一点,将把 ebuild_compile() 函数转换成两个函数。第一个函数(可将其当成“父”函数)的名称仍是 ebuild_compile()。但是,将有一个名为 user_compile() 的新函数,该函数只包含合理的缺省操作:

拆成两个函数的 ebuild_compile()

user_compile() {

    #we're already in $

    if [ -e configure ]

    then

        #run configure script if it exists

        ./configure --prefix=/usr

    fi

    #run make

    make

}          



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

}

现在这样做的原因可能还不是很明显,但是,再忍耐一下。虽然这段代码和 ebuild 前一版的工作方式几乎相同,但是现在能够做一些以前无法做的 -- 能够在 sed-3.02.ebuild 中覆盖 user_compile()。因此,假如缺省的 user_compile() 不满足需要,能够在 .ebuild 文档中定义一个新的,使其包含编译包所必需的命令。例如,这里有一个 e2fsprogs-1.18 的 ebuild 文档,他需要一个略有不同的 "./configure" 行:

e2fsprogs-1.18.ebuild

#this ebuild file overrides the default user_compile()

P=e2fsprogs-1.18

A=$.tar.gz

 

user_compile() {

       ./configure --enable-elf-shlibs

       make

}

现在,将完全按照我们希望的方式编译 e2fsprogs。但是,对于大多数包来说,能够省略 .ebuild 文档中的任何定制 user_compile() 函数,而使用缺省的 user_compile() 函数。

ebuild 脚本又怎样知道要使用哪个 user_compile() 函数呢?实际上,这很简单。ebuild 脚本中,在执行 e2fsprogs-1.18.ebuild 文档之前定义缺省 user_compile() 函数。假如在 e2fsprogs-1.18.ebuild 中有一个 user_compile(),则他覆盖前面定义的缺省版本。假如没有,则使用缺省 user_compile() 函数。

这是好工具,我们已添加了很多灵活性,而无需任何复杂代码(假如无需的话)。在这里就不讲了,但是,还应该对 ebuild_unpack() 做类似修改,以便用户能够覆盖缺省解包过程。假如要做任何修补,或文档包含在多个档案中,则这很方便。更有个好主意是修改解包代码,以便他能够缺省识别由 bzip2 压缩的 tar 压缩包。

配置文档
现在为止,已讲了很多不方便的 bash 技术,现在再讲一个。通常,假如程式在 /etc 中有一个配置文档是很方便的。幸运的是,用 bash 做到这点很容易。只需创建以下文档,然后并其存为 /etc/ebuild.conf 即可:

/ect/ebuild.conf


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