对客户端查错

1. 自动安装

根据您的基础通道,新的自动安装配置文件可能会订阅缺少必需软件包的通道。

要使自动安装可以正常进行,必须提供以下软件包:

  • pyOpenSSL

  • rhnlib

  • libxml2-python

  • spacewalk-koan

为了解决此问题,请先进行以下检查:

  • 检查是否为您的组织和用户提供了与自动安装配置文件中的基础通道相关的工具软件通道。

  • 检查是否为您的 SUSE Manager 提供了工具通道作为子通道。

  • 检查关联的通道中是否提供了必需的软件包和任何依赖项。

2. 裸机系统

如果网络中的裸机系统不会自动添加到系统列表中,请先进行以下检查:

  • 您必须已安装 pxe-default-image 软件包。

  • 必须正确配置文件路径和参数。检查 pxe-default-image 提供的 vmlinuz0initrd0.img 文件是否位于 rhn.conf 配置文件中指定的位置。

  • 确保将裸机系统连接到 SUSE Manager 服务器的网络设备可正常运行,并且您可以从该服务器访问 SUSE Manager 服务器 IP 地址。

  • 要置备的裸机系统必须在引导序列中启用 PXE 引导,并且必须未在尝试引导操作系统。

  • 引导期间,DHCP 服务器必须响应 DHCP 请求。检查 PXE 引导消息,确保:

    • DHCP 服务器指派的是预期的 IP 地址

    • DHCP 服务器为要引导的 next-server 指派的是 SUSE Manager 服务器 IP 地址。

  • 确保 Cobbler 正在运行,并且已启用发现功能。

如果您在引导后看到短暂显示的蓝色 Cobbler 菜单,则说明发现功能已启动。如果该过程未成功完成,请暂时禁用自动关闭以帮助诊断问题。要禁用自动关闭,请执行以下操作:

  1. 使用方向键在 Cobbler 菜单中选择 pxe-default-profile,然后在计时器到期前按 Tab 键。

  2. 使用集成编辑器添加内核引导参数 spacewalk-finally=running,然后按 Enter 继续引导。

  3. 使用用户名 root 和口令 linux 进入外壳继续调试。

重复的配置文件

受技术所限,我们无法可靠地区分新裸机系统与先前已发现的系统。因此,建议您不要多次启动裸机系统,因为这会导致产生重复的配置文件。

3. 引导生命周期已结束的 CentOS 6 客户端

CentOS 6 的生命周期现已结束,客户端储存库中提供的适用于此操作系统的映像已过时。使用这些软件包引导新的 CentOS 6 客户端将会失败。在已安装并引导的 CentOS 6 客户端上,不会发生这样的失败。

如果您需要引导新的 CentOS 6 客户端,可以编辑现有的储存库以反映正确的 RL。

过程:对新 CentOS 6 客户端引导查错
  1. 在 CentOS 6 客户端上的命令提示符下,打开位于 /etc/yum.repos.d/ 目录中的 entOS-Base.repo 文件。

  2. 找到指向 mirrorlist.centos.orgmirrorlist 项。可能存在多个项。例如:

    mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=os
  3. 注释掉 mirrorlist 项,以防止软件包管理器查找 URL。

  4. 编辑 baseurl 一行以指向 vault.centos.org URL,然后指定 CentOS 6 储存库。例如:

    baseurl=https://vault.centos.org/centos/6/os/$basearch/
  5. 对文件中列出的每个储存库重复上述步骤。

  6. 引导客户端。有关引导 CentOS 客户端的详细信息,请参见 注册 CentOS 客户端

有关 CentOS 6 生命周期结束的详细信息,请参见 http://mirror.centos.org/centos/6/readme

4. 生命周期已结束产品的引导储存库

同步受支持的产品时,会自动在 SUSE Manager Server 上创建及重新生成引导储存库。当产品到达生命周期结束日期且不再受支持时,如果您要继续使用此产品,就必须手动创建引导储存库。

有关引导储存库的详细信息,请参见 引导储存库

