諸事情によりオフラインな環境へのパッケージインストールをする際、インストールしたい対象パッケージの依存によりしこたま 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 使い (もろアンチパターン) より。