前のページ | メイン | 次のページ

IT アーカイブ

2007年06月18日

HTML::Template::Compiledで文字コード変換

DB が euc で画面出力が sjis というようなレガシーなウェブシステムの場合、Catalyst で構築するなら Catalyst::Plugin::Charsets::Japanese を使うと超便利。
config で指定するだけで文字コード変換ができてしまいます。
MyApp.yaml で

charsets:
  in: EUC-JP
  out: Shift_JIS

と設定すると Catalyst の内部では euc で扱い、output する時に自動的に sjis へ変換してくれます。
しかも、フォームから入力されたデータも Catalyst に入る時に sjis->euc 変換をしてくれます。
なので、データを DB へ保存する時も文字コード変換を意識せずに実装できて大変便利です。

でも、1点困ることがあります。
画面出力に使用する(HTML)テンプレートも(Catalystの)内部(データ)扱いとなるため、テンプレートも euc で扱われます。
もしテンプレートが sjis だと、sjis のテンプレートに(フォームやDBから取得した) euc のデータを挿入して、それを最終的に output する時に euc->sjis の変換をかけます。
従って、sjis のテンプレート部分も euc として扱われ euc->sjis 変換をするので文字が化ける(と思う)。
テンプレートが euc ならなんら問題ないのですが、でも大抵において、画面出力が sjis ならテンプレートも sjis の方が都合が良い。
META タグで content-type の charset=Shift_JIS と書いているし。
デザイナーさんも euc より sjis の方が都合が良いし。


で、どうするか。

Catalyst::Plugin::Charsets::Japanese を使う以上、一度内部で sjis->euc 変換するしかない。
(無駄な作業ではあるけれど。。。)

テンプレートエンジンでテンプレートの文字コードを変換してしまうと楽。
ボクは View に Catalyst::View::HTML::Template::Compiled を使っているので、HTML::Template::Compiled の filter 機能を利用します。
使い方は HTML::Template の filter 機能と全く同じ。
HTML::Template の perldoc に具体的な使い方が書いてあります。
これを元に、HTML::Template::Compiled でテンプレートの文字コード変換を行います。

MyApp::View::HTC で、

package MyApp::View::HTC;
use strict;
use base 'Catalyst::View::HTML::Template::Compiled';
use Jcode;

__PACKAGE__->config(
    filter => \&jcode_filter,
);

sub jcode_filter {
    my $text_ref = shift;
    $$text_ref = Jcode->new($$text_ref, 'sjis')->euc;  # sjis->euc 変換
}

1;

これで、テンプレートが処理される前に sjis->euc 変換されます。
sjis から euc に変換されたテンプレートに対して(フォームやDBから取得した) euc のデータが挿入されます。これだと内部的には全て euc です。
最終的に Catalyst::Plugin::Charsets::Japanese で euc->sjis の変換が行われて出力されます。


ちょっと不毛な感じもするけれど・・・

続きを読む "HTML::Template::Compiledで文字コード変換" »

2007年06月17日

CatalystでHTML::Template

CatalystのViewでHTML::Templateを使ってみました。
ググってみると、みんなTTを使ったやりかたばかり紹介されていて、ボクはHTML::Templateの方が好きなので、敢えてHTML::Templateを使ってみました。
でも、使ってみて分かったけれど、CatalystではTTを使った方が便利かも。
でもTTだと、使い方しだいなところはあるけれどTTの便利さを活かすとMVCの分離がグレーになる気がする。HTML::Templateは制限がある分(不便な分?)MVCのVの分離が(自然と)きちんとできる気がする。
んでも、HTML::TemplateだとやっぱりCatalystを使うメリットが薄くなってしまうかなぁ。
Catalystで使うならHTML::TemplateよりHTML::template::Compiledがいいかな。こっちだと大分便利だし、煩雑なコードを大分減らせる。TTほど多機能ではないけれど、オブジェクトをセットできる分、HTよりはCatalystとの相性が良い。まぁCatalystに限らず、DBIx::Classとの相性もいい。

さて、前置きが長くなりましたが、今回はCatalystのViewでHTML::templateを使った場合の簡単な実装例についてです。


まずは、下準備として以下のテスト・モジュールをインストール。
これらはインストールしなくてもCatalystのインストールは可能です。


cpan Test::Pod
cpan Test::Pod::Coverage

さて、それでは普通にCatalystをインストール。
下記サイトからインストール・スクリプトをダウンロード。
http://www.shadowcatsystems.co.uk/static/cat-install
ダウンロードしたら実行。


perl cat-install
perl -MCPAN -e 'install Catalyst::Devel'

(現在は cpan コマンドで Task::Catalyst をインストールすることで全部インストールできるらしい)
表示を自動化する為に下記プラグインをインストール。

cpan Catalyst::Plugin::DefaultEnd