过程:创建生命周期已结束产品的引导储存库
  1. 在 SUSE Manager Server 上的命令提示符下,以 root 身份使用 --force选项列出不受支持的可用引导储存库,例如:

    mgr-create-bootstrap-repo --list --force
    1. SLE-11-SP4-x86_64
    2. SLE-12-SP2-x86_64
    3. SLE-12-SP3-x86_64
  2. 创建引导储存库,并使用适当的储存库名称作为产品标签:

    mgr-create-bootstrap-repo --create SLE-12-SP2-x86_64 --force

如果您不想手动创建引导储存库,可以检查您需要的产品和引导储存库是否有 LTSS。

5. 克隆的 Salt 客户端

如果您曾经使用过超级管理程序克隆实用程序,并尝试注册克隆的 Salt 客户端,您可能会收到以下错误:

抱歉,找不到该系统。

发生该错误的原因是新的克隆系统与现有的已注册系统具有相同的计算机 ID。您可以手动调整此数据以修复该错误,然后便可成功注册克隆的系统。

有关详细信息和说明,请参见 administration:tshoot- registerclones.adoc

6. 禁用 FQDNS grain

FQDNS grain 会返回系统中所有完全限定 DNS 服务的列表。通常很快就能完成这些信息的收集,但如果 DNS 设置配置错误,花费的时间可能会长很多。在某些情况下,客户端会变成无响应状态或者会崩溃。

为了防止发生此问题,您可以使用 Salt 标志来禁用 FQDNS grain。如果禁用 grain,您便可以使用网络模块提供 FQDNS 服务,而不会面临客户端变成无响应状态的风险。

这仅适用于较旧的 Salt 客户端。如果您是最近注册 Salt 客户端的,FQDNS grain 默认会禁用。

在 SUSE Manager Server 上的命令提示符下,使用以下命令禁用 FQDNS grain:

salt '*' state.sls util.mgr_disable_fqdns_grain

此命令会重启动每个客户端并生成服务器需要处理的 Salt 事件。如果您的客户端非常多,可以改用批处理模式执行该命令:

salt --batch-size 50 '*' state.sls util.mgr_disable_fqdns_grain

等待批处理命令执行完。请不要按 Ctrl+C 中断该过程。

7. 使用 noexec 挂载 /tmp

Salt 从客户端文件系统的 /tmp 中运行远程命令。因此,切勿使用 noexec 选项挂载 /tmp。另一个解决此问题的方法是,使用为 Salt 服务指定的 TMPDIR 环境变量覆盖临时目录路径,使其指向未设置 noexec 选项的目录。建议使用 systemd 插入配置文件 /etc/systemd/system/venv-salt-minion.service.d/10-TMPDIR.conf(如果使用了 Salt 捆绑包)或 /etc/systemd/system/salt-minion.service.d/10-TMPDIR.conf(如果客户端上使用了 salt-minion)。插入配置文件内容的示例如下:

[Service]
Environment=TMPDIR=/var/tmp

8. 使用 noexec 挂载 /var/tmp

Salt SSH 使用 /var/tmp 在安装了绑定 Python 的客户端上部署 Salt 捆绑包和执行 Salt 命令。因此,切勿使用 noexec 选项挂载 /var/tmp。无法通过 Web UI 引导使用 noexec 选项挂载 /var/tmp 的客户端,因为引导过程是使用 Salt SSH 来访问客户端的。

9. 传递启动事件的 Grain

Salt 客户端每次启动时都会将 machine_id grain 传递给 SUSE Manager。SUSE Manager 使用此 grain 确定客户端是否已注册。此过程需要进行同步 Salt 调用。同步 Salt 调用会阻止其他进程,因此如果您有大量客户端同时启动,该过程可能会造成很严重的延迟。

为了解决此问题,Salt 中引入了一项新功能来避免进行单独的同步 Salt 调用。

要使用此功能,您可以在支持该功能的客户端上向客户端配置中添加一个配置参数。

如果想要更轻松地完成此过程,您可以使用 mgr_start_event_grains.sls 助手 Salt 状态。

这仅适用于已注册的客户端。如果您是最近注册 Salt 客户端的,系统默认会添加此配置参数。

