読者です 読者をやめる 読者になる 読者になる

Rsync の Ver 3.x は Boxen の homebrew で入れてもらうことにした

Morning in the Spengler household
Morning in the Spengler household / adactio

あ。前の続きなのではありますが、"... その参" な感じは、やっぱ止めす。

さてっ。
地味ながらも、何気に必需品であったりする rsync

rsync は、os プリインストールの 2.x ではなく、3.x を使いたいので、reync の version 3.x を boexn で入れてもらうようにしたい。

で、そのために
modules/people/manifests/$login.pp にこんな感じで書き足してみました... ;

  #dupes to use rsync 3
  homebrew::tap { 'homebrew/dupes': }
  package { 'homebrew/dupes/rsync':
    require => Homebrew::Tap["homebrew/dupes"]
  }

そしたら、何か上手くイッてるみたいです。
と言うお話。

ちなみに、これ書いてるしと、puppet については素人未満だったりします。
実は、これが正解かどうかすらの判断から自信がなかったりしてます。
そんなしとの営みですので、その辺りご注意をば。

そして何より、突っ込んでくださる優しい方いらっしゃったら、それは勿論大歓迎です。

以前も、このことについては触れたことありますが、
macos がプリインストールで提供してくれている rsync は、version が 2.x だったりします。
それは、これを書いてる時点、10.9 mavericks でも同じご様子。

% type rsync
rsync is /usr/bin/rsync
% rsync --version
rsync  version 2.6.9  protocol version 29
Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.
<http://rsync.samba.org/>
Capabilities: 64-bit files, socketpairs, hard links, symlinks, batchfiles,
              inplace, IPv6, 64-bit system inums, 64-bit internal inums

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

これに対し、今までは、homebrew の homebrew-dupes によって rsync 3 が使える環境を設けていました。
そしてこの度、勿論 rsync は 3 を使えるようにしたい訳ですが、今回はちょっと状況が違います。

boxen で...?

boxen 使えば homebrew も使えるのは分かった...けど

boxen は、個人的にとても都合よいことに、デフォで homebrew 環境を用意してくれる((/path/to/your-boxen/Puppetfile に書いてるはず。))。

前にも書いた通り rsync 3 の導入には homebrew を利用していました。
こんな感じで ;

% brew tap homebrew/dupes
% brew install rsync

考え方は、こうなのですが。

さて。
boxen 使ったインストール処理の中で tap ってどうやるの? と。*1
ここでまず足が止まるわけです。

boxen の homebrew で tap コマンド?

brew tap は?

と言う事で、実はこちらの方が後なのですが、boxen の puppet-homebrew の repo ページへ訪れてみる。

readme にこんなフレーズが。

class clojure {
    homebrew::tap { 'homebrew/versions': }
    :
    *略*
}

tap コマンドは homebrew::tap とな?

{} の中に書かれている homebrew/versions 言うのは公式? 最新? 以外のバージョンの fomula 達がパッケージされたリポジトリだ、...ということは、
ここに tap したい repo 名、今回だと rsync の formula がある homebrew/dupes を充てれば良い、となるわけですね。

ということで、brew tap homebrew/dupes の部分は、こんな感じになるかと。

homebrew::tap { 'homebrew/dupes': }

これも後で知ったのですが、ここにでもこんなことがメモってありました。;

Public: Tap a Homebrew source

Usage: homebrew::tap { 'homebrew/versions': }

たぶん、これでいいんだと思います。
...たぶん。

brew install は?

homebrew 使ったインストールは package リソースタイプで、と言うのまでは分かっている。

で、この方法は、tap で引っ張って来たようなアイテムも同じ? が気になるところ。

先にも挙げた puppet-homebrew の readme に記載されている使い方見ても、やっぱ読み方分かんなくて分からないし *2、分からないなりの "何となく感" もなく...orz

他の人のソースを覗いてみることに :p

幾つか目にした中で膝を叩いたのはこの辺り? ;

onewheelskyward さんのは、まさに同じ事を考えていて、rsync 3 を入れようとしている。その意味で、一番長く見たソースだったりします。
でも、その定義場所が site.pp だと言うのがどうも気になってしょうがない。

でも、この辺りを見て、;

しかしsite.ppは全てのマシンに適応される設定を書く場所なので、基本的にはここには書かず、後述する個人設定やプロジェクト設定に書く。

onewheelskyward さんとは、状況や利用目的が違うんだろう、と想像できたのと、上に挙げた他の 2 つの参照先をみて、自分のケースだと普通に modules/people/manifests/$login.pp に書くで良いんだと腑に落ちる。

と言う事で、onewheelskyward さんのこの辺りを核とすることに。;

# Homebrew dupes to get rsync 3
homebrew::tap { 'homebrew/dupes': }
: *略*
# Rsync 3 from homebrew dupes
package { 'homebrew/dupes/rsync':
    require => Homebrew::Tap['homebrew/dupes']
}

あと、もひとつ気になっていた、homebrew::tap によるアイテムのインストールは、homebrew ネイティブのアイテム同様、package タイプで良いのか? ってこと。
こちらについては、ae06710 さんの pp みて問題ない事がわかりました。
ae06710 さんのケースでは homebrew/binary を tap しているのですが、ひとつの package で binary 提供のアイテムと homebrew ネイティブのアイテム、一色単に定義していたりします。うん、問題ないみたい。

ということで、brew install rsync の部分は、こんな感じにしました。;

package { 'homebrew/dupes/rsync':
    require => Homebrew::Tap['homebrew/dupes']
}

丸パクリですが... :p ;

boxen の homebrew での rsync 3 は。

冒頭にも書いているのですが、結果、こうしました、と。;

#dupes to use rsync 3
homebrew::tap { 'homebrew/dupes': }
package { 'homebrew/dupes/rsync':
    require => Homebrew::Tap["homebrew/dupes"]
}

最後に、改めて試す気力ないのですが、もしかしたら、こういうのでもイケるのかもしれません。

#dupes to use rsync 3
homebrew::tap { 'homebrew/dupes': }
package { 'homebrew/dupes/rsync': require => Homebrew::Tap["homebrew/dupes"] }

だから何だよ、な話ですが、ちょっとこの事をメモしておきたかったので。;

パラメータがひとつしかないリソースは,1行で宣言します。
file { '/tmp/somefile': ensure => exists }

結果です。;

% type rsync
rsync is /opt/boxen/homebrew/bin/rsync
% rsync --version
rsync  version 3.1.0  protocol version 31
Copyright (C) 1996-2013 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes, no prealloc, file-flags

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

はいおしまい。

*1:boxen の後に走らせる shellscript でやらせれば、と言うのもあったのですが、今回は折角なので boxen の中でやることを考えることにしました。shellscript による方法は、色々試行錯誤した結果、仕様あるいは自分の能力的に出来なかったら...、の時にと。

*2:usage である "homebrew::formula {..." はこのあたりの話で、Homebrew::Tap の代わりに single tap と Homebrew::Formula 達でできるようにしたよ、なこと? 上に "homebrew::tap {..." とあるけど、rsync を考える場合、あんま関係なく、usage にある感じで書かなくて? ... そっか、自分は homebrew::formula がよく分かってないんだ。うーん