在Linux系统中,软件包管理是一项重要的任务,可以帮助用户方便地安装、升级和卸载软件包。
RPM(Red Hat Package Manager)包是一种常见的Linux软件包格式,常用于Red Hat、Fedora和CentOS等Linux发行版中。RPM包的命名规则通常遵循以下格式:
其中:
表示软件包的名称,通常为小写字母,可以包含数字和连字符“-”。
表示软件包的版本号,通常由数字和小数点组成,例如“1.0”、“2.3.4”等。
表示软件包的发布号,还可能包含适应的操作系统,通常由数字和字母组成,例如“1”、“beta2”等。
表示软件包的架构,通常为小写字母或数字,例如“x86_64”、“i386”等。RPM包 | nginx-1.18.0-1.el7.x86_64.rpm |
---|---|
nginx | 软件包的名称 |
1.18.0 | 软件包的版本号 |
1 | 软件包的发布号 |
el7 | 适用于 CentOS 7 操作系统 |
x86_64 | 适用于 64 位的 x86 架构 |
上面这个例子完整含义是:名称为“nginx”,版本号为“1.18.0”,发布号为“1”,适用于 CentOS 7 操作系统的特定补丁和版本修订,并且适用于 64 位的 x86 架构的计算机。
在 Linux 中,RPM 包依赖性指的是一个 RPM 包所依赖的其他 RPM 包。这些依赖性可以分为两类:运行时依赖和构建时依赖。
在 RPM 包中,依赖性通常以Requires
和BuildRequires
标签的形式进行定义。其中,Requires
标签用于定义运行时依赖性,而BuildRequires
标签用于定义构建时依赖性。这些标签中通常会包含其他 RPM 包的名称、版本号、发布号以及其他特定的版本信息,以确保软件包的正确安装和运行。
在 RPM 包管理中,依赖关系也可以被归为树形依赖和环形依赖:
a->b->c
,一个软件包可能依赖于某个库文件,而该库文件又依赖于另一个库文件,依此类推,形成一个依赖树。在安装软件包时,系统会按照依赖树的层次结构递归地安装所有依赖软件包。a->b->a
,软件包 a 依赖于软件包 b,而软件包 b 又依赖于软件包 a,形成一个环形依赖关系。在这种情况下,如果安装其中任何一个软件包,都可能导致依赖关系无法满足,从而导致安装失败。在 RPM 包管理中,可以通过检查 RPM 包的Requires
和Provides
标签来确定其依赖关系。通常,在安装 RPM 包之前,需要先检查其依赖关系,并确保所有依赖软件包已经安装或可以被安装。否则,可能会导致安装失败或软件包无法正常运行。
注:当我们安装软件报缺少其他依赖包时,可以通过Rpmfind mirror网站查询。Rpmfind mirror 是一个提供 RPM 软件包搜索和下载服务的网站。它提供了各种不同 Linux 发行版(如 Red Hat、Fedora、CentOS、SUSE 等)的 RPM 软件包下载,用户可以通过关键字搜索或者选择对应的 Linux 发行版和版本来查找所需的 RPM 软件包。
命令 | rpm [选项] |
---|---|
-i(install) | 表示安装软件包 |
-v(verbose) | 显示详细信息 |
-h(hash) | 显示进度 |
-U(upgrade) | 升级已安装的 RPM 软件包 |
-e(erase) | 卸载已安装的 RPM 软件包 |
注:
安装:rpm -ivh
升级:rpm -Uvh
卸载:rpm -e
命令 | rpm [选项] [软件包名称] |
---|---|
-q(query ) | 查询已安装的软件包信息 |
-i(info) | 显示软件包的详细信息 |
-l(list) | 列出软件包的文件列表 |
-R(requires) | 显示软件包的依赖关系 |
-p(package) | 查询未安装的软件包信息 |
-f(file) | 查询未安装的软件包信息 |
例子:
1、查询已安装软件包的名称和版本:rpm -qa
2、查询指定软件包的详细信息:rpm -qi package_name
3、列出指定软件包中的文件:rpm -ql package_name
4、列出软件包所安装的配置文件:rpm -qc package_name
5、询软件包的依赖性:rpm -qR package_name
验证RPM包的完整性命令:rpm -K package.rpm
该命令将检查RPM包是否被篡改,在RPM包安装完之后,系统会将最初的特征记录保存,将现在的文件与最初的文件进行比较,从而判断是否被做了修改。
输出结果中的前面的8个信息主要描述修改信息:
在输出信息中还有描述文件类型的字符:
从RPM包中提取文件:rpm2cpio package.rpm | cpio -idmv
这是一个提取RPM包中所有文件的命令,它使用两个命令组合在一起:
rpm2cpio
:将RPM包转换为cpio格式,以便接下来的cpio命令可以处理它。cpio
:用于提取cpio格式的文件。在这种情况下,它提取rpm2cpio生成的cpio文件中的所有文件。cpio命令采用以下选项:
将这两个命令组合在一起,它们会首先使用rpm2cpio将RPM包转换为cpio格式,然后使用cpio命令提取cpio文件中的所有文件,并在当前目录中提取它们。
当命令文件被误删,我们就可以使用提取命令从软件包中提取出缺失的命令文件来进行修复。
注:RPM是一种常用的 Linux 软件包格式,主要用于 Red Hat Enterprise Linux 和 Fedora 系统。而 Ubuntu 系统使用的是 DEB (Debian Package) 格式。因此在Ubuntu中想使用rpm,需要通过alien工具将RPM 软件包转换为 DEB 格式。
我使用的是ubuntu,IP地址配置如下:
(1) 打开网络配置文件:vim /etc/network/interfaces
;
(2) 在该文件中编辑网络接口,如下示例:
auto enp0s3
iface enp0s3 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
(3) 保存并退出文件;
(4) 重启网络服务(不同版本中命令可能不同);
注:在Ubuntu20.04版本之后,不再使用/etc/network/interfaces文件配置网络,而是使用/etc/netplan/01-network-manager-all.yaml文件。
(1) 打开 YUM 配置文件:vim /etc/yum.repos.d/local.repo
;
(2) 在该文件中添加以下内容:
[localrepo] //定义了一个软件仓库
name=Local Repository
baseurl=http://<server_ip_address>/<directory_name> //软件仓库地址
enabled=1 //已启用
gpgcheck=0 //不进行 GPG 检查
(3) 保存并退出文件;
(4) 更新 YUM 缓存:yum makecache
;
(5) 查看所有已配置的 YUM 源:yum repolist
;
注:/etc/yum.repos.d/local.repo 是一个 YUM 软件仓库配置文件,它包含有关特定软件仓库的信息,包括其名称、地址、状态等。
语法:yum [选项] [操作] [包名]
常用选项:
常用操作:
RPM包默认安装位置如下:
/bin | 二进制可执行程序(通常是系统级应用程序) |
---|---|
/sbin | 系统级管理员程序 |
/usr/bin | 用户级别可执行程序(通常是第三方应用程序) |
/usr/sbin | 用户级别的管理员程序 |
/usr/local/bin | 本地用户安装(非包管理器安装)的系统级可执行程序 |
/usr/local/sbin | 本地用户安装(非包管理器安装)的系统级管理员程序 |
/usr/share/doc | 应用程序文档和手册 |
/usr/lib | 系统级别共享库文件 |
/lib | 共享库文件 |
/etc | 通常包含配置文件和其他系统级别的数据文件 |
/var | 包含可以被变化的文件,如日志文件和缓存文件 |
源码包安装位置由安装者指定,一般推荐安装在/usr/local中。
安装位置不同带来的影响:
RPM包安装的服务可以使用系统服务管理命令(service) 来管理,例如apache的启动:service httpd start
,原因是service命令会扫描默认路径。而源码包安装的服务则不能被服务管理命令管理,只能使用绝对路径进行服务的管理。
(1) 下载源码包
一般情况下,源码包可以从开发者的官网或开源软件库中下载,通常是一个压缩文件(tar.gz或tar.bz2等格式)或者是一个git或svn代码库。下载后,将压缩包解压至你想要安装的目录下。
(2) 配置安装参数
在解压缩后的源码包文件夹中,会有一个configure文件,这个文件会根据你的操作系统和硬件环境自动配置软件的安装参数,你也可以根据需要手动修改这些参数,例如安装路径、编译选项等。
(3) 编译源码
通过运行make命令来编译源码,这会将源代码编译为可执行二进制文件。如果你的电脑有多个处理器核心,可以通过添加-j参数来加速编译,例如make -j4。编译完成后,通过执行make install命令来安装程序,这会将可执行文件、配置文件、库文件等安装到系统指定目录中。
(4) 运行测试
安装完成后,你可以运行程序进行测试,看看是否能正常运行。如果程序需要配置文件,你需要手动创建配置文件,并将其放置在指定目录下。
注:如果源码包有依赖项,比如库文件或其他软件包,你需要先安装这些依赖项才能编译和安装程序。