LoginSignup
13

More than 5 years have passed since last update.

rpm パッケージを大量に効率良くインストール

Posted at

諸事情によりオフラインな環境へのパッケージインストールをする際、インストールしたい対象パッケージの依存によりしこたま rpm パッケージを入れるような recipe を書くことありませんか?
色々と試してみた結果、現在はこちらのコードで落ち着いておりますので、ご参考になれば。

使用ファイル

  • files / default / インストール対象パッケージ郡
  • attribute 設定ファイル
  • recipes / recipe ファイル
インストール対象パッケージ郡

files/default へ配置

attribute 設定ファイル

rpm パッケージ転送時の破損を発見出来るよう、sha256 による checksum も事前に取得し、設定しておきます。
( 上から順にインストールされていきますので、依存関係を意識した順序で。 )

attributes/default.rb
default['imagemagick']['rpms'] = [
  { rpm_package_name:     "libjpeg-6b-38.x86_64.rpm",
    rpm_package_checksum: "8fcc4d30ebb3819a8c29a907e489baf8a6ec6a31cd63a6114c39a53aa64f9838",
  },
  { rpm_package_name:     "libpng-1.2.10-17.el5_8.x86_64.rpm",
    rpm_package_checksum: "335caf1909cbe0876dd037a7df702faf1c989ccac5414a39bbdc2762ee6714ac",
  },
  { rpm_package_name:     "libtiff-3.8.2-19.el5_10.x86_64.rpm",
    rpm_package_checksum: "6b512ce51b796f98aa0e0c012a4ea6a7999f1726c0f5432e604042de32e87a29",
  },
  { rpm_package_name:     "ImageMagick-6.4.4-9.el5.x86_64.rpm",
    rpm_package_checksum: "ca5aca99fabbd057c93a8096b6c65e4ad2caa97178853f12bb7ffa2fb8364b87",
  }
]
recipe ファイル
recipes/default.rb
# cookbook_file リソースで対象サーバの /tmp にパッケージ郡を転送 (+ファイル破損チェック)
node['imagemagick']['rpms'].each do |rpms|
  cookbook_file "/tmp/#{rpms['rpm_package_name']}" do
    source   rpms['rpm_package_name']
    checksum rpms['rpm_package_checksum']
  end
end

# package リソースで attribute 設定した順にインストールされていきます
node['imagemagick']['rpms'].each do |rpms|
  package rpms['rpm_package_name'] do
    action   :install
    provider Chef::Provider::Package::Rpm
    source   "/tmp/#{rpms['rpm_package_name']}"
  end
end

僕がクックブックを作成する際は、依存関係が全く無いピンのパッケージでもこちらのコードを使っています。

ツッコミ大歓迎です。孤独な Chef 使い (もろアンチパターン) より。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13