atskimura-memo

あまり仕事とは関係なく適当に書きます。開発ネタが多いかもしれません。

ChefでUbuntuのPPAリポジトリを追加するレシピの書き方3つ

Ubuntuの開発に利用されているサイトLaunchpadにはPPAというパッケージリポジトリがあります。PPAでは、Ubuntuに含まれているバージョンよりも新しいパッケージが配布されていて便利です。

例えば、ppa:nginx/stableを入れるとします。
普通は以下のようにadd-apt-repositoryコマンドを使って入れます。

$ add-apt-repository ppa:nginx/stable
$ apt-get install nginx

レシピにしてみましょう。

方法1

これをそのままChefレシピにすると以下のようになります。

dist = node['lsb']['codename']
execute "add ppa:nginx/stable" do
  command "add-apt-repository ppa:nginx/stable"
  creates "/etc/apt/sources.list.d/nginx-stable-#{dist}.list"
end

execute "apt-get update"

package "nginx" do
  action :install
end

方法2

executeリソース使うのなんかいまいちですね。
Opscode公式のopscode-cookbooks/aptクックブックを使いましょう。

以下のようにレシピを書けます。apt_repositoryは勝手にapt-get updateしてくれます。
指定しているURLはppa:nginx/stableのページの Technical details about this PPA あたりに載っています。

dist = node['lsb']['codename']
apt_repository "nginx-stable-#{dist}" do
  uri "http://ppa.launchpad.net/nginx/stable/ubuntu"
  distribution dist
  components ["main"]
  action :add
end

package "nginx" do
  action :install
end

方法3

さらにsometimesfood/chef-apt-repoクックブックを使うと、以下のように書けます。

ppa "nginx/stable"

package "nginx" do
  action :install
end

お好きなのをどうぞ〜。