myfinder's blog

myfinderの技術や周辺的活動のblog

2010年1月24日日曜日

SELinuxにソフトウェアの動作を阻まれた場合の対応

SELinuxは真っ先に切られがちなものですが、予期しない動作、挙動を防ぐ意味でも切らずに運用すべきです。
が、SELinuxに動作が阻まれたとき、どうやってそれを知るか、ということと、どうやって許可するのかということについてはあまり情報がないです。
ここでは自分がやっている方法についてまとめます。

SELinuxのアクセス制限に阻まれたものは、/var/log/audit/audit.logに出力されるので、このログからポリシーを作って許可するのが楽でいいです。
阻まれているかどうかは上記ファイルをtailしてソフトウェアを動かせばわかります。

以下手順


# setenforce 0
# cat /var/log/audit/audit.log | audit2allow -m local > local.te
# checkmodule -M -m -o local.mod local.te
checkmodule: loading policy configuration from local.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 6) to local.mod
# semodule_package -o local.pp -m local.mod
# semodule -i local.pp
# setenforce 1


必要に応じてlocal.teの内容は書き換えています。

2010年1月23日土曜日

アカウントに閉じたPerl5の環境を作る(またはぐちょぐちょなPerl環境をなかったことにする話)

Perlは大抵の環境にはじめから入っているので大変便利なんだけども、Perlのバージョン含めていろいろとコントロールしたいニーズもあったりすると思います。

例えばRedHat系のLinuxだとyumとかで何かのパッケージを入れるときに、CPANモジュールもrpmで入ってしまったりなどして、システムのPerlべったりにものを作るとあとあと面倒なことになったりすることもあるかもしれません。
そんなときには、アカウントに閉じたPerlの環境を作ってしまうのがよいでしょう。

今回はCentOS5.3(x86_64)でのやり方。(CentOS5.3のPerlって5.8.8と古いので丁度いいかなと思う)
hogeというユーザでやる事を想定します。

1.とりあえずperlをビルドしたりする場所を作る

今回は「~/local/perl」とかにしときます。
まず、Perlのソースコードを落としてくるディレクトリを作っときます。
~/local/srcとかでいいでしょう。


$ mkdir -p ~/local/src


2.Perlのダウンロードとインストール


$ cd ~/local/src
$ wget http://www.cpan.org/src/perl-5.10.1.tar.gz
$ tar zxvf perl-5.10.1.tar.gz
$ cd perl-5.10.1
$ sh Configure -Dprefix=$HOME/local/perl-5.10.1 -Dusethreads -Dusemultiplicity -Duse64bitall
$ make
$ make test
$ make install
$ ln -s ~/local/perl-5.10.1 ~/local/perl


これで~/local/perl/bin/perlとか打てば呼べるようになります。

3.PATHに追加

インストールできたとはいえ、いちいち~/local/perl/bin/perlとか呼ぶのはめんどくさいです。
そういうときは環境変数PATHに~/local/perl/binを追加しときましょう。
下記行を~/.bashrcとかに入れとけばOKです。


export PATH="$HOME/local/perl/bin:$PATH"


とりあえずログアウトしてログインするか、sourceコマンドで環境変数に反映させときましょう。

4.おわりに

ここまでやっとくと、hogeユーザにおけるperl関係のコマンドは全部~/local/perl/binの方が優先して使われるようになります。
なので、cpanコマンドとかも/usr/bin/cpanとか明示しない限りは~/local/perl/bin/cpanが使われ、hogeユーザでインストールしたcpanモジュールは~/local/perl/libに入るようになります。

