0%

centos配置记录

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. 防火墙

  • centos7使用firewalld管理防火墙,具体配置查看 firewalld

二、软件安装

1. yum命令

1.1. 开启安装debuginfo

1
yum install 'dnf-command(debuginfo-install)'
  • 之后就可以使用下面命令安装对应的debuginfo的包
1
yum debuginfo-install xxx

2. 部分命令安装源和包

2.1. CentOS 7

文件/命令所属包所属仓库
rpcgenrpcgenPowerTools
ncurses/curses.hncurses-develBaseOS
gdbservergdb-gdbserverAppStream
ifconfignet-toolsbase
ifconfignet-toolsbase

2.2. CentOS 8

文件/命令所属包所属仓库
/usr/include/libudev.hsystemd-develBaseOS

3. 包内容查看和搜索

  • 需要安装yum-utils

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比较

特性RPMyumdnf
依赖处理不自动处理依赖关系自动处理依赖关系自动处理依赖关系
软件源需要手动下载RPM包支持配置软件源支持配置软件源
软件包管理单个软件包管理批量软件包管理批量软件包管理
历史记录不记录操作历史记录操作历史记录操作历史
性能直接操作,速度快需要解析元数据,速度较慢优化的依赖解析,速度较快
配置文件/etc/rpmrc/etc/yum.conf/etc/dnf/dnf.conf
软件源配置不适用/etc/yum.repos.d//etc/yum.repos.d/
适用系统多种Linux发行版RHEL/CentOS 5-7RHEL/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

  • 安装libarchive即可