在 SUSE Manager Server 上的命令提示符下,使用以下命令启用 start_event_grains 配置助手:

salt '*' state.sls util.mgr_start_event_grains

此命令会在客户端的配置文件中添加所需的配置,并在客户端重启动时应用更改。如果您的客户端非常多,可以改用批处理模式执行该命令:

salt --batch-size 50 '*' state.sls mgr_start_event_grains

10. 代理连接和 FQDN

有时,通过代理连接的客户端会显示在 Web UI 中,但不会显示它们是通过代理连接的。如果您连接时使用的不是完全限定的域名 (FQDN),而代理对 SUSE Manager 而言是未知的,就可能发生此情况。

要更正此行为,请在代理上的客户端配置文件中指定其他 FQDN 作为 grain:

grains:
  susemanager:
    custom_fqdns:
      - name.one
      - name.two

11. Red Hat CDN 通道和多个证书

有时,Red Hat 内容分发网络(CDN) 通道会提供多个证书,而 SUSE Manager Web UI 只能导入单个证书。如果 CDN 提供的证书与 SUSE Manager Web UI 已知的证书不同,即使该证书准确无误,验证也会失败,并且访问储存库的权限会被拒绝。收到的错误消息如下:

[错误]
储存库 '<repo_name>' 无效。
<repo.pem> 在指定的 URL 未找到有效元数据
历史记录:
 - [|] 尝试从 '<repo.pem>' 读取数据时出错
 - 访问 '<repo.pem>' 的权限被拒绝。
请检查为此储存库定义的 URL 是否指向有效储存库。
由于发生上述错误,正在跳过储存库 '<repo_name>'。
由于发生错误,无法刷新储存库。
HH:MM:SS RepoMDError:无法访问储存库。可能未导入储存库 GPG 密钥

要解决此问题,请将所有有效的证书合并到单个 .pem 文件中,然后重构建证书以供 SUSE Manager 使用:

过程:解析多个 Red Hat CDN 证书
  1. 在 Red Hat 客户端上的命令提示符下,以 root 身份将 /etc/pki/entitlement/ 中的所有当前证书合并到单个 rh-cert.pem 文件中:

    cat 866705146090697087.pem 3539668047766796506.pem redhat-entitlement- authority.pem > rh-cert.pem
  2. /etc/pki/entitlement/ 中的所有当前密钥合并到单个 rh-key. pem 文件中:

    cat 866705146090697087-key.pem 3539668047766796506-key.pem > rh-key.pem

现在,您可以按照使用 CDN 注册 Red Hat Enterprise Linux 客户端中的说明将新证书导入 SUSE Manager Server。

12. 在 Web UI 中注册失败,且未显示任何错误

在 Web UI 中进行初始注册时,所有 Salt 客户端使用的都是 Salt SSH。

由其性质决定,Salt SSH 客户端不会向服务器回报错误。

不过,Salt SSH 客户端会将日志储存在本地的 /var/log/salt-ssh.log 中,您可以在其中检查错误。

13. 注册较旧的客户端

要注册并使用 CentOS 6、Oracle Linux 6、Red Hat Enterprise Linux 6、SUSE Linux Enterprise Server with Expanded Support 6 或 SUSE Linux Enterprise Server 11 客户端,需要配置 SUSE Manager 服务器以支持较旧类型的 SSL 加密。

如果您尝试在命令提示符处注册,会看到如下所示的错误:

储存库 '<Repository_Name>' 无效。
[|]在指定的 URL 中未找到有效元数据
请检查为此储存库定义的 URL 是否指向有效储存库。
由于发生上述错误,正在跳过储存库 '<Repository_Name>'。
'www.example.com' 的下载 (curl) 错误:
错误代码:无法识别的错误
错误消息:error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version

如果您尝试在 Web UI 中注册,会看到如下所示的错误:

呈现 SLS 'base:bootstrap' 失败:Jinja 错误:>>> 未找到适用于 RHEL6 和 SLES11 的 TLS 1.2 及更高版本。请检查您的 Apache 配置。
...

