Linux管理:软件安装

1. Tarball与原始码

1.1 开放源码、编译程序和可执行文件

在这里插入图片描述

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

1.2 链接库

在这里插入图片描述
链接库就类似子程序的角色,可以被呼叫来执行的一段功能函数。分为动态(Dynamic)链接库静态(Static)链接库两种。

1.2.1 静态链接库

  • 扩展名:(扩展名为.a)
    这类的函式库通常扩展名为libxxx.a 的类型;
  • 编译行为:
    这类函式库在编译的时候会直接整合到执行程序当中,所以利用静态函式库编译成的文件会比较大一些喔;
  • 独立执行的状态:
    这类函式库最大的优点,就是编译成功的可执行文件可以独立执行,而不需要再向外部要求读取函式库的
    内容(请参照动态函式库的说明)。
  • 升级难易度:
    虽然执行档可以独立执行,但因为函式库是直接整合到执行档中, 因此若函式库升级时,整个执行档必须
    要重新编译才能将新版的函式库整合到程序当中。也就是说,在升级方面,只要函式库升级了,所有将此
    函式库纳入的程序都需要重新编译。

1.2.2 动态链接库

  • 扩展名:(扩展名为.so)
    这类函式库通常扩展名为libxxx.so 的类型;
  • 编译行为:
    动态函式库与静态函式库的编译行为差异挺大的。与静态函式库被整个捉到程序中不同的,动态函式库在
    编译的时候,在程序里面只有一个『指向(Pointer)』的位置而已。也就是说,动态函式库的内容并没有被
    整合到执行档当中,而是当执行档要使用到函式库的机制时, 程序才会去读取函式库来使用。由于执行文
    件当中仅具有指向动态函式库所在的指标而已, 并不包含函式库的内容,所以他的文件会比较小一点。
  • 独立执行的状态:
    这类型的函式库所编译出来的程序不能被独立执行, 因为当我们使用到函式库的机制时,程序才会去读取
    函式库,所以函式库文件『必须要存在』才行,而且,函式库的『所在目录也不能改变』,因为我们的可执
    行文件里面仅有『指标』亦即当要取用该动态函式库时, 程序会主动去某个路径下读取,所以动态
    函式库可不能随意移动或删除,会影响很多相依的程序软件喔!
  • 升级难易度:
    虽然这类型的执行档无法独立运作,然而由于是具有指向的功能, 所以,当函式库升级后,执行档根本不
    需要进行重新编译的行为,因为执行档会直接指向新的函式库文件(前提是函式库新旧版本的档名相同)。
  • 动态链接库解析指令ldd
    在这里插入图片描述
  • 为增加动态链接库的读取效能引入了ldconfig/etc/ld.so.conf/username.conf的协助,将常用的动态链接库先加载到内存或cache当中,若有需要直接从内存或cache当中读取。
    在这里插入图片描述
    在这里插入图片描述

1.3 make和configure

  make指令可以简化编译过程,否则大型软件中的程序代码编译指令会很多极不方便。当执行 make 时,make 会在当时的目录下搜寻Makefile (or makefile) 这个文本文件,而Makefile 里面则记录了原始码如何编译的详细信息
  make 是一支程序,会去找Makefile。通常软件开发商都会写一支侦测程序来侦测用户的作业环境, 以及该作业环境是否有软件开发商所需要的其他功能,该侦测程序侦测完毕后,就会主动的建立这个Makefile 的规则文件。通常这支侦测程序的文件名为configure 或者是config 。其中configure会侦测以下内容:

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

  make和configure运作流程相关性如下图所示:
在这里插入图片描述

1.4 Tarball软件

Tarball 文件,就是将软件的所有原始码文件先以tar 打包,然后再以压缩技术来压缩,通常最常见的就是以gzip 来压缩了。Tarball 是一个软件包, 解压缩之后,里面的文件通常就会有:

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

Tarball软件的更新方法:

  • 直接以原始码透过编译来安装与升级(利用patch依序更新原始码);
  • 直接以编译好的binary program 来安装与升级。

Tarball软件的安装方法:

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

★Tarball安装的基本步骤:

  1. 取得原始档:将tarball 文件在/usr/local/src 目录下解压缩;
  2. 取得步骤流程:进入新建立的目录底下,去查阅INSTALL 与README 等相关文件内容;
  3. (optional)相依属性软件安装:根据INSTALL/README 的内容察看并安装好一些相依的软件;
  4. 建立makefile:以自动侦测程序(configure 或config) 侦测作业环境,并建立Makefile 这个文件;
  5. 编译:以make 这个程序并使用该目录下的Makefile 做为他的参数配置文件,来进行make (编译或其他)的动作;
  6. 安装:以make 这个程序,并以Makefile 这个参数配置文件,依据install 这个目标(target) 的指定来安装到正确的路径。

