以前, 「最近のplenv/Cartonの運用」というエントリで, plenvで管理しているPerl環境について, App::cpanminusとCartonをインストールした段階で書き込み禁止にしてしまって, それ以降余計なモジュールをインストールすることを防ぐ, みたいな話をしました.
このへん, いい感じに操作したい! という気持ちが高まったので, plenv-lockというplenvのプラグインを書いてみました.
使い方
$ mkdir -p $PLENV_ROOT/plugins $ git clone git@github.com:papix/plenv-lock.git $PLENV_ROOT/plugins/plenv-lock
こんな感じでインストールしてあげて...
$ plenv lock 5.24.1
とすれば, plenvでインストールした5.24.1の環境がロックされます. 解除するときは,
$ plenv unlock 5.24.1
という感じです.
仕組み
内部的には, ロック/アンロックの対象となるPerl環境がインストールされているディレクトリに対して, find
で全てのディレクトリを見つけ出し, その全てにchmod
を使って書き込み権限を落とす/付与する, という形で実装しています.
以前はchflags
で実装していましたが, find
+ chmod
にすることで, MacだけでなくLinuxなどでも使えるようになった, と思います(試してはいない).
ちなみにこのアイデアは id:aereal さんから頂きました. ありがとうございました.
まとめ
plenv-lockという, plenvのプラグインを書きました. かなりニッチなプラグインではありますが, 興味があれば(Perl環境をロックする, という運用? とあわせて)試してみて頂けると嬉しいです.