yum 仓库实现 – 1| 学习笔记

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 快速学习 yum 仓库实现 – 1。

开发者学堂课程【Linux 软件包安装和 yum 仓库实战yum 仓库实现 – 1】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/590/detail/8337


yum 仓库实现 – 1

 

目录:

一、 包校验

二、rpm 数据库

三、yum

 

一、 包校验

提到了对数据包的检查校验,其中有一个 rpm -K checksig rpmfile 选项,是检查包的完整性和签名,当这个数据包被篡改、被破坏,内容发生了变化,和开发出来的时候原始包内容不一样了,这个选项是可以了解,看到这个变化的。

提示: tree-1.6.0-10.e17.x86 64 .rpm 目前是没有检查的,缺失 key,要想检查需要导入一个对应的密钥,密钥在光盘的根目录下: /mi sc/ cd RPM-GPG-KEY-C entos-7

是一个普通文本文件,但里面内容都是 key 的信息。

public key 即公钥,公钥的信息需要导入到当前系统中,才能查询,用到 --import选项,导入后相当于带有选项的功能了。此时检查结果是正确的。

当内容被故意破坏时,当前包,只是追加了回车换行,变化后结果就是不正确的。

只要有一点变化,包与初始状态就不同了。此时可以避免安装被串改、危险的包。前提需要人为导入密钥。但是不同的开发者对应的密钥是不一样的。 

公钥加密:对称加密:加密、解密使用同一密钥。非对称加密:密钥是成对儿的。

rpm (-V]--verify) [select-options] [verify-options]

S file Size differs

M Mode differs (includes permissions and file type)5 digest (formerly MD5 sum) differs

D Device major/minor number mismatch

L readLink(2) path mismatch

U User ownership differs

G Group ownership differs

T mTime differs

P capabilities differ

包来源合法性验正及完整性验证

完整性验证:SHA256

来源合法性验证:RSA

公钥加密

对称加密:加密、解密使用同一密钥

非对称加密:密钥是成对儿的

public key:公钥,公开所有人

secret key:私钥,不能公开了

导入所需要公钥

rpm -K|checksig rpmfile 检查包的完整性和签名

rpm --import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7CentOS 7发行版光盘提供:

RPM-GPG-KEY-CentOS-7rpm -qa “gpg-pubkey*”

 

二、 rpm 数据库

这是一个存放 rpm 对应的数据的数据库,这个目录如果破坏了,可以用这些命令来重建,但是重建并不会把丢失的 rpm 的原有数据库内容找回,只是把数据库重新建立起来。

据库重建:

/var/lib/rpm

rpm (--initdb|--rebuilddb)

initdb:初始化

如果事先不存在数据库,则新建之

否则,不执行任何操作

rebuilddb:重建已安装的包头的数据库索引目录

如果人为删除目录,会自动生成初始数据,但是数据是空的,不能重新使用。

rpm 术语:

-l 安装查询 -e卸载查询

-qi 查询信息

-qa 列出所有的包

-q package 包是否安装上.0表示没安装,1表示已安装。

-ql 列出当前包里包括的文件列表

-qc 查配置文件

-qd 查配置文档

-qf /path/file 查询此文件来自哪个包

-qp /path/rpm file name 配合 rpm 文件名,跟的是 rpm 文件名。

-qi 查磁盘上的包对应的信息

-ql 查磁盘上的包对应的文件列表

-nodeps --force 强制安装

-root= 指定有哪个参考点之下的目录进行安装,默认是从根开始安装的,每个 rpm boot 包括的文件都很多,列出的文件分门别类,分布在根目录下,如果不是在根目录下,也可以指定根目录下一级一级的目录进行安装。

-q –-scripts 查看脚本,可以查询脚本,但并不是所有的包里都带有脚本

命令来自哪个包查询方法:

rpm 是个外部命令,内部命令在 bash,很好查询:rpm -ql /bin/bash

在掌握其路径后,进行查询:rpm -qf /usr/bin rpm

实验:删除 /lib64/libc.so.6,恢复之

卸载 rpm 包,发现它具有依赖性,无法卸载。

删除命令:[ root@centos7 ~]#rpm2cpio /misc/cd/Packages/rpm-4.11.3-32.e17.x86_ 64.rpm Icpio -id

强制卸载命令:[ root@centos7 ~] #rpm -erpm – nodeps

由于rpm被卸载,以下工具不能使用:

rootacentos7 ~ #which rpm2cp1o

/usr/bi n rpm2cpi 0

lroot@centos7 ~]#rpm -qf /usr/bi n/ rpm2cpiorpm-4.11.3-32.e17.x86_ 64

