Linux rpm软件包管理
1. linux软件管理概念:
Linux整个体系的关键不在于系统本身,而是在于可以基于Linux系统去安装和配置企业中相关的软件、 数据及应用程序,所以对软件的维护是运维工程师的重中之重。
2. 软件管理的三种方式:
rpm管理:
yum管理:
源码方式管理:
Linux软件包管理大致可分为二进制包、源码包,使用的工具也各不相同。
Linux常见软件包分为两种,分别是源代码包(Source Code)、二进制包(Binary Code),源代码包是没有经过编译的包,需要经过GCC、C++编译器环境编译才能运行,二进制包无需编译,可以直接安装使用。
通常而言,可以通过后缀简单区别源码包和二进制包,例如.tar.gz、.zip、.rar结尾的包通常称之为源码包,以.rpm结尾的软件包称之为二进制包。
真正区分是否为源码还是二进制还得基于代码里面的文件来判断,例如包含.h、.c、.cpp、.cc等结尾的源码文件,称之为源码包,而代码里面存在bin可执行文件,称之为二进制包。
2.1 RPM管理:
2.1.1 rpm工作原理:
当我们使用rpm工具安装软件包时,它会首先找到软件包中的一个记录文件,该文件记录了这个软件安装时需要的依赖包,如果包已经存在,则可以顺利安装,如果不存在,则提示缺少相应的依赖。
RPM优点:
(1)软件已经编译打包,所以传输和安装方便,让用户免除编译。
(2)在安装之前,会先检查系统的磁盘、操作系统版本等,避免错误安装。
(3)在安装好之后,软件的信息都已经记录在linux主机的数据库上,方便查询、升级和卸载。
RPM缺点:
(1)软件包安装的环境必须与打包时的环境一致。(rpm包非常吃版本,32位不能装64位)
(2)必须安装了软件的依赖软件。
2.1.1.1 安装httpd rpm包
http://mirrors.163.com/centos/7/os/x86_64/Packages/ --这个网站是用来下载rpm包的
[[email protected] ~]# yum install wget
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
local | 4.1 kB 00:00:00
.......................................................
[[email protected] ~]# wget http://mirrors.163.com/centos/7/os/x86_64/Packages/httpd-2.4.6-90.el7.centos.x86_64.rpm
--使用wget命令获取163网站上的httpd软件包
--2020-02-24 14:32:56-- http://mirrors.163.com/centos/7/os/x86_64/Packages/httpd-2.4.6-90.el7.centos.x86_64.rpm
Resolving mirrors.163.com (mirrors.163.com)... 59.111.0.251
Connecting to mirrors.163.com (mirrors.163.com)|59.111.0.251|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2844388 (2.7M) [application/x-redhat-package-manager]
Saving to: ?.ttpd-2.4.6-90.el7.centos.x86_64.rpm?
100%[=====================================================================================>] 2,844,388 5.41MB/s in 0.5s
2020-02-24 14:32:56 (5.41 MB/s) - ?.ttpd-2.4.6-90.el7.centos.x86_64.rpm?.saved [2844388/2844388]
[[email protected] ~]# ls
anaconda-ks.cfg fstab httpd-2.4.6-90.el7.centos.x86_64.rpm redhat.bak
[[email protected] ~]# rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm
warning: httpd-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
/etc/mime.types is needed by httpd-2.4.6-90.el7.centos.x86_64
httpd-tools = 2.4.6-90.el7.centos is needed by httpd-2.4.6-90.el7.centos.x86_64
--i是安装 v是展示详细信息 h是指显示安装进度,可以看到软件包依赖性出现问题,需要这个工具包httpd-tools,所以必须先安装httpd-tools。
[[email protected] ~]# wget http://mirrors.163.com/centos/7/os/x86_64/Packages/httpd-tools-2.4.6-90.el7.centos.x86_64.rpm
--2020-02-24 14:45:10-- http://mirrors.163.com/centos/7/os/x86_64/Packages/httpd-tools-2.4.6-90.el7.centos.x86_64.rpm
Resolving mirrors.163.com (mirrors.163.com)... 59.111.0.251
Connecting to mirrors.163.com (mirrors.163.com)|59.111.0.251|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 92944 (91K) [application/x-redhat-package-manager]
Saving to: ?.ttpd-tools-2.4.6-90.el7.centos.x86_64.rpm?
100%[=====================================================================================>] 92,944 --.-K/s in 0.02s
2020-02-24 14:45:10 (4.21 MB/s) - ?.ttpd-tools-2.4.6-90.el7.centos.x86_64.rpm?.saved [92944/92944]
[[email protected] ~]# rpm -ivh httpd-tools-2.4.6-90.el7.centos.x86_64.rpm
warning: httpd-tools-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:httpd-tools-2.4.6-90.el7.centos ################################# [100%]
[[email protected] ~]# rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm
warning: httpd-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
/etc/mime.types is needed by httpd-2.4.6-90.el7.centos.x86_64
--可以看到,缺少/etc/mime.type这个文件,这个文件在mailcap-2.1.41-2.el7.noarch.rpm包里面,再次从163获取 mailcap-2.1.41-2.el7.noarch.rpm解决httpd的依赖性问题
[[email protected] ~]# wget http://mirrors.163.com/centos/7/os/x86_64/Packages/mailcap-2.1.41-2.el7.noarch.rpm
--2020-02-24 15:03:54-- http://mirrors.163.com/centos/7/os/x86_64/Packages/mailcap-2.1.41-2.el7.noarch.rpm
Resolving mirrors.163.com (mirrors.163.com)... 59.111.0.251
[[email protected] ~]# rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm
warning: mailcap-2.1.41-2.el7.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mailcap-2.1.41-2.el7 ################################# [100%]
[[email protected] ~]# rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm --可以看到已经成功安装上httpd解决了依赖 httpd-tools-2.4.6-90.el7.centos.x86_64.rpm,mailcap-2.1.41-2.el7.noarch.rpm
这两个软件包的问题
warning: httpd-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:httpd-2.4.6-90.el7.centos ################################# [100%]
[[email protected] ~]# rpm -qp --requires httpd-2.4.6-90.el7.centos.x86_64.rpm --查看安装httpd需要依赖的文件和软件包
warning: httpd-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
/etc/mime.types
system-logos >= 7.92.1-1
httpd-tools = 2.4.6-90.el7.centos
使用rpm包安装,安装的目录是分散的,有的在/etc下面,那些是配置文件,有的在/var下面是日志等文件。
使用rpm安装了httpd,但是多了一个apache用户。在使用rpm在安装包的时候,创建了对应于服务的用户。
[[email protected] ~]# rpm -q --scripts httpd
preinstall scriptlet (using /bin/sh):
# Add the "apache" group and user
/usr/sbin/groupadd -g 48 -r apache 2> /dev/null || :
/usr/sbin/useradd -c "Apache" -u 48 -g apache \
-s /sbin/nologin -r -d /usr/share/httpd apache 2> /dev/null || :
postinstall scriptlet (using /bin/sh):
2.1.2 rpm常用命令:
2.1.2.1 查询包是否已安装和查询已安装的包:
[[email protected] ~]# rpm -q tk
package tk is not installed
[[email protected] ~]# rpm -q httpd
httpd-2.4.6-88.el7.centos.x86_64
# 查询所有已经安装的软件包
[[email protected] ~]# rpm -qa
t1lib-5.1.2-14.el7.x86_64
python-urlgrabber-3.10-8.el7.noarch
setup-2.8.71-7.el7.noarch
gpm-libs-1.20.7-5.el7.x86_64
pth-2.0.7-23.el7.x86_64
# 统计操作系统已经安装得所有包数量:
[[email protected] ~]# rpm -qa |wc -l
624
2.1.2.2 根据文件反向查找包:
# 可以通过which arp 找到命令路径,然后通过qf查询该文件时由哪个包提供得
[[email protected] ~]# which arp
/usr/sbin/arp
[[email protected] ~]# rpm -qf /usr/sbin/arp
2.1.2.3 查软件安装路径:
[[email protected] ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
2.1.2.3 查软件的配置文件路径
[[email protected] ~]# rpm -qc httpd
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
2.1.2.4 查询一个未安装软件包的文件路径:
# 查询一个未安装软件包安装后会在系统生成的文件列表
[[email protected] Packages]# rpm -qpl tk-8.5.13-6.el7.x86_64.rpm
/usr/bin/wish
/usr/bin/wish8.5
/usr/lib64/libtk8.5.so
/usr/lib64/tk8.5
/usr/lib64/tk8.5/pkgIndex.tcl
/usr/share/doc/tk-8.5.13
2.1.2.5 查询软件的版本信息:
[[email protected] ~]# rpm -qi httpd
Name : httpd
Version : 2.4.6
Release : 88.el7.centos
Architecture: x86_64
Install Date: Mon 25 Mar 2019 05:44:57 AM EDT
Group : System Environment/Daemons
Size : 9817309
License : ASL 2.0
2.1.2.6 安装软件包:
# 安装软件包,需要切换到软件包所在的目录或者使用绝对路径安装,否则报错如下:
[[email protected] ~]# rpm -ivh tk-8.5.13-6.el7.x86_64.rpm
error: open of tk-8.5.13-6.el7.x86_64.rpm failed: No such file or directory
# 需要先安装依赖,否则报错如下:
[[email protected] Packages]# rpm -ivh tk-8.5.13-6.el7.x86_64.rpm
error: Failed dependencies:
libXft.so.2()(64bit) is needed by tk-1:8.5.13-6.el7.x86_64
libtcl8.5.so()(64bit) is needed by tk-1:8.5.13-6.el7.x86_64
tcl = 1:8.5.13 is needed by tk-1:8.5.13-6.el7.x86_64
tcl >= 1:8.5.13-5 is needed by tk-1:8.5.13-6.el7.x86_64
2.1.2.7 安装软件包(忽略依赖):
rpm -ivh --nodeps httpd-2.4.10-el7.x86_64.rpm
# 不太建议,这样安装的包往往会有问题
2.1.2.8 升级软件包:
# 需要当前目录有这个软件包才行,否则也会报错
rpm -Uvh httpd-2.4.6-88.el7.centos.x86_64.rpm
2.1.2.9 卸载软件包:
rpm -e httpd
2.1.2.10 强制卸载:
rpm -e --nodeps httpd
2.1.2.11 测试安装:
# 一个软件包是否能够安装在系统上,不真正安装
rpm -ivh --test httpd-2.4.6-88.el7.centos.x86_64.rpm
2.1.2.12 rpm数据库命令:
# 初始化系统的rpm数据库:
rpm --initdb
# 重建系统的rpm数据库
rpm --rebuilddb
# 向系统导入软件包的公钥
rpm --import
2.1.2.13 查询软件包得执行脚本:
# 查询未安装包的脚本:
rpm -qp --scripts httpd-2.4.6-90.el7.centos.x86_64.rpm
# 查询已安装包的脚本:
rpm -q --scripts httpd
2.1.2.14 查询软件包得依赖文件:
rpm -qp --requires httpd-2.4.6-90.el7.centos.x86_64.rpm