• Linux学习-开放源码的软件安装与升级简介


    什么是开放源码、编译程序与可执行文件

    我们说过,在 Linux 系统上面,一个文件能不能被执行看的是有没有可执行的那个权限 (具有 x permission),不过,Linux 系统上真 正认识的可执行文件其实是二进制文件 ( binary program)。

    或许你会说 shell scripts 不是也可以执行吗?其实 shell scripts 只是利用 shell (例如 bash) 这支程 序的功能进行一些判断式,而最终执行的除了 bash 提供的功能外,仍是呼叫一些已经编译好的二进 制程序来执行。

    # 先以系统的文件测试看看:
    [root@study ~]# file /bin/bash
    /bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked(uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x7e60e35005254...stripped
    
    # 如果是系统提供的 /etc/init.d/network 呢?
    [root@study ~]# file /etc/init.d/network
    /etc/init.d/network: Bourne-Again shell script, ASCII text executable
    

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

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

    利用 gcc 编译程序进行程序的编译流程示意图

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

    总之,我们可以这么说:

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

    什么是函式库

    我们的 Linux 系统上通常已经提供一个可以进行身份验证的模块,这个 PAM 提供的功能可以让很多的程序在被执行的时候,除了可以验证用户登入的信息外, 还可以将身份确认的数据记录在登录档里面,以方便系统管理员的追踪!

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

    函式库又分为动态与静态函式库,这里我们以一 个简单的流程图,来示意一支有呼叫外部函式库的程序的执行情况。

    程序执行时引用外部动态函式库的示意图

    我们可以简单的这么想:

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

    什么是 make 与 configure

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

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

    一般来说,侦测程序会侦测的数据大约有底下这些:

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

    至于 make 与 configure 运作流程的相关性,我们可以使用底下的图示来示意一下。

    透过 configure 与 make 进行编译示意图

    什么是 Tarball 的软件

    所谓的 Tarball 文件,其实就是将软件的所有原始码文件先以 tar 打包,然后再以压缩技术来压缩, 通常最常见的就是以 gzip 来压缩了。因为利用了 tar 与 gzip 的功能,所以 tarball 文件一般的扩展 名就会写成 *.tar.gz 或者是简写为 *.tgz。Tarball 是一个软件包, 妳将他解压缩之后,里面的文件通常就会有:

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

    其中最重要的是那个 INSTALL 或者是 README 这两个文件,通常你只要能够参考这两个文件, Tarball 软件的安装是很简单的啦!

    如何安装与升级软件

    那么怎么安装与升级一个 Tarball 的软件?为什么要安装一个新的软件呢?当然是因为 我们的主机上面没有该软件啰!那么, 为何要升级呢?原因可能有底下这些:

    • 需要新的功能,但旧有主机的旧版软件并没有,所以需要升级到新版的软件;
    • 旧版本的软件上面可能有资安上的顾虑,所以需要更新到新版的软件;
    • 旧版的软件执行效能不彰,或者执行的能力不能让管理者满足。

    基本上更新的 方法可以分为两大类,分别是:

    • 直接以原始码透过编译来安装与升级;
    • 直接以编译好的 binary program 来安装与升级。

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

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

    1. 将 Tarball 由厂商的网页下载下来;
    2. 将 Tarball 解开,产生很多的原始码文件;
    3. 开始以 gcc 进行原始码的编译 (会产生目标文件 object files);
    4. 然后以 gcc 进行函式库、主、子程序的链接,以形成主要的 binary file;
    5. 将上述的 binary file 以及相关的配置文件安装至自己的主机上面。

    上面第 3, 4 步骤当中,我们可以透过 make 这个指令的功能来简化他。

  • 相关阅读:
    Java
    Java
    Java
    Java
    Java
    Hang Gliding线段树
    Biggest Number深搜
    2021年暑假康复性训练(Codeforces Round #731 (Div. 3))全题解
    Python GUI tkinter 随机生成题目
    ModuleNotFoundError: No module named ‘exceptions‘ 情况解决
  • 原文地址:https://www.cnblogs.com/uetucci/p/7778762.html
Copyright © 2020-2023  润新知