[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

[Ansible] CentOS 6 Playbook 的“(libselinux-python)未安装!”的解决方案

大家好。
我是中,系统解决方案部的成员,我突然很想吃沾面和意大利面。

往往会出现错误“ (libselinux-python) isn'tinstalled!

我认为这个错误通常可以手动处理。

然而即使机器数量很多并且您想使用Ansible麻烦

在这种情况下,我想,“用 Ansible 解决这个问题会更容易”,并写了一本剧本。

这次,我们将介绍并解释 CentOS 6 的“(libselinux-python)未安装!”解决方案。

前言

  • 我们不建议在 CentOS 6 上运行。
    这只是对 CentOS 6 的紧急应对
  • 您使用的版本不再受支持。
    这也是为了紧急使用不建议使用。

基本原因

(libselinux-python)未安装!

当使用文件操作等需要更改的模块时,

  • 并未完全禁用
  • 并且(*1)不包含 libselinux-python 软件包(*2)

这是一个错误,发生在以下情况:

*1. 如果禁用 SELinux,则不会出现此错误。
*2. 由于 Ansible 在 Python 上运行,因此这是 Python 运行 SELinux 所必需的。
*对于Python 3,它是“python3-libselinux”,但似乎一般不为CentOS 6提供它。

手动解决

# sudo yum 安装 libselinux-python

如果目标端包含“libselinux-python”,问题就基本解决了。

*“python3-libselinux”适用于 Python 3

但是,CentOS 6 已停产,如果存储库保持默认状态,您很可能无法使用 yum

在这种情况下,您将需要使用可用存储库中的 wget 和 rpm 执行本地安装。

因此,多种环境下的人工处理相对困难。

问:为什么要使用剧本来更改它?

A. 我想用 Ansible 来做这项工作,但是事先手动做很痛苦...不仅因为手动做很痛苦,还因为很
容易想到,“如果我需要做手动,我会手动完成这一切,”所以我想避免本末倒置。

因此,我们的立场是, “我们希望积极地将可以用 Ansible 稳定完成的事情做到这一点。”

问:它与 CentOS 7 不兼容吗?

答:我认为通过分离剧本并在包含/导入阶段做出决策/分支来处理版本差异会更明智。

我担心如何使其兼容,但它已经包含了无法使用“yum”时的分支,这使得它有点复杂。

由于存储库的目录层次结构名称可能会根据操作系统版本而变化,因此会有更多分支。

我们没有包含它,因为我们认为在单个剧本中创建版本分支会降低可读性和可维护性。

执行环境

■ Linux 环境
操作系统:AlmaLinux 版本 8.5(WSL2 环境)
Shell:Bash
Docker:26.1.0,内部版本 9714adc

■ Ansible 环境(WSL2 中的 Docker 容器)
操作系统:AlmaLinux 版本 8.9
Ansible:Ansible-core 2.12.10

■ Windows 环境
操作系统:Windows11 Pro(版本:23H2)
语言设置:更改为日语

■ CentOS 6 环境(Vagrant + VirtualBox)
操作系统:CentOS 6.9(bento / centos-6.9)
Vagrant:2.4.1
VirtualBox:7.0.18 r162988(Qt5.15.2)
IP:192.168.33.15

Ansible 2.12环境搭建步骤

使用对应的旧版本(2.12)

在上一篇文章中,我解释了如何构建 Ansible 2.12,请参考。

【Ansible 2.12】在WSL2中使用Docker构建CentOS 6的Ansible执行环境

剧本

在 CentOS 6 环境中执行 playbook 时,旨在预防性使用,如果先包含/导入它,则可以执行它而不会导致错误

*当然,您也可以在出现错误后使用此playbook来解决问题。

libselinux-python_wget.yml

格式是使用 main.yml 端的 import_tasks 来加载此 playbook。
(因为作者喜欢将playbook分成角色,以提高可重用性、可读性和可维护性)

--- ## 变量默认值 # wget_repo | 默认值 ("http://ftp.iij.ad.jp/pub/linux/centos-vault") - 名称: 检查 SELinux ansible.builtin.command: cmd: getenforce 注册: SELinux_result - ansible.builtin.debug: var: SELinux_result.stdout - 名称: 检查 libeselinux-python ansible.builtin.shell: cmd: rpm -aq | grep libselinux-python 寄存器: rpm_resultignore_errors: yes - ansible.builtin.debug: var : rpm_result.stdout # 如果SELinux被禁用,Ansible无需添加即可执行,因此不会执行。 # 另外,如果已经安装了libselinux-python,则不会执行 - name: yum install libselinux-python ansible.内置 .yum: 名称: libselinux-python 状态: 存在 寄存器: yum_libselinux_resultignore_errors: yes 何时: not ( SELinux_result.stdout is search("disabled") ) and not ( rpm_result.stdout is search("libselinux-python*")) # 如果使用 yum 安装失败,请使用 wget 安装 - name: Setup libselinux-python when: yum_libselinux_result is failed and not ( rpm_result.stdout is search("libselinux-python*")) block: # 由于版本差异,自安装包名称也会更改,将包列表的 HTML 存储在变量中 -name: 获取 OS_version 包 ansible.builtin.uri: url: "{{ wget_repo | default('http://ftp.iij.ad.jp/pub /linux/centos-vault') }}/{{ ansible_distribution_version }}/os/x86_64/Packages/" method: GET return_content: yes register: packages_content # 从 HTML 中获取“libselinux-python”的 rpm 名称 - name:提取 rpm_name ansible.builtin.set_fact: rpm_name: "{{ packages_content.content | regex_search('libselinux-python-(.*?)\\.x86_64\\.rpm') }}" - ansible.builtin.debug: var : rpm_name # 使用获得的rpm名称进行下载 - name: 下载 libselinux-python ansible.builtin.get_url: url: "{{ wget_repo | default('http://ftp.iij.ad.jp/pub/linux/centos- Vault') }}/{{ ansible_distribution_version }}/os/x86_64/Packages/{{ rpm_name }}" dest: "/tmp/{{ rpm_name }}" # 在无法使用 yum 的情况下使用 rpm 安装 - name:安装 libselinux-python ansible.builtin.命令: rpm -ivh /tmp/"{{ rpm_name }}"

我主要在评论中写下了我的意图,但我也会在下面解释它们。

# wget_repo:| 默认(“http://ftp.iij.ad.jp/pub/linux/centos-vault”)

如果您无法使用 yum,请直接从存储库获取 libselinux-python。

此时使用的存储库由变量指定,但如果未指定,则在开头进行注释以指定使用 IIJ 的存储库。

- 名称:检查 SELinux
- 名称:检查 libeselinux-python

在禁用 SELinux 的环境中,没有必要这样做,因为它将在没有“libselinux-python”的情况下运行。
首先,我检查状态,然后将其放入变量中进行判断。

另外,考虑到 yum 无法在 CentOS 6 上使用,我们将检查是否已使用 shell 模块中的 rpm 安装。
这也保存在一个变量中以供判断。

-名称:yum install libselinux-python

SELinux 状态为“已禁用”以外且未安装“libselinux-python”执行

尝试用yum模块安装,如果已经安装或者已经安装了就OK了。

如果“yum”无法使用并失败,则继续“ignore_errors: yes” ,将任务的失败放入变量中进行判断,并在后续任务中尝试直接从存储库中检索。

- 名称:Setup libselinux-python
当:yum_libselinux_result 失败时
块:

当使用“yum”安装失败时(when 条件)。
一个任务块,用于直接从存储库获取包并。

首先,使用ansible_facts的“ansible_distribution_version”从存储库的目录层次结构中获取与操作系统次要版本匹配的“libselinux-python”官方包名称,并将其保存在变量中。

然后使用该变量通过 get_uri 模块下载并通过命令模块使用 rpm 在本地安装。

执行示例

验证环境清单文件

CentOS 6(bento/centos-6.9)默认是密码认证,但可能存在不推荐

-- 全部: vars:ansible_user:流浪者主机:targetnode:ansible_host:192.168.33.15 ansible_ssh_pass:流浪者

主.yml

main.yml 端没有编写任何任务,并且使用 import_tasks 加载 playbook。
(因为作者喜欢将playbook分成角色,以提高可重用性、可读性和可维护性)

- 名称:libselinux-python 主机:targetnode< 变为:yes vars:wget_repo:“http://ftp.iij.ad.jp/pub/linux/centos-vault”任务 - 名称:包括 libeselinux-python(wget) ansible .builtin.import_tasks:libselinux-python_wget.yml

剧本执行

在本文中,我们将从具有早期 Ansible 版本的容器中运行它。

[root@author 容器环境工作]# ansible-playbook -i 主机 main.yml

最后

虽然花费了很多时间,但我尝试将可以标准化的工作合并到Ansible中。
之后,您可以多次重复使用它,这很好,因为我在习惯 Ansible 方面学到了很多东西。

CentOS 6 环境下大概率无法使用 yum,导致安装 Ansible 的门槛很高,所以
希望这篇文章能给阅读本文的人一个尝试 Ansible 的机会或者提供一些有用的知识/信息。

感谢您阅读本文!

参考资料

ansible.builtin.yum 模块 – 使用 yum 包管理器管理包
https://docs.ansible.com/ansible/9/collections/ansible/builtin/yum_module.html

8.6.SELinux
https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/8/html/considerations_in_adopting_rhel_8/selinux_security

如果您觉得这篇文章有帮助,请点赞!
4
加载中...
4 票,平均:1.00 / 14
204
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

里面

2022 年加入 Beyond 职业生涯 属于
系统解决方案部门
LPIC-3 我有 304 和 AWS SAA 我的
常规饮料只有三种选择:牛奶、可乐和红茶。