[root@centos7 ~]#rpm -qf /usr/bin/ rpm2cpiorpm-4.11.3-32.e17 .x86_ 64

[ root@centos7 ~ ]#_

修复它实际上可以使用光盘里的救援模式功能进行修复。

Boot menu

1.Renovable Devices.

2.Hard Drive

3.CD-ROM Dr ive

4.Netuork boot from Intel E1909

5.Netuork boot from Intel E1000 u2

选择第三项光盘,Rescue nstalled syste 救援模式。不止适用于一个命令,其他命令被删除也可以使用这个命令修复。对系统来讲,只是一个程序来进行修复,程序丢失可以找回,但是时间成本太高,生产机会会减少。 

救援模式启动后,进行修复。运用光盘来运行,挂载

bash-4.1m ls -1 mntsys imgebinvrpa-FLr-XT-X. 1 root root 28392 2818- 86-19 15:56 ntUsys imageb in/rpm

实验:删除 rpm 包,恢复之第二种命令:

先删除:切根,search root 就是把原来的根作为制定的根,但是一切根,rpm 命令就不能用了,表面上用的是光盘的命令,但是 rpm 实际上是用硬盘的命令,所以此时 rpm 救援命令就失效了。退出后又回到原来状态。再使用之前的方法重新安装:

bash-4.1# rpm -fvh /mnt/cdrom/Packages/rpm-4.8.8-59.e16.×86 64.rpm —-rootsamt/sysimage

warning:/mnt/cdrom/Packages/rpm-4.8.8-59.e16.x86_64.rpm:Header U3 RSA/SHA1 Signature, key ID c185b9de:NOKEY

package rpm-4.8.8-59.e16.x86 64 is alreadu installed

bash-4.1# rpm -ivh /mnt/cdrom/Packages/rpm-4.8.8-59.c16.x86_64.rpm --root=/mnt/susimage/ --force

warning:/nt/cdrom/Packages/rpm-4.8.8-59.e16.x86_64.rpm:Header U3 RSA/SHA1 Signature, key ID c185b

rpm 命令可以用了,此时的 rpm 是切过根的,可以使用的。重新启动第三项就可以了。

<Enter Setup>

root@centos7~j#rpm-a/usr/bin/rpm2cp1o

rpm-4.11.3-32.e17.x86_64

root@centos7 #rpm-af/usr/bin/rpm2cpio

rpm-4.11.3-32.e17.x86_64

root@centos7

root@centos7

root@centos7

