软件管理
获取程序包的途径
系统发行版的光盘或官方的服务器
- [阿里云开源镜像站]http://mirrors.aliyun.com/
- http://mirrors.sohu.com/
- http://mirrors.163.com
- 项目官方站点
- 第三方组织
- Fedora-EPEL(推荐)
- 搜索引擎:
- 自己制作
软件包管理器的职责
- 将二进制程序,库文件,配置文件,帮助文件打包成一个文件;
- 安装软件时按需将二进制文件,库文件,配置文件,帮助文件放到相应的位置;
- 生成数据库,追踪所安装的每一个文件;
- 软件卸载时根据安装时生成的数据库将对应的文件删除
软件包管理器的核心功能
- 制作软件包
- 安装软件
- 卸载软件
- 升级软件
- 查询软件
- 校验软件
软件包管理
- 程序的组成清单(每个包独有)
- 文件清单
- 安装或卸载时运行的脚本
- 数据库(公共)
- 程序包名称及版本
- 依赖关系
- 功能说明
- 安装生成的各文件的文件路径及校验码信息
软件包分类
- 二进制格式(编译好的,装上就可以用)俗称:绿色软件
- rpm包作者下载源程序,编译配置完成后,制作成rpm包
- why would we do that? because:
- 有些特性是编译时选定的,如果编译时未选定此特性,将无法使用
- rpm包的版本会落后于源码包,甚至落后很多
- 源码格式(需要编译,也叫定制)
- 命名方式:name-VERSION.tar.gz
- VERSION:major.minor.release
- 命名方式:name-VERSION.tar.gz
软件包管理工具
-
分类:
- 前端工具,常用的前端工具有以下这些:
- yum
- apt-get
- zypper (suse上的rpm前端管理工具)
- dnf(Fedora 22+ rpm前端管理工具)
- 后端工具,常用的后端工具有以下这些:
- rpm
- dpt
- 前端工具,常用的前端工具有以下这些:
-
注意:
-
前端工具是依赖于后端工具的
-
前端工具是为了自动解决后端工具的依赖关系而存在的
-
wget命令:用于安装软件包
在官方服务网站搜索
curl命令
一般不推荐(包大的情况下会下载的很慢,不能直观的查看下载状态)
curl -o wget-1.21.1-7.el9.x86_64.rpm —>包名
#安装wget命令
[root@zyq ~]# curl -o wget-1.21.1-7.el9.x86_64.rpm http://rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/wget-1.21.1-7.el9.x86_64.rpm
[root@zyq ~]# ls
123 abc anaconda-ks.cfg passwd wget-1.21.1-7.el9.x86_64.rpm zzz
#查看包大小
[root@zyq ~]# du -sh wget-1.21.1-7.el9.x86_64.rpm
792K wget-1.21.1-7.el9.x86_64.rpm
#查看包是否下载完整
[root@zyq ~]# rpm -ivh wget-1.21.1-7.el9.x86_64.rpm
warning: wget-1.21.1-7.el9.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:wget-1.21.1-7.el9 ################################# [100%]
[root@zyq ~]#
软件安装方式
- 通过前端工具安装
- 通过后端工具安装
- 编译安装
rpm包命名规范
- 包的组成
- 主包:bind-9.7.1-1.el5.i586.rpm
- 子包:bind-libs-9.7.1-1.el5.i586.rpm bind-utils-9.7.1-1.el5.i586.rpm
- 包名格式
- name-version-release-arch.rpm
- bind-major.minor.release-release.arch.rpm
- name-version-release-arch.rpm
- 包名格式说明
- major(主版本号):重大改进
- minor(次版本号):某个子功能发生重大变化
- release(发行号):修正了部分bug,调整了一点功能
- 常见的arch
- x86:i386,i486,i586,i686
- x86_64:x64,x86_64,amd64
- 跟平台无关:noarch
rpm包管理
什么是rpm及其作用
rpm是Redhat Package Manager的简称,用于管理软件包。
rpm有一个强大的数据库/var/lib/rpm。
rpm的管理工作包括软件的安装、卸载、升级、查询、校验、重建数据库、验证软件包来源合法性等等。
RPM包安装
语法: rpm -ivh /PATH/TO/PACKAGE_FILE ...
绝对路径:/目录下
相对路径:当前目录下
/PACKAGE_FILE:必须为完整包名
#安装软件包, 需要指定软件包绝对路径
[root@localhost ~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
[root@localhost ~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
#在软件包所在目录下可以不指定绝对路径
[root@localhost ~]# cd /mnt/Packages/
[root@localhost Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm
#常用选项:
-i: 安装
-v: 显示详细信息
-h: 显示安装进度条
--test: 测试安装,但不真正执行安装过程 #可确保在不确定有没有其他依赖包的情况下安装不成功导致环境崩掉了
--nodeps: 忽略依赖关系 #可能会存在包用不了的情况
--replacepkgs: 重新安装,替换原有安装
--oldpackage: 降级
--force: 强行安装,可以实现重装或降级
--nodigest: 不检查包的完整性
--nosignature: 不检查包的来源合法性
--noscripts: 不执行程序包脚本片断
%pre:安装前脚本 --nopre
%post:安装后脚本 --nopost
%preun:卸载前脚本 --nopreun
%postun:卸载后脚本 --nopostun
#测试一个软件包是否能在该系统上安装
[root@localhost ~]# rpm -ivh --test /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
#如果软件包存在, 强制再次安装
[root@localhost ~]# rpm -ivh --force /mnt/Packages/tree-1.5.3-3.el6.x86_64.rpm
#安装samba服务需要依赖其他组件, 使用--nodeps可重新强制安装
[root@localhost ~]# rpm -ivh --nodeps /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
RPM 包升级
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE #如果装有老版本的,则升级;否则,则安装
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE #如果装有老版本的,则升级;否则,退出
--oldpackage:降级
升级注意事项:
- 不要对内核做升级操作
- Linux支持多内核版本并存,因此,可直接安装新版本内核
- 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
RPM包卸载
语法:rpm -e PACKAGE_NAME
#先查询,再卸载
[root@localhost ~]# rpm -qa |grep vsftpd
[root@localhost ~]# rpm -e vsftpd
**注意:**如果其他包依赖于要卸载的包,这个被依赖的包是无法卸载的,除非强制卸载,强制卸载后依赖于这个包的其他程序将无法正常工作
yum工具的使用
yum的原理
yum的工作需要两部分来合作,一部分是yum服务器,另一部分就是client的yum工具。下面分别介绍两部分工作原理。
yum服务器端工作原理
所有要发行的rpm包都放在yum服务器上以提供别人来下载,rpm包根据kernel的版本号,cpu的版本号分别编译发布。yum服务器只要提供简单的下载就可以了,ftp或者http的形式都可以。yum服务器有一个最重要的环节就是整理出每个rpm包的基本信息,包括rpm包对应的版本号、conf文件、binary信息,以及很关键的依赖信息。在yum服务器上提供了createrepo工具,用于把rpm包的基本概要信息做成一张“清单”,这张“清单”就是描述每个rpm包的spec文件中信息。
client端工作原理
client每次调用yum install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的配置文件,这些配置文件指定了yum服务器的地址。yum会定期去更新yum服务器上的rpm包清单,然后把清单下载保存到yum客户端自己的cache里面,根据/etc/yum.conf里配置(默认是/var/cache/yum下面),每次调用yum装包的时候都会去这个cache目录下去找清单,根据清单里的rpm包描述从而来确定安装包的名字、版本号、所需要的依赖包等,然后再去yum服务器下载rpm安装。(前提是不存在rpm包的cache)
yum的配置文件
- 配置文件有哪些:
- /etc/yum.conf 作用:为所有仓库提供公共配置
- /etc/yum.repos.d/*.repo 作用:为仓库的指向提供配置
- yum的repo配置文件中可用的变量:
- $releaseversion:当前OS的发行版的主版本号
- $arch:平台类型
- $basearch:基础平台
为yum定义repo文件:
[Repo_Name]:仓库名称
name:描述信息
baseurl:仓库的具体路径,接受以下三种类型
ftp://
http://
file:///
enabled:可选值{1|0},1为启用此仓库,0为禁用此仓库
gpgcheck:可选值{1|0},1为检查软件包来源合法性,0为不检查来源
如果gpgcheck设为1,则必须用gpgkey定义密钥文件的具体路径
gpgkey=/PATH/TO/KEY
yum仓库管理
本地仓库
使用情景:在公司只有内网,没有外网时
[root@zyq ~]# mount /dev/cdrom /mnt/
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@zyq ~]# ls /mnt/
AppStream BaseOS EFI EULA extra_files.json GPL images isolinux media.repo RPM-GPG-KEY-redhat-beta RPM-GPG-KEY-redhat-release
[root@zyq ~]# ls /mnt/BaseOS/
Packages repodata
[root@zyq ~]# ls /mnt/AppStream/
Packages repodata
[root@zyq ~]#
[root@zyq ~]# rm -rf /etc/yum.repos.d/* #清理仓库,本地仓库与网络仓库不能同时使用
[root@zyq ~]# cd /etc/yum.repos.d/
[root@zyq yum.repos.d]# vi zzz.repo
[root@zyq yum.repos.d]# cat zzz.repo
[Appstream]
name=AppStream
baseurl=file:///mnt/AppStream
gpgcheck=0
enabled=1
[BaseOS]
name=BaseOS
baseurl=file:///mnt/BaseOS
gpgcheck=0
enabled=1
[root@zyq yum.repos.d]#
#清空yum本地缓存
[root@zyq ~]# yum clean all
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
30 files removed
[root@zyq ~]#
#检验yum本地仓库
#执行此条命令后能够显示yum仓库里的包,则表示成功
[root@zyq ~]# yum list all
yum网络仓库
- 官方网络yum仓库(国外)
- 阿里云yum仓库
- 163yum仓库
- xx大学yum仓库
- epel源
[root@zyq yum.repos.d]# ls
redhat.repo zzz.repo
[root@zyq yum.repos.d]# cat zzz.repo
[AppStream]
name=AppStream
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/AppStream/x86_64/os/
gpgcheck=0 #是否检测软件包签名,0不检测,1检测
enabled=1 #软件仓库是否启动,1启动,0不启动
[BaseOS]
name=BaseOS
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/BaseOS/x86_64/os/
gpgcheck=0
enabled=1
[root@zyq yum.repos.d]# cd
[root@zyq ~]#
#清空yum本地缓存
[root@zyq ~]# yum clean all
#检验yum本地仓库
[root@zyq ~]# yum list all
软件官方仓库
#源查找方式基本一致,zabbix,mysql,saltstack,openstack等等,上官网找
[root@zyq ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
yum管理软件
yum命令语法
yum [options] [command] [package ...]
常用的options(选项):
-y #自动回答为"yes"
-q #静默模式,安装或卸载时不输出信息至标准输出
[root@zyq ~]# yum -yp install vim
--nogpgcheck #如果从网上下载包有时会检查gpgkey,此时可以使用此命令跳过gpgkey的检查
--disablerepo=repoidglob #临时禁用此处指定的repo
--enablerepo=repoidglob #临时启用此处指定的repo
--noplugins #禁用所有插件
常用的command(命令):
list
all #默认项 (yum list all)
available #列出仓库中有的,但尚未安装的所有可用的包
installed #列出已经安装的包
updates #列出可以升级的包
clean #清理缓存
packages
headers
metadata
dbcache
all # yum clean all
repolist #显示repo列表及其简要信息
all
enabled #默认项
disabled
[root@zyq ~]# yum repolist all
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
repo id repo name status
AppStream AppStream enabled
BaseOS BaseOS enabled
[root@zyq ~]#
install #安装
yum install packages [...]
update #升级
yum update packages [...]
update_to #升级为指定版本
downgrade package1 [package2 ...] #降级,一般不适用
remove|erase #卸载
info #显示rpm -qi package的结果
yum info packages
provides|whatprovides #查看指定的文件或特性是由哪个包安装生成的
yum provides */bin/命令
search string1 [string2 ...] #以指定的关键字搜索程序包名及summary信息
deplist package [package2 ...] #显示指定包的依赖关系
history #查看yum的历史事务信息
yum history
localinstall #安装本地rpm包,自动解决依赖关系
grouplist #列出可用的组
groupinstall "group name" #安装一组软件,包组名必须用“”
createrepo命令 #创建yum仓库的元数据信息
[root@localhost ~]# yum install createrepo -y
[root@localhost ~]# createrepo [options] <directory>
具体实例
搜索软件包
#列出软件仓库中可用的软件
[root@localhost ~]# yum list all
#进行模糊查找
[root@localhost ~]# yum list | grep ftp
#列出软件包详情
[root@localhost ~]# yum info ftp
安装软件包
#安装软件只需要给出软件名称
[root@localhost ~]# yum install traceroute
#安装过程中分析依赖关系后, 直接安装, 无需交互
[root@localhost ~]# yum -y install php
#安装本地的rpm包, 如果有依赖关系, 会自动从软件仓库中下载所需依赖(非来自.repo定义的软件仓库)
[root@localhost ~]# yum localinstall /mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm
#安装网络上rpm包,直接在install 后接rpm包的链接
[root@localhost ~]# yum install http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
重装软件包
#检查软件是否存在
[root@zyq ~]# rpm -q vsftpd
package vsftpd is not installed
[root@zyq ~]# yum -yq install vsftpd
Installed:
vsftpd-3.0.5-5.el9.x86_64 #静默下载完成
[root@zyq ~]#
#检查vsftpd软件配置文件
[root@zyq ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
#不小心删除vsftpd配置文件
[root@zyq ~]# rm -f /etc/vsftpd/vsftpd.conf
#重新安装软件
[root@zyq ~]# yum reinstall vsftpd
#再次检查
[root@zyq ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
更新软件包
#对比Linux已安装的软件和yum仓库中的软件, 存在哪些需要升级的软件包
[root@zyq ~]# yum check-update
#更新软件
[root@zyq ~]# yum update acl -y
删除软件包
建议使用 rpm -e
#先安装一个samba软件
[root@localhost ~]# yum -y install samba
#删除该软件包,不会删除依赖, 但是我们尽可能不要使用删除软件操作
[root@localhost ~]# yum -y erase samba
[root@localhost ~]# yum -y remove samba
与缓存相关的命令
#缓存yum源软件仓库, xml元数据文件,在安装软件之前操作
[root@localhost ~]# yum makecache
#缓存软件包, 修改yum全局配置文件
[root@localhost ~]# vim /etc/yum.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
#查看缓存的xml文件,在rh9/8下dnf相当于yum,两个功能是一样的
[root@zyq ~]# ls /var/cache/
bpf cloud-what dnf krb5rcache ldconfig man private
[root@zyq ~]# ls /var/cache/dnf/
AppStream-84d79d03fad08c1c/ AppStream.solv BaseOS-filenames.solvx last_makecache
AppStream-a540d8534e637fd3/ BaseOS-6bfef927b13c70a2/ BaseOS.solv packages.db
AppStream-filenames.solvx BaseOS-877d9076b8929995/ expired_repos.json tempfiles.json
[root@zyq ~]#
#另一种缓存rpm包方式
#1.安装插件支持只下载软件包不安装(redhat9有此插件)
[root@localhost ~]# yum -y install yum-plugin-downloadonly
#2.将软件下载至指定目录,该操作只能用于网络源
[root@localhost ~]# yum -y install --downloadonly --downloaddir=/tmp httpd
#清除所有yum缓存
[root@localhost ~]# yum clean all
#只清除缓存的软件包
[root@localhost ~]# yum clean packages
YUM签名检查机制
- rpm软件提供组织redhat在构建rpm包时, 使用其私钥private key对 rpm进行签名
- 客户端在使用rpm为了验证其合法性, 可以使用redhat提供的公钥public key进行签名检查
方式1:指定公钥位置
[root@zyq ~]#wget -O CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@localhost ~]# vim /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 #当gpgcheck=1,必须要有gpgkey,=0时则不需要
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
方式2:提前导入公钥
[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@localhost ~]# vim /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
方式3:不进行签名验证
#不检查软件包的签名
[root@localhost ~]# yum install httpd --nogpgcheck