投稿者のアーカイブ

NATなFusion上のWindowsからホストのPostgreSQLに接続
- 2010/02/24
- murave
- OS X
- PostgreSQL
- VMware Fusion
MacBookにPostgreSQLを『Mac OS X で PostgreSQL を使ってみよう』(http://lets.postgresql.jp/documents/tutorial/macosx/)を参考にしつつ導入したのですがpsqlで日本語が通らず困ってたりする今日この頃です。ヘルプミー。
とりあえず、VMware Fusiion3上のWindows7にもPostgreSQLを入れたのですが、ServerだけMac側を使おうかなと。サーバーUnix系OS、クライアントWindowsな実環境に近くなりますし。
ってなわけで、Fusion上のWin7がどうなっているやら調べます。ipconfigで見てみましょう。ネットワーク アダプタはNATです。
IPv4 アドレス . . . . . . . . . . : 192.168.249.131
サブネット マスク . . . . . . . . : 255.255.255.0
デフォルト ゲートウェイ . . . . . : 192.168.249.2
ということで、ホストのアドレスは192.168.249.1のようですね。
次、OS X に導入したPostgreSQL8.4がどうなってるのか探ります(ちょい前に導入したもので設定を忘れてまして)。探っていくと、/Library/PostgreSQL/ってなところにインストールされているようです。
設定ファイルを探します。デフォルトだとデータと同じ場所に設定ファイルがありますね。
$ sudo ls -l /Library/PostgreSQL/8.4/data/
total 80
-rw------- 1 postgres daemon 4 1 15 08:41 PG_VERSION
drwx------ 6 postgres daemon 204 1 16 21:07 base
drwx------ 42 postgres daemon 1428 3 18 17:33 global
drwx------ 3 postgres daemon 102 1 15 08:41 pg_clog
-rw------- 1 postgres daemon 3405 1 15 08:41 pg_hba.conf
-rw------- 1 postgres daemon 1631 1 15 08:41 pg_ident.conf
drwxr-xr-x 69 postgres daemon 2346 3 23 00:00 pg_log
drwx------ 4 postgres daemon 136 1 15 08:41 pg_multixact
drwx------ 3 postgres daemon 102 3 23 11:24 pg_stat_tmp
drwx------ 3 postgres daemon 102 1 15 08:41 pg_subtrans
drwx------ 2 postgres daemon 68 1 15 08:41 pg_tblspc
drwx------ 2 postgres daemon 68 1 15 08:41 pg_twophase
drwx------ 4 postgres daemon 136 1 15 08:41 pg_xlog
-rw-r--r-- 1 postgres wheel 16779 1 15 08:42 postgresql.conf
-rw------- 1 postgres daemon 70 3 18 17:33 postmaster.opts
-rw------- 1 postgres daemon 52 3 18 17:33 postmaster.pid
ありました。設定見たり、いじったりしましょう。
まずは postgresql.conf。postgresさんの持ち物らしいので、なりきってGO。
$ sudo -u postgres vim /Library/PostgreSQL/8.4/data/postgresql.conf
で、眺めると、全てのアドレスでlistenはしてるようです。
listen_addresses = '*' # what IP address(es) to listen on;
修正は必要ありませんでした。
次、pg_hba.confを同じくpostgresさんになりきってエディターで開きます。
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
当然、192.168.249.131からの接続は許可されてません。今回は192.168.249.*からtrust(認証なし)にすることにします。
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Win7 on Fusion3 connections
host all all 192.168.249.0/24 trust
trustな行が追記分です。保存して、PostgreSQLをリスタート。
Fusion 上の Win7 で pgAdmin III を起動して接続してみます。
よしよし。







FlashDevelop 3.1.0 RTM がリリースされてました
- 2010/02/22
- murave
4/21にリリースされたようです。
FlashDevelop.jp の記事
http://flashdevelop.jp/FlashDevelop3.1.0_RTM
ダウンロードできる場所
http://www.flashdevelop.org/community/viewtopic.php?f=11&t=6415
なんと、日本語での解説!
馬鹿全 – FlashDevelop 3.1.0 RTM リリース
私は今日 flex_sdk_3 から flex_sdk_4 に切り替えていて、たまたまFlashDevelop の本家を見に行ったらリリースされていて大喜び!って感じだったのですが、日本のサイトでこれだけ情報が出ているのはうれしいですね。しかも、FlashDevelop自体が日本語ローカライズされている!
インストールの記事でも書こうかと思ったのですが、前のバージョンでは必要だった文字コードがらみの設定も必要なくなり(デフォルトがUTF8のBOMなしになっているのでそのままで普通に使えます)、特記するようなこともなくなっていましたのでやめときます。FlashDevelop.jp をご参照くださいってことで。






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。







私的 Vim メモ(検索編)
Vim は大抵の環境で使える上に使いこなすと強力なのですが、vi として(というか h, j, k, l, i, a, ESC, x, dd, p, :w, :q, :q!, ZZ 大体これくらいで全てを済ますという vi としてもあまりつかいこなせてないスタイルで)しか使っていなかったので悔い改めて修行中です。
ちょっと慣れてもすぐに忘れてしまうということを繰り返して今がある。そんなわけで自分用にメモるのです。
検索
-
/[検索文字列]
下方向に、[検索文字列]を検索する。 -
?[検索文字列]
上方向に、[検索文字列]を検索する。 -
*
カーソル位置の単語で下方向に検索する。 -
#
カーソル位置の単語で上方向に検索する。 -
n
順方向に次の検索結果に移動する。 -
N
逆方向に次の検索結果に移動する。 -
:nohlsearch
検索結果表示のハイライトを消す。






Mac の Web 共有で Proxy
インターネットからは普段隔離しているお客様のサーバーに yum でソフトを入れたいという状況になりました。メンテナンスなどでインターネットに接続しなければならないときには別ネットワークのLANケーブルと差し替えるという運用なのですが、クライアントに影響が出るためお客様がクライアントを使用している時間帯には作業ができません。
しょうがないので「夜間に作業させてもらうようにお話しようかと思います」と弊社、峰松に相談したら「インターネットに接続したノートPCに Proxy 立ててネットワークに接続させてもらってそれ経由でインストールしたらどうかな?」と。
その手があったか!
ってなわけで、私の Macbook は3G回線でインターネットに接続できるのでコイツに Proxy を立てることします。Mac だと Web 共有で Apache2 が起動するのでこれを利用することにしました。
設定ファイル、/etc/apache2/httpd.conf を眺めるとProxy関係の module はロードされるようになっていました。
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_ftp_module libexec/apache2/mod_proxy_ftp.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
追加の必要はなさそう。
最後に他の設定ファイルを読み込む
Include /private/etc/apache2/other/*.conf
という記述がありましたので Proxy の設定、 /private/etc/apache2/other/proxy.conf を作成しました。/private/etc/apache2/ と /etc/apache2/ って同じ場所を指してるみていですね。
proxy.conf はこんな感じ。
ProxyRequests On
ProxyVia On
Order deny,allow
Deny from all
Allow from 192.168.1
192.168.1.* からフルオッケーという漢らしい設定です。「システム環境設定」→インターネットとワイヤレスの「共有」で Web 共有を起動(起動済みの場合は再起動)すると Proxy が有効になります。
漢らしすぎるので普段はこの設定が読み込まれないように proxy.conf_ とかにしておいたほうがいいですね。Web 共有自体普段は切っていますが 、念のため。






IronPython Console をもっと便利に(TABによる補完とか)
- 2010/02/11
- murave
- IronPython
IronPyhton の開発環境を構築しています。
お客様に .NET Framework 4.0 が必要な提案をしておりまして、しかも、コンパイルが必要な言語はイマイチ要件にあわない。初めは IronRuby でやろうかと思ったのですが、調べたところ日本語の扱いに不安がある。ここはそろそろ安定しているであろう IronPython かな?というわけ。
さて、本題。インタラクティブシェルを便利にする、ipy.exe おすすめの起動時オプションをご紹介。
どんなオプションがあるのかはこんな感じで確認できます。
C:\Users\murave>"C:\Program Files\IronPython 2.6 for .NET 4.0\ipy.exe" -?
Usage: ipy.exe Usage: ipy [options] [file.py|- [arguments]]
Options:
-3 Warn about Python 3.x incompatibilities
-c cmd Program passed in as string (terminates option list)
-D Enable application debugging
-E Ignore environment variables
-h Display usage
-i Inspect interactively after running script
-m module run library module as a script
-O generate optimized code
-OO remove doc strings and apply -O optimizations
-Q arg Division options: -Qold (default), -Qwarn, -Qwarnall,
-Qnew
-s Don't add user site directory to sys.path
-S Don't imply 'import site' on initialization
-t Issue warnings about inconsistent tab usage
-tt Issue errors for inconsistent tab usage
-u Unbuffered stdout & stderr
-v Verbose (trace import statements) (also PYTHONVERBOSE=
x)
-V Print the version number and exit
-W arg Warning control (arg is action:message:category:module
:lineno)
-x Skip first line of the source
-X:AutoIndent Enable auto-indenting in the REPL loop
-X:ColorfulConsole Enable ColorfulConsole
-X:CompilationThreshold The number of iterations before the interpreter starts
compiling
-X:Debug Enable application debugging (preferred over -D)
-X:EnableProfiler Enables profiling support in the compiler
-X:ExceptionDetail Enable ExceptionDetail mode
-X:Frames Enable basic sys._getframe support
-X:FullFrames Enable sys._getframe with access to locals
-X:GCStress Specifies the GC stress level (the generation to colle
ct each statement)
-X:LightweightScopes Generate optimized scopes that can be garbage collecte
d
-X:MaxRecursion Set the maximum recursion level
-X:MTA Run in multithreaded apartment
-X:NoAdaptiveCompilation Disable adaptive compilation
-X:PassExceptions Do not catch exceptions that are unhandled by script c
ode
-X:PrivateBinding Enable binding to private members
-X:Python30 Enable available Python 3.0 features
-X:ShowClrExceptions Display CLS Exception information
-X:TabCompletion Enable TabCompletion mode
-X:Tracing Enable support for tracing all methods even before sys
.settrace is called
Environment variables:
IRONPYTHONPATH Path to search for module
IRONPYTHONSTARTUP Startup module
お勧めは、TABキーでのキーワードの補完が有効になる「-X:TabCompletion」、自動でインデントしてくれる「-X:AutoIndent」、コンソールがカラーになる「 -X:ColorfulConsole」あたり。昔はTabCompletion と AutoIndent は設定すると問題もあったのですが(TabCompletion では日本語が文字化けするとか)なおっているようです。
これらのオプション、3年前に買った『オープンソース×Windowsスクリプティング IronPythonの世界』(荒井 省三)という本で知ったのですが、いまだにこの本ぐらいしか参考書がないみたい。
私は、スタートメニューの IronPython Console のショートカットをコピーしてリンク先に上記のオプションを追加したショートカットを作ってます。便利ですよ。
切れちゃってますが、リンク先の内容は「”C:\Program Files\IronPython 2.6 for .NET 4.0\ipy.exe” -X:TabCompletion -X:AutoIndent -X:ColorfulConsole」です。ipy.exe の Path については調整してくださいね。






Munin で PostgreSQL を監視する
- 2010/02/06
- murave
- Munin
- PostgreSQL
- Ubuntu
PostgreSQL 大好きっ子なので PostgreSQL を監視するプラグインを追加するんだぜー。
PostgreSQL 監視用のプラグインはパッケージを導入した際にいくつか入ってます。
$ ls -l /usr/share/munin/plugins/postgres*
-rwxr-xr-x 1 root root 5377 2009-10-18 19:53 /usr/share/munin/plugins/postgres_block_read_
-rwxr-xr-x 1 root root 7777 2009-10-18 19:53 /usr/share/munin/plugins/postgres_commits_
-rwxr-xr-x 1 root root 2159 2009-10-18 19:53 /usr/share/munin/plugins/postgres_locks
-rwxr-xr-x 1 root root 6118 2009-10-18 19:53 /usr/share/munin/plugins/postgres_queries_
-rwxr-xr-x 1 root root 7243 2009-10-18 19:53 /usr/share/munin/plugins/postgres_space_
もちろん /usr/share/munin/plugins/ には、PostgreSQL 用だけじゃなくていろんなプラグインが入ってます。いっぱい、いっぱい。
PostgreSQL のコネクション数の監視をするプラグインは残念ながらここにはないので
http://munin-monitoring.org/wiki/plugin-pg__connections
から取ってきました。
こいつも /usr/share/munin/plugins/ に置いて、実行できるようにしておきましょう。
$ sudo chmod +x /usr/share/munin/plugins/pg__connections
プラグインの設定方法はプラグインのファイルを開いて読むと書いてありますので、そのようにしていきます。
Munin のプラグインは /etc/munin/plugins/ ディレクトリにあるかどうかで管理されています。まずは、取ってきた pg__connections のシンボリックリンクを作成。
$ sudo ln -s /usr/share/munin/plugins/pg__connections /etc/munin/plugins/pg_5432_connections
プラグインのファイルの Usage には pg_
用意されているプラグインからも監視したい対象のプラグインをセットアップ。
$ sudo ln -s /usr/share/munin/plugins/postgres_block_read_ /etc/munin/plugins/postgres_block_read_5432
$ sudo ln -s /usr/share/munin/plugins/postgres_space_ /etc/munin/plugins/postgres_space_5432
この2つにしました。
シンボリックリンクの最後にデータベース名を付けるように書いてありましたがこれらについてもポート番号の5432にしてみました。これらのプラグインでは付けた文字列がグラフのタイトルで使用されるのでちゃんと考えて付けましょう。
ちなみに postgres_block_read_5432 だとグラフのタイトルが「:: Postgres data reads from 5432」となります。postgres_space_5432 の方は「:: Postgres database 5432」となって、データベースの容量に関するグラフのタイトルとしてはイマイチな感じになっちゃいました。
PostgreSQLのプラグインについては設定ファイルに記述がないので設定を追記する必要があります。
$ sudo vi /etc/munin/plugin-conf.d/munin-node
私の実験環境での設定ですが、次のように追記しました。
[postgres_*]
env.PGHOST 127.0.0.1
env.PGPORT 5432
env.PGDATABASE postgres
env.PGUSER postgres
env.PGPASSWORD trust
[pg_5432_connections]
env.dbhost 127.0.0.1
env.dbport 5432
env.dbname postgres
env.dbuser postgres
env.dbpass trust
[postgres_*] は postgres_ が頭に付いているプラグインの設定、すなわち、用意されているプラグインの設定です。
[pg_5432_connections] はパラメータ名なども異なりますし別途書く必要があります。
実験環境の PostgreSQL の 接続設定は 127.0.0.1 からは trust にしています。よって、データベースの接続にパスワードは不要なのですが、何か書いていないとエラーなったので仮に trust としています。
PostgreSQL 側でやらなければならない設定として「postgresql.conf の stats_start_collector = true として統計情報収集器を有効にせよ」的なことも書いてありますが、PostgreSQL 8.3 以降、この設定は削除され、UDP ソケットの作成に成功したら必ず統計情報収集器が起動するようになったようです(http://www.sraoss.co.jp/technology/postgresql/8.3/ 参照)。
あとは Munin-Node を再起動すればOK、と言いたいところですが、実はこれでは動かない場合があります。 libdbd-pg-perl が入っていない場合です。プラグインが PostgreSQL にアクセスするのに使っているのです。
Ubuntu に Munin をインストールする時には入りませんでしたので、libdbd-pg-perl が入っていない場合には別途インストールする必要があります。
$ sudo aptitude install libdbd-pg-perl
こんどこそ、準備OK。Munin-Node を再起動します。
$ sudo /etc/init.d/munin-node restart
* Stopping Munin-Node
...done.
* Starting Munin-Node
...done.
再起動完了。
$ tail -n 20 /var/log/munin/munin-node.log
ってな感じで、 Munin-Node のログを見てエラーが出てないか確認すると良いでしょう。データがないせいで正常動作をしていてもエラーが出ていたりする場合もあります。内容で判断するしかないですね。
しばらく待つと、こんな感じに PostgreSQL のリソースのグラフが追加されたページが生成されます。






メモ:Linux::Inotify2 でディレクトリを監視して処理
- 2010/02/05
- murave
- CentOS
- Linux::Inotify2
Linuxサーバー上のディレクトリにファイルが作成されたら処理するってのをやりたくて、調べてたら cpan の Linux::Inotify2 が良さそうだったので試してみました。
モジュールをインストール(cpanminusを使用)。イベントループに AnyEvent を使うといいらしいので、そちらも。
$ cpanm Linux::Inotify2
$ cpanm AnyEvent
指定ディレクトリにファイルを投入したら別ディレクトリに mv するスクリプトを作成。
#!/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 ディレクトリに移動するのを確認できました。