[root@centos7

[root@centos7

Lroot@centos7心#rom -ivh

/misc/cd/packaaes/svstem-confia-kickstart-2.9.7-1.el7.noarch.romwarning:/misc/cd/Packages/system-config-kickstart-2.9.7-1.e17.noarch.

rpm:Header V3 RSA/SHA256Sianature.key

IDf4a80eb5:NOKEY

error:Faileddependencies:

system-config-dateisneeded bysystem-config-kickstart-2.9.7-1.e17.noarch

system-config-keyboard >= 1.3.1 is needed by system-config-kickstart-2.9.7-1.e17.noarch

system-confia-languageisneeded by system-config-kickstart-2.9.7-1.e17.noarch[root@centos7 ~]#

rpm-ivh /misc/cd/Packages/system-config-date-

system-config-date-1.10.6-2.e17.centos.noarch.rpm

svstem-confia-date-docs-1.0.11-4.e17.noarch.rpm

[root@centos7 ~]#rpm-ivh

/misc/cd/packages/system-config-date-1.10.6-2.e17.centos.noarch.rp

warning:/misc/cd/Packages/system-config-date-1.10.6-2.e17.centos.noarch

安装、卸载、查询基本没有问题了,但是 rpm 包仍有较大的缺陷,即依赖性的问题。

安装的软件包:

root@centos7~l#rpm -ivh/misc/cd/Packages/system-confiq-kickstart-2.9.7-1.e17.noarch.rpm

警告:/misc/cd/Packages/system-config-kickstart-2.9.7-1.e17.noarch.rpm:Header V3 RSA/SH/256Signature,key IDf4a80eb5:NOKEY

失败原因:依赖于这些包:

system-config-date Is needed by

system-confia-kickstart-2.9.7-1.el7.noarch

system-config-keyboard >= 1.3.1 is needed by

system-config-kickstart-2.9.7-1.e17.noarch

system-config-language is needed by

system-config-kickstart-2.9.7-1.e17.noarch

安装这些包:

root@centos7~j#rpm-1vh/misc/cd/Packages/system-conf1g-date-1.10.6-2.el7.centos.noarch.rp

告:

/misc/cd/Packages/system-config-date-1.10.6-2.e17.centos.noarch.rpm:Header V3 RSA/SHA256 Signature, key IDf4a80eb5:NOKEY

失败原因:缺少包

gnome-python2-canvas is needed by

system-config-date-1.10.6-2.e17.centos.noarchsystem-config-date-docsis needed by

system-config-date-1.10.6-2.e17.centos.noarch

依赖性并不能告诉我们所有的包,依赖的包并不一定真的都在光盘里,有可能来自于其他的互联网上的 rpm 包的源,互联网上有很多 rpm 包的路径都存了许多 rpm包源相关的内容,如 epl 源,在互联网上有,在光盘里带的是光盘里自己的 rpm  包。

当我们安装某个包时,它可能会依赖于光盘里的包,也可能会依赖别的包,所以这种依赖性导致安装过于繁琐。解决这个问题就是一个一个找,拷下来,放在一个目录里。

  

三、 yum

这是一种新的解决方案,可以轻松解决包的依赖性,这是 yum 存在的最重要的一个原因。当然这只是其中一种解决方案,在新版本也有新的解决技术:

dnf。他的性能比 yum 更快,dnf 这种方式我们了解即可。

1. CenteOS:

 yum、dnf

2. YUM 介绍

全称:Yellowdog Update Modifier,rpm 的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date 的替代工具

3.yum 和 rpm 的区别:

rpm 是拿一个文件直接安装就行,不需要事先配置任何内容,它是孤立的独立的文件。

yum 安装是基于 cs 结构的,后面很多应用都是基于这种结构的。这种结构叫服务器端与客户端。

C 是 client,即客户端,s 是 server,即服务器端。客户端有专门的客户端电脑,假设有一个 yum 客户端,用 yum 安装,就需要实现搭建一个 yum 服务器,服务器与客户端之间是要进行网络连接的。也可以在同一台电脑上,既是客户端又是服务器。但不可能每个电脑都客户端又是服务器。

4.yum repository

yum repo,存储了众多 rpm 包,以及包的相关的元数据文件(放置于特定目录repodata 下)

yum server 包括:yum repo

第一个是需要安装的 rpm 包,也就是各种各样的 rpm 包。这个包是很多的,此外还有一个很重要的内容:存的是要安装的包,即元数据 Meta,元数据存的就是 rpm包相互的依赖性,都放在了仓库的元数据,将来会表现为一个文件夹 repodata,本身在光盘中就有。这个包存了很多的数据:依赖性、属性信息、分组信息。

yum 的客户端想利用 yum 安装,就需要实现在 yum 客户端上加以配置,配置文件要指向仓库的路径,需要事先配置,不然无法安装软件,配置文件后缀要求是: repo,而且需要固定的放在目录里,必须放在:/ etc/yum/repos.d/ 中。这个文件记录了仓库的服务器路径。

既然要有服务器又有客户端,就必须知道服务器的位置,很多客户端要想访问某个服务器,必须指定服务器的路径。

yum 客户端配置完后,通过查询服务器文件,就能知道其服务器的路径。

安装软件只需要运行一个命令即可:yum install 后面加上一个文件即可,或者跟上一个包名 package 注意:是包名不是文件名。

当写上文件后,会自动去查服务器的路径,就会自动通过网络连接到服务器上,如果现在要安装 tree 包,就去查 Meta 里面,Meta 里面放的是元数据,放的就是仓库里的包列表,有 tree 包,知道其有依赖性,是否依赖于其他包,都会把信息返回其客户端,放回到专门的文件夹中。Meta 会下载,此时本机就会缓存信息。 

yum 客户端默认行为:虽然全都下载下来了,也放到目录里,安装完后会自动删除,缓存中不会留有 Meta 包,但是元数据会缓存。

这个机制带来一个效果:再安装了一个别的包,如 yum install httpd 包 ,第一次跑到服务器中去寻找元数据,这次就不需要了,本机仓库已经有了元数据的缓存。再去仓库里把 p1p2p3 下载下来自动安装,本机不保存。缓存默认存的是元数据。

好处是:利用缓存,本地有缓存,不需要再去服务器了,提高速度

缺点是: 如果服务器的路径,这边仓库发生了变化,比如新增加了新包,仓库也更新了,这里就没有更新。有可能一查新的包,仓库未更新,就安装不上了。不一定是实时的,完全一样的了。

所谓的解决方案是:把仓库的缓存删除,清空缓存之后,被迫链接服务器,再去下载服务器缓存,此时获取了最新的缓存,由此解决了 yum 的安装问题。只需要把服务器搭好,安装起来。这就是 yum 的工作原理。配置只需配置一次即可,不需要关心路径,安装起来非常方便。

yum 在实现之后,需要将服务器和客户端都组合起来,才能实现。

服务器通常来讲,如果网络中有很多台都需要安装 yum 软件,会单独装一台 yum服务器。如果只需要单台主机搭建 yum 服务器,换句话说,就是自己单独使用,别人不用也可以,就是建立单主机服务器,建立仓库独立使用。但是在生产中大部分情况都是为网络中的用户提供服务的。

image.png

所以在 cent OS 分别建立两个版本:centos7 和 centos6

相当于有两个仓库,第一个仓库视为 centos7 提供服务的。

第二个是为 centos6 提供服务的

所谓的 yum 服务器无非是把 rpm 包和 Meta 元数据准备好就行,这两个在光盘上已经有了。

光盘就是一个仓库,需要在此加以指定,登录后用的是默认配置,

to:<LOOPBACK , UP ,LOWER_UP> mtu65536gdisc noqueue state UNKNOWN

link/loopback00:00:00:00:00:00brd00:00:00:00:00:00

inet127.0.0.1/8scope host 1o

inet6::1/128scope host

:eth0: valid lft forever preferred_lft forever1500 gdiscpfifo_fast state UP qlen

<BROADCAST ,MULTICAST ,UP, LOWER_UP> mtu

link/ether00:0c:29:e1:f7:aa brd ff:ff:ff:ff:ff:ff

inet192.168.34.102/24 brd192.168.34.255 scopeglobal etho

inet6fe80::20c:29ff:fee1:f7aa/64 scope Tink

valid_1ft forever preferred_1ft forever

4.文件服务器:

http://

https://一种特殊的格式,是加密的

ftp://

file://

先来做一个本机的仓库,本机路径:做一个 yum 的配置文件,按照规定的格式写配置文件,只要是 repo 后缀就可以,把光盘作为 base 源。大小写无所谓。 

entos-Base.repo Centos-fasttrack.repo Centos-vault.repo

entos-Debuginfo.repo CentoS-Media.repo

root@centos6yum.repos.d]# mkdir bak

root@centos6yum.repos.d]#mv *.repo bak/

