[排错] RHEL 8 及以上解决升级 Nginx 后使用 yum 命令时显示警告 “Problem: module……,but none of the providers can be installed”

报错代码

 Problem: module php:7.2:820181215112050:76554e01.x86_64 from rhel-8-for-x86_64-appstream-rpms requires module(nginx:1.14), but none of the providers can be installed
  - module nginx:1.14:820181214004940:9edba152.x86_64 from rhel-8-for-x86_64-appstream-rpms conflicts with module(nginx:1.24) provided by nginx:1.24:8100020240119085512:e155f54d.x86_64 from rhel-8-for-x86_64-appstream-rpms
  - module nginx:1.24:8100020240119085512:e155f54d.x86_64 from rhel-8-for-x86_64-appstream-rpms conflicts with module(nginx:1.14) provided by nginx:1.14:820181214004940:9edba152.x86_64 from rhel-8-for-x86_64-appstream-rpms
  - module nginx:1.14:8000020190830002848:f8e95b4e.x86_64 from rhel-8-for-x86_64-appstream-rpms conflicts with module(nginx:1.24) provided by nginx:1.24:8100020240119085512:e155f54d.x86_64 from rhel-8-for-x86_64-appstream-rpms
  - module nginx:1.24:8100020240119085512:e155f54d.x86_64 from rhel-8-for-x86_64-appstream-rpms conflicts with module(nginx:1.14) provided by nginx:1.14:8000020190830002848:f8e95b4e.x86_64 from rhel-8-for-x86_64-appstream-rpms
  - conflicting requests
Dependencies resolved.

解决方法一:禁用所有和 nginx 模块有关联的 php 模块

# dnf module disable php

解决方法二:开启最新版本的 php 模块

# dnf module reset php && dnf module enable php:7.2

(补充:这里以设置 php:7.2 模块为例)

[步骤] Linux Kdump 的开启 (用于收集内核崩溃时的信息) (SLES 版)

正文:

步骤一:确保 kdump 软件包已安装

# rpm -qa | grep kdump || zypper install kdump

(注意:此方法只有 openSUSE & SLES 可以使用)

步骤二:给 Kdump 预留内存

2.1 计算给 Kdump 预留的内存大小

2.1.1 使用 kdumptool calibrate 命令获取推荐的 Kdump 预留大小
# kdumptool calibrate
config option KDUMP_COPY_KERNEL is deprecated, ignoring
Total: 1023
Low: 0
High: 342
MinLow: 0
MaxLow: 325
MinHigh: 0
MaxHigh: 325

(补充:这里的 Low 值为 0,High 值为 342)

(注意:这里数字的单位是兆 “M”)

2.1.2 查看 /proc/scsi/scsi 文件获取多路径设备数
# cat /proc/scsi/scsi | grep Lun | wc -l
2

(补充:这里显示的多路径设备数是 2)

(注意:这里需要排除掉多路径的设备,因为系统会忽略这些设备)

2.1.3 计算给 Kdump 预留的内存大小
2.1.3.1 计算给 Kdump 预留的 Low 内存大小

1) 当 kdumptool calibrate 命令执行的结果中 Low 值小于或等于 72M 时,Low 值应该设置为 72M
2) 当 kdumptool calibrate 命令执行的结果中 Low 值大于 72M 时,Low 应该设置为和kdumptool calibrate 命令执行的结果中的 Low 值一样

例如步骤 2.1.1 中的 Low 值为 0,所以这里的 Low 内存值为 72M

(补充:Low 值表示 DMA 32 区域中的内存预留值,是仅支持 32 位设备所需要的内存量,即 4GB 以内的全部内存。其值的设置应该注意以下两点)

(注意:在没有任何仅支持 32 为设备的情况下,为 Low 指指定 72M 的默认分配大小可确保一切正常,但 NUMA 系统似乎需要更多的 Low 内存。所以建议使用 numa=off 引导 Kdump 内核以去报常规内核分配不使用 Low 内存)

2.1.3.2 计算给 Kdump 预留的 High 内存大小
SIZE_HIGH = RECOMMENDATION + (LUNs / 2)

例如步骤 2.1.1 中的 High 值为 342,步骤 2.1.2 中获取到的数字是 2,所以这里的 High 内存值为 343

2.1.3.3 计算给 Kdump 预留的内存大小

根据步骤 2.1.3.1 和步骤 2.1.3.2 可计算出这次需要给 KDUMP 预留的内存大小如下:

crashkernel=343M,high crashkernel=72M,low

2.2 给 Kdump 预留内存

2.2.1 在 /etc/default/grub 配置文件里修改 crashkernel 参数
# vim /etc/default/grub

在这一行里:

.....
GRUB_CMDLINE_LINUX_DEFAULT="......"
.....

