上一篇我们讲到用软件的源码进行编译安装,这样子多少有些不方便,如果厂商先在他们的系统上面将软件编译好, 只要我们的系统 (硬件与操作系统) 是一样的,那么就可以直接使用它进行安装了,这种方式跟windows差不多。
目前在 Linux 界软件安装方式最常见的有两种,分别是:
dpkg:
这个机制最早是由 Debian Linux 社群所开发出来的,透过 dpkg 的机制, Debian 提供的软件就能够简单的安装起来,同时还能提供安装后的软件资讯,实在非常不错。 只要是衍生於 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括 B2D, Ubuntu 等等。
RPM:
这个机制最早是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多 distributions 就使用这个机制来作为软件安装的管理方式。包括 Fedora, CentOS, SuSE 等等知名的开发商都是用这咚咚。
distribution 代表 | 软件管理机制 | 使用命令 | 线上升级机制(命令) |
---|---|---|---|
Red Hat/Fedora | RPM | rpm, rpmbuild | YUM (yum) |
Debian/Ubuntu | DPKG | dpkg | APT (apt-get) |
RPM 全名是『 RedHat Package Manager 』,是以一种数据库记录的方式来将你所需要的软件安装到你的 Linux 系统的一套管理机制。
优点:
1.RPM 内含已经编译过的程序与配置档等数据,可以让使用者免除重新编译的困扰;
2.RPM 在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免文件被错误安装;
3.RPM 文件本身提供软件版本资讯、相依属性软件名称、软件用途说明、软件所含文件等资讯,便於了解软件;
4.RPM 管理的方式使用数据库记录 RPM 文件的相关参数,便於升级、移除、查询与验证。
问题:
1.软件文件安装的环境必须与打包时的环境需求一致或相当;
2.需要满足软件的相依属性需求;
3.卸载时需要特别小心,最底层的软件不可先移除,否则可能造成整个系统的问题!
SRPM 是什么呢?顾名思义,他是 Source RPM 的意思, SRPM 所提供的软件内容『并没有经过编译』, 他提供的是原始码。
SRPM 虽然内容是原始码, 但是他仍然含有该软件所需要的相依性软件说明、以及所有 RPM 文件所提供的数据。同时,他与 RPM 不同的是,他也提供了参数配置档 (就是 configure 与 makefile)。所以,如果我们下载的是 SRPM ,那么要安装该软件时,你就必须要:
先将该软件以 RPM 管理的方式编译,此时 SRPM 会被编译成为 RPM 文件;
然后将编译完成的 RPM 文件安装到 Linux 系统当中。
通常一个软件在释出的时候,都会同时释出该软件的 RPM 与 SRPM 。
文件格式 | 档名格式 | 直接安装与否 | 内含程序类型 | 可否修改参数并编译 |
---|---|---|---|---|
RPM | xxx.rpm | 可 | 已编译 | 不可 |
SRPM | xxx.src.rpm | 不可 | 未编译之原始码 | 可 |
我们怎么知道软件的版本、适用的平台、编译释出的次数呢?只要透过档名就可以知道了!例如 rp-pppoe-3.1-5.i386.rpm 这的文件的意义为:
rp-pppoe - 3.1 - 5 .i386 .rpm
软件名称 软件的版本资讯 释出的次数 适合的硬件平台 扩展名
平台名称 | 适合平台说明 |
---|---|
i386 | 几乎适用於所有的 x86 平台,不论是旧的 pentum 或者是新的 Intel Core 2 与 K8 系列的 CPU 等等,都可以正常的工作!那个 i 指的是 Intel 兼容的 CPU 的意思,至於 386 不用说,就是 CPU 的等级啦! |
i586 | 就是针对 586 等级的计算机进行最佳化编译。那是哪些 CPU 呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU (socket 7 插脚) 等等的 CPU 都算是这个等级; |
i686 | 在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等级的 CPU 都属於这个 686 等级! 由於目前市面上几乎仅剩 P-II 以后等级的硬件平台,因此很多 distributions 都直接释出这种等级的 RPM 文件。 |
x86_64 | 针对 64 位的 CPU 进行最佳化编译配置,包括 Intel 的 Core 2 以上等级 CPU ,以及 AMD 的 Athlon64 以后等级的 CPU ,都属於这一类型的硬件平台。 |
noarch | 就是没有任何硬件等级上的限制。一般来说,这种类型的 RPM 文件,里面应该没有 binary program 存在, 较常出现的就是属於 shell script 方面的软件。 |
**最低等级的 i386 软件可以安装在所有的 x86 硬件平台上面,不论是 32 位还是 64 位,但是反过来就不行了。
为了节省使用者的数据量,目前的 distributions 在释出软件时, 都会将软件的内容分为一般使用与开发使用 (development) 两大类。所以你才会常常看到有类似 pam-x.x.rpm 与 pam-devel-x.x.rpm 之类的档名。
为了重复利用既有的软件功能,因此很多软件都会以函式库的方式释出部分功能,以方便其他软件的呼叫应用~由于有了外部呼叫,所以会出现属性相依问题。想一想,要是我将这些相依属性的软件先列表, 在有要安装软件需求的时候,先到这个列表去找,同时与系统内已安装的软件相比较,没安装到的相依软件就一口气同时安装起来, 那不就解决了相依属性的问题了吗?——这就是YUM做的事情!
目录 | 内容 |
---|---|
/etc | 一些配置档放置的目录,例如 /etc/crontab |
/usr/bin | 一些可运行文件 |
/usr/lib | 一些程序使用的动态函式库 |
/usr/share/doc | 一些基本的软件使用手册与说明档 |
/usr/share/man | 一些 man page 文件 |
安装完毕后,该软件相关的资讯就会被写入 /var/lib/rpm/ 目录下的数据库文件中。
[root@www ~]# rpm -ivh package_name
选项与参数:
-i :install 的意思
-v :察看更细部的安装资讯画面
-h :以安装资讯列显示安装进度
RPM以 -Uvh 或 -Fvh 来升级即可。
-Uvh后面接的软件即使没有安装过,则系统将予以直接安装; 若后面接的软件有安装过旧版,则系统自动升级至新版;
-Fvh 如果后面接的软件并未安装到你的 Linux 系统上,则该软件不会被安装;亦即只有已安装至你 Linux 系统内的软件会被『升级』。
RPM 在查询的时候,其实查询的地方是在 /var/lib/rpm/ 这个目录下的数据库文件。
[root@www ~]# rpm -qa <==已安装软件
[root@www ~]# rpm -q[licdR] 已安装的软件名称 <==已安装软件
[root@www ~]# rpm -qf 存在於系统上面的某个档名 <==已安装软件
[root@www ~]# rpm -qp[licdR] 未安装的某个文件名称 <==查阅RPM文件
选项与参数:
查询已安装软件的资讯:
-q :仅查询,后面接的软件名称是否有安装;
-qa :列出所有的,已经安装在本机 Linux 系统上面的所有软件名称;
-qi :列出该软件的详细资讯 (information),包含开发商、版本与说明等;
-ql :列出该软件所有的文件与目录所在完整档名 (list);
-qc :列出该软件的所有配置档 (找出在 /etc/ 底下的档名而已)
-qd :列出该软件的所有说明档 (找出与 man 有关的文件而已)
-qR :列出与该软件有关的相依软件所含的文件 (Required 的意思)
-qf :由后面接的文件名称,找出该文件属於哪一个已安装的软件;
查询某个 RPM 文件内含有的资讯:
-qp[icdlR]:注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在於找出某个 RPM 文件内的资讯,而非已安装的软件资讯~
在查询的部分,所有的参数之前都需要加上 -q 才是所谓的查询!查询主要分为两部分, 一个是查已安装到系统上面的的软件资讯,这部份的资讯都是由 /var/lib/rpm/ 所提供。另一个则是查某个 rpm 文件内容, 等於是由 RPM 文件内找出一些要写入数据库内的资讯,这部份就得要使用 -qp (p 是 package 的意思)。
[root@www ~]# rpm -Va
[root@www ~]# rpm -V 已安装的软件名称
[root@www ~]# rpm -Vp 某个 RPM 文件的档名
[root@www ~]# rpm -Vf 在系统上面的某个文件
选项与参数:
-V :后面加的是软件名称,若该软件所含的文件被更动过,才会列出来;
-Va :列出目前系统上面所有可能被更动过的文件;
-Vp :后面加的是文件名称,列出该软件内可能被更动过的文件;
-Vf :列出某个文件是否被更动过~
数码签章 (digital signature):
软件开发商原厂所推出的软件会有一个厂商自己的签章系统! 只是这个签章被数码化了而已。厂商可以数码签章系统产生一个专属於该软件的签章,并将该签章的公钥 (public key) 释出。 当你要安装一个 RPM 文件时:
首先你必须要先安装原厂释出的公钥文件;
实际安装原厂的 RPM 软件时, rpm 命令会去读取 RPM 文件的签章资讯,与本机系统内的签章资讯比对,
若签章相同则予以安装,若找不到相关的签章资讯时,则给予警告并且停止安装。
注意,由于属性相依,解安装的过程一定要由最上一级往下解除~
移除的选项很简单,就透过 -e 即可移除。
由於 RPM 文件常常会安装/移除/升级等,某些动作或许可能会导致 RPM 数据库 /var/lib/rpm/ 内的文件破损。我们可以使用 –rebuilddb 这个选项来重建一下数据库:
[root@www ~]# rpm --rebuilddb <==重建数据库
关于SRPM和YUM的实际使用,这里就不介绍咯~有需要的自行搜索一下相关资料~