当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: Daniel Robbins总裁兼 CEO,Gentoo Technologies, Inc. Daniel Robbins 在其最后一篇 Bash 实例文章中详细讲述了 Gentoo Linux ebuild 系统,这个展示 bash 能力的极佳范例。
 

 

    摘要:一个知名出版商的挫折 ——解读 wrox 的历史、现在与未来 http://www.tupwk.com.cn/wrox1.asp 在法国,人们常说“告诉我你读什么书,我就能猜出你是哪种人。”在英国、美国、加拿大,乃至中国和印度,只要您捧着 wrox的红皮书,别人一定认为您是一个水平不错的计算机程序开发人员。wrox的图书之所以有这样的影响,主要源于其一贯坚持的“由程序员为程序员而著......
    摘要:by silent   若加州州长阿诺史瓦辛格听从专家的建议,可能终结加州政府对专有软件和传统电话系统的依赖。   一群由独立稽核员和专家组成的团体上周建议,加州政府应考虑采用开放源代码软件和网络电话(voice over internet protocol;voip )技术,以双管齐下的方式削减支出。这套建议方案被纳入8月2 日发布的加州绩效检讨报告中。   “若这些建议事项全部付诸实行,有潜力在未来五年之中节省超过320 亿美元,......


Bash 实例,第 3 部分:探讨 ebuild 系统

daniel robbins

总裁兼 ceo,gentoo technologies, inc. 【相关文章:ASP.NET 中使用 客户端脚本

【扩展阅读:编写自己的登录与访问控制模块

【扩展信息:利用 JSP的思想来做ASP

daniel robbins 在其最后一篇 bash 实例文章中详细讲述了 gentoo linux ebuild 系统,这个展示 bash 能力的极佳范例。循序渐进地,他为您展示如何实现 ebuild 系统,并触及很多方便的 bash 技术与设计策略。在本文末尾,您将很好地掌握制造完全基于 bash 的应用所涉及的技术,并开始为自己的自动构建系统编码。

进入 ebuild 系统

我真是一直期待着这第三篇、也是最后一篇 bash 实例文章,因为既然已经在 第 1 篇与 第 2 篇中讲述了 bash 编程基础,就可以集中讲述象 bash 应用开发与程序设计这样更高级的主题。在本文中,将通过我花了许多时间来编码与细化的项目,gentoo linux ebuild 系统,来给您大量实际的、现实世界的 bash 开发经验。

我是 gentoo linux(目前还是 beta 版的下一代 linux os)的首席设计师。我的主要责任之一就是确保所有二进制包(类似于 rpm)都正确创建并一起使用。正如您可能知道的,标准 linux 系统不是由一棵统一的源树组成(象 bsd),而实际上是由超过 25 个协同工作的核心包组成。这其中包括:

包 描述 linux 实际内核 util-linux 与 linux 相关的杂项程序集合 e2fsprogs 与 ext2 文件系统相关的实用程序集合 glibc gnu c 库

每个包都位于各自的 tar 压缩包中,并由不同的独立开发人员或开发小组维护。要创建一个发行版,必须对每个包分别进行下载、编译与打包处理。每次要修复、升级或改进包时,都必须重复编译与打包步骤(并且,包确实更新得很快)。为了帮助消除创建与更新包所涉及的重复步骤,我创建了 ebuild 系统,该系统几乎全用 bash 编写。为了增加您的 bash 知识,我将循序渐进地为您演示如何实现该 ebuild 系统的解包与编译部分。在解释每一步时,还将讨论为什么要作出某些设计决定。在本文末尾,您不仅将极好地掌握大型 bash 编程项目,还实现了完整自动构建系统的很大一部分。

为什么选择 bash?

bash 是 gentoo linux ebuild 系统的基本组件。选择它做为 ebuild 的主要语言有几个原因。首先,其语法不复杂,并且为人们所熟悉,这特别适合于调用外部程序。自动构建系统是自动调用外部程序的“胶合代码”,而 bash 非常适合于这种类型的应用。第二,bash 对函数的支持允许 ebuild 系统使用模块化、易于理解的代码。第三,ebuild 系统利用了 bash 对环境变量的支持,允许包维护人员与开发人员在运行时对其进行方便的在线配置。

构建过程回顾

在讨论 ebuild 系统之前,让我们回顾一下编译与安装包都牵涉些什么。例如,让我们看一下 "sed" 包,这个作为所有 linux 版本一部分的标准 gnu 文本流编辑实用程序。首先,下载源代码 tar 压缩包 (sed-3.02.tar.gz)(请参阅参考资料)。我们将把这个档案存储在 /usr/src/distfiles 中,将使用环境变量 "$distdir" 来引用该目录。"$distdir" 是所有原始源代码 tar 压缩包所在的目录,它是一个大型源代码库。

下一步是创建名为 "work" 的临时目录,该目录存放已经解压的源代码。以后将使用 "$workdir" 环境变量引用该目录。要做到这点,进入有写权限的目录,然后输入:

将 sed 解压缩到临时目录

$ mkdir work $ cd work $ tar xzf /usr/src/distfiles/sed-3.02.tar.gz

然后,解压缩 tar 压缩包,创建一个包含所有源代码、名为 sed-3.02 的目录。以后将使用环境变量 "$srcdir" 引用 sed-3.02 目录。要编译程序,输入:

将 sed 解压缩到临时目录

$ cd sed-3.02 $ ./configure --prefix=/usr (autoconf 生成适当的 make 文件,这要花一些时间) $ make (从源代码编译包,也要花一点时间)

因为在本文中只讲述解包与编译步骤,所以将略过 "make install" 步骤。
...   下一页

    摘要:在blog上看到一篇文章《fxcop 的 constructorsshouldnotcallbaseclassvirtualmethods 规范 》原文:http://blog.csdn.net/xamcsdn2/archive/2004/08/11/71766.aspx 颇感兴趣,写了一段代码研究(估计还称不上研究,就当探索吧)了一下。 代码如下。 using system;namespace test_console{??? class base......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE