20220929 22. 软件安装 RPM, SRPM 与 YUM
22.1 软件管理员简介
在 Linux 上面至少就有两种常见的软件管理员,分别是 RPM 与 Debian 的 dpkg
22.1.1 Linux 界的两大主流: RPM 与 DPKG
-
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) |
22.1.2 什么是 RPM 与 SRPM
RPM 全名是“ RedHat Package Manager ”
这个软件管理 的机制是由 Red Hat 这家公司发展出来的。 RPM 是以一种数据库记录的方式来将你所需要 的软件安装到你的 Linux 系统的一套管理机制。
他最大的特点就是将你要安装的软件先编译过, 并且打包成为 RPM 机制的包装文件,通过 包装好的软件里头默认的数据库记录, 记录这个软件要安装的时候必须具备的相依属性软 件,当安装在你的 Linux 主机时, RPM 会先依照软件里头的数据查询 Linux 主机的相依属性 软件是否满足, 若满足则予以安装,若不满足则不予安装。那么安装的时候就将该软件的信 息整个写入 RPM 的数据库中,以便未来的查询、验证与反安装!这样一来的优点是:
-
由于已经编译完成并且打包完毕,所以软件传输与安装上很方便 (不需要再重新编 译);
-
由于软件的信息都已经记录在 Linux 主机的数据库上,很方便查询、升级与反安装
通常不同的 distribution 所释出的 RPM 文件,并不能用在其他的 distributions 上
问题是:
-
软件文件安装的环境必须与打包时的环境需求一致或相当;
-
需要满足软件的相依属性需求;
-
反安装时需要特别小心,最底层的软件不可先移除,否则可能造成整个系统的问题!
SRPM 是 Source RPM 的意思,也就 是这个 RPM 文件里面含有源代码
SRPM 虽然内容是源代 码, 但是他仍然含有该软件所需要的相依性软件说明、以及所有 RPM 文件所提供的数据。 同时,他与 RPM 不同的是,他也提供了参数配置文件 (就是 configure 与 makefile)。
如果我们下载的是 SRPM ,那么要安装该软件时,你就必须要:
-
先将该软件以 RPM 管理的方式编译,此时 SRPM 会被编译成为 RPM 文件;
-
然后将编译完成的 RPM 文件安装到 Linux 系统当中
文件格式 | 文件名格式 | 直接安装与否 | 内含程序类型 | 可否修改参数并编译 |
---|---|---|---|---|
RPM | xxx.rpm | 可 | 已编译 | 不可 |
SRPM | xxx.src.rpm | 不可 | 未编译之源代码 | 可 |
为何说 CentOS 是“社群维护的企业版”呢? Red Hat 公司的 RHEL 释出后,连带会将 SRPM 释出。 社群的朋友就将这些 SRPM 收集起来并重新编译成为所需要的软件,再重复释 出成为 CentOS,所以才能号称与 Red Hat 的 RHEL 企业版同步啊!
22.1.3 什么是 i386, i586, i686, noarch, x86_64
通过文件名知道这个软件的版本、适用的平台、编译释出的次数
rp-pppoe- 3.11- 5. el7.x86_64 .rpm
软件名称 软件的版本信息 释出的次数 适合的硬件平台 扩展名
-
软件名称
-
版本信息:通常又分为主版本跟次版本。以上面为例,主版本为 3 ,在主版本的架构下更动部 分源代码内容,而释出一个新的版本,就是次版本啦!以上面为例,就是 11 啰!所以版 本名就为 3.11
-
释出版本次数:编译的次数。由于同一版 的软件中,可能由于有某些 bug 或者是安全上的顾虑,所以必须要进行小幅度的 patch 或重设一些编译参数。 设置完成之后重新编译并打包成 RPM 文件
-
操作硬件平台:由于 RPM 可以适用在不同的操作平台上,但是 不同的平台设置的参数还是有所差异性! 并且,我们可以针对比较高阶的 CPU 来进行 最优化参数的设置,这样才能够使用高阶 CPU 所带来的硬件加速功能。 所以就有所谓 的 i386, i586, i686, x86_64 与 noarch 等的文件名称出现了!
平台名称 | 适合平台说明 |
---|---|
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 方面的软件。 |
22.1.4 RPM 的优点
RPM 有以下的优点:
-
RPM 内含已经编译过的程序与配置文件等数据,可以让使用者免除重新编译的困扰;
-
RPM 在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免文件被错误安装;
-
RPM 文件本身提供软件版本信息、相依属性软件名称、软件用途说明、软件所含文件等信息,便于了解软件;
-
RPM 管理的方式使用数据库记录 RPM 文件的相关参数,便于升级、移除、查询与验证
为了解决这种具有相关性的软件之间的问题 (就是所谓的软件相依属性),RPM 就在提供打 包的软件时,同时加入一些讯息登录的功能,这些讯息包括软件的版本、 打包软件者、相依 属性的其他软件、本软件的功能说明、本软件的所有文件记录等等,然后在 Linux 系统上面 亦创建一个 RPM 软件数据库,如此一来,当你要安装某个以 RPM 型态提供的软件时,在安 装的过程中, RPM 会去检验一下数据库里面是否已经存在相关的软件了, 如果数据库显示 不存在,那么这个 RPM 文件“默认”就不能安装。呵呵!没有错,这个就是 RPM 类型的文件 最为人所诟病的“软件的属性相依”问题啦!
22.1.5 RPM 属性相依的克服方式: YUM 线上升级
-
CentOS 先将释出的软件放置到 YUM 服务器内
-
分析这些软件的相依属性问 题,将软件内的记录信息写下来 (header)。 然后再将这些信息分析后记录成软件相关性的 清单列表。这些列表数据与软件所在的本机或网络位置可以称呼为容器或软件仓库或软件库 (repository)。
-
当用户端有软件安装的需求时,用户端主机会主动的向网络上面的 yum 服 务器的软件库网址下载清单列表, 然后通过清单列表的数据与本机 RPM 数据库已存在的软 件数据相比较,就能够一口气安装所有需要的具有相依属性的软件了
当用户端有升级、安装的需求时, yum 会向软件库要求清单的更新,等到清单更新到本机的 /var/cache/yum 里面后, 等一下更新时就会用这个本机清单与本机的 RPM 数据库进行比 较,这样就知道该下载什么软件。接下来 yum 会跑到软件库服务器 (yum server) 下载所 需要的软件 (因为有记录软件所在的网址),然后再通过 RPM 的机制开始安装软件啦!
为什么要做出“软件库”呢?由于 yum 服务器提供的 RPM 文件内容可能有所差异,举例 来说,原厂释出的数据有 (1)原版数据; (2)更新数据 (update); (3)特殊数据 (例如第三方协力软件,或某些特殊功能的软件)。 这些软件文件基本上不会放置到一起, 那如何分辨这些软件功能呢?就用“软件库”的概念来处理的啦! 不同的“软件库”网址,可以放 置不同的功能的软件之意!
22.2 RPM 软件管理程序: rpm
yum 就可以直接用来进行安装的动作,基本上 rpm 这个指令 真的就只剩下查询与检验的功能啰!
22.2.1 RPM 默认安装的路径
若环境检查合格了,那么 RPM 文件就开始被安装到你的 Linux 系统上。安装完毕后,该软件 相关的信息就会被写入 /var/lib/rpm/ 目录下的数据库文件中了。
/etc | 一些配置档放置的目录,例如 /etc/crontab |
---|---|
/usr/bin | 一些可运行文件 |
/usr/lib | 一些程序使用的动态函式库 |
/usr/share/doc | 一些基本的软件使用手册与说明档 |
/usr/share/man | 一些 man page 文件 |
22.2.2 RPM 安装 (install)
[root@www ~]# rpm -ivh package_name
选项与参数:
-i :install 的意思
-v :察看更细部的安装资讯画面
-h :以安装资讯列显示安装进度
范例一:安装 rp-pppoe-3.5-32.1.i386.rpm
[root@www ~]# rpm -ivh rp-pppoe-3.5-32.1.i386.rpm
范例二、一口气安装两个以上的软件时:
[root@www ~]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm
范例三、直接由网络上面的某个文件安装,以网址来安装:
[root@www ~]# rpm -ivh http://website.name/path/pkgname.rpm
rpm 安装时常用的选项与参数说明
可下达的选项 | 代表意义 |
---|---|
--nodeps | 使用时机:当发生软件属性相依问题而无法安装,但你执意安装时 危险 性: 软件会有相依性的原因是因为彼此会使用到对方的机制或功能,如 果强制安装而不考虑软件的属性相依, 则可能会造成该软件的无法正常 使用! |
--replacefiles | 使用时机: 如果在安装的过程当中出现了“某个文件已经被安装在你的系 统上面”的信息,又或许出现版本不合的讯息 (confilcting files) 时,可 以使用这个参数来直接覆盖文件。危险性: 覆盖的动作是无法复原的! 所以,你必须要很清楚的知道被覆盖的文件是真的可以被覆盖喔!否则会 欲哭无泪! |
--replacepkgs | 使用时机: 重新安装某个已经安装过的软件!如果你要安装一堆 RPM 软 件文件时,可以使用 rpm -ivh *.rpm ,但若某些软件已经安装过了, 此 时系统会出现“某软件已安装”的信息,导致无法继续安装。此时可使用这 个选项来重复安装喔! |
--force | 使用时机:这个参数其实就是 --replacefiles 与 --replacepkgs 的综合体! |
--test | 使用时机: 想要测试一下该软件是否可以被安装到使用者的 Linux 环境 当中,可找出是否有属性相依的问题。范例为: rpm -ivh pkgname.i386.rpm --test |
--justdb | 使用时机: 由于 RPM 数据库破损或者是某些缘故产生错误时,可使用这 个选项来更新软件在数据库内的相关信息。 |
--nosignature | 使用时机: 想要略过数码签章的检查时,可以使用这个选项。 |
--prefix 新路径 | 使用时机: 要将软件安装到其他非正规目录时。举例来说,你想要将某 软件安装到 /usr/local 而非正规的 /bin, /etc 等目录, 就可以使用“ --prefix /usr/local ”来处理了。 |
--noscripts | 使用时机:不想让该软件在安装过程中自行执行某些系统指令。说明: RPM 的优点除了可以将文件放置到定位之外,还可以自动执行一些前置 作业的指令,例如数据库的初始化。 如果你不想要让 RPM 帮你自动执行 这一类型的指令,就加上他吧! |
通常鸟哥建议直接使用 -ivh 就好了, 如 果安装的过程中发现问题,一个一个去将问题找出来,尽量不要使用“ 暴力安装法 ”,就是通 过 --force 去强制安装!
22.2.3 RPM 升级与更新 (upgrade/freshen)
指令参数 | 描述 |
---|---|
-Uvh | 后面接的软件即使没有安装过,则系统将予以直接安装; 若后面接的软件有安装 过旧版,则系统自动更新至新版; |
-Fvh | 如果后面接的软件并未安装到你的 Linux 系统上,则该软件不会被安装;亦即只 有已安装至你 Linux 系统内的软件会被“升级”! |
22.2.4 RPM 查询 (query)
[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 文件内的资讯,而非已安装的软件资讯!注意!
查询主要分为两部分, 一个 是查已安装到系统上面的的软件信息,这部份的信息都是由 /var/lib/rpm/ 所提供。另一个则是 查某个 rpm 文件内容, 等于是由 RPM 文件内找出一些要写入数据库内的信息就是了,这部 份就得要使用 -qp (p 是 package 的意思)
范例一:找出你的 Linux 是否有安装 logrotate 这个软件?
[root@www ~]# rpm -q logrotate
范例二:列出上题当中,属於该软件所提供的所有目录与文件:
[root@www ~]# rpm -ql logrotate
范例三:列出 logrotate 这个软件的相关说明数据:
[root@www ~]# rpm -qi logrotate
范例四:分别仅找出 logrotate 的配置档与说明档
[root@www ~]# rpm -qc logrotate
[root@www ~]# rpm -qd logrotate
范例五:若要成功安装 logrotate ,他还需要什么文件的帮忙?
[root@www ~]# rpm -qR logrotate
范例六:由上面的范例五,找出 /bin/sh 是那个软件提供的?
[root@www ~]# rpm -qf /bin/sh
范例七:假设我有下载一个 RPM 文件,想要知道该文件的需求文件,该如何?
[root@www ~]# rpm -qpR filename.i386.rpm
22.2.5 RPM 验证与数码签章 (Verify/signature)
作用的方式是“使用 /var/lib/rpm 下面的数据库内容来比对目前 Linux 系统的环境下的所有软件文件 ”也就是说,当 你有数据不小心遗失, 或者是因为你误杀了某个软件的文件,或者是不小心不知道修改到某 一个软件的文件内容, 就用这个简单的方法来验证一下原本的文件系统吧!
[root@www ~]# rpm -Va 所有已安装
[root@www ~]# rpm -V 已安装的软件名称
[root@www ~]# rpm -Vp 某个 RPM 文件的档名
[root@www ~]# rpm -Vf 在系统上面的某个文件
选项与参数:
-V :后面加的是软件名称,若该软件所含的文件被更动过,才会列出来;
-Va :列出目前系统上面所有可能被更动过的文件;
-Vp :后面加的是文件名称,列出该软件内可能被更动过的文件;
-Vf :列出某个文件是否被更动过~
范例一:列出你的 Linux 内的 logrotate 这个软件是否被更动过?
[root@www ~]# rpm -V logrotate
# 如果没有出现任何信息,恭喜你,该软件所提供的文件没有被更动过。
# 如果有出现任何信息,才是有出现状况啊!
范例二:查询一下,你的 /etc/crontab 是否有被更动过?
[root@www ~]# rpm -Vf /etc/crontab
S.5....T c /etc/crontab
# 瞧!因为有被更动过,所以会列出被更动过的资讯类型!
文件名之前有个 c ,代表的是 configuration , 就是配置文件的意思。至于最前面的几个信息是:
-
S :(file Size differs) 文件的容量大小是否被改变
-
M :(Mode differs) 文件的类型或文件的属性 (rwx) 是否被改变?如是否可执行等参数已被改变
-
5 :(MD5 sum differs) MD5 这一种指纹码的内容已经不同
-
D :(Device major/minor number mis-match) 设备的主/次代码已经改变
-
L :(readLink(2) path mis-match) Link 路径已被改变
-
U :(User ownership differs) 文件的所属人已被改变
-
G :(Group ownership differs) 文件的所属群组已被改变
-
T :(mTime differs) 文件的创建时间已被改变
-
P :(caPabilities differ) 功能已经被改变
所以,如果当一个配置文件所有的信息都被更动过,那么他的显示就会是:
SM5DLUGTP c filename
文件类型有下面这几类:
-
c :配置文件 (config file)
-
d :文件数据文件 (documentation)
-
g :鬼文件~通常是该文件不被某个软件所包含,较少发生!(ghost file)
-
l :授权文件 (license file)
-
r :读我文件 (read me)
一般来说,配置文件 (configure) 被更动过是很正常的,万一你的 binary program 被更动过呢? 那就得要特别特别小心啊!
数码签章 (digital signature)
就像你自己的签名一样,我们的软件开发商原厂所推出的软件也会有一个厂商自己的签章系 统! 只是这个签章被数码化了而已。厂商可以数码签章系统产生一个专属于该软件的签章, 并将该签章的公钥 (public key) 释出。
当你要安装一个 RPM 文件时:
-
首先你必须要先安装原厂释出的公钥文件;
-
实际安装原厂的 RPM 软件时, rpm 指令会去读取 RPM 文件的签章信息,与本机系统内 的签章信息比对
-
若签章相同则予以安装,若找不到相关的签章信息时,则给予警告并且停止安装
# 安装
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@www ~]# rpm -qa | grep pubkey
gpg-pubkey-e8562897-459f07a4
[root@www ~]# rpm -qi gpg-pubkey-e8562897-459f07a4
22.2.6 RPM 反安装与重建数据库 (erase/rebuilddb)
反安装就是将软件解除安装啦!要注意的是,“解安装的过程一定要由最上层往下解除”,以 rp-pppoe 为例,这一个软件主要是依据 ppp 这个软件来安装的,所以当你要解除 ppp 的时 候,就必须要先解除 rp-pppoe 才行!
移除的选项很简单,就通过 -e 即可移除。
# 1. 找出与 pam 有关的软件名称,并尝试移除 pam 这个软件:
[root@www ~]# rpm -qa | grep pam
pam-devel-0.99.6.2-3.27.el5
pam_passwdqc-1.0.2-1.2.2
pam_pkcs11-0.5.3-23
pam_smb-1.1.7-7.2.1
pam-0.99.6.2-3.27.el5
pam_ccreds-3-5
pam_krb5-2.2.14-1
[root@www ~]# rpm -e pam
error: Failed dependencies: <==这里提到的是相依性的问题
libpam.so.0 is needed by (installed) coreutils-5.97-14.el5.i386
libpam.so.0 is needed by (installed) libuser-0.54.7-2.el5.5.i386
....(以下省略)....
# 2. 若仅移除 pam-devel 这个之前范例安装上的软件呢?
[root@www ~]# rpm -e pam-devel <==不会出现任何信息!
[root@www ~]# rpm -q pam-devel
package pam-devel is not installed
也能加 --nodeps 来强制移除, 不过,如此 一来所有会用到 pam 函数库的软件,都将成为无法运行的程序
由于 RPM 文件常常会安装/移除/升级等,某些动作或许可能会导致 RPM 数据库 /var/lib/rpm/ 内的文件破损。可以使用 --rebuilddb 这个选 项来重建一下数据库
[root@www ~]# rpm --rebuilddb <==重建数据库
22.3 YUM 线上升级机制
yum 是通过分析 RPM 的标头数据后, 根据各软件的相关性制作出属性相依时的解决方案,然后可以自动处理软件的相依属性问 题,以解决软件安装或移除与升级的问题。
由于 distribution 必须要先释出软件,然后将软件放置于 yum 服务器上面,以提供用户端来要 求安装与升级之用的。 因此我们想要使用 yum 的功能时,必须要先找到适合的 yum server 才行啊!而每个 yum server 可能都会提供许多不同的软件功能,那就是我们之前谈到的“软件 库”啦!因此,你必须要前往 yum server 查询到相关的软件库网址后,再继续处理后续的设置 事宜。
事实上 CentOS 在释出软件时已经制作出多部映射站台 (mirror site) 提供全世界的软件更 新之用。 所以,理论上我们不需要处理任何设置值,只要能够连上 Internet ,就可以使用 yum 啰!
22.3.1 利用 yum 进行查询、安装、升级与移除功能
查询功能:yum [list|info|search|provides|whatprovides] 参数
[root@www ~]# yum [option] [查询工作项目] [相关参数]
选项与参数:
[option]:主要的选项,包括有:
-y :当 yum 要等待使用者输入时,这个选项可以自动提供 yes 的回应;
--installroot=/some/path :将该软件安装在 /some/path 而不使用默认路径
[查询工作项目] [相关参数]:这方面的参数有:
search :搜寻某个软件名称或者是描述 (description) 的重要关键字;
list :列出目前 yum 所管理的所有的软件名称与版本,有点类似 rpm -qa;
info :同上,不过有点类似 rpm -qai 的运行结果;
provides:从文件去搜寻软件!类似 rpm -qf 的功能!
范例一:搜寻磁盘阵列 (raid) 相关的软件有哪些?
[root@www ~]# yum search raid
范例二:找出 mdadm 这个软件的功能为何
[root@www ~]# yum info mdadm
范例三:列出 yum 服务器上面提供的所有软件名称
[root@www ~]# yum list
范例四:列出目前服务器上可供本机进行升级的软件有哪些?
[root@www ~]# yum list updates <==一定要是 updates 喔!
范例五:列出提供 passwd 这个文件的软件有哪些
[root@www ~]# yum provides passwd
利用 yum 的功能,找出以 pam 为开头的软件名称
yum list pam*
安装/升级功能:yum [install|update] 软件
[root@www ~]# yum [option] [查询工作项目] [相关参数]
选项与参数:
install :后面接要安装的软件!
update :后面接要升级的软件,若要整个系统都升级,就直接 update 即可
范例一:将前一个练习找到的未安装的 pam-devel 安装起来
[root@www ~]# yum install pam-devel
移除功能:yum [remove] 软件
[root@study ~]# yum remove pam-devel
22.3.2 yum 的配置文件
[root@www ~]# vi /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7
-
[base]:代表软件库的名字!中括号一定要存在,里面的名称则可以随意取。但是不能有两个相同的软件库名称,否则 yum 会不晓得该到哪里去找软件库相关软件清单文件。
-
name:只是说明一下这个软件库的意义而已,重要性不高!
-
mirrorlist=:列出这个软件库可以使用的映射站台,如果不想使用,可以注释这行;
-
baseurl=:这个最重要,因为后面接的就是软件库的实际网址!mirrorlist 是由 yum 程序自行去捉映射站台,baseurl 则是指定固定的一个软件库网址!我们刚刚找到的网址放到这里来啦!
-
enable=1:就是让这个软件库被启动。如果不想启动可以使用 enable=0 喔!
-
gpgcheck=1:还记得 RPM 的数码签章吗?这就是指定是否需要查阅 RPM 文件内的数码签章!
-
gpgkey=:就是数码签章的公钥档所在位置!使用默认值即可
[root@www ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/7/os/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-$releasever - Updates
baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/7/updates/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-$releasever - Extras
baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/7/extras/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
# 默认情况下,软件仓库仅有这三个有启用!所以鸟哥仅修改这三个软件库的 baseurl 而已喔!
范例一:列出目前 yum server 所使用的软件库有哪些?
[root@study ~]# yum repolist all
# 最右边有写 enabled 才是有启动的!
修改软件库产生的问题与解决之道
yum 会先下载软件库的清单到本机的 /var/cache/yum 里面去! 那我们修改了网址却没有修改软件库名称 (中括号内的文字), 可能就会造成本机的清单与 yum 服务器的清单不同步
需要清除掉本机上面的旧数据进行同步
[root@www ~]# yum clean [packages|headers|all]
选项与参数:
packages:将已下载的软件文件删除
headers :将下载的软件档头删除
all :将所有容器数据都删除!
范例一:删除已下载过的所有容器的相关数据 (含软件本身与清单)
[root@www ~]# yum clean all
22.3.3 yum 的软件群组功能
系统上面的软件大多是群组的方式一口气来提供安装的
yum [群组功能] [软件群组]
选项与参数:
grouplist :列出所有可使用的“软件群组组”,例如 Development Tools 之类的;
groupinfo :后面接 group_name,则可了解该 group 内含的所有软件名;
groupinstall:这个好用!可以安装一整组的软件群组,相当的不错用!
groupremove :移除某个软件群组;
# 范例一:查阅目前软件库与本机上面的可用与安装过的软件群组有哪些?
[root@study ~]# yum grouplist
Installed environment groups: # 已经安装的系统环境软件群组
Development and Creative Workstation
...
Available environment groups: # 还可以安装的系统环境软件群组
Minimal Install
Compute Node
...
Installed groups: # 已经安装的软件群组!
Development Tools
...
Available Groups: # 还能额外安装的软件群组!
Compatibility Libraries
...
yum groupinfo "Scientific Support"
Group: Scientific Support
Group-Id: scientific
Description: Tools for mathematical and scientific computations, and parallel computing.
Optional Packages:
Macaulay2
atlas
fftw
fftw-devel
fftw-static
...
...
Scientific Support 里面的软件都是“可选择的”!而不是“主要的 (mandatory)”,因此默认情况下,上面这些软件通通不会帮你安装!可以使用 yum install atlas fftw .. 一个一
个写进去安装
如果想要让 groupinstall 默认安装好所有的 optional 软件,可以修改配置文件 /etc/yum.conf
22.3.4 EPEL/ELRepo 外挂软件以及自订配置文件
[root@study ~]# vim /etc/yum.repos.d/epel.repo
[epel]
name = epel packages
baseurl = https://dl.fedoraproject.org/pub/epel/7/x86_64/
gpgcheck = 0
enabled = 0
故意不要启动这个软件仓库,只是未来有需要的时候才进行安装,默认不要去找这
个软件库!
yum --enablerepo=epel install netcdf R
使用本机的原版光盘
假设光盘挂载在 /mnt
[root@study ~]# vim /etc/yum.repos.d/cdrom.repo
[mycdrom]
name = mycdrom
baseurl = file:///mnt
gpgcheck = 0
enabled = 0
[root@study ~]# yum --enablerepo=mycdrom install software_name
22.3.5 全系统自动升级
通过 yum -y update
来自动升级,那个 -y
很重要,因为可以自动回答 yes 来开始下载与安装! 然后再通过 crontab 的功能来处理即可
[root@study ~]# echo '10 1 * * * root /usr/bin/yum -y --enablerepo=epel update' > /etc/cron.d/yumupdate
[root@study ~]# vim /etc/crontab
如果升级的是核心软件 (kernel),那么你还是得要重新开机才会让安装的软件顺
利运行的
22.3.6 管理的抉择:RPM 还是 Tarball
如果我要升级的话,或者是全新安装一个新的软件, 那么该选择 RPM 还是 Tarball 来安装呢?
- 优先选择原厂的 RPM 功能
- 选择软件官网释出的 RPM 或者是提供的软件库网址
- 利用 Tarball 安装特殊软件
- 用 Tarball 测试新版软件
RPM 与 Tarball 各有其优缺点,不过,如果有 RPM 的话,那么优先权还是在于 RPM 安装上面,毕竟管理上比较便利,但是如果软件的架构差异性太大, 或者是无法解决相依属性的问题,那么与其花大把的时间与精力在解决属性相依的问题上,还不如直接以 tarball 来安装
22.3.7 基础服务管理:以 Apache 为例
略
22.4 SRPM 的使用 : rpmbuild (Optional)
新版的 rpm 已经将 RPM 与 SRPM 的指令分开了,SRPM 使用的是 rpmbuild 这个指
令,而不是 rpm
22.4.1 利用默认值安装 SRPM 文件 (--rebuid/--recompile)
选项 | 描述 |
---|---|
--rebuild | 这个选项会将后面的 SRPM 进行“编译”与“打包”的动作,最后会产生 RPM 的文件,但是产生的 RPM 文件并没有安装到系统上。当你使用 --rebuild 的时候,最后通常会发现一行字体: Wrote: /root/rpmbuild/RPMS/x86_64/pkgname.x86_64.rpm 这个就是编译完成的 RPM 文件啰!这个文件就可以用来安装啦!安装的时候请加绝对路径来安装即可! |
--recompile | 这个动作会直接的“编译”“打包”并且“安装”啰!请注意, rebuild 仅“编译并打包”而已,而 recompile 不但进行编译跟打包,还同时进行“安装”了! |
先下载软件: wget http://vault.centos.org/7.1.1503/updates/Source/SPackages/ntp-4.2.6p5-19.el7.centos.1.src.rpm
再尝试直接编译看看: rpmbuild --rebuild ntp-4.2.6p5-19.el7.centos.1.src.rpm
上面的动作会告诉我还有一堆相依软件没有安装~所以我得要安装起来才行: yum install libcap-devel openssl-devel libedit-devel pps-tools-devel autogen autogen-libopts-devel
再次尝试编译的行为: rpmbuild --rebuild ntp-4.2.6p5-19.el7.centos.1.src.rpm
最终的软件就会被放置到: /root/rpmbuild/RPMS/x86_64/ntp-4.2.6p5-19.el7.centos.1.x86_64.rpm
22.4.2 SRPM 使用的路径与需要的软件
22.4.3 配置文件的主要内容 (*.spec)
22.4.4 SRPM 的编译指令 (-ba/-bb)
22.4.5 一个打包自己软件的范例
略
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2020-11-08 20201108 小马哥讲Spring核心编程思想【归档】
2020-11-08 20201108 小马哥讲Spring核心编程思想 - 笔记 19-20
2020-11-08 20201108 小马哥讲Spring核心编程思想 - 笔记 12-18
2020-11-08 20201108 小马哥讲Spring核心编程思想 - 笔记 1-11
2018-11-08 20181108 Apache Commons Lang