yum安装包管理

Linux 软件包管理

老师笔记

一、 两大流行软件包管理工具

RPM 和 DPKG


image.png

二、RPM 和 SRPM

RPM 全名是 RedHat Package Manager
命名规则

httpd-2.4.6-67.el7.centos.x86_64.rpm
 |     |    |  |     |      |    |
 |     |    |  |     |      |    |___.rpm-------软件包后缀名,一般为 *.rpm 或 *.src.rpm
 |     |    |  |     |      |________.x86_64----适用硬件平台,一般为 x86_64、i386 等
 |     |    |  |     |_______________.centos----适用操作系统,noarch为通用版本
 |     |    |  |_____________________.el7-------发行商版本号,el5为CentOS5与HREL5以下使用
 |     |    |________________________.67--------编译版本号,表示第几次编译
 |     |_____________________________.2.4.6-----软件版本号,分别为:主版本号.次版本号.修正号
 |___________________________________.httpd-----软件包名称

平台 noarch:

就是没有任何硬件等级上的限制。一般来说,这种类型的 RPM 档案,里面应该没有 binary program 存在, 较常出现的就是属亍 shell script 方面的软件。

MD5校验

[root@kvm-docker ~]# md5sum anaconda-ks.cfg
bb6e974d74a51b24d0576edca461a03b  anaconda-ks.cfg

SRPM

是 Source RPM 的意思,也就是这个 RPM 档案里面含有原始码,扩展名为***.src.rpm

为何说 CentOS 是『社群维护的企业版』呢? Red Hat 公司的 RHEL 发布出后,连带会将 SRPM 发布出来。

社群的朋友就将这些 SRPM 收集起来幵重新编译成为所需要的软件,再重复释出成为 CentOS,所以才能号称与 Red Hat 的 RHEL 企业版同步啊!真要感谢 SRPM !如果想要理解 CentOS 是如何编译一支程序的, 也能够透过学习 SRPM 内含的编译参数,来学习的啊!

rpm 包的安装:

rpm 包安装工具,无法解决软件包的依赖性

rpm   -ivh   软件包名

rpm 包的管理

rpm -qa | grep 软件包名 //查询系统已安装的软件
rpm -qi 查询已安装软件包的信息
rpm -ql 软件包名  //  列出所有的已安装文件
rpm -qc 软件包名  // 列出配置文档
rpm -qf    //查询这个文件是哪个软件包安装的,需要输入绝对路径的完整文件名
rpm -V 校验已安装到系统中的文件的改动情况

-V 后的值:

5 md5校验值
S 文件大小
L 链接文件
T 文件的创建时间
D 设备文件
U 文件的所属主
G 文件的所属组
M 文件的权限

经典实例

rpm2cpio 命令可以从一个 rpm 包中提取出文件。

当不小心删除了系统里的一个重要的配置文档,该怎么找回来

首先, 查询这个文件是哪个软件包安装的
rpm -qf 绝对路径的完整文件名
之后,将需要的文件提取到当前的工作目录
rpm2cpio 软件包名.rpm | cpio -idv ./要提取的文件路径
要提取的文件路径 需要是 这个软件包安装到系统中后,这个文件的路径。
比如 /usr/bin/tree 命令如下:

  • rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -idv ./usr/bin/tree

YUM 安装

YUM 是Yellow dog Updater Modified的简称,起初是由yellow dog这一发行版的开发者Terra Soft研发,用python写成,那时还叫做yup(yellow dog updater),后经杜克大学的Linux@Duke开发团队进行改进,遂有此名。yum的宗旨是自动化地升级,安装/移除rpm包,收集rpm包的相关信息,检查依赖性并自动提示用户解决。yum的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是http或ftp站点, 也可以是本地软件池,但必须包含rpm的header, header包括了rpm包的各种信息,包括描述,功能,提供的文件,依赖性等.正是收集了这些 header并加以分析,才能自动化地完成余下的任务。它能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。自己本身也可以做yum服务器,本身可以根据光盘镜像做yum服务器。

配置文件

通过配置文件的设置,可以把从远程仓库安装的软件保存到本地。

配置文件路径: /etc/yum.conf

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
...略...

cachedir 设置缓存软件到本地的路径
keepcache 设置是否保存缓存的软件包,0 不保存, 1 保存
假如想把已安装好的软件包保存到本地,需要设置 keepcache=1

