centOS开源仓库地址: https://gitlab.com/redhat/centos-stream
一、系统配置 1. 网络配置 1.1. 配置网卡 修改/etc/sysconfig/network-scripts/ifcfg-xxx 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPADDR="199.200.2.199" # ipv4地址 PREFIX="16" # 掩码 GATEWAY="199.200.2.254" # 默认网关 DNS1="199.200.0.100" # dns地址 IPV6INIT="yes" IPV6_AUTOCONF="no" # 是否自动配置ipv6,关掉下面的ip配置才有效 IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" IPV6ADDR="2002::0011/112" # ipv6地址 IPV6_PRIVACY="no" IPV6_DEFAULTGW="1001::fffe" # ipv6网关 NAME="ens18" UUID="c1a4c4b2-b705-44fb-9bec-a486f633d76d" # 使用 nmcli con show DEVICE="ens18" ONBOOT="yes"
1.2. 查看网卡信息 1 2 3 4 => nmcli con show NAME UUID TYPE DEVICE ens18 c1a4c4b2-b705-44fb-9bec-a486f633d76d ethernet ens18 ens19 d808c1b2-fccf-3717-b518-4e3df1cc61a8 ethernet --
1.3. 防火墙 二、软件安装 1. yum命令 1.1. 开启安装debuginfo 1 yum install 'dnf-command(debuginfo-install)'
之后就可以使用下面命令安装对应的debuginfo的包 1 yum debuginfo-install xxx
2. 部分命令安装源和包 2.1. CentOS 7 文件/命令 所属包 所属仓库 rpcgen rpcgen PowerTools ncurses/curses.hncurses-devel BaseOS gdbserver gdb-gdbserver AppStream ifconfig net-tools base ifconfig net-tools base
2.2. CentOS 8 文件/命令 所属包 所属仓库 /usr/include/libudev.hsystemd-devel BaseOS
3. 包内容查看和搜索 3.1. 查看包安装了哪些软件 1 2 3 4 5 6 7 8 => repoquery -l texinfo Last metadata expiration check: 0:12:48 ago on Thu 21 Sep 2023 02:14:51 PM CST. /usr/bin/makeinfo /usr/bin/pod2texi /usr/bin/texi2any /usr/share/doc/texinfo /usr/share/doc/texinfo/AUTHORS ...
3.2. 根据文件搜索在哪个包中 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 => yum provides */libudev.h Last metadata expiration check: 14:30:51 ago on Thu 21 Mar 2024 09:32:27 PM CST. systemd-devel-239-51.el8.i686 : Development headers for systemd Repo : BaseOS Matched from: Filename : /usr/include/libudev.h systemd-devel-239-51.el8.x86_64 : Development headers for systemd Repo : BaseOS Matched from: Filename : /usr/include/libudev.h systemd-devel-239-51.el8_5.2.i686 : Development headers for systemd Repo : BaseOS Matched from: Filename : /usr/include/libudev.h # 或者使用repoquery => repoquery "*/ncurses/curses.h" Last metadata expiration check: 0:14:13 ago on Thu 21 Sep 2023 02:14:51 PM CST. ncurses-devel-0:6.1-9.20180224.el8.i686 ncurses-devel-0:6.1-9.20180224.el8.x86_64
4. RPM包管理器 4.1. RPM简介 RPM(RPM Package Manager)是Red Hat Package Manager的缩写,最初由Red Hat开发,现已成为Linux系统中广泛使用的软件包管理系统。RPM用于安装、卸载、升级、查询和验证软件包,是CentOS、RHEL、Fedora等基于Red Hat的Linux发行版的核心包管理工具。
RPM包管理器具有以下特点:
使用.rpm格式的软件包 维护软件包的依赖关系 提供软件包的完整性验证 支持软件包的升级和降级 记录软件包的安装信息 4.2. 常用命令速查 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 # 安装RPM包 rpm -ivh package.rpm # 升级RPM包 rpm -Uvh package.rpm # 卸载RPM包 rpm -e package_name # 查询已安装的软件包 rpm -qa # 查询特定软件包是否安装 rpm -q package_name # 查询软件包信息 rpm -qi package_name # 列出软件包安装的文件 rpm -ql package_name # 查询文件属于哪个软件包 rpm -qf /path/to/file # 解压RPM包(不安装) rpm2cpio package.rpm | cpio -div # 验证软件包完整性 rpm -V package_name # 重建RPM数据库 rpm --rebuilddb
4.3. 详细命令说明 4.3.1. 安装命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 基本安装格式 rpm -i (or --install) [options] package1.rpm ... packageN.rpm # 常用安装选项 rpm -ivh package.rpm # 显示安装进度和哈希标记 # 详细安装选项 -h (or --hash) # 安装时输出hash记号 (#) --test # 只对安装进行测试,并不实际安装 --percent # 以百分比的形式输出安装的进度 --excludedocs # 不安装软件包中的文档文件 --includedocs # 安装文档 --replacepkgs # 强制重新安装已经安装的软件包 --replacefiles # 替换属于其它软件包的文件 --force # 忽略软件包及文件的冲突 --noscripts # 不运行预安装和后安装脚本 --prefix <path> # 将软件包安装到指定的路径下 --ignorearch # 不校验软件包的结构 --ignoreos # 不检查软件包运行的操作系统 --nodeps # 不检查依赖性关系
4.3.2. 卸载命令 1 2 3 4 5 6 7 # 基本卸载格式 rpm -e (or --erase) [options] package1 ... packageN # 详细卸载选项 --test # 只执行删除的测试 --noscripts # 不运行预安装和后安装脚本程序 --nodeps # 不检查依赖性
4.3.3. 升级命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 基本升级格式 rpm -U (or --upgrade) [options] package1.rpm ... packageN.rpm # 详细升级选项 -h (or --hash) # 安装时输出hash记号 (#) --oldpackage # 允许"升级"到一个老版本 --test # 只进行升级测试 --excludedocs # 不安装软件包中的文档文件 --includedocs # 安装文档 --replacepkgs # 强制重新安装已经安装的软件包 --replacefiles # 替换属于其它软件包的文件 --force # 忽略软件包及文件的冲突 --percent # 以百分比的形式输出安装的进度 --noscripts # 不运行预安装和后安装脚本 --prefix <path> # 将软件包安装到指定的路径下 --ignorearch # 不校验软件包的结构 --ignoreos # 不检查软件包运行的操作系统 --nodeps # 不检查依赖性关系
4.3.4. 查询命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 基本查询格式 rpm -q (or --query) [options] # 查询选项 -p (or '-') # 查询软件包的文件 -f # 查询文件属于哪个软件包 -a # 查询所有安装的软件包 --whatprovides # 查询提供了特定功能的软件包 -g # 查询属于特定组的软件包 --whatrequires # 查询所有需要特定功能的软件包 # 信息选项 -i # 显示软件包的概要信息 -l # 显示软件包中的文件列表 -c # 显示配置文件列表 -d # 显示文档文件列表 -s # 显示软件包中文件列表并显示每个文件的状态 --scripts # 显示安装、卸载、校验脚本 --queryformat # 以用户指定的方式显示查询信息 --dump # 显示每个文件的所有已校验信息 --provides # 显示软件包提供的功能 --requires (or -R) # 显示软件包所需的功能
4.3.5. 验证命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 验证已安装的软件包 rpm -V (or --verify, or -y) [options] package1 ... packageN # 验证选项 -p # 针对软件包文件进行验证 -f # 验证文件所属的软件包 -a # 验证所有的软件包 -g # 验证所有属于特定组的软件包 --noscripts # 不运行校验脚本 --nodeps # 不校验依赖性 --nofiles # 不校验文件属性 # 验证软件包文件 rpm -K (or --checksig) [options] package1.rpm ... packageN.rpm # 校验选项 --nopgp # 不校验PGP签名
4.3.6. 其他RPM选项 1 2 3 4 5 --rebuilddb # 重建RPM资料库 --initdb # 创建一个新的RPM资料库 --quiet # 尽可能的减少输出 --help # 显示帮助文件 --version # 显示RPM的当前版本
4.4. 实际应用场景 4.4.1. 安装本地RPM包 1 2 3 4 5 6 7 8 9 # 下载RPM包后安装 wget https://example.com/package.rpm rpm -ivh package.rpm # 安装时忽略依赖关系(不推荐,可能导致软件无法正常运行) rpm -ivh --nodeps package.rpm # 强制安装(即使有文件冲突) rpm -ivh --force package.rpm
4.4.2. 提取RPM包中的文件 1 2 3 4 5 6 7 8 9 # 创建临时目录 mkdir temp_rpm cd temp_rpm # 提取RPM包内容 rpm2cpio ../package.rpm | cpio -idmv # 查看提取的文件 ls -l
4.4.3. 查找已安装软件包的信息 1 2 3 4 5 6 7 8 9 10 11 # 查找所有已安装的软件包 rpm -qa | grep keyword # 查看特定软件包的详细信息 rpm -qi package_name # 列出软件包安装的所有文件 rpm -ql package_name # 查看某个文件是由哪个软件包安装的 rpm -qf /usr/bin/ls
4.4.4. 验证系统完整性 1 2 3 4 5 6 7 8 # 验证所有已安装的软件包 rpm -Va # 验证特定软件包 rpm -V package_name # 验证系统关键文件 rpm -Vf /bin/bash /bin/login /usr/bin/passwd
4.4.5. 修复损坏的RPM数据库 1 2 3 4 5 6 7 8 # 重建RPM数据库 rpm --rebuilddb # 如果重建失败,可以尝试初始化新数据库 mkdir /root/rpmdb_backup mv /var/lib/rpm/__db* /root/rpmdb_backup/ rpm --initdb rpm --rebuilddb
4.5. RPM与yum/dnf比较 特性 RPM yum dnf 依赖处理 不自动处理依赖关系 自动处理依赖关系 自动处理依赖关系 软件源 需要手动下载RPM包 支持配置软件源 支持配置软件源 软件包管理 单个软件包管理 批量软件包管理 批量软件包管理 历史记录 不记录操作历史 记录操作历史 记录操作历史 性能 直接操作,速度快 需要解析元数据,速度较慢 优化的依赖解析,速度较快 配置文件 /etc/rpmrc /etc/yum.conf /etc/dnf/dnf.conf 软件源配置 不适用 /etc/yum.repos.d/ /etc/yum.repos.d/ 适用系统 多种Linux发行版 RHEL/CentOS 5-7 RHEL/CentOS 8+,Fedora
4.5.1. 使用场景建议 使用RPM的场景 :
需要安装单个本地RPM包 系统没有网络连接,无法访问软件源 需要精确控制软件包的安装过程 需要提取RPM包中的文件而不安装 系统维护和故障排除 使用yum/dnf的场景 :
需要安装软件及其所有依赖 需要批量更新系统软件 需要从软件源安装软件 需要管理软件包组 需要回滚软件包更新 4.6. 常见问题与解决方案 4.6.1. 依赖关系问题 问题 :安装RPM包时提示依赖关系错误
1 2 error: Failed dependencies: libxxx.so.1 is needed by package-1.0-1.el7.x86_64
解决方案 :
1 2 3 4 5 6 7 8 9 # 方法1:使用yum/dnf安装,自动解决依赖 yum install package.rpm # 方法2:忽略依赖关系(不推荐) rpm -ivh --nodeps package.rpm # 方法3:手动安装依赖包 rpm -ivh dependency-package.rpm rpm -ivh package.rpm
4.6.2. 文件冲突问题 问题 :安装RPM包时提示文件冲突
1 file /usr/bin/xxx from install of package-1.0-1.el7.x86_64 conflicts with file from package oldpackage-0.9-1.el7.x86_64
解决方案 :
1 2 3 4 5 6 7 8 9 # 方法1:使用--replacefiles选项 rpm -ivh --replacefiles package.rpm # 方法2:先卸载冲突的软件包 rpm -e oldpackage rpm -ivh package.rpm # 方法3:使用--force选项(谨慎使用) rpm -ivh --force package.rpm
4.6.3. RPM数据库损坏 问题 :执行RPM命令时提示数据库错误
1 2 error: db4 error(-30987) from dbenv->open: DB_VERSION_MISMATCH: Database environment version mismatch error: cannot open Packages index using db3 - (-30987)
解决方案 :
1 2 3 4 5 6 7 8 9 10 # 重建RPM数据库 cd /var/lib/rpm rm -f __db* rpm --rebuilddb # 如果重建失败,可以尝试初始化新数据库 mkdir /root/rpmdb_backup mv /var/lib/rpm/__db* /root/rpmdb_backup/ rpm --initdb rpm --rebuilddb
4.6.4. GPG签名验证失败 问题 :安装RPM包时提示GPG签名验证失败
1 error: package.rpm: Header V3 RSA/SHA256 Signature, key ID xxxxxxxx: NOKEY
解决方案 :
1 2 3 4 5 6 7 8 # 方法1:导入GPG密钥 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 方法2:安装时跳过GPG验证 rpm -ivh --nosignature package.rpm # 方法3:临时禁用GPG验证 echo "%_gpgcheck 0" >> ~/.rpmmacros
4.6.5. 无法卸载软件包 问题 :卸载软件包时提示依赖关系错误
1 2 error: Failed dependencies: package is needed by (installed) otherpackage-1.0-1.el7.x86_64
解决方案 :
1 2 3 4 5 6 7 8 9 # 方法1:先卸载依赖该包的其他软件包 rpm -e otherpackage rpm -e package # 方法2:忽略依赖关系卸载(不推荐) rpm -e --nodeps package # 方法3:使用yum/dnf卸载,自动处理依赖 yum remove package
4.6.6. 软件包版本冲突 问题 :升级软件包时提示版本冲突
1 package package-2.0-1.el7.x86_64 (which is newer than package-1.0-1.el7.x86_64) is already installed
解决方案 :
1 2 3 4 5 6 7 8 9 # 方法1:使用--oldpackage选项降级 rpm -Uvh --oldpackage package-1.0-1.el7.x86_64.rpm # 方法2:先卸载旧版本,再安装新版本 rpm -e package rpm -ivh package-2.0-1.el7.x86_64.rpm # 方法3:使用yum/dnf降级 yum downgrade package-1.0-1.el7.x86_64
小技巧和踩坑记 1. CentOS 7安装cmake后提示cmake: symbol lookup error: cmake: undefined symbol: archive_write_add_filter_zstd