このプラグインが無かったころは、コントローラの中でいちいちどのビューで表示するかforward指定しないといけませんでした。
(現在は DefaultEndプラグインの代わりにActionClass('RenderView')を使うので、インストールする必要はありません。)

ViewにHTML::Templateを使用するので下記モジュールをインストール。


cpan HTML::Template
cpan Catalyst::Helper::View::HTML::Template

これでとりあえずインストールは完了。

次にCatalystでサンプル用のHelloプロジェクトを作成。


cd /var/www/
catalyst.pl Hello


DefaultEndを使うためにプラグインを設定。

cd /var/www/Hello
vi lib/Hello.pm

use Catalyst qw/
  -Debug ConfigLoader Static::Simple DefaultEnd
/;



ビューを自動的に表示させる為に下記記述を行う

vi lib/Hello/Controller/Root.pm

sub end : ActionClass('RenderView') {}

HTML::Templateを使用したビュー、HTを作成。


script/hello_create.pl view HT HTML::Template

作成したビューを修正。下記修正をしないと表示時にエラーになります。

vi lib/Hello/View/HT.pm

__PACKAGE__->config(
        die_on_bad_params => 0,
);


何故エラーになるかと言うと、テンプレートに対してCatalystが持っているもろもろのオブジェクト(stash)をセットしようとしてしまう為。

次にサンプル用のテンプレートを作成。
デフォルトのテンプレートrootはroot/baseになります。
そこに文字列を表示するだけの簡単なtestテンプレートを作成。


mkdir root/base/sample
vi root/base/sample/test.tmpl

messages: <TMPL_VAR NAME="messages"><br />

次にサンプル用のコントローラを作成。
testテンプレートに文字列'テスト'を設定。


script/hello_create.pl controller Sample
vi lib/Hello/Controller/Sample.pm

sub test : Local {
    my ( $self, $c ) = @_;
    $c->stash->{messages} = 'Hello World!';
}

これで一応準備は完了。
実行してみる。ポート8080で公開。


script/hello_server.pl -p 8080 -r

下記URLにアクセス。
http://localhost:8080/Sample/test
'Hello World!'と表示されればOK。

次にデータベースからデータを取得して、表示してみる。
まずは、モデルを作成するためにDBIC関連のモジュールをインストール。


cpan Catalyst::Helper::Model::DBIC::Schema
cpan DBIx::Class::Schema::Loader

そしてデモル DBICを作成。DBはMySQLを使用しています。

script/hello_create.pl model DBIC DBIC::Schema Hello::Schema create=static DBI:mysql:DB名 接続ユーザ名 接続パスワード

(1行で入力)
静的にスキーマを作成する方法をとっています。動的に生成する方法もありますが、ここでは静的で。

HelloプロジェクトにDBへの接続情報を設定します。
YAMLで書かれた設定ファイルに設定します。


vi hello.yml

name: Hello

Model::DBIC:
  schema_class: Hello::Schema
  connect_info:
    - DBI:mysql:DB名
    - DB接続ユーザ名
    - DB接続パスワード


DBとテーブルは既にできているものとします。
'User'テーブルがあって、名前とかメールアドレスが保存されているものとします。

次にテーブルの情報を表示できるHTMLテンプレートを作ります。
'User'テーブルの情報を表示するテンプレートにします。
<TMPL_VAR>のNAMEは'User'テーブルのカラム名と同じにします。


vi root/base/Samle/list.tmpl

<TMPL_LOOP NAME=users>
  <TMPL_VAR NAME=userid> :
  <TMPL_VAR NAME=username> :
  <TMPL_VAR NAME=email><br>
</TMPL_LOOP>

次にコントローラを修正。
モデルの検索結果(DBの検索結果)をテンプレートにセットします。
下記例では、単純に'User'テーブルから検索キーの指定なしで全部のレコードを取得しています。
HTML::TemplateはDBIx:Classの検索結果のオブジェクト(DBIx:Class::ResulSet)をそのままセットすることはできないので、配列、ハッシュのリファレンスにします。


vi lib/Hello/Controller/Sample.pm

sub list : Local {
    my ( $self, $c ) = @_;
    my @users = ();
    for my $user ($c->model('DBIC::User')->all) {
        push @users, {
            userid => $user->userid,
            username => $user->username,
            email  => $user->email,
        };
    }
    $c->stash->{users}=\@users;
}

ちなみにHTML::Templae::Comipledなら同じテンプレートでも下記のような感じでOK。
<TMPL_LOOP>の為にオブジェクトを無名配列に入れてセットしています。


vi lib/Hello/Controller/Sample.pm

sub list : Local {
    my ( $self, $c ) = @_;
    $c->stash->{users}=\@{[ $c->model('DBIC::User')->all ]};
}

さて、これでもう一回実行し直して、URLにアクセス。


script/hello_server.pl -p 8080 -r

