設定ファイルをPerlとmakeとSubversionを使って管理する

読了まで:約1分


概要: 設定ファイル類を perl と make と Subversion を使って管理する


で、以下スクリプト。

#!perl

use strict;
use warnings;

use File::Find;
use FindBin ();

my $source = $FindBin::Bin;
my @files = ();

find(
sub {
my $path = $File::Find::name;

return if ( -d $path );

if ( $path =~ m{^$source/(.+)$} ) {
my $filename = $1;

# いらないファイルを除外
return if ( $filename eq 'Makefile.PL' );
return if ( $filename eq 'Makefile' );
return if ( $filename =~ m{~$} );

push @files, $1;
}

},
$source,
);

@files = sort { $a cmp $b } @files;

my $generated = q{};

$generated .= q{TARGETS = };
$generated .= join qq{ \\\n\t}, map { "/$_" } @files;
$generated .= qq{\n\n};

$generated .=  q{INSTALL = sudo /usr/bin/install -o root -m 0644};
$generated .= qq{\n\n};
$generated .=  q{all: ${TARGETS}};
$generated .= qq{\n\n};

for my $path ( @files ) {
$generated .= qq{/${path}: ${path}};
$generated .= qq{\n};
$generated .= qq{\t} . q{${INSTALL} $? $@};
$generated .= qq{\n\n};
}

if ( open( my $fh, '>', 'Makefile' ) ) {
print $fh $generated;
close($fh);
}

自分の所では svk を使ってディレクトリを管理しているので、.svnディレクトリとか除外してないんだけど、 生の Subversion とかで管理してる場合は、いらないファイルを除外の部分で、 .svnディレクトリをを除外するコードを足さないとダメだと思う。

で、使い方。

使い方は簡単で

perl Makefile.PL

という感じで実行すると、実行されたディレクトリ以下のファイルを ルートディレクトリからの場所に対応させた Makefile を吐き出します。

説明しづらいしわかりづらいんで、図で説明すると

~/
config/                 # 設定ファイルディレクトリ
Makefile.PL         # 上記スクリプト
home/
nyarla/
.zshrc      # /home/nyarla/.zshrcにインストールされる
.vimrc      # /home/nyarla/.vimrcにインストールされる
etc/
apt/
source.list # /etc/apt/source.listにインストールされる

という感じです。

作業の流れとしては、

  1. 編集したい設定ファイルを~/configをルートに見立ててコピー
  2. perl Makefile.PLを実行 (Makefile が生成される)
  3. 設定ファイルを編集
  4. makeして設定ファイルをインストール

という感じ。Makefile を手で書かなくていいからすごい楽ちんです。

まあでも複数のホストで使用する設定ファイルとか、ディレクトリ構成をルートと対応させてないとか、 そういった場合には手で Makefile を書いたほうが楽かも知れません。 まあ一つのホストだけで管理する場合にはこのスクリプトでだいぶ楽ができると思います。

ちなみにこのスクリプトを書いたとき、区切り文字であるタブ文字でちょっとはまったりした。 まあそれ以外はすんなり書けたけど。

で、実際に perl + make + svk で設定ファイルを管理してるけど、かなり楽ちんです。 設定ファイルを追加したときにperl Makefile.PLして、設定ファイルを書いたらmake、 でまた編集したらmakeで反映、という感じでかなり楽な感じ。

まあでも設定ファイルに書く設定の値がよく分かりません><になってるので、 そこら辺調べながらやってるので遅々として進まないんだけど。

まあ一応公開してみたので良かったら使ってみてください。

#FIXME

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。