はじめに
この記事は備忘録です。
余談及び茶番が多分に含まれています。
読む必要のある箇所は本題・結論・詳細だけです。
余談
昨日、知り合いのじじいに Whisper と KH Coder の使い方教えたら、対価として、いい寿司屋に連れて行ってもらった。
高っ、と思ったけど、やっぱり値段なりにおいしいなと思った。
そうだと断言する意図があるわけではないが、やはり、価格と満足感はそれなりに比例すると思った。
しかし、悲しいかな、こういうことを繰り返していると、だんだん回転ずしとかに行く気がなくなってしまう。
一度引き上げられた認識を戻すことはそれなりに難しい。
別に大したことじゃないように思えるかもしれないが、本来満たすべき要件とは別に一度引き上げられたサービスレベルや、過大な目標値の前提化は、往々にしてコンコルド効果を生みかねない。
今こそ、イオンのフードコートに回帰すべきなのかもしれない。
本題
AlmaLinux 9 までは、ansible を入れる際に、以下のコマンドで導入していた。
dnf install -y ansible
ところが、AlmaLinux 10 を導入し ansible を同じように入れた際にこのようにエラーが返ってきた。
No match for argument: ansible
Error: Unable to find a match: ansible
??? なんで ???
??? .-----------.
( ・_・)ゞ | Not exist! |
/| | '-----------'
/ \ |_|
結論
AlmaLinux 10.2 では dnf 経由で全部入りの ansible をインストールすることはできない。
2026年9月時点の標準リポジトリ/EPEL 10には、Collectionを同梱した全部入りの ansible RPM は提供されていない。ちくしょー。
対処方法は、大きく分けて2つある。
全部入りのAnsibleを使いたい場合(推奨)
おとなしく、pipから ansible をインストールする。
dnf install -y python3-pip
# Ansibleを実行するユーザーで実行(rootで使用するならrootでよい)
python3 -m pip install --user ansible
DNFで管理したい場合
ansible-core と、Playbookが使用するCollectionを個別にインストールする。
dnf install -y epel-release
# CRBを確認。今回の環境ではすでに有効だった
dnf repolist --enabled | grep -i crb
# 何も表示されず、CRBが無効だった場合のみ実行
/usr/bin/crb enable
dnf makecache --refresh
dnf install -y ansible-core
# 僕の場合は以下が追加で必要だった
dnf install -y python3-libselinux
dnf install -y ansible-collection-ansible-posix
僕の場合、ほかのOSパッケージと管理方法をそろえるため、後者のDNF構成を採用した。
詳細
前提として、我々が ansible と呼んでいるものには、細かく分けると2つが存在している。
-
ansible-core:実行エンジンと基本モジュール -
ansible:ansible-coreに多数のCollectionを追加した全部入り版
ややこしいのだが、この2つは単なる別名ではなく、別パッケージになる。
EL9ではEPELに全部入りの ansible RPMがあったが、EPEL 10では提供されていない。
現在(2026年9月時点)もEPEL 10向けパッケージ作成要求は未解決で、メンテナーからも「実行エンジンが必要なら ansible-core をインストールする」と案内されている。
実際のパッケージ提供状況
AppStream、CRB、EPELをすべて有効にした状態で検索したが、表示されたのは ansible-core だけだった。
[root@linux ~]# dnf repolist --enabled | grep -E 'appstream|crb|epel'
appstream AlmaLinux 10 - AppStream
crb AlmaLinux 10 - CRB
epel Extra Packages for Enterprise Linux 10 from AlmaLinux - x86_64_v2
[root@linux ~]# dnf repoquery --available ansible ansible-core
ansible-core-1:2.16.16-2.el10.noarch
ansible-core-1:2.16.16-2.el10_2.1.noarch
そのため、dnf install ansible は次のエラーになる。
[root@linux ~]# dnf install -y ansible
No match for argument: ansible
Error: Unable to find a match: ansible
一方、ansible-core はAppStreamから正常にインストールできた。
[root@linux ~]# rpm -q ansible-core ansible
ansible-core-2.16.16-2.el10_2.1.noarch
package ansible is not installed
[root@linux ~]# type -a ansible ansible-playbook
ansible is /usr/bin/ansible
ansible-playbook is /usr/bin/ansible-playbook
パッケージ名は ansible-core だが、実行するコマンド名は従来どおり ansible や ansible-playbook になる。
最初からpip版だけを使えばよいのでは?
その通り。
最初からpip版だけを使用するのであれば、DNF版との競合は発生しない。今回の検証でも、pipから ansible 14.3.1 を正常にインストールできた。
Successfully installed ansible-14.3.1 ansible-core-2.21.4
単純にAnsibleを動かしたい場合や、Collectionを含む全部入り版を使いたい場合は、pip版へ統一する方法も有効な選択肢になる。
僕の場合、インストール、更新、削除をほかのOSパッケージと同じRPM/DNFで管理したかったため、DNF版を選択した。
重要なのは、pipとDNFのどちらを選ぶかではなく、両方を意図せず混在させないことである。
