`

第二十章 开放源码的软件安装与升级简介

 
阅读更多
如果鸟哥想要在我的 Linux 服务器上面跑网页服务器 (WWW server) 这项服务,那么我应该要做些什么事呢?当然就一定需要『安装网页服务器的软件』罗!如果鸟哥的服务器上面没有这个软件的话,那当然也就无法激活 WWW 的服务啦!所以啦,想要在你的 Linux 上面进行一些有的没的功能,学会『如何安装软件』是很重要的一个课题!

咦!安装软件有什么难的?在 W 牌的操作系统上面安装软件时,不是只要一直给他按 『下一步』就可以安装妥当了吗?话是这样说没错啦,不过,也由於如此,所以在 Windows 系统上面的软件都是一模一样的,也就是说,你『无法修改该软件的原始程序码』,因此, 万一你想要添加或者减少该软件的某些功能时,大概只能求助於当初发行该软件的厂商了!(这就是所谓的商机吗?)

或许你会说:『唉呦!我不过是一般人,不会用到多余的功能,所以不太可能会更动到程序码的部分吧?』 如果你这么想的话,很抱歉~是有问题的!怎么说呢?像目前网络上面的病毒、黑客软件、臭虫程序等等, 都可能对你的主机上面的某些软件造成影响,导致主机的死机或者是其他数据损毁等等的伤害。 如果你可以藉由安全资讯单位所提供的修订方式进行修改, 那么你将可以很快速的自行修补好该软件的漏洞,而不必一定要等到软件开发商提供修补的程序包哩!要知道,提早补洞是很重要的一件事。

这样说可以了解 Linux 的优点了吗?没错!因为 Linux 上面的软件几乎都是经过 GPL 的授权,所以每个软件几乎均提供原始程序码, 并且你可以自行修改该程序码,以符合你个人的需求呢!很棒吧!这就是开放源码的优点罗!不过,到底什么是开放源码? 这些程序码是什么咚咚?又 Linux 上面可以运行的相关软件文件与开放源码之间是如何转换的?不同版本的 Linux 之间能不能使用同一个运行档?或者是该运行档需要由原始程序码的部分重新进行转换? 这些都是需要厘清观念的。底下我们先就原始程序码与可运行档来进行说明。

什么是开放源码、编译器与可运行档

在讨论程序码是什么之前,我们先来谈论一下什么是可运行档?我们说过,在 Linux 系统上面,一个文件能不能被运行看的是有没有可运行的那个权限 (具有 x permission),不过,Linux 系统上真正认识的可运行档其实是二进位文件 ( binary program),例如 /usr/bin/passwd, /bin/touch 这些个文件即为二进位程序码。

或许你会说 shell scripts 不是也可以运行吗?其实 shell scripts 只是利用 shell (例如 bash) 这支程序的功能进行一些判断式,而最终运行的除了 bash 提供的功能外,仍是呼叫一些已经编译好的二进位程序来运行的呢! 当然啦, bash 本身也是一支二进位程序啊!那么我怎么知道一个文件是否为 binary 呢?还记得我们在第七章里面提到的 file 这个命令的功能吗?对啦!用他就是了!我们现在来测试一下:

# 先以系统的文件测试看看:
[root@www ~]# file /bin/bash
/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/
Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

# 如果是系统提供的 /etc/init.d/syslog 呢?
[root@www ~]# file /etc/init.d/syslog
/etc/init.d/syslog: Bourne-Again shell script text executable


看到了吧!如果是 binary 而且是可以运行的时候,他就会显示运行档类别 (ELF 32-bit LSB executable), 同时会说明是否使用动态函式库 (shared libs),而如果是一般的 script ,那他就会显示出 text executables 之类的字样!

既然 Linux 操作系统真正认识的其实是 binary program,那么我们是如何做出这样的一支 binary 的程序呢?首先,我们必须要写程序,用什么东西写程序?就是一般的文书处理器啊!鸟哥都喜欢使用 vim 来进行程序的撰写,写完的程序就是所谓的原始程序码罗! 这个程序码文件其实就是一般的纯文字档。 在完成这个原始码文件的编写之后,再来就是要将这个文件『编译』成为操作系统看的懂得 binary program 罗!而要编译自然就需要『编译器』来动作, 经过编译器的编译与连结之后,就会产生一支可以运行的 binary program 罗。

举个例子来说,在 Linux 上面最标准的程序语言为 C ,所以我使用 C 的语法进行原始程序码的书写,写完之后,以 Linux 上标准的 C 语言编译器 gcc 这支程序来编译,就可以制作一支可以运行的 binary program 罗。整个的流程有点像这样:

tu

事实上,在编译的过程当中还会产生所谓的目标档 (Object file),这些文件是以 *.o 的扩展名样式存在的!至於 C 语言的原始码文件通常以 *.c 作为扩展名。此外,有的时候,我们会在程序当中『引用、呼叫』 其他的外部副程序,或者是利用其他软件提供的『函数功能』,这个时候,我们就必须要在编译的过程当中, 将该函式库给他加进去,如此一来,编译器就可以将所有的程序码与函式库作一个连结 (Link) 以产生正确的运行档罗。

总之,我们可以这么说:

开放源码:就是程序码,写给人类看的程序语言,但机器并不认识,所以无法运行;
编译器:将程序码转译成为机器看的懂得语言,就类似翻译者的角色;
可运行档:经过编译器变成二进位程序后,机器看的懂所以可以运行的文件。

什么是函式库

在前一小节的图1.1.1示意图中,在编译的过程里面有提到函式库这东西。 什么是函式库呢?先举个例子来说:我们的 Linux 系统上通常已经提供一个可以进行身份验证的模块, 就是在第十四章提到的 PAM 模块。这个 PAM 提供的功能可以让很多的程序在被运行的时候,除了可以验证使用者登陆的资讯外, 还可以将身份确认的数据记录在登录文件里面,以方便系统管理员的追踪!

既然有这么好用的功能,那如果我要编写具有身份认证功能的程序时,直接引用该 PAM 的功能就好啦,如此一来,我就不需要重新设计认证机制罗!也就是说,只要在我写的程序码里面,配置去呼叫 PAM 的函式功能,我的程序就可以利用 Linux 原本就有的身份认证的程序咯!除此之外,其实我们的 Linux 核心也提供了相当多的函式库来给硬件开发者利用喔。

函式库又分为动态与静态函式库,这两个咚咚的分别我们在后面的小节再加以说明。 这里我们以一个简单的流程图,来示意一支有呼叫外部函式库的程序的运行情况。

tu

很简单的示意图啊!^_^!而如果要在程序里面加入引用的函式库,就需要如图 1.1.1 所示, 亦即在编译的过程当中,就需要加入函式库的相关配置罗。 事实上, Linux 的核心提供很多的核心相关函式库与外部参数, 这些核心功能在设计硬件的驱动程序的时候是相当有用的资讯,这些核心相关资讯大多放置在 /usr/include, /lib, /usr/lib 里面哩!我们在本章的后续小节再来探讨。反正我们可以简单的这么想:

函式库:就类似副程序的角色,可以被呼叫来运行的一段功能函数。

什么是 make 与 configure

事实上,使用类似 gcc 的编译器来进行编译的过程并不简单,因为一套软件并不会仅有一支程序, 而是有一堆程序码文件。所以除了每个主程序与副程序均需要写上一笔编译过程的命令外,还需要写上最终的连结程序。 程序码小的时候还好,如果是类似 WWW 服务器软件 (例如 Apache) ,或者是类似核心的原始码,动则数百 MBytes 的数据量,编译命令会写到疯掉~这个时候,我们就可以使用 make 这个命令的相关功能来进行编译过程的命令简化了!

当运行 make 时,make 会在当时的目录下搜寻 Makefile (or makefile) 这个文字档,而 Makefile 里面则记录了原始码如何编译的详细资讯! make 会自动的判别原始码是否经过变动了,而自动升级运行档,是软件工程师相当好用的一个辅助工具呢!

咦!make 是一支程序,会去找 Makefile ,那 Makefile 怎么写? 通常软件开发商都会写一支侦测程序来侦测使用者的作业环境, 以及该作业环境是否有软件开发商所需要的其他功能,该侦测程序侦测完毕后,就会主动的创建这个 Makefile 的守则文件啦!通常这支侦测程序的档名为 configure 或者是 config 。

咦!那为什么要侦测作业环境呢?在第一章当中, 不是曾经提过其实每个 Linux distribution 都使用同样的核心吗?但你得要注意, 不同版本的核心所使用的系统呼叫可能不相同,而且每个软件所需要的相依的函式库也不相同, 同时,软件开发商不会仅针对 Linux 开发,而是会针对整个 Unix-Like 做开发啊! 所以他也必须要侦测该操作系统平台有没有提供合适的编译器才行!所以当然要侦测环境啊! 一般来说,侦测程序会侦测的数据大约有底下这些:

是否有适合的编译器可以编译本软件的程序码;
是否已经存在本软件所需要的函式库,或其他需要的相依软件;
操作系统平台是否适合本软件,包括 Linux 的核心版本;
核心的表头定义档 (header include) 是否存在 (驱动程序必须要的侦测)。

至於 make 与 configure 运行流程的相关性,我们可以使用底下的图示来示意一下啊! 下图中,你要进行的任务其实只有两个,一个是运行 configure 来创建 Makefile , 这个步骤一定要成功!成功之后再以 make 来呼叫所需要的数据来编译即可!非常简单!

tu

由於不同的 Linux distribution 的函式库文件所放置的路径,或者是函式库的档名订定, 或者是默认安装的编译器,以及核心的版本都不相同,因此理论上,你无法在 CentOS 5.x 上面编译出 binary program 后,还将他拿到 SuSE 上面运行,这个动作通常是不可能成功的! 因为呼叫的目标函式库位置可能不同 (参考图1.2.1) , 核心版本更不可能相同!所以能够运行的情况是微乎其微!所以同一套软件要在不同的平台上面运行时, 必须要重复编译!所以才需要原始码嘛!了解乎!

详细的 make 用法与 Makefile 守则,在后续的小节里面再探讨罗!

什么是 Tarball 的软件

从前面几个小节的说明来看,我们知道所谓的原始程序码,其实就是一些写满了程序码的纯文字文件。 那我们在第九章压缩命令的介绍当中, 也了解了纯文字档在网络上其实是很浪费频宽的一种文件格式! 所以啦,如果能够将这些原始码透过文件的打包与压缩技术来将文件的数量与容量减小, 不但让使用者容易下载,软件开发商的网站频宽也能够节省很多很多啊!这就是 Tarball 文件的由来罗!

所谓的 Tarball 文件,其实就是将软件的所有原始码文件先以 tar 打包,然后再以压缩技术来压缩,通常最常见的就是以 gzip 来压缩了。因为利用了 tar 与 gzip 的功能,所以 tarball 文件一般的扩展名就会写成 *.tar.gz 或者是简写为 *.tgz 罗!不过,近来由於 bzip2 的压缩率较佳,所以 Tarball 渐渐的以 bzip2 的压缩技术来取代 gzip 罗!因此档名也会变成 *.tar.bz2 之类的哩。所以说, Tarball 是一个软件包, 你将他解压缩之后,里面的文件通常就会有:

原始程序码文件;
侦测程序文件 (可能是 configure 或 config 等档名);
本软件的简易说明与安装说明 (INSTALL 或 README)。

其中最重要的是那个 INSTALL 或者是 README 这两个文件,通常你只要能够参考这两个文件, Tarball 软件的安装是很简单的啦!我们在后面的章节会再继续介绍 Tarball 这个玩意儿。

如何安装与升级软件

将原始码作了一个简单的介绍,也知道了系统其实认识的可运行档是 binary program 之后,好了,得要聊一聊,那么怎么安装与升级一个 Tarball 的软件?为什么要安装一个新的软件呢?当然是因为我们的主机上面没有该软件罗!那么, 为何要升级呢?原因可能有底下这些:

需要新的功能,但旧有主机的旧版软件并没有,所以需要升级到新版的软件;
旧版本的软件上面可能有资安上的顾虑,所以需要升级到新版的软件;
旧版的软件运行效能不彰,或者运行的能力不能让管理者满足。
在上面的需求当中,尤其需要注意的是第二点,当一个软件有安全上的顾虑时,千万不要怀疑, 赶紧升级软件吧!否则造成网络危机,那可不是闹著玩的!那么升级的方法有哪些呢? 基本上升级的方法可以分为两大类,分别是:

直接以原始码透过编译来安装与升级;
直接以编译好的 binary program 来安装与升级。
上面第一点很简单,就是直接以 Tarball 在自己的机器上面进行侦测、编译、 安装与配置等等动作来升级就是了。不过,这样的动作虽然让使用者在安装过程当中具有很高的弹性, 但毕竟是比较麻烦一点,如果 Linux distribution 厂商能够针对自己的作业平台先进行编译等过程,再将编译好的 binary program 释出的话,那由於我的系统与该 Linux distribution 的环境是相同的,所以他所释出的 binary program 就可以在我的机器上面直接安装啦!省略了侦测与编译等等繁杂的过程呢!

这个预先编译好程序的机制存在於很多 distribution 喔,包括有 Red Hat 系统 (含 Fedora/CentOS 系列) 发展的 RPM 软件管理机制与 yum 线上升级模式; Debian 使用的 dpkg 软件管理机制与 APT 线上升级模式等等。

由於 CentOS 系统是依循标准的 Linux distribution,所以可以使用 Tarball 直接进行编译的安装与升级, 当然也可以使用 RPM 相关的机制来进行安装与升级罗!本章节主要针对 Tarball ,至於 RPM 则留待下个章节再来介绍呢!

好了,那么一个软件的 Tarball 是如何安装的呢?基本流程是这样的啦:

将 Tarball 由厂商的网页下载下来;
将 Tarball 解开,产生很多的原始码文件;
开始以 gcc 进行原始码的编译 (会产生目标档 object files);
然后以 gcc 进行函式库、主、副程序的连结,以形成主要的 binary file;
将上述的 binary file 以及相关的配置档安装至自己的主机上面。
上面第 3, 4 步骤当中,我们可以透过 make 这个命令的功能来简化他, 所以整个步骤其实是很简单的啦!只不过你就得需要至少有 gcc 以及 make 这两个软件在你的 Linux 系统里面才行喔! 详细的过程以及需要的软件我们在后面的章节继续来介绍的啦!

转自:http://vbird.dic.ksu.edu.tw/linux_basic/0520source_code_and_tarball_1.php
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    BE20安装管理指南.pdf

    文档中还提到,此产品可能包含第三方软件,这些第三方软件可能遵循开放源码或免费软件授权许可。如果用户根据开放源码或免费软件授权许可的规定拥有某些权利或义务,这些规定不会因本软件随附的授权许可协议而改变。...

    [新闻文章]永恒文章管理系统(YHCMS) v2.0 源码版_yhcms_v20_src.zip

    11. **安装和升级指南**:源码包通常会包含安装和升级文档,指导用户如何正确部署和更新系统。 通过深入研究YHCMS v2.0的源码,开发者可以学习到PHP编程、Web应用架构、数据库设计、前端技术以及网站管理实践等多个...

    Git权威指南PDF完整版

    第20章 补丁文件交互/ 296 20.1 创建补丁/ 296 20.2 应用补丁/ 297 20.3 StGit 和 Quilt/ 300 20.3.1 StGit/ 300 20.3.2 Quilt/ 304 第4篇 Git协同模型 第21章 经典Git协同模型/ 308 21.1 集中式协同模型/ 308 ...

    桃源企业文件管理系统 v3.3.zip

    15、文件交换:支持第三方服务驱动程序,支持计算机与手机双终端双模、双网应用(需安装手机专用服务组件),支持部门、机构、集团分级电子文档的存储与服务,产品通过有关互动模块实现与同级或上级系统电子文档数据...

    亿美内容管理系统 ExmayCMS v1.1.5 Beta.zip

    亿美内容管理系统(ExmayCMS)是国内最专注的JAVA开源软件组织之一,国内第一个致力JAVA企业级开源软件的公司,国内首家开源软件社会企业――长沙亿美软件有限公司旗下基于JAVA技术研究开发的具有自主核心技术与自主...

    hww网博企业全站开源版 v2.0_webhww20.zip

    "v2.0" 表示这是该软件的第二个主要版本,通常意味着在功能、性能和稳定性上都有所提升。 【描述】"源码参考,欢迎下载" 暗示这个软件是开放源代码的,用户不仅可以自由地使用,还可以查看和修改源代码以适应特定的...

    EmpireCMS程序源码开源 5.1 UTF8

    EmpireCMS从2004年对外发布第一个版本以来,历经四载精耕细作,实现13个版本的飞跃,我们荣幸的宣布,帝国网站管理系统(EmpireCMS)“开源版”发布了! 作为Web内容管理解决方案的提供商,帝国始终致力于通过不断优化...

    四大主流手机系统简介.pdf

    Android的开放源码特性使其受到了开发者和制造商的热烈欢迎。这种开放性使得制造商可以根据自己的需求定制系统,同时也吸引了大量的第三方开发者创作各种应用。2010年,Google推出了自家品牌的Nexus One,进一步推动...

    EmpireCMS 5.1程序源码繁体开源 BIG5

    EmpireCMS从2004年对外发布第一个版本以来,历经四载精耕细作,实现13个版本的飞跃,我们荣幸的宣布,帝国网站管理系统(EmpireCMS)“开源版”发布了! 作为Web内容管理解决方案的提供商,帝国始终致力于通过不断优化...

    EmpireCMS程序源码开源 5.1 GBK

    EmpireCMS从2004年对外发布第一个版本以来,历经四载精耕细作,实现13个版本的飞跃,我们荣幸的宣布,帝国网站管理系统(EmpireCMS)“开源版”发布了! 作为Web内容管理解决方案的提供商,帝国始终致力于通过不断优化...

    炼数成金深度学习PostgreSQL.txt

    第二课Postgresql使用基础:客户端使用、基本对象管理。第三课Postgresql使用基础:开发应用中的基本特性。第四课Postgresql使用高级:全库备份还原。第五课Postgresql使用高级:双机环境搭建。第六课Postgresql使用...

    实验-卷积神经元网络手写体数字识别.docx

    ### 实验-卷积神经网络手写体数字识别 #### 一、实验目的与意义 本次实验旨在通过构建并训练一个卷积神经网络(Convolutional Neural Network, CNN),...[第5.1讲 卷积神经网络简介(Convolutional Neural Network)]...

    中联企业网站管理系统V9.8

    源码发布:中联企业网站管理系统V9.8 源码名称:中联企业网站管理系统V9.8 官方下载:http://down.xpcode.cn/soft/zlcmsv98.rar 演示地址:http://www.xpcode.cn/demo 官方网站:http://www.xpcode.cn 源码各类:ASP...

    中联企业网站管理系统源码 V9.7

    一个功能强大,版面简洁大方的网站程序集合了文章、下载、产品、新闻、图片、留言、公告等等为一体集成所见即所得、编辑器,可自由添加二级分类,灵活的一级导航管理,方便的栏目调用程序非常适合于个人网站,中小型...

    房产中介房源管理系统 v1.1.rar

    升级说明: 1.优化网站数据的调用方法 2.提供会员的数据处理能力 演示地址:http://jz.tb11.net/xt/fangchanzhongjie/ 运行环境:IIS ASP ACCESS/MS SQL 版本号:v1.0 ccpt系统数据存储格式统一,方便管理...

    EmpireCMS 5.1程序源码开源繁体 UTF8

    EmpireCMS从2004年对外发布第一个版本以来,历经四载精耕细作,实现13个版本的飞跃,我们荣幸的宣布,帝国网站管理系统(EmpireCMS)“开源版”发布了! 作为Web内容管理解决方案的提供商,帝国始终致力于通过不断优化...

    android的电子文档,Into_20the_20Android_1_.pdf

    同时,安卓也在不断升级系统安全性能,通过安全框架和沙箱机制来保护用户数据和隐私,减少恶意软件和应用的威胁。 安卓之所以能成为当今世界使用最广泛的移动操作系统之一,与其强大的生态体系、开放性、多样化的...

Global site tag (gtag.js) - Google Analytics