博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bash 实例:探讨 ebuild 系统(转)
阅读量:2499 次
发布时间:2019-05-11

本文共 2030 字,大约阅读时间需要 6 分钟。

Bash 实例:探讨 ebuild 系统(转)[@more@]进入 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" 步骤。如果要编写 bash 脚本来执行所有这些步骤,则代码可能类似于:
要执行解包/编译过程的样本 bash 脚本
#!/usr/bin/env bashif [ -d work ]then # remove old work directory if it exists rm -rf workfimkdir workcd worktar xzf /usr/src/distfiles/sed-3.02.tar.gzcd sed-3.02./configure --prefix=/usrmake

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10617731/viewspace-962886/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10617731/viewspace-962886/

你可能感兴趣的文章
逆向工程搭建的一般步骤
查看>>
个人隐私保护3:什么是“TrueCrypt”
查看>>
iOS 保存图片(视频)到相册
查看>>
项目体会
查看>>
白夜行
查看>>
MangoDB
查看>>
Jquery_基础(三) ajax与json
查看>>
2015.11.1 XJOJ(NOIP模拟赛)总结
查看>>
5,17练习题二
查看>>
6.1数据库MySQL基础
查看>>
zookeeper 分布式应用好处
查看>>
WITH AS and materialize hints
查看>>
Java内部类基本使用
查看>>
poj-3281(拆点+最大流)
查看>>
强化学习(二):马尔可夫决策过程
查看>>
unity3d中协程的用法
查看>>
Echoprint系列--编译
查看>>
【iOS开发-51】案例学习:动画新写法、删除子视图、视图顺序、延迟方法、button多功能使用方法及icon图标和启动页设置...
查看>>
负载均衡基础理论
查看>>
先随便写
查看>>