http://localhost:8080/Sample/list
'User'テーブルに入っているレコードの情報が全て表示されればOK。
上記コントローラの例を見ると、HTML::Templateだとテンプレートにオブジェクトを直接セットできないので面倒だなぁと思ってします。
よくウェブで公開されているビューがTTの例だと、オブジェクトをそのままセットできるので、テンプレートの為にハッシュや配列を作る必要がない。
それで、HTML::Templateの代わりにHTML::Template::Compiledを使用する場合は、テンプレートを下記のように記述すれば、TTの様にオブジェクトを直接セットできます。


HTML::template::Compiled専用のテンプレートを作成。HTML::templateでは使えません。


vi root/base/Samle/list.tmpl

<TMPL_WHILE users.next>
  <TMPL_VAR _.userid> :
  <TMPL_VAR _.username> :
  <TMPL_VAR _.email><br>
</TMPL_WHILE>

上記テンプレートの場合、コントローラはこんな感じ。
検索キーは何も指定していません。


vi lib/Hello/Controller/Sample.pm

sub list : Local {
    my ( $self, $c ) = @_;
    $c->stash->{users} = $c->model('DBIC::User')->search({}, {});
}


これだけ。
DBの検索結果のオブジェクトがO-Rマッパーになっていて、テンプレートにそのオブジェクトをセットしている。
オブジェクトのアクセサ・メソッドがカラム名になっていて、それをテンプレートから直接呼び出している感じ。
楽チンで、しかも直感的で分かりやすい。
TTでも似たような感じになります。

念のために補足しておくと、HMTL::Template::Compiledを使用する場合は、そのビューを作成する必要があります。手順的にはHTML::Templateと同様です。


cpan HTML::Template::Compiled
cpan Catalyst::Helper::View::HTML::Template::Compiled
script/hello_create.pl view HTC HTML::Template::Compiled

ビューを指定して表示させたい場合は、コントローラで以下の様にforward指定します。

vi lib/Hello/Controller/Root.pm

#sub end : ActionClass('RenderView') {}
sub end : Private {
    my ( $self, $c ) = @_;
    $c->forward( $c->view('HTC') );
}


とりあえず、こんな感じ。

続きを読む "CatalystでHTML::Template" »

2007年05月17日

syslog-ngとminilogd

CentOS4.4でsyslog-ngを使った時に、minilogdとの連携ではまりました orz

まず、minilogd は、syslogd や syslog-ng を止めたときや、ブート時でまだ syslogd や syslog-ng が立ち上がっていない時に、代わりに自動的に立ち上がるデーモンです。
メッセージを受信して仮想メモリーにログを保存しておいてくれます。
syslogd や syslog-ng が起動すると、syslogd や syslog-ng は /dev/log を経由して minilogd が仮想メモリーに保存したログメッセージを読み取って HDD 上のログファイルに保存します。
/dev/log は UNIXソケットドメインです。
minilogd は重要なデーモンです。
syslogd は特に気にすることなく minilogd と連携してくれます。

さて、大抵のウェブページを見ていると、syslog-ng の設定に関して、

  source s_sys { 
     pipe ("/proc/kmsg" log_prefix("kernel: "));
     unix-stream ("/dev/log");
     internal();
  };

この様に書かれています。
FC6のsyslo-ngのRPMをインストールした場合も同様です。

で、大抵、Linuxの場合は /dev/log はストリームソケットだから、unix-stream()を使いなさいと書かれています。で、上記はその様に設定されています。
そして、*BSDの場合はデータグラムソケットだから、unix-dgram()を使いなさいと書いてあります。

ところが、ボクのCentOS4.4の環境だと、syslog-ngを止めている間にminilogdが受信したログを、syslog-ngを起動してもsyslog-ngが読み取ってくれません orz
ブート時のブートログはちゃんと出力されているのでそこは /dev/log が読み取って書いているようなのですが、一旦起動したとはなぜか読んでくれません。なぜ~~(?_?)

結果、syslog-ngの設定を以下のように変更したら、syslog-ng 停止中に受信したログもsyslog-ng起動後に出力するようになりました。

  source s_sys { 
     pipe ("/proc/kmsg" log_prefix("kernel: "));
     unix-stream ("/dev/log");
     unix-dgram ("/dev/log");
     internal();
  };

データグラムソケットを使っているということでしょうか。
これが正しい解決策なのかどうか分かりませんが、とりあえず、これで期待した動きになりました。
ブート時のログもきちんと記録されるし、minilogdとの連携も問題ないようです。

netstat -an コマンドで確認したら、/dev/log は確かに DGRAM ってなってますねf(^^;)

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  12     [ ]         DGRAM                    32476784 /dev/log

Linuxは、昔は /dev/log にストリームソケットを使っていたけど、DoSアタックなどのセキュリティ的な事情からデータグラムソケットを使うようになった、というような記事を読みました。(元記事は英語だったので私の訳が正しいのか不安ですが・・・)
こんなこと常識なのかもしれませんが、私はちょとはまりました(苦笑)