PID 文件

/var/run/yum.pid

这个文件在每次使用 yum 命令时被创建,正常安装软件结束后被删除。有时候非正常退出 yum install 命令时,这个文件会保留,并且里面写入了本次 yum install 命令的进程号。

因为 YUM 是单进程的,就是每次只能运行一个 yum install 命令, 所以假如上次的命令没有正常结束,本次的命令就无法执行,此时就会报错,解决方法就是删除 /var/run/yum.pid 文件后,重新执行 yum install 命令即可。

YUM 源配置文件

  • /etc/yum.repos.d
ls /etc/yum.repos.d/

CentOS-Base.repo       CentOS-fasttrack.repo  CentOS-Vault.repo
CentOS-CR.repo         CentOS-Media.repo      docker-ce.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo

在这个目录下存放了可以使用的软件包仓库的地址等信息,都是以 .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=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  • [base] 代表软件库的名字!中括号一定要存在,里面的名称则可以随意取。但是不能有两个相同的软件库名称
  • name 为库的名称,自定义但不需要太长
  • mirrorlist=:列出这个软件库可以使用的软件仓库的URL列表,如果不想使用,可以注解到这行;
  • baseurl=:这个最重要,因为后面接的就是软件库的实际网址! mirrorlist 是由 yum 程序自行去查找仓库URL, baseurl 则是指定固定的一个软件库URL!
  • baseurl 支持的传输协议,可以为
    file://
    ftp://
    http://
    https://
  • enabled 为是否启用库 1 代表启用;0 代表关闭
  • gpgcheck 为检查软件包的签名,1 为检查;0 为不检查
  • gpgkey 数字签名的公钥位置

基本用法

# 安装软件
[root@localhost ~]# yum -y install httpd      # -y表示后面的交互式询问默认选为yes
# 更新所有软件(包括内核)
[root@localhost ~]# yum update
# 升级指定软件
[root@localhost ~]# yum update httpd
# 列出所有可更新的软件
[root@localhost ~]# yum check-update
# 列出所有可安装的软件清单
[root@localhost ~]# yum list
# 查找软件包
[root@localhost ~]# yum search httpd
# 删除软件包
[root@localhost ~]# yum remove httpd
# 清理yum的缓存
[root@localhost ~]# yum clean all
# 生成yum的缓存
[root@localhost ~]# yum makecache

// 查询 pstree 文件由那个软件包安装
yum provides    pstree

软件包组

yum [群组功能] [软件群组]
选项与参数:
   grouplist   :列出所有可使用的“软件群组组”,例如 Development Tools 之类的;
   groupinfo   :后面接 group_name,则可了解该 group 内含的所有软件名;
   groupinstall:这个好用!可以安装一整组的软件群组,相当的不错用!
   groupremove :移除某个软件群组;

自建 YUM 源(仓库)

(a)基于光盘镜像的 YUM 源

节省硬盘空间,但是不可扩展

CentOS_BuildTag                 :制作标签
EFI                             :EFI启动方式文件
EULA                            :最终用户许可协议
GPL                             :GPL授权协议
images                          :网络PXE启动文件
isolinux                        :挽救模式文件
LiveOS                          :微型系统镜像
Packages                        :自带RPM包    # 重点
repodata                        :YUM源数据库  # 重点
RPM-GPG-KEY-CentOS-7            :公钥信息文件
RPM-GPG-KEY-CentOS-Testing-7    :公钥信息文件
TRANS.TBL                       :光盘目录

在光盘镜像中还存放着一个repodata目录,这个目录下存放的yum源的数据库文件,也可以理解为这里记录了软件包的互相依赖关系。只要把光盘镜像挂载到服务器上,然后配好yum源为挂载的镜像,当使用yum安装软件的时候yum就会到这个目录下面去查询数据库,然后再到Packages目录下去拿rpm包进行安装,所以简单理解可以说repodata是记录Packages目录下所有 rpm 包的数据库。

1. 先在/目录下创建一个iso的空目录(不要在空目录内存放东西!目录名称可自定义)

1、 [root@localhost ~]# mkdir /iso

2. 将光盘镜像挂载到刚刚创建的/iso目录

1、[root@localhost ~]# mount /dev/cdrom /iso/
mount: /dev/sr0 写保护,将以只读方式挂载