また、この辺は重要なポイントの一つですが、コマンドラインから使うPerlスクリプトを書くときにはshebang行に「#!/usr/bin/perl」とか書くと思いますが、今回のように独自にインストールした場合には「#!/usr/bin/env perl」と書いておくようにしましょう。
(#!/home/hoge/local/perl/bin/perlでもいいです)

2009年12月15日火曜日

DBIのDBハンドルメソッドとステートメントハンドルメソッドの対応メモ

DBIの各メソッドの呼び出し関係のメモ。

各メソッドと裏で呼んでるメソッド
・DBハンドルメソッド
1. selectrow_array
- fetchrow_arrayref

2. selectrow_arrayref
- fetchrow_arrayref

3. selectrow_hashref
- fetchrow_hashref

4. selectall_arrayref
- fetchall_arrayref

5. selectall_hashref
- fetchall_hashref

6. selectcol_arrayref
- fetch

7. prepare_cached
- prepare

・ステートメントハンドルメソッド

8. execute_array, execute_for_fetch
- execute

9. fetchrow_arrayref
- execute

10. fetchrow_array
- none

11. fetchrow_hashref
- execute

12. fetchall_arrayref
- fetch, fetchrow_hashref

13. fetchall_hashref
- fetch

2009年9月27日日曜日

Snow LeopardでShipItを使えるようにする

PerlモジュールのリリースツールShipItを勧められたので入れてみた記録。

1.必要なモジュールのインストール
ShipItを使うのに必要なモジュールをインストールする

$ cpan -i ShipIt
$ cpan -i AppConfig::Std
$ wget http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/cpan-upload-http-2.4.tar.gz
$ tar zxvf cpan-upload-http-2.4.tar.gz
$ cd cpan-upload-http-2.4
$ perl Makefile.PL
$ make
$ make install
$ cpan -i ShipIt::Step::CommitMessageWrap

2.「~/.pause」ファイルの準備
ホームディレクトリに.pauseファイルを作成

$ vim ~/.pause
$ cat ~/.pause
user xxxxxx
password xxxxxxx
mailto xxxxxxx@xxxxxx.xxx
$ chmod 600 ~/.pause

3.「.shipit」ファイルを用意する
ShipItを利用するには、プロジェクトのトップディレクトリに.shipitファイルが必要。
Module::Setupとかを使っていれば自動的に生成されているので特に気にする必要はない。

4.dry-runオプションで試してみる
いきなり実行するのはよくないので、「--dry-run」をつけて実行して結果を確認する。

5.おわり
ここまでで使えるようになっているはず

2009年9月21日月曜日

DBD::mysqlのインストールができないとお嘆きの方へ

もしこの記事を読んだ方が下記のようなエラーメッセージでインストールできないでいるのであれば、きっと後述の解決策でうまくいくでしょう

t/80procs.t ................. 1/29 DBD::mysql::db do failed: alter routine command denied to user ''@'localhost' for routine 'test.testproc' at t/80procs.t line 41.
DBD::mysql::db do failed: alter routine command denied to user ''@'localhost' for routine 'test.testproc' at t/80procs.t line 41.

このメッセージは、テストスクリプトがDBに接続しにいく際のユーザ名が設定されていないために出ているもので、ちゃんと指定すればテストにパスできます

1.cpanシェルからインストールする場合

> o conf makepl_arg "--testuser=root"
> install DBD::mysql

2.tar玉からインストールする場合

perl Makefile.PL --testuser=root

Snow LeopardでPerlの開発環境を整える

最近MacのOSをSnow Leopardに入れ替えてPerlの環境を確かめたところ、残念なことにバージョンが5.10.0だったりした
なのでPerl5.10.1をインストールしてlocal::libを使えるようにするところまでを記録しておきたい
※この記事はXcode(開発環境)が入っていることが前提

そろそろMac新しいの買いたい&以前までは割と考えずにモジュール入れまくってたから次はちゃんと管理したい
などという方のお役に立てば幸いかなと

1.Perl5.10.1の入手とインストール
このへんは弾さんの記事をみてやるとよい

2.環境変数の設定
~/.basrhcに/usr/local/binを見に行くよう設定

export PATH="/usr/local/bin:$PATH"

3.perl -vで確認

$ perl -v

This is perl, v5.10.1 (*) built for darwin-2leve

これでこのユーザの環境ではperl5.10.1が使えるようになりました。

4.local::libの設定
leopardの設定と同様です

5.local::libをSVNで管理する
local::libの中身をSubversionに入れておくと、インストールした内容の記録とか、ややあって戻したいときもすぐに戻せるので便利
手順は(自分の環境では)下記の通り

$ mkdir ~/Development/svn/local-lib
$ cd ~/local-lib
$ svn import -m 'init local::lib' ~/local-lib/ file:///Users/user/Development/svn/local-lib
$ mv ~/local-lib ~/local-lib.bak
$ rm -rf ~/local-lib
$ svn co file:///Users/user/Development/svn/local-lib .

6.もとに戻したい場合
元々のPerlを使いたい場合は/usr/bin/perlを明示的に利用するか、ユーザのPATH設定を削除すれば元の5.10.0を使いにいくようになる
また、local::libを撤収したい場合は、~/.bashrcにある環境変数の設定を削除し、~/local-libディレクトリを消せばOK

2009年9月13日日曜日

DBIx::Encodingというモジュールを書いた

YAPCおつかれさまでした。

YAPC中、今まさに課題になっているDB周りの問題を解消すべくDBIx::Encodingというモジュールを書きました。
このDBIx::EncodingはDBIのサブクラスで、executeとfetchの際に指定した文字コードでencode/decodeしてくれるものです。

そもそもDBの文字コード設定がUTF8なら余り悩むこともないのですが、世の中いろいろと事情があってDB側を変更できない事も多いでしょう。
そんなときにこのモジュールを使うと、DBI側で文字コードをencodeしてinsert/updateしてくれ、selectしたときにはutf8 flagを有効にした文字列を返してくれます。

使い方はSYNOPSISにもありますが、下記の通り

my @dsn = (
'dbi:mysql:host=localhost;database=mysql;mysql_socket=/tmp/mysql.sock;',
'root',
'',
{
RootClass => 'DBIx::Encoding',
encoding => 'cp932',
},
);
my $dbh = DBI->connect(@dsn) or die;

アトリビュートに設定を渡すか渡さないかでDBIx::Encodingを利用するかしないか決められるので簡単です。

SEE ALSO
生 DBI ユーザーのための DBI Cookbook (2)

※9/21追記
githubに移しました->こちら