続きを読む "syslog-ngとminilogd" »

2007年05月09日

SELinuxでsyslog-ng

SELinuxを有効にしてCentOS4.4でsyslog-ngを使うには、設定が必要になります。
ちょっとはまりました orz


setsebool -P use_syslogng=1

これを実行しないと、syslog-ng が /proc/kmsg を読めなくて、カーネルメッセージを読み込めません。
SELinux を有効にしているとエラーになってしまいます。dmesg にエラーがいっぱい出てしまいます。
setseboolコマンドで”-P”オプションを付けないと、設定が保存されません。
再起動すると元に戻ってしまいます。
設定は、/etc/selinux/targeted/booleans ファイルに保存されますが、これを直接編集したりしないで、setsebootコマンドを使用して下さい。
他の設定項目と値を見たい場合は、

getsebool -a

を実行すると見られます。

また、syslog-ng で TCP ポートでのログ送受信を行う場合は、別途ポリシーの変更が必要になります。
syslog で tcp port の bind が許可されていないからです。

続きを読む "SELinuxでsyslog-ng" »

2007年04月27日

SELinuxでバックアップ

FedoraやCentOSのSELinux環境でファイルやディレクトリのバックアップを取るときにtarコマンドを使うと、contextが引き継がれない(>_<)
pオプションはオーナーやパーミッションを引き継いでくれますが、contextは引き継いでくれないのです(;_;)
展開したディレクトリのcontextになってしまう(ToT)
展開した後にいちいちchconコマンドでcontextを設定しなおすのはめんどくさいなぁ~、と思っていたら、starコマンドが用意されていた。

starコマンドで-H=exustar -xattrオプションをつけて実行すればcontextも保持されてアーカイブされ、解凍したときには保持されたcontextで展開される。

# star cvzpf test.tgz /etc/yum/ -H=exustar -xattr
a /etc/yum/ directory
a /etc/yum/yum-daily.yum 19 bytes, 1 tape blocks
star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
# star xvzpf test.tgz -H=exustar -xattr
Release star 1.5a54 (i386-redhat-linux-gnu)
Archtype exustar
Dumpdate 1177813565.575410 (Sun Apr 29 11:26:05 2007)
Volno 1
Blocksize 20
star: WARNING: skipping leading '/' on filenames.
x etc/yum/ directory
x etc/yum/yum-daily.yum 19 bytes, 1 tape blocks
star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
# ls -laZ etc/yum/
drwxr-xr-x root root system_u:object_r:etc_t .
drwxr-xr-x root root ..
-rw-r--r-- root root system_u:object_r:etc_t yum-daily.yum

starコマンドはtarコマンドとほぼ互換なのでアーカイブのオプションはそのままで良い。これは便利!
というかこういうコマンドないと困るよね。
注意点は、解凍時もオプションをつけてないとcontextが引き継がれないということ。
オプションを付け忘れて展開しなおす時は、一度展開したファイルを削除してから展開しないとcontextが反映されません。なぜ~?
再アーカイブする時もデフォルトでは上書きしないで終了してしまう設定になっているので、再アーカイブする時は古いアーカイブを削除してから実行してください。


他には、cpコマンドもcontextを引き継いだり、設定したりするオプションがある。
cp -cか-preserve=context でコピー元のcontextを引き継ぎます。
これを忘れると設定ファイルのコピーを作って編集してもcontextが異なっていてデーモンが読めなかったりする(>_<)
cp -Z CONTEXTかcp --context=CONTEXTで、コピー時に任意のcontextを設定できます。
例えば、

# cp -Z system_u:object_r:etc_t hoge.conf hoge.conf.new

-pオプションではcontextを引きついてくれないので注意が必要です。
mkdirコマンドも同じように-Zか--context=でディレクトリ作成時に任意のcontextを設定できます。
オプションをつけないとカレントのcontextになります。
一方、mvコマンドはcontextごとファイルを移動するので、何も気にすることなくcontextが引き継がれます。

続きを読む "SELinuxでバックアップ" »

2007年04月18日

gpgで共有鍵暗号

PCのメールのバックアップを取って、圧縮かけて、サーバの home に置いて、他人にメールを読まれないように暗号化したいなぁと思って。

まず、Outlook Express のメールバックアップ。
[ツール]メニュー →[オプション] → [メンテナンス]タブの[保存フォルダ]に表示されるフォルダをコピーして、そのフォルダを丸ごと ZIP で圧縮して保存。
これでバックアップ完了。