root@centos6 yum.repos.d]# 1s

ak

root@centos6yum.repos.d]# pwd

etc/yum.repos.d

root@centos6 yum.repos.d]#

关键内容:

//第一行中括号,给仓库起个名字,仓库的名字没有要求,不要有空格,就像定义变量一样,与众不同即可。

仓库的路径,跟上四种路径:

http://

https://

ftp://

file://

baseurl=file:///misc/cd/

每安装一个包,系统会自动校验包的选择,相当于自动检查这个包是否是合法的、安全的包,如果不去做检查,就不会被认成安全的、合法的包。 

要想识别一个包,需要导入路径:[ root@centos7 ~]#rpm --import /mi sc/ cd/ RPM-GPG-KEY-Centos-7

如果想不被识别和检查这个包:#gpgcheck=0

如果不写也行,就需要人为的导入。

此时配置文件已经写好:

base

baseurl=file:///misc/cd/

#gpgcheck=0

现在可以利用 yum 轻松的安装包了。

先确认仓库是否已经搭建好:

"base. repo" [New] 3L, 43C written

[ root@centos6 yum. repos.d]#

[ root@centos6 yum. repos.d]# cd

[ root@centos6]#

[ root@centos6]#yum repolist

如果没有配名字就会有提示:

base' is missing name in configuration,using id

name应当单独加个代码,如:name=cdrom repo或者可以用id做名字。

经过校验,该文件有6706个包,但是实际上只有3000个包。这里列的包并不是实际的 rpm 包的数量,它是根目录里的,它是两张盘合理来为6706个,其实一张盘里包的数量为3000左右,它是包含单张盘的。

如果装的是第一个盘,正常安装即可,如果是装的第二张盘,就需要把所有的盘拷到一个目录里。

此时可以安装了

解决依赖性问题:

使用 yum

[root@centos6 ~]# yum install system-config-kickstart

由于其依赖性,一共需要安装26个包。瞬间安装完成。此时可以看出yum的便捷性。

y 可以事先写在目录里,加一个选项,写在脚本里,变换成非交换性程序。

root@centos6~#yum instal1system-config-kickstart -y

Loadedplugins: fastestmirror, refresh-packagekit, security

settingup Install Process

Loadingmirrorspeedsfromcached hostfile

Packagesystem-config-kickstart-2.8.6.6-1.e16.noarch already installed and latest version Nothingto do

