两种包管理机制RPM(Redhat Package Manager)和DPKG(Debian Package)
RPM软件包管理
RPM软件包以rpm为拓展名,同时也是一种软件包管理器,可以让用户方便地进行软件的安装、更新和卸载。
RPM包通常包含二进制包和源代码包
二进制包可以直接通过rpm命令安装在系统中
源代码包可以通过rpm命令提取对应软件的源代码
RPM提供了非常丰富的功能,是通过一定机制把二进制文件或其他文件打包在一起的单个文件。当使用RPM包进行安装的时候,通常是一个把二进制文件或其他文件复制到系统的指定路径的过程。
RPM包管理器可以让用户不必经过编译就使用软件,当软件遇到依赖的时候,RPM包就会中断当前的安装,提示用户依赖的软件包,不方便。
[root@localhost ~]# rpm --helpUsage: rpm [OPTION...]
安装软件
rpm -ivh ***.rpm #进行软件包的安装
rpm -qpl ***.rpm #查看软件包文件列表及文件安装路径
如果软件包已经安装,但是出于某些原因想重新安装,可以采用强制安装的手段,使用指定参数来实现这个功能
rpm -ivh --force ***.rpm
rpm -ivh --nodeps ***.rpm # 忽略依赖关系
- -i:安装软件的时候显示软件包的相关信息
- -v:安装软件的时候显示命令的执行过程
- -h:安装软件的时候输出hash记号:#
- -q:使用询问模式,当遇到问题的时候,rpm指令会先询问用户
- -p:查看软件包的文件
- -l:显示软件包中的文件列表
- —force:表示强制安装
-
升级软件包
安装软件包之后随新功能的增加或者bug的修复,软件会持续更新。
更新软件的时候如果遇到已有的配置文件,为保证新版本的运行,RPM包管理器会将该软件的对应的配置文件重命名,然后安装新的配置文件。新旧文件的保存会使得用户有更多的选择rpm -Uvh ***.rpm #更新已经安装的软件 -
查看已经安装的软件包
rpm -qa #查看系统中安装的软件包 rpm -qa | gerp ** # #查找指定的安装包 -a:显示安装的所有软件列表
- -f:查询指定文件由哪个程序安装生成
- —whatrequires /—whatprovisdes:查询指定包的依赖
- -c:查询包的配置文件
- -d:查询报包的程序文档
-
卸载软件包
rpm -e *** #卸载软件包 -
校验安装包
—nofiledigest don’t verify digest of files 不检查包的摘要
- —nofiles don’t verify files in package
- —nodeps don’t verify package dependencies 不去验证包的依赖
—noscript don’t execute verify script(s) 不执行包的脚本片段
所有参数
- -a:查询和验证所有的包 - -f:查询和验证已有的包 - -g:查询和验证一组中的包 - -q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户; - -c:列出所有配置相关文件 - -d:列出所有文档文件 - -l:列出包的所有文件(包括路径) - -s:显示包的状态,本参数需配合"-l"参数使用 - -R:显示套件的关联性信息 - -h或--hash:套件安装时列出标记; - -i:安装 - -e:卸载 - -U:重新安装 - -reinstall:重新安装 - -v:打印调试信息 - -vv:详细显示指令执行过程,便于排错。 - --test:测试安装 - --nodigest:不检查包的摘要 - --noscript:不执行包的脚本片段 - --nodeps:不去验证包的依赖 - --nosignature:不去验证包的合法性
rpm 有一个问题,就是如果安装一个rpm包的时候,需要安装很多依赖,就还需要去找到这些个依赖的名字及版本号,然后挨个去安装,很麻烦。
yum包管理器
Yum (Yellow dog Updater,Modified)
Yum工具工作依赖一个源,源中包含了很多软件包和软件包的相关索引数据,通常位于网络上的主机中。当用户使用yum工具安装软件的时候,yum将通过索引数据搜索软件包的依赖关系,再从源中下载软件包并安装。
当用户将系统注册到Red Hat网络后,系统会自动配置源,因此无网络连接的计算机将无法使用Red Hat提供的源。
可以通过自建一个本地源
配置文件
- /etc/yum.conf:为所有仓库提供的公共配置文件
/etc/yum.repos.d/*.repo:为仓库提供指定的配置
建立本地源
## 1.建立挂载目录将光盘挂载到/cdrom mkdir -p /cdrom mount /dev/cdrom /cdrom ## 2.备份原来的源配置文件 cd /etc/yum.repos.d/ mv redhat.repo redhat.repo.bak ## 3.建立新的源配置文件 cat -v dvd.repo [ocata] name=CentOS‐Ocata baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack‐ocata/ enable=1 gpgcheck=0 ## 4. 清除yum中的所有缓存文件 yum clear all ## 5.建立新的缓存文件 yum makecacheps:*.repo文件中,
- 方括号中“[]”是源的名称,该名称再所有源中必须是独一无二的
- name字段表示源的描述信息
- enable表示是否启用源
- gpgcheck表示是否对软件执行gpg检查,该检查可以验证软件包是否经过Red Hat的签名,未签名的软件可能会危害系统的稳定
- baseurl表示源的路径
- gpgkey表示签名使用的密钥文件位置
安装和卸载软件包
yum install ***
yum remove ***
常用的命令选项
- 显示仓库列表:yum repolist a==
- 显示程序包: yum list
- 安装程序包:yum install [package_1]
- 升级程序包:yum upadte [package_1] [package_2]
- 降级程序包:yum downgrade [package_1] [package_2]
- 检查可用升级:yum check-update
- 卸载程序包:yum remove [package_1] # 先remove,再找find maraidb
- 查看程序包信息:yum info……
- 查看指定的特性(可以是某个文件)是由哪个程序所提供: yum provide
- 构建本地缓存:yum makecache
- 检查可用仓库:yum repolist
- 清理缓存:yum clean all
- 搜索:yum search string 指定关键字搜索程序包名及summary信息
- 查看yum相关历史:yum history
eg1:使用光盘当作本地yum仓库
mount:挂载命令
挂载本地光盘:
[root@localhost ~]# mount /dev/cdrom /media/cdrom 备份yum配置:
[root@localhost ~]# mv /etc/yum.repos.d/* /mnt/ 配置本地yum
[root@localhost ~]# cat > /etc/yum.repos.d/local.repo <<EOF
[base]
name=Centos 7 Release 7.1.1503
baseurl=file://media/cdrom
enabled=1
gpcheck=0
EOF
eg2:自建yum仓库,构建服务器
1.如何区批量下载程序包
2.本地目录生成一个文件 repoadta/repomd.xml
服务端配置: 备份源文件,编辑新文件
[root@node1 ~]# mv /etc/yum.repos.d/CentOS‐Base.repo{,.bak}
[root@node1 ~]# cat /etc/yum.repos.d/CentOS‐Base.repo
[ocata]
name=CentOS‐Ocata
baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack‐ocata/
enable=1
gpgcheck=0
[ocata‐extras]
name=CentOS‐Ocata‐extras
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
enable=1
gpgcheck=0
[centos7]
name=Centos‐7
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
enable=1
gpgcheck=0
同步源
[root@node1 ~]# reposync ‐‐repoid=ocata
[root@node1 ~]# reposync ‐‐repoid=ocata‐extras
[root@node1 ~]# reposync ‐‐repoid=centos7
生成repodata
[root@node1 ~]# createrepo ocata
[root@node1 ~]# createrepo ocata‐extras
[root@node1 ~]# createrepo centos7
客户端配置: 验证并生成缓存
[root@node1 ~]# yum repolist
[root@node1 ~]# yum makecache
备注:如果添加或者删除了个人的rpm包,不需要再次重新create,浪费时间,只需要‐‐update就可以了
[root@node1 ~]# createrepo ‐‐update
dnf
新一代的RPM软件包管理器
首先出现在 Fedora 18 这个发行版中。而最近,它取代了yum,正式成为 Fedora 22 的包管理器。
DNF使用rpm、libsolv和hawkey库进行包管理操作,可以使用yum的同时使用DNF
安装
### 1.必须先安装并启用 epel-release 依赖。
yum install epel-release 或 yum install epel-release -y
### 2.安装dnf
yum install dnf
命令
1.查看系统中可用的 DNF 软件库
[root@lhuan ~]# dnf repolist
Docker CE Stable - x86_64 8.2 kB/s | 25 kB 00:03
CentOS-7 - Base 4.3 MB/s | 10 MB 00:02
CentOS-7 - Updates 248 kB/s | 5.0 MB 00:20
CentOS-7 - Extras 108 kB/s | 275 kB 00:02
repo id repo name status
base CentOS-7 - Base 10,070
docker-ce-stable Docker CE Stable - x86_64 82
extras CentOS-7 - Extras 413
updates CentOS-7 - Updates 1,134
查看系统中可用和不可用的所有的 DNF 软件库
dnf list列出所有安装了的 RPM 包
dnf list installed列出所有可供安装的 RPM 包
dnf list available搜索软件库中的 RPM 包 ```python [root@lhuan ~]# dnf search nano Last metadata expiration check: 0:11:40 ago on Sat 31 Oct 2020 10:16:45 AM CST. =================================== Name Exactly Matched: nano ==================================== nano.x86_64 : A small text editor
6. 查看软件包详情
```python
[root@lhuan ~]# dnf info nano
Last metadata expiration check: 0:13:11 ago on Sat 31 Oct 2020 10:16:45 AM CST.
Available Packages
Name : nano
Version : 2.3.1
Release : 10.el7
Arch : x86_64
Size : 440 k
Source : nano-2.3.1-10.el7.src.rpm
Repo : base
Summary : A small text editor
URL : http://www.nano-editor.org
License : GPLv3+
Description : GNU nano is a small and friendly text editor.
- 安装软件包
系统将会自动安装对应的软件及其所需的所有依赖
[root@lhuan ~]# dnf install nano
Last metadata expiration check: 0:14:01 ago on Sat 31 Oct 2020 10:16:45 AM CST.
Dependencies resolved.
===================================================================================================
Package Arch Version Repository Size
===================================================================================================
Installing:
nano x86_64 2.3.1-10.el7 base 440 k
Transaction Summary
===================================================================================================
Install 1 Package
Total download size: 440
升级软件包
dnf update 或 dnf upgrade删除软件包
dnf remove nano 或 dnf erase nano删除无用孤立的软件包
当没有软件再依赖它们时,某一些用于解决特定软件依赖的软件包将会变得没有存在的意义,该命令就是用来自动移除这些没用的孤立软件包。
dnf autoremove
- 删除缓存的无用软件包
在使用 DNF 的过程中,会因为各种原因在系统中残留各种过时的文件和未完成的编译工程。我们可以使用该命令来删除这些没用的垃圾文件。
dnf clean all