发生此情况的原因是 Apache 需要使用 TLS  1.2 版,但较旧的操作系统不支持此版本的 TLS 协议。要修复此错误,您需要强制服务器上的 Apache 接受更广范围的协议版本。在 SUSE Manager 服务器上,以 root 身份打开 /etc/apache2/ssl-global.conf 配置文件,找到 SSLProtocol 一行,将其更新为如下内容:

SSLProtocol all -SSLv2 -SSLv3

此操作需要在服务器上手动完成并在代理上使用 Salt 状态(如果适用)。进行更改后,在每个系统上重启动 apache 服务。

14. 显示为关闭的 Salt 客户端和 DNS 设置

即使 Salt 客户端正在运行,软件包刷新或应用状态这样的操作也可能会标示为失败,并显示以下消息:

受控端已关闭或无法联系。

在此情况下,请尝试重新安排该操作。如果重新安排成功,发生问题的原因可能在于 DNS 配置有误。

Salt 客户端重启动时,或者系统在刷新 grain 时,客户端会计算其 FQDN grain,并在 grain 继续执行前保持无响应状态。当 SUSE Manager Server 上安排的操作将要执行时,SUSE Manager Server 会先于实际操作向客户端发出 test.ping,以确保客户端实际上正在运行,可以触发该操作。

默认情况下,SUSE Manager Server 会等待 5 秒来获得 test.ping 命令的响应。如果在 5 秒内未收到响应,则会将该操作设置为失败,并显示消息指出客户端已关闭或无法联系。

要解决此问题,请修复客户端上的 DNS 解析,使客户端在解析其 FQDN 时不会卡顿 5 秒时间。

如果无法修复,请尝试将 SUSE Manager Server 上 /etc/rhn/rhn.conf 文件中 java.salt_presence_ping_timeout 的值增至大于 4 的值。

例如:

java.salt_presence_ping_timeout = 6

之后,使用以下命令重启动 spacewalk-services

spacewalk-services restart

将此值增大会使 SUSE Manager 服务器花费更长时间检查受控端是否无法连接或无响应,导致 SUSE Manager 服务器总体速度更慢或响应能力更低。

15. 将 Salt 3000 迁移到 Salt 捆绑包

15.1. 将 SUSE Linux Enterprise Server 12、Red Hat Enterprise Linux 7 或 CentOS 7 受控端 (Salt 3000 EOL) 切换到 Salt 捆绑包

过程:使用 util.mgr_switch_to_venv_minion 状态切换到 venv-salt-minion
  1. 首先,在不指定任何 pillar 的情况下应用 util.mgr_switch_to_venv_minion。这样会通过复制 etc 中的配置文件切换到 venv-salt-minion。此过程不会清理原始的 salt-minion 配置及其软件包。

    salt <minion_id> state.apply util.mgr_switch_to_venv_minion
  2. mgr_purge_non_venv_salt 设为 True(用于去除 salt-minion)以及 mgr_purge_non_venv_salt_files 设为 True(用于去除与 salt-minion 相关的所有文件)的情况下应用 util.mgr_switch_to_venv_minion。 该第二步用于确保第一步已经处理,然后去除旧配置文件以及现已过时的 salt-minion 软件包。

    salt <minion_id> state.apply util.mgr_switch_to_venv_minion pillar='{"mgr_purge_non_venv_salt_files": True, "mgr_purge_non_venv_salt": True}'

15.2. 将 SUSE Linux Enterprise Server 12、Red Hat Enterprise Linux 7 或 CentOS 7 SSH 受控端 (Salt 3000 EOL) 切换到 Salt 捆绑包

过程:启用 Salt 捆绑包与 Salt SSH 支持
  1. /etc/rhn/rhn.conf 中指定:

    web.ssh_salt_pre_flight_script = /usr/share/susemanager/salt-ssh/preflight.sh
    
    web.ssh_use_salt_thin = false
  2. 为 Salt 主控端创建额外的普适性配置文件 /etc/salt/master.d/ssh-preflight.conf,并将 ssh_run_pre_flight 设为 true

    ssh_run_pre_flight: true
  3. 使用 spacewalk-service restart 重启动服务。