在这里插入图片描述 在这里插入图片描述

1.5 (md5sum/sha1sum/sha256sum)检验软件正确性

在这里插入图片描述在这里插入图片描述

2. RPM/SRPM安装方式

目前在 Linux 界软件安装方式最常见的有两种,分别是:

  • dpkg:这个机制最早是由Debian Linux 社群所开发出来的,透过dpkg 的机制, Debian 提供的软件就能够简单的安装起来,同时还能提供安装后的软件信息,实在非常不错。只要是衍生于Debian 的其他Linuxdistributions 大多使用dpkg 这个机制来管理软件的, 包括 B2D, Ubuntu 等等。
  • RPM:(Redhat Package Manager)这个机制最早是由Red Hat 这家公司开发出来的,后来实在很好用,因此很多distributions 就使用这个机制来作为软件安装的管理方式。包括Fedora, CentOS, SuSE 等等知名的开发商都是用该方式。

在这里插入图片描述
对CentOS的软件管理机制RPM做详细的展开。

2.1 什么是RPM和SRPM

@ RPM

RPM 是以一种数据库记录的方式来将所需要的软件安装到Linux 系统的一套管理机制。
其事先对将要安装的软件进行过编译,并打包成为RPM机制的安装文件,通过安装好的软件里的默认数据库记录,记录该软件安装时须具备的相依属性软件,安装时RPM会检查是否满足相依属性软件环境,满足则安装否则不予安装。
优点是:

  1. 由于已经编译完成并且打包完毕,所以软件传输与安装上很方便(不需要再重新编译);
  2. 由于软件的信息都已经记录在Linux 主机的数据库上,很方便查询、升级与反安装

缺点是:

  1. 软件文件安装的环境必须与打包时的环境需求一致或相当;
  2. 需要满足软件的相依属性需求(该缺点在YUM在线升级方式中得到解决见第三节);
  3. 移除或卸载时需要特别小心,最底层的软件不可先移除,否则可能造成整个系统的问题。
    在这里插入图片描述

@ SRPM
Source RPM 的意思,也就是这个RPM 文件里面含有原始码。特别注意的是,这个SRPM 所提供的软件内容并没有经过编译, 它提供的是原始码。通常 SRPM 的扩展名是以***.src.rpm 这种格式来命名。与RPM 不同的是,他也提供了参数配置文件(就是configure 与makefile)。所以,如果下载的SRPM ,那么要安装该软件时,就必须要:

  • 先将该软件以RPM 管理的方式编译,此时SRPM 会被编译成为RPM 文件;
  • 然后将编译完成的RPM 文件安装到Linux 系统当中

在这里插入图片描述

在这里插入图片描述

2.2 RPM软件管理程序:rpm

2.2.1 RPM默认安装的路径

若环境检查合格了,那么 RPM 文件就开始被安装到你的Linux 系统上。安装完毕后,该软件相关的信息就会被写入/var/lib/rpm/ 目录下的数据库文件中。软件内的文件放置在如下表中的位置。
在这里插入图片描述

2.2.2 RPM安装(install)

rpm -ivh package_name	//安装指定的软件包,并显示安装细节和进度

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2.2.3 RPM升级与更新(upgrade/update)

在这里插入图片描述

2.2.4 RPM查询、验证与数字签名(query/verify/signature)

rpm -ql //可以将软件的相关内容所在的目录全部列出
对于软件的数字签名部分略去,只提到相关概念。数字签名即软件开发厂商所推出的,公钥私钥验证系统。

在这里插入图片描述
在这里插入图片描述
软件验证例子:

在这里插入图片描述
在这里插入图片描述

2.2.5 RPM卸载与重建数据库(erase/rebuilddb)

rpm -e package_name //卸载名称为package_name的软件
rpm --rebuilddb  //重建的是rpm的关系数据库

3.YUM在线安装/升级机制

在这里插入图片描述
yum是通过分析RPM 的标头资料后, 根据各软件的相关性制作出属性相依时的解决方案,然后可以自动处理软件的相依属性问题,以解决软件安装或移除与升级的问题。详细的yum服务器与客户端之间的沟通如上图所示。

3.1 yum的查询/安装/升级/卸载功能

@ 查询
在这里插入图片描述
@ 安装
在这里插入图片描述
@ 卸载
在这里插入图片描述

3.2 yum的配置文件 /etc/yum.repos.d/*.repo

在这里插入图片描述
在这里插入图片描述

4. 重点回顾

在这里插入图片描述在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yueguangmuyu/article/details/109572026