3. 将原有的yum源文件移走备份

1、[root@shark ~]# mkdir /etc/yum.repos.d/back
2、[root@shark ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/back/

4. 配置yum源

1、[root@localhost ~]# vim /etc/yum.repos.d/CentOS-Local-ISO.repo

[cdrpm]
name=cdrpm
baseurl=file:///iso
enabled=1
gpgcheck=0

5. 清理缓存并缓存新的数据

[root@localhost ~]# yum clean all && yum makecache

(a)完成

(b)基于本地磁盘配置yum源

可扩展性强,就是可以向本地的仓库添加其他的 rpm 软件包
会占用本地的磁盘空间,只可以对本机提供 YUM 服务。

1. 先安装 createrepo 工具

createrepo建立关系依赖包,生成元数据
1、[root@shark ~]# yum -y install createrepo

2. 先把光盘镜像里的Packages目录拷贝到本地磁盘(目录名称自取,后面保持一致)

1、[root@localhost ~]# mkdir /localYum
2、[root@localhost ~]# cp -a /iso/Packages/ /localYum/

3. 生成元数据

createrepo  /localYum/Packages

查看生成的 repodata 目录

ll /locaYum/Packages/repodata/

4. 配置yum源

vim /etc/yum.repos.d/CentOS-Local.repo
[localrpm]
name=localYum
baseurl=file:///locaYum/Packages
enabled=1
gpgcheck=0

5. 清理缓存并缓存新的数据

(c)基于 FTP 文件传输协议的 YUM 源

可扩展性强,可以向互联网上的任意主机提供 YUM 服务,前提是 互联网上的主机可以访问到 FTP Server
会占用 FTP Server 的磁盘空间

1、先安装 FTP Server 软件

可以是任意能提供 FTP 服务的软件,这里使用的是 VSFTPD

yum  install  vsftpd   -y

2、保证下面的选项在配置文件中是打开的,一般是默认值
配置文件: /etc/vsftpd/vsftpd.conf

anonymous_enable=YES

3、启动服务,并检查监听端口

systemctl start vsftpd
[root@shark ftp]# ss -ntal |grep 21
LISTEN     0      1024   127.0.0.1:9121                     *:*
LISTEN     0      32          :::21                      :::*

4、拷贝数据包到 FTP Server 的根目录下的指定文件夹下

这里为了演示方便,可以直接拷贝 ISO 光盘镜像中的数据包目录到 /var/ftp/ftpYum/ 目录下

实验环境
FTP server 地址 127.0.0.1
FTP server 根目录 /var/ftp
rpm 软件包存放的目录是 /var/ftp/ftpYum/Packages
我们计划把创建的 源数据目录 repodata 放在 /var/ftp/ftpYum 下
这个可以使用 -o 选项实现, o 是小写字母的 o

拷贝光盘上的软件包目录到 /var/ftp/ftpYum/ 下

mkdir   /var/ftp/ftpYum

mount   /dev/cdrom   /media

cp   -a   /media/Packages/    /var/ftp/ftpYum/

5、创建源数据

cd   /var/ftp
createrepo    -o ftpYum       --baseurl=ftpYum/Packages    ftpYum/Packages

              -o 源数据存放在这个目录下   查找软件包的时候这个作为基础 url   对这个目录下的软件包创建源数据

源码安装

获得源码包途径

官方网站,可以获得最新的软件包。

Nginx: www.nginx.org

安装源码包 准备工作

1. 准备编译环境,如编译器

gcc
gcc-c++
make

一般我们会安装一个开发工具包。这个工具包可以使用如下命令安装

yum  -y  groupinstall  "Development Tools"

2. 准备软件自身所依赖的软件包

软件自身依赖的软件包信息,这个软件的官方网站都会提示。

比如 Nginx 需要 pcre 等,用于支持正则表达式,地址重写rewrite

zlib-devel 用于压缩

yum -y install pcre pcre-devel zlib-devel openssl-devel

3. 进行配置

编译时配置参数的意义

./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_ssl_module \
--with-pcre

开始编译

编译需要用的 make,取保已经安装 make
yum install make

取到源码解压的目录下执行
make
或者
make   -j   2
-j 后面跟的是计算机的 cpu核心数

安装

还是在源码解压后的目录下执行

make   
make  install

你可能感兴趣的:(yum安装包管理)