[root@centos6~]#

这个仓库只能给本机使用,此外还有一个密钥问题,刚才人为的写成0,但事实上把密钥写为零是危险的,为了安全可以考虑将其更改,可以把它换成一或注释删掉。

此时默认为要检查,它是要检查每一个包的签名的,再安装就会被阻止,基于这个包的公钥没有安装,没有确认合法性,就不安装了。

把刚才的包写为 gpgkey=,就会自动导入。

Is this ok [y/N]:y

DownToadingPackages:

varning: rpmts_HdrFromFdno:Header V3 RSA/SHA1 Signature, key ID c105b9de:NOKEYRetrievingkey from file:///misc/cd/RPM-GPG-KEY-CentOS-6

[mporting GPG key0xC105B9DE:

Userid: “Centos-6 Key(CentoS6 official Signing Key) <centos-6-key@centos.org>"From:/misc/cd/RPM-GPG-KEY-CentoS-6

Is thisok Ly/NJ:y

Running rpm_check_debug

RunningTransaction Test

Transaction Test Succeeded

RunningTransaction

Installing vsftpd-2.2.2-24.el6.x86 64

Verifying :vsftpd-2.2.2-24.e16.x86_64

[nstalled:

vsftpd.x86_64 0:2.2.2-24.e16

导入之后就可以验证其合法性了, 

这就是 yum 配置文件的写法,最终代码:

name=cdrom repo

baseurl=file:///misc/cd/

#gpgcheck=0

gpgkey=file:///misc/cd/RPM-GPG-KEY-Cent0S-6

"/etc/yum.repos.d/base.repo"5L,104C written

[root@centos6 ~]#yum install vsftpd

卸载包的代码:

Removed :

system-config-kickstart. noarch 0:2.8.6.6-1.el6 

从结果中发现包并没有被卸载干净,这就是因为 yum 具有依赖性,它只能卸载自己而无法卸载其他的软件。

相关文章
|
6月前
|
缓存
详解CentOS8更换yum源后出现同步仓库缓存失败的问题
详解CentOS8更换yum源后出现同步仓库缓存失败的问题
366 0
|
Linux 应用服务中间件 nginx
CentOS7搭建yum源仓库(阿里源)
CentOS7搭建yum源仓库(阿里源)
1967 0
|
3月前
|
缓存 Linux 网络安全
解决 CentOS 7 官方 yum 仓库无法使用的最佳实践
【8月更文挑战第18天】若 CentOS 7 的官方 YUM 仓库无法使用,可按以下步骤解决: 1. **检查网络连接**: - 确认服务器能正常上网,可通过访问外部网站或网络诊断测试。 - 检查防火墙设置,避免其阻挡 YUM 的网络访问。 2. **检查 YUM 配置**: - 核实 `/etc/yum.repos.d/` 下的 `CentOS-Base.repo` 文件中仓库地址正确无误。 - 确认配置文件内的 `enabled` 选项设为 `1` 以启用仓库。
1664 0
|
5月前
|
Ubuntu Python
银河麒麟-麒麟软件操作系统 kylin 搭建yum源 ubuntu搭建yum源 yum软件仓库搭建ftp源、python源、硬盘源
银河麒麟-麒麟软件操作系统 kylin 搭建yum源 ubuntu搭建yum源 yum软件仓库搭建ftp源、python源、硬盘源
739 1
|
6月前
|
存储 缓存 Unix
|
6月前
|
缓存 Linux 测试技术
搭建本地YUM仓库
在Redhat 9系统中,通过挂载系统安装盘到/mnt,然后创建本地YUM仓库以实现软件包管理。首先查看磁盘挂载情况,将ISO镜像挂载到/mnt。接着,备份`/etc/yum.repos.d/`目录内容,删除原有仓库,创建`loaclhost.repo`文件并配置指向/mnt中的Package目录。运行`yum clean all`清除缓存,`yum makecache`建立元数据。最后,成功通过新配置的本地仓库安装了bind软件及其依赖。
247 3
|
6月前
|
Linux
Linux 学习笔记七:YUM安装软件
Linux 学习笔记七:YUM安装软件
109 0
|
6月前
|
SQL 消息中间件 分布式计算
Hadoop学习笔记(HDP)-Part.05 Yum源配置
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
152 0
|
6月前
|
缓存
简易yum仓库搭建
简易yum仓库搭建,实验准备,获取yum仓库、安装httpd,客户机配置yum源,测试、验证
135 0
|
缓存 安全 网络协议
部署YUM仓库及NFS共享服务
部署YUM仓库及NFS共享服务
228 0