确保有:

.....
GRUB_CMDLINE_LINUX="crashkernel=343M,high crashkernel=72M,low......"
.....

并确保此文件其他地方没有和 crashkernel= 相关的参数

(补充:这里的 crashkernel=343M,high crashkernel=72M,low 是由步骤 2.1 计算得到的)

2.2.2 让刚刚修改的内核参数生效
2.2.2.1 生成新的 /boot/grub2/grub.cfg 文件
# grub2-mkconfig -o /boot/grub2/grub.cfg
2.2.2.2 重启系统
# reboot

步骤三:让 Kdump 加载刚刚设置的预留的内存大小

# systemctl enable kdump.service ; systemctl restart kdump.service

步骤四:测试 Kdump

4.1 手动触发内存奔溃

# echo c > /proc/sysrq-trigger

4.2 查看系统奔溃的记录

# last | grep crash

4.3 系统重启后查看 Kdump 有没有在系统奔溃时创建系统的日志

# ls /var/crash

(注意:如果 Kdump 没有生成的话,可以适当增加 crashkernel=,high 的值,之后再执行相印的步骤,之后再测试)

参考文献:

https://documentation.suse.com/sles/15-SP7/html/SLES-all/cha-tuning-kexec.html#sec-tuning-kexec-crashkernel
https://documentation.suse.com/zh-cn/sles/15-SP7/html/SLES-all/cha-tuning-kexec.html#sec-tuning-kexec-crashkernel

[排错] Linux 解决 SSSD 用户导致本地用户无法创建的问题 (本地用户名称和 SSSD 里的用户名称冲突导致本地用户名称无法被创建)

报错现象

创建这个用户时报错这个用户已经创建
删除这个用户时报错这个用户不存在
使用 id 命令检查这个用户时会显示此用户

确认方法:检查某个用户名有没有被域名占用

# getent passwd -s sss mingyuzhu

(补充:这里以检查某个用户名有没有被域名占用为例)

解决方法方法一:临时禁用 SSSD 解析

1.1 修改 /etc/nsswitch.conf 配置文件

# vi /etc/nsswitch.conf

将以下内容:

......
passwd:     files systemd
......

修改为:

......
#passwd:     files systemd
......

1.2 让刚刚修改的配置文件生效

# systemctl restart sssd

解决方法二:在 SSSD 服务中忽略某用户

2.1 修改 /etc/sssd.conf 配置文件

# vi /etc/sssd.conf

添加以下内容:

......
[nss]
filter_users = mingyuzhu

(补充:这里以忽略 mingyuzhu 用户为例)

2.2 让刚刚修改的配置文件生效

# systemctl restart sssd

参考文献

https://access.redhat.com/solutions/3442161

[排错] 解决 Linux 启动时某些服务没有开机自启 (日志里报错: “deleted to break ordering cycle starting”)

报错代码

某些服务没有开机自启例如 NetworkManager.service

原因分析

在系统日志里可以类似 …… Job network.target/start deleted to break ordering cycle starting with …… 报错例如:

# cat /var/log/messages
Jan 1 10:09:24 server systemd[1]: network-online.target: Found ordering cycle on network.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on NetworkManager.service/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on basic.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on slices.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on mysql.slice/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on remote-fs.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on remote-fs-pre.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on iscsi.service/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on network-online.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Job network.target/start deleted to break ordering cycle starting with network-online.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found ordering cycle on NetworkManager.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on basic.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on slices.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on mysql.slice/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on remote-fs.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on remote-fs-pre.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on iscsi.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on network-online.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on NetworkManager-wait-online.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Job NetworkManager.service/start deleted to break ordering cycle starting with NetworkManager-wait-online.service/start

从案例中日志里的内容可以判断:
1) network.target/NetworkManager.service 启动
2) NetworkManager.service 作为基础服务依赖 basic.target
3) basic.target 依赖所有 slice 包括 mysql.slice
4) mysql.slice 依赖 iscsi.service/remote-fs.target/remote-fs-pre.target
5) iscsi.service/remote-fs.target/remote-fs-pre.target 依赖 network.target/NetworkManager.service
6) 系统为了防止启动时陷入死循环,systemd 报错 Job NetworkManager.service/start deleted to break ordering cycle 并放弃启动 NetworkManager.service

解决方法

取消不太重要的服务的依赖要求

# vi /etc/systemd/system/mysql.slice

将以下内容:

......
Before=slices.target
Wants=-.slice
After=-.slice remote-fs.target
......

修改为:

......
Before=slices.target
Wants=-.slice
After=-.slice remote-fs.target
......

(补充:这里以取消使用 /etc/systemd/system/mysql.slice 文件的服务的依赖要求为例)