質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

rpm

rpmコマンドは、UNIX系OSのroot権限でのみ利用可能なコマンドで、 RPMパッケージのインストールなどができます。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

2回答

2954閲覧

AnsibleでRPMパッケージをインストール

papachiropa

総合スコア14

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

rpm

rpmコマンドは、UNIX系OSのroot権限でのみ利用可能なコマンドで、 RPMパッケージのインストールなどができます。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

2クリップ

投稿2020/05/24 02:29

編集2020/05/24 08:38

Ansibleで構築対象サーバ(192.168.100.251)に大量のRPMパッケージをインストールしたいのですが
playbookの書き方が全く浮かばなくて困っております。
OSはAnsible操作端末も構築対象サーバもCentOS7です。

YAML

1- hosts: 192.168.100.251 2 gather_facts: no 3 remote_user: root 4 become: true 5 tasks: 6 - name: install_packages 7 yum: 8 name: "{{ packages }}" 9 vars: 10 packages: 11 - ConsoleKit-0.4.1-6.el6.x86_64 12 - ElectricFence-2.2.2-39.el6.x86_64 13 - ImageMagick-libs-7.0.10-13.x86_64 14# 合計1000近くあります

これで実施しましたが、「No package matching found available」という
エラーが出て成功しません。packagesの項目に「wget」を追記した場合(下の引用の場合)は
成功するので文法エラーではなさそうです。

YAML

1 vars: 2 packages: 3 - wget

形としてはOSのみ入っている構築対象サーバにインストール予定の
パッケージが既に入っているかチェック→ない場合は新規でインストールする、
あるいはアップデートするような流れのplaybookを作成したいです。
ご教示宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raccy

2020/05/24 04:20

YAMLファイルのインデントがおかしいため、正しく読み取ることができません。Markdownが何かよくわからないのであれば、編集画面にあるボタンを活用し、コード部分はコードとして書くようにしてください。 https://teratail.com/help/question-tips#questionTips3-7
hidezzz

2020/05/24 04:46

自分はapt(Ubuntuのパッケージマネージャ用)モジュールでしかやったこと無くて、 もしかしてyumモジュールでは事情が違うとかがあるのかもしれませんが…、 https://docs.ansible.com/ansible/latest/modules/yum_module.html の「Examples」項を見た感じ、バージョン番号を厳密に指定しなくてもインストール可能なのでは無いでしょうか? つまり「ConsoleKit-0.4.1-6.el6.x86_64」 → 「ConsoleKit」と指定するということです。
papachiropa

2020/05/24 08:49

>raccy様 ご指摘ありがとうございます。取り急ぎ修正しました。 >hidezzz様 ありがとうございます。ちょっとそれはまだ試せてないので実施してみます。 申し訳ございませんが通信的な都合で今は試せない状況なので また後日に実施結果を報告させて頂きます。
raccy

2020/05/24 09:32

ひとつあるとしたら、CentOSのパッケージ名は全て小文字なので、大文字小文字の違いでマッチしないというのはあるかも知れません。あとは、`.x86_64`が余計かもぐらい。
papachiropa

2020/05/25 08:13

>raccy様 >hidezzz様 「ConsoleKit」のみでもうまくいきませんでした。しかし調べて分かったのですが そもそもConsoleKitがCentOS7に対応していないパッケージでした…すみません。 「ElectricFence-2.2.2-39.el6.x86_64」や「ImageMagick-libs-7.0.10-13.x86_64」に関しては お2人の指摘通り、「ElectricFence」「ImageMagick」で実施したところ、 el7でインストールされていることが確認できました。ありがとうございます。
guest

回答2

0

ベストアンサー

CentOS7 が対象なのに el6 のパッケージを指定しているからではないでしょうか。

投稿2020/05/24 09:38

SugiTK

総合スコア495

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papachiropa

2020/05/25 08:15

おっしゃるとおりでした…el7で指定すべきでした。 今回は「ElectricFence」「ImageMagick」で指定したところ、 el7でインストールされていることが確認できました。ありがとうございます。
SugiTK

2020/05/25 08:40

よかったです!
guest

0

「No package matching found available」というエラーが出て成功しません。

.rpm の拡張子も含めてファイル名を指定する必要があります。
まず、ディレクトリでファイルの一覧をとって、それをインストールしてはどうでしょうか。
たとえば、 /root/RPMS/x86_64/ の下と /root/RPMS/noarch の下のRPMファイルを全部インストールする場合は以下のようになります。

yaml

1- name: collect rpm file list 2 shell: ls -1 /root/RPMS/*/*.rpm 3 check_mode: False 4 changed_when: False 5 register: rpms 6- name: install packages 7 yum: 8 state: present 9 name: "{{ rpms.stdout_lines }}"

関係ありませんが、 teratail でコードやメッセージを貼り付けるときはバッククオート3個で囲んでいただけますと助かります。yaml でインデントがないと読むのは厳しいです。

投稿2020/05/24 02:57

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hidezzz

2020/05/24 03:12

質問者が(数は多いのかもしれませんが)パッケージを選別して入れようとしているようなのに、パッケージを無差別に全部入れる例というのはあまり良くないのではないでしょうか?
mit0223

2020/05/24 04:07

hidezzz様、コメントありがとうございます。あくまで例ですので、選別のロジックによっていろいろバリエーションはできると思います。ロジックを入れるならば、playbook ではなく、インベントリで対応するほうがよいでしょうね。
papachiropa

2020/05/25 08:17

>mit0223様 分かりやすい例を用意して頂きありがとうございます。参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問