ansibleでrpmアーカイブを展開してyumでインストールする方法

ansibleでrpmアーカイブを展開してyumでインストールする方法

Posted at July 13,2023 11:55 PM
Tag:[ansible]

ansibleでrpmアーカイブを展開してyumでインストールする方法を紹介します。

1.問題点

ansibleで実施したいコマンドは下記です(リモートホストの/tmpにpacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gzが配置されている前提で話を進めます)。

# ssh test_host
# cd /tmp
# tar xvfz pacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gz
# cd pacemaker-1.0.13-1.2.el6.x86_64.repo
# yum --disablerepo=* -c pacemaker.repo install -y pacemaker pm_crmgen pm_logconv-hb pm_diskd pm_extras --enablerepo=pacemaker

なお、pacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gzを展開すると、直下にpacemaker.repoがあります。

このファイルをyumコマンドの"-c"オプションでリポジトリとして指定し、インストールしたいのですが、ansibleでの書き方が分かりません。

ということで、ansibleでアーカイブを転送してyumでインストールする方法を紹介します。

2.ansibleでアーカイブを転送してyumでインストールする

先にansibleのコードを掲載します。inventoryやtasksの記載は省略していますので、実行時に適宜追加してください。

- name: "pacemakerアーカイブの展開"
  unarchive:
    remote_src: yes
    src: "/tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gz"
    dest: "/tmp"
 
- name: "pacemakerインストール"
  become: yes
  become_method: su
  yum:
    name: "{{ packages }}"
    conf_file: "/tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo/pacemaker.repo"
    disablerepo: "*"
    enablerepo: "pacemaker"
    state: present
  vars:
    packages:
      - pacemaker
      - pm_crmgen
      - pm_logconv-hb
      - pm_diskd
      - pm_extras

3.解説

まずリモートホストのアーカイブを展開します。

  unarchive:
    remote_src: yes
    src: "/tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gz"
    dest: "/tmp"

この詳細は「ansibleでリモートホストのアーカイブファイルを展開する方法」を参考にしてください。

次に、becomeで権限昇格(rootでの実行)を指定します。これはyumをrootで実行するためです。

  become: yes
  become_method: su

そしてyumモジュールでインストールします。

  yum:
    name: "{{ packages }}"
    conf_file: "/tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo/pacemaker.repo"
    disablerepo: "*"
    enablerepo: "pacemaker"
    state: present

nameはインストールパッケージを指定しますが、後で説明します。

conf_fileがyumコマンドの"-c"オプションに該当します。

    conf_file: "{{ work_path }}/SIP/sip-common/RPM/pacemaker-1.0.13-1.2.el6.x86_64.repo/pacemaker.repo"

通常のyumの場合、実行前にpacemaker.repoファイルがあるパスに移動できるのですが、ansibleではcdができないので、conf_fileはフルパスでpacemaker.repoのパスを指定します。

また、今回はスタンドアローンでインストールしているので、不要なリポジトリにアクセスしないよう、下記のdisablerepoを追加しています。disablerepoの指定だけではpacemaker.repoがみつからず、エラーになるので、enablerepoでpacemaker.repoも指定します。

    disablerepo: "*"
    enablerepo: "pacemaker"

stateに指定するpresentは、"yum install"と同じ意味になるようです。

さて、パッケージを指定するnameですが、インストールパッケージが複数あるので、下記の方法で指定します。

  yum:
    name: "{{ packages }}"
   :
  vars:
    packages:
      - pacemaker
      - pm_crmgen
      - pm_logconv-hb
      - pm_diskd
      - pm_extras

varsモジュールの変数packages(変数名は任意)に書かれた配列の値が、nameの{{ packages }}に設定されます。

varsのインデントに気をつけてください。私はyumの中にvarsをインデントして入れてしまって、エラーの原因がわからず悩みました。

また、展開した中にあるpacemaker.repoの内容は

[pacemaker]
name=pacemaker
baseurl=file:///tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo/
gpgcheck=0
enabled=1

となっていますが、pacemakerのアーカイブを展開するディレクトリが/tmp直下でない場合は、pacemaker.repoのbaseurlのパスが異なるため、このまま実行するとエラーになります。

よって、パスを書き換えたpacemaker.repoをコントロールホスト側に予め用意しておき、yum実行前に下記のansibleで上書きする操作が必要です。

- name: "pacemaler.repoを上書き"
  copy:
    src: pacemaker.repo
    dest: "/配置パス/pacemaker-1.0.13-1.2.el6.x86_64.repo/"
関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)