2013-04-25

fcopy.el (in github) を chef-solo で Mac にインストールした

MacBook Air に自作 EmacsLisp スクリプト fcopy.el を chef-solo を使ってインストールした。fcopy.el は git で管理してて、GitHub にホスティングしてる。つまり、今回は Mac に chef-solo で git 管理されてるツールをインストールする話。chef-solo のインストールについては過去記事を参照のこと。

recipe の作成

fcopy 用の cookbook を作る。

$ cd /etc/chef
$ bundle exec knife cookbook create fcopy

fcopy 用の recipe は /var/chef-solo/cookbooks/fcopy/recipes/default.rb を編集。install リソースを使わず、git リソースと bash リソースを使ってる。

git "/tmp/fcopy" do
  repository "git://github.com/ataka/fcopy.git"
  reference  "master"
  action :checkout
end

bash "install-fcopy" do
  install_dir='/usr/local/share/emacs/site-lisp'
  not_if {
    File.exists?("#{install_dir}/fcopy.el")
  }
  code <<-EOC
    install -m 664 /tmp/fcopy/fcopy.el #{install_dir}/
  EOC
end

chef-solo 実行

chef-solo を実行して fcopy.el をインストールする。レシピを指定してインストールする場合:

$ cd /etc/chef
$ sudo env PATH=$PATH bundle exec chef-solo -o fcopy

node.json を指定するなら、次の様に node.json を書く。

{
  "screen": {
    "users": [ "ataka", "ataka_work" ]
  },
  "run_list": [
                "recipe[screen]",
                "recipe[fcopy]"
              ]
}

chef-solo の実行では -j オプションを使う。

$ sudo env PATH=$PATH bundle exec chef-solo -j node.json

蛇足

今回の recipe では .emacs の編集までは行なわない。使う人は、~/.emacs.d/init.el に次の二行を追加。

(autoload 'fcopy-mode "fcopy" "copy lines or region without editing." t)
(define-key mode-specific-map "k" 'fcopy-mode) ; C-c k

あとがき

git リポジトリーからコードを clone して、bash を使ってインストールするレシピを書いた。今回の recipe には、更新 (update) が入っていない。どういう recipe を書くのが良いのかな? まだまだ勉強することが多い。分からないことも多い。

No comments:

Post a Comment