[排错] 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 解决 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
......


补充:
1) 这里以取消使用 /etc/systemd/system/mysql.slice 文件的服务的依赖要求为例
2) 这里以注释掉 After=-.slice remote-fs.target 中的 remote-fs.target 为例

[排错] 解决 Linux 开机时报错 “kernel panic – no syncing: Attempted to kill init ……”

报错代码

/init: error while loading shared libraries: libsystemd-shared-239.so: cannot open shared object file: No such file or directory
kernel panic - no syncing: Attempted to kill init! exitcode=0x00007f00

解决方法

步骤一:进入拯救模式

步骤二:确认第三方软件库

2.1 搜集第三方软件库信息

# ldconfig -p > /tmp/ldconfig.out

2.2 确认有没有第三方软件库

# for l in $(awk '{ print $1 }' /tmp/ldconfig.out); do matches=$(awk "\$1 == \"$l\" { print }" /tmp/ldconfig.out); if [ $(echo "$matches" | wc -l) -ge 2 ]; then echo "$matches"; echo; fi; done

(补充:如果没有第三方软件库的话这里不会有任何输出)

步骤三:检查 /etc/ld.so.conf 文件或者 /etc/ld.so.conf.d/ 目录里的文件去除第三方库

(步骤略)

步骤四:刷新库缓存

# ldconfig

步骤五:为启动失败的系统创建创建 initramfs 文件

# dracut -f /boot/initramfs-(uname -r).img $(uname -r)

(补充:这里以将正在运行的内核版本生成一个新的 initramfs 为例)

(注意:此时原来启动系统时使用的那个 initramfs 文件会被覆盖)

步骤六:重启系统

# reboot

参考文献

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