これを scp でサーバへコピー。
圧縮は済みなので、暗号化だけをしたい。
誰かに渡すわけでもないし、手軽に暗号化したいので、共有鍵暗号がいい。
公開鍵暗号は鍵作ったりめんどくさいし:-(

GnuPGのgpgコマンドで共有鍵暗号使えました。

 $ gpg -c backup.zip

-c オプションでファイルを暗号化してくれます。公開鍵は不要。
コマンド実行後にパスフレーズを2回聞かれるので入力。
暗号化されたファイルを復号する時にも入力します。
このまま実行すると、ファイルを暗号化した上に、ZLIB を使って圧縮もしてくれます。
既に圧縮済みのファイルを暗号化したいだけなので、gpg での圧縮は要らない。
そこで、--compress-level オプションを使用。

 $ gpg -c --compress-level 0 backup.zip

--compress-level で 0 (ゼロ)を指定すると、圧縮をしないようにできます。
これで実行し、パスフレーズを入力して暗号化が終わると、ファイルの拡張子が .gpg になります。

$ ls
backup.zip
backup.zip.gpg

暗号化前のファイルはそのまま残っているので、rm コマンドで削除。
暗号化されたファイルの中を見てもさっぱり分かりません。
これで安心(^-^)

デフォルトでは CAST5 アルゴリズムで暗号化されます。
オプションで使用するアルゴリズムを変えられます。
どんなアルゴリズムに対応しているか見るには、--version オプションでコマンドを実行してみると分かります。

$ gpg --version
gpg (GnuPG) 1.4.5
Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
Cipher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

暗号化されたファイルを復号したい時は、ファイルを指定してオプションなしで gpg コマンドを実行するだけ。

$ gpg backup.zip.gpg

パスフレーズを聞かれるので、暗号化する時に入力したパスフレーズを入力。
これで復号されたファイルが作成されます。

続きを読む "gpgで共有鍵暗号" »

2007年03月23日

未だにFC4でyum

未だに FC4 のサーバを使っていて、でも FC4 のサポートは終わっちゃって、Fedora Legacy のサポートも終わっちゃって、yum update 出来なくて困っている人がいるんじゃないかと思います。
ボクもそうでした。

そこで、FC4 で yum update 出来るようにする方法をご紹介します。

続きを読む "未だにFC4でyum" »

2007年03月17日

phpMyAdmin 2.10

phpMyAdmin 2.10.0.2 が出てました。
2.9.1.1 を入れたのいつだっけかな?

FC4のサーバ用にRPMを作ってバージョンアップしました。

まず、phpMyAdminのサイトからアーカイブをダウンロードしてきます。
アーカイブの中にspecファイルがあるので、これを利用してrpmを作成します。

 アーカイブ:phpMyAdmin-2.10.0.2-all-languages.tar.bz2

これを解凍してspecファイルを取り出し、rpm作成に必要なファイルを /usr/src/redhat の各ディレクトリへコピーします。

bzip2 -d phpMyAdmin-2.10.0.2-all-languages.tar.bz2
tar xf phpMyAdmin-2.10.0.2-all-languages.tar
cd phpMyAdmin-2.10.0.2-all-languages/contrib/packaging/Fedora/
cp -p phpMyAdmin.spec /usr/src/redhat/SPEC
cp -p phpMyAdmin-http.conf /usr/src/redhat/SOURCES
cd ../../../..
bzip2 phpMyAdmin-2.10.0.2-all-languages.tar
cp -p phpMyAdmin-2.10.0.2-all-languages.tar.bz2 /usr/src/redhat/SOURCES
cd /usr/src/redhat/SPEC

次に、specファイルをバージョンに合わせて編集します。
アーカイブに入っているspecファイルはなぜか古いままで、2.8.0 になっているので 2.10.0.2 に直します。

vi phpMyAdmin.spec

書き換える箇所は以下の行。

%define pkgrelease all-languages

Version: 2.10.0.2
Release: 1

これでrpmを作る準備ができました。
rpmbuildコマンドを使ってビルドします。

rpmbuild -ba phpMyAdmin.spec

エラーにならないで最後まで行ったら、rpmの出来上がり。
あ、ビルドする前に、mysql と php-mysql をインストールしておいた方が良いです。
ビルドが完了すると、/usr/src/redhat/RPMS/noarch にrpmが作成されます。
早速インストール。
初めて入れる場合は、rpm -ivh でよいですが、ボクはバージョンアップなので、rpm -Fvh を使用。

rpm -Fvh /usr/src/redhat/RPMS/noarch/phpMyAdmin-2.10.0.2-1.noarch.rpm

インストールが終わったら、phpMyAdmin の設定を行います。
設定ファイルは、/var/www/myadmin に入っています。

cd /var/www/myadmin
cp -p config.inc.php config.inc.php.orig
vi config.inc.php

URLとシークレットキーを設定し、認証方式を cookie にします。
クッキー認証が嫌な人は、config や http を選択してください。デフォルトは config です。
ボクはクッキー認証がよかったので cookie にしました。
cookie を選んだ場合は、blowfish_secret も設定します。
シークレットは好きな値を46文字以内で自由に設定します。
そして設定した値は秘密にしておいてください。

$cfg['PmaAbsoluteUri'] = 'http://www.hagyroom.com/phpMyAdmin/';

$cfg['blowfish_secret'] = 'www.hagyroom.com';

$cfg['Servers'][$i]['auth_type'] = 'cookie';

次に apache の設定を行います。

cd /etc/httpd/conf.d
cp -p phpMyAdmin.conf phpMyAdmin.conf.orig
vi phpMyAdmin.conf

ボクはアクセス制限を掛けたかったので下記の設定をしました。
アクセス制限とか掛けない人はすることは無いです。

Allow from www.hagyroom.com
Deny from All

設定を更新したら、apache に設定を再読み込みさせます。

/etc/init.d/httpd reload

次に、文字化けしないように MySQL の文字コードの設定を行います。

vi /etc/my.cf

文字コードを EUC-JP (ujis) に設定して、サーバとクライアント間の文字コード調整をしないように設定します。
サーバのDBの文字コードをそのままクライアントでも使うように skip-character-set-client-handshake を設定します。

[mysqld]
old_passwords=1
default-character-set=ujis
skip-character-set-client-handshake

ボクはDBをEUCで使いたかったので default-character-set=ujis も設定しましたが、他の文字コードでも使用できます。
設定を更新したら、mysql を再起動します。

/etc/init.d/mysqld restart

これで準備が整いました。
ブラウザで phpMyAdmin の画面にアクセスします。
 http://www.hagyroom.com/phpMyAdmin/
↑このURLは単なる説明用でダミーなのでアクセスしても画面は見られませんよ;-P
ログインして文字化けしなければよし。
データベースを選択してテーブルが見られればOK。

続きを読む "phpMyAdmin 2.10" »

2007年03月16日

Poderosa4 orz

Poderosa 3 から 4.1.0 へバージョンアップしてみた。
poderosa を起動すると、.Net Framework 2.0 じゃないね、といって終了してしまう。
.Net Framework 2が必要だというので、1.1から2.0へアップグレードした。
ものすごい時間かかったけど、無事アップグレードできた。
PCの再起動を要求されるかなぁ~?と思っていたけど、要りませんでした。
poderosa を起動したら、ちゃんと起動した。
早速 SSH でサーバに接続しようとしたら
「Byte overflow in constructor」
というメッセージが表示されて接続できない orz
どうやら SSH1 ではうまく繋がらないらしい。。。
同じ問題にぶちあたった人のカキコミがフォーラムにあった。

 Poderosa フォーラム: Poderosa全般 => SSH1で接続できません

 
 あぁ。

 

上げなきゃよかった(T_T)

2007年03月08日

CentOSでsyslog-ng

CentOS4.4のサーバにsyslog-ngをインストールしました。
標準で入っているsyslogdを完全に置き換えられます。互換性もばっちり。
ボクがインストールしたのはsyslog-ng v1.6です。
本家では、今年の1月に2.0もリリースされていますが、1.6の方が実績もあってかれていそう。

FC6のextrasパッケージの中にsyslog-ng v1.6.12のSRPM(~.src.rpm)があります。
これをダウンロードしてきて、リビルドするだけでRPMが出来上がり。

rpmbuild --rebuild syslog-ng-1.6.12-1.fc6.src.rpm

本来、syslog-ngをコンパイルするには、libolが必要なのですが、CentOSのには入っていません。
しかし、FC6のsyslog-ngのSRPMパッケージにはlibolも入っているので、何も考えずにリビルドするだけでOKです。
RPMパッケージができたら、rpmコマンドでインストール。

rpm -ivh /usr/src/redhat/RPMS/i386/syslog-ng-1.6.12-1.fc6.i386.rpm

この状態では、syslogdとsyslog-ngが一緒に入っています。
既存のsyslogdは消す必要はなく、止めるだけで問題ないです。
/etc/syslog-ng/syslog-ng.conf が /etc/syslog.conf の代わりになります。
syslog.conf をカスタマイズしていなければ、インストールされた syslog-ng.conf そのままで問題ありません。互換性を意識した設定が予め入っています。
カスタマイズしている人はサンプルファイルを元にsyslog-ng.confを修正してください。
サンプルは、/usr/share/doc/syslog-ng-~/に入っています。
次は、confファイルの構文チェックを行います。
syslog-ngには、apacheのようにconfのチェック機能がついています。
-sオプションがチェック機能です。チェックだけを行います。

/sbin/syslog-ng -s

エラーが表示されなければOKです。
いよいよ、既存のsyslogdを止めて、syslog-ngを起動します。

/etc/init.d/syslog stop
/etc/init.d/syslog-ng start

起動後、psコマンドでsyslog-ngが起動していることを確認してください。

tail -f /var/log/messages

でログを確認しつつ、logger コマンドでログを送信してみます。

logger test

ログが表示されればOK。
後は、サーバ再起動後もsyslog-ngが立ち上がるようにchkconfigを実行します。

/sbin/chkconfig syslog off
/sbin/chkconfig syslog-ng of

簡単。
同じ手順でFC1のsyslogもsyslog-ngに置き換えられました。

続きを読む "CentOSでsyslog-ng" »

2007年03月03日

Yahooの解約

引っ越すのでヤフーBBを解約しようとサポートセンターに電話した。
しかし、「只今お電話が大変込み合ってます」とのアナウンスが流れるばかりで、全然オペレーターに繋がらない。
13分間待った後、突然電話が切れてしまった・・・・

なんだこりゃ。(#-_-)

解約しにくくしてるんだろうか?


翌日またサポートセンターに電話した。
今度もまた込み合ってます、とのアナウンス。。。でも今日は2分くらいでオペレーターに繋がった。
オペレーターの対応は感じのよい対応でした。
でも、料金は日割りできず、一ヵ月分丸まる取られるらしい。。。まぁしょうがないか。
そして、解約したい日を伝えたところ、一ヵ月以上先の解約申込はできないとのこと orz
そんなことサポートウェブには書いて無いじゃん!規約には書いてあるのかな?

そんなこんなで、せっかく電話が繋がったのに、結局解約申込すらできなかった。
来週また電話しなきゃ。

2007年03月02日

freeradiusのFail Over

freeradiusのproxy.confでfail_overの設定をしてもFail Overしないで最初のサーバにばかり問い合わせを行ってしまう。
round_robinの設定にすると、落ちているサーバにもProxyしてしまう。

なんでだろ?


とさんざん悩んだ。
ドキュメント見るとFail Overするって書いてあるし、ソース見てもレスポンスのないサーバはdead扱いにして回避するようになっているし。
なんで上手く動かないんだろう?と思考錯誤。
いろいろ設定を変えても期待通りに動いてくれない(T_T)

で、グーぐる先生で検索しまくったところ、

 retry_delay * retry_count < max_request_time

こうなってないとFail Overする前に Access-Reject を返してしまうらしい。
なるほど、そういうことか。
max_request_timeを10秒と小さく設定していた(デフォルトは30秒)のでFail Overする前にrejectしていたみたい。
どこにそんなこと書いてあったんだろ??知らなかった。

[参考]

2007年02月27日

スタックサイズと仮想メモリー

freeradiusのスレッド数を512まで増やせるようにソースを直した。
コンパイルもすんなりいき、起動してみた。
でも、293スレッド作ったところでメモリー不足になって落ちてしまう。

なんでだろ~

と思ったら、freeradiusの各スレッドに割り当てるスタックサイズが大きすぎたみたい。
それでメモリー不足になっていた。
どうやら、Linux の場合だと、ulimit -a (bashの場合)で表示されるスタックサイズを使用するらしい。
(一方、mysqlは設定できる)
デフォルトの状態で、10Mになっていた。(環境によるかもしれないけど)でか!
ulimit -s コマンドで4Mくらいに設定したら512スレッドで動くようになった。

でも、なんで293スレッドだったのか?

どうやら、293スレッド x 10,240KB = 3,000,320KB で、3GB近い仮想メモリー。

32ビットOSの場合、仮想メモリーの上限は4GB。
Linux kernelは1Gを仮想メモリーに使うので、残り3GBがユーザが使用可能な仮想メモリー。
ということで、293スレッド目でメモリー不足になっていたみたい。

基本的なことだったf(^^;

2007年02月12日

HD-H250U2

ビックカメラで外付けハードディスクを買いました。
HD-H250U2

連休キャンペーン価格で11,480円くらいになっていました。
加えてポイントが20%付いていたので、実質9千円くらいかなv(^-^)
引越前にデータのコピーをとってバックアップ&古いPCを捨てようと思う。
まだ Windows 98だからねw 発売から早10年近いね。驚き。

新しいPC欲しいけどお金が無い(;_;)
vaio欲しいなぁ。

続きを読む "HD-H250U2" »

2007年02月03日

レンタルサーバ

今使っているレンタルサーバが閉鎖するということで、移行先サーバを探してます。
3年間半くらいお世話になったかな?
どうもお世話になりましたm(_ _)m
大変助かりましたし、役に立ちました。

さて、新しいサーバはどうしようかと探していたのですが、使っている人から評判を聞いてさくらの個人向けレンタルサーバにしました。
なんといっても安いし、シェルが使える!これが一番の選択理由です。
次に独自ドメインが使えること、アクセスログを解析できること。
そして2週間のお試し試用期間があるところです。

さっそく申し込みして使用してみました。
共有型だけどさくさく動く。速いです。
これなら良さそうなので明日から移行を開始しよう。

2006年12月18日

WLAR-128とDS

うちではBUFFALOのWLAR-128というISDN無線LANルーターを使っています。
ADSLが主流になる前のISDNの時代から使っているのでもうかれこれ5年くらい使っています。
今はYahoo! BBのADSLを使っているのですが、Yahooモデムの下にWLAR-128をぶら下げて無線LANルータとして使っています。
WLAR-128にはBroadBandファームウェアを入れてルーティングモードにして使っています。
Yahoo! BBモデムから貰うグローバルIPをWLAR-128のWAN側に設定し、WLAR-128でNATしてLAN側にはDHCPでプライベートIPを配布しています。
これでPC端末(Windows XP、Windows Me、Windows 98SE、CentOS4 Linux)は問題なく接続できます。
また、PSPも接続できました。
全部無線で接続です。

でもNintendo DS Liteだけはうまく接続できませんでした orz
WLAR-128の設定をいろいろ変えたり試行錯誤して、最終的にgoogle先生で散々検索して2chの掲示板で情報を見つけました!
詳細設定の拡張設定の中の『BSS BasicRateSet』を2Mbpsに設定するとDSも繋がるようになりました。僕は11Mbpsに設定していたので繋がらなかったようです。
でも、これだけだと繋がるけどIPアドレスが取れませんでした。
最終手段としてWLAR-128の背面の黒いボタンを押しながら起動して設定を初期化して、再度ルーティングモードの設定をしなおしました。
そうしたら、DSでもDHCPでIPアドレスを取得できるようになりましたv(^o^)v
よかった。
これでネット対戦できるゼ!

2006年11月28日

Norton AntiVirus 2007

ノートン・アンチウイルス 2006が重くてたまらん(>_<)
2005は比較的軽くて快適だった。
サポートが切れてしまったので2006にバージョンアップしたんだけど、しなきゃよかった。
しかも有償だったし:-(

そして、2007が出た。

2006より早くなったという噂だったので、更新期限が残っているけどバージョンアップしました。
しかも、今は無償バージョンアップできます。無償じゃなかったらやらなかったけど。

で、結果は・・・

期待はずれ orz

軽くない

むしろ重い?

続きを読む "Norton AntiVirus 2007" »

2006年11月26日

インスタントストア

amazonのインスタントストアでお店作ってみました。

 HagyShop

自分の好きな小説と映画だけを集めたショップにしてみました。
それぞれの小説と映画にボクのコメントをつけてみました。
あと、ショッピングカートつきです。
センスが問われますね・・・
なかなかおしゃれな感じになりません orz
1個でも売れるといいなぁ。

2006年11月15日

仮想化大全

9月に行った仮想化のセミナーで貰った『すべてわかる仮想化大全』を読み直しました。

うちの開発環境にも仮想化を導入したいなぁと思って。
PCの数減らしたいし、でもいろんなOSのサーバ欲しい、同じOSでも複数の環境欲しいし。
あとやっぱり流行に乗っておきたいw
開発環境で試してみないといきなり本番環境に入れれないし。
VMファイルをコピーするだけで新しい環境を用意できたり、環境を丸々バックアップ取ったり、移動したりできるのは嬉しい。やってみたい。
CPUもマルチコア化が進んできて、仮想化した環境をよりよく動かしやすくなってきた。
DELLでもXeonの4コアのCPUのサーバを売り出し始めたし。使ってみたいな〜

ところで本の内容ですが、仮想化の入門書みたいな感じです。概要だけです。
VMware、Linux Xen、Microsoft Virtual Serverの3つを抑えています。
VMwareに一番ページを割いています。Xenはちょっとだけ。
個人的には Xen より VMware の方に魅力を感じるのでいいけど。
VMware は、VMware だけで何種類もあります(?_?)。
この本は VMware の製品ごとの概要を掴むには良いかも知れません。
詳しいことを知りたい人はこの本では全然満足できないでしょう。

2006年11月14日

iTunes & PSP Hack

PSP でいつも iPod (iTunes) に入れてる曲を聴く方法です。
iTunes & PSP Hack: PSP から iTunes ライブラリを RSS チャネルで聴く』で紹介されています。
RSS を使って Podcast で曲を聴く方法です。

準備は簡単。
iTunes が入った Windows XP PC で itunes-rss-server.exe をダウンロードして実行するだけ。
実行した後に、PSP のブラウザで http://{PCのIPアドレス}:8080/ に接続すると iTunes のプレイリストが表示されるので、好きなプレイリストを選択して RSS チャンネルに登録します。
これで準備は完了。
あとは、PSP の RSS チャンネルのメニューで先ほど登録したプレイリストを選択するだけ。
すると音楽が聴けます。

これは快適(^ー^)
無線 LAN が繋がる環境ならどこからでも iTunes に入っている音楽を聴けます♪

続きを読む "iTunes & PSP Hack" »

前のページ | トップ | 次のページ