‘CentOS’ タグのついている投稿

メモ:Linux::Inotify2 でディレクトリを監視して処理

Linuxサーバー上のディレクトリにファイルが作成されたら処理するってのをやりたくて、調べてたら cpan の Linux::Inotify2 が良さそうだったので試してみました。

モジュールをインストール(cpanminusを使用)。イベントループに AnyEvent を使うといいらしいので、そちらも。

1
2
$ cpanm Linux::Inotify2
$ cpanm AnyEvent

指定ディレクトリにファイルを投入したら別ディレクトリに mv するスクリプトを作成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env perl
use strict;
use warnings;
 
use Linux::Inotify2;
use AnyEvent;
 
my $watch_dir = $ENV{HOME} . '/inotify/queue';
my $processed_dir = $ENV{HOME} . '/inotify/processed';
my $inotify = Linux::Inotify2->new or die $!;
 
$inotify->watch(
    $watch_dir,
    IN_CLOSE_WRITE | IN_MOVED_TO,
    sub {
        my $e    = shift;
        my $name = $e->fullname;
        print "test!:${name}\n";
        system( 'mv', $name, "${processed_dir}/" );
    }
);
 
my $cv = AnyEvent->condvar;
my $inotify_w = AnyEvent->io(
    fh   => $inotify->fileno,
    poll => 'r',
    cb   => sub { $inotify->poll }
);
$cv->recv;

起動して queue ディレクトリにファイルを置いたら processed ディレクトリに移動するのを確認できました。

Popularity: 13% [?]

メモ:CentOS 5.5 で perlbrew + cpanminus

ユーザーのホームに全部入るので影響範囲を限定できてうれしい。
OSのバージョンとかあまり関係ないのですが、試した環境が CentOS 5.5 なので。

まずは perlbrew から。

ホームに移動。インストール用のファイルを取ってきてインストール実行。

1
2
3
4
$ cd
$ wget http://xrl.us/perlbrew
$ chmod +x perlbrew 
$ ./perlbrew install

インストール用ファイル削除。イニシャライズを実行。

1
2
$ rm perlbrew 
$ perl5/perlbrew/bin/perlbrew init

用意された設定を読み込むように .bashrc に追加。

1
2
$ echo "source $HOME/perl5/perlbrew/etc/bashrc" >> ~/.bashrc
$ source .bashrc

perlbrewで perl 5.8.9 をインストール。インストールした perl 5.8.9 に切り替え。

1
2
$ perlbrew install perl-5.8.9
$ perlbrew switch perl-5.8.9

確認。使用するものに(*)がつく(アカウントapacheでやってます)。

1
2
3
4
$ perlbrew installed
perl-5.8.9(*)
/home/apache/perl5/perlbrew/perls/current/bin/perl
/usr/bin/perl

次に cpanminus 。

ホームに bin がなかったんで掘って移動。

1
2
$ mkdir ~/bin
$ cd ~/bin

ファイルを取ってきて実行権限付ける。

1
2
$ wget http://xrl.us/cpanm
$ chmod +x cpanm

以上。あら簡単。
※この方法だと後で不便があります。コメントでご助言いただいていますのでご参照下さい。

ちまたで噂の cpan-outdated + cpanminus での全モジュールのアップデートもやっときます。

cpan-outdated 入れる。

1
$ cpanm App::cpanoutdated

cpan-outdated は古くなったモジュールの一覧返してくれるのですが、

1
$ cpan-outdated | cpanm

と cpanminus に食わせると古くなったモジュールを全部アップデートしてくれる。素敵!

Popularity: 13% [?]

CentOS5.5 64bitにmod_pythonをインストール

CentOS5.5に標準で入っているPythonは2.4系でした。最初は何も考えずソース取って来てコンパイルしてインストールしてましたが、オプション無しでコンパイルするとmod_pythonのインストールにこけてしまいました。下記インストール手順になります。

Python 2.6

wget http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tgz
tar xzvf Python-2.6.5.tgz
cd Python-2.6.5
./configure --enable-shared
CFLAGS="-fPIC" CXXFLAGS="-fPIC" LDFLAGS="/usr/local/lib" make
make install
cp libpython2.6.so* /usr/lib64/
vi /etc/ld.so.conf.d/python2.6.conf
+1:/usr/local/bin
/sbin/ldconfig
ln -s /usr/local/bin/python /usr/bin/python2.6

一旦ログアウト

ldd /usr/local/bin/python
	libpython2.6.so.1.0 => /usr/lib64/libpython2.6.so.1.0 (0x00002b7ea57a7000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003d9cc00000)
	libdl.so.2 => /lib64/libdl.so.2 (0x0000003d9c400000)
	libutil.so.1 => /lib64/libutil.so.1 (0x0000003d9f800000)
	libm.so.6 => /lib64/libm.so.6 (0x0000003d9d000000)
	libc.so.6 => /lib64/libc.so.6 (0x0000003d9c000000)
	/lib64/ld-linux-x86-64.so.2 (0x0000003d9bc00000)

lib64を見ているか確認

mod_python

wget http://ftp.kddilabs.jp/infosystems/apache/httpd/modpython/mod_python-3.3.1.tgz
tar xzvf mod_python-3.3.1.tgz
cd mod_python-3.3.1
./configure --with-apxs=/usr/local/apache2/bin/apxs --with-python=/usr/local/bin/python
vi src/connobject.c
-142:!(b == APR_BRIGADE_SENTINEL(b) ||
+142:!(b == APR_BRIGADE_SENTINEL(bb) ||
#フォーラムにありましたが、どうやらバグのようです。
chown apache:apache /usr/local/apache2/modules/mod_python.so
#権限は環境に合わせてください

Popularity: 24% [?]

yum の Proxy 設定でハマった

前回の Mac の Web 共有で Proxy で設定した Macbook 経由で CentOS 5 のサーバーで yum を使おうとして少しハマったのでメモ。

「export で proxy 設定してもダメ!」だったのでした。

http_proxy やら ftp_proxy やら設定しまくって、やっぱりだめで、ところが yum.conf を編集したらあっさり、さっくり、うまくいってしまったのでした。一時的に繋ぎたいだけなので yum.conf を触りたくなかったのですがしょうがないですね。

一般的にそうなのかはわからないのですが、そういうことがあったということで。

ちなみに、apt の場合は export で http_proxy (と必要なら ftp_proxy )環境変数を設定すれば OK。

Popularity: 16% [?]