どこでもCatalystを実験できる環境を整備する

はじめに

実は1週間くらい前にMVCフレームワークCatalystを研究室にあるFedora Core 4のマシンにひそかにインストールしてみました。Fedora Core 4だと全くトラブルなしでCatalystをインストールできました。そしてHello WorldなCalalystアプリケーションも作ってみました。意外と簡単でした。しかしながら、Catalystをインストールした研究室にあるFedora Core 4のマシンはプライベートIPを持ったマシンなので、このままでは自宅から思う存分Calalystを実験することができません。そこで、このエントリーではCatalystをリモートの環境からでも実験できるようにするための準備方法について説明したいと思います。

coLinuxのインストールで挫折、さてどうする?

id:naoyaさんやid:miyagawaさんは、coLinuxWindowsにインストールしてlocalhostでごにょごにょするという開発スタイルを取られています。先日、私もcoLinuxのインストールに挑戦して、coLinuxdebianのイメージをロードさせて、ネットに接続できる所までは設定できました。しかし、開発環境の整備まではできませんでした。もう少したっぷり時間が取れれば、引き続き頑張っても良かったのですが、これ以上時間をかける気にはなりませんでした。

ちょっと冷静に考えてみました。何でcoLinuxに拘っていたのかわからなくなりました。おぃ!

私は以下のような2台のマシンを研究室で所有しています。

labserverは研究室のメンバーが色んなことに利用しているサーバで、私もよくsshでリモートログインしてPerlの勉強をしています。ですが最近はfedoraがあるので、Perlの勉強は主にFedora Core 4が入っているマシンで行っています。(というかRedhat Linux 9でCPANモジュールがちゃんとインストールできないものが多すぎるのでFedora Core 4を使うようになりました) labserverはインターネットから8080番ポートのアクセスを許可していますが、現在は利用されていません。

fedoraはプライベートIPが設定されているので、当然インターネットからのアクセスは受け付けません。なので、Catalystの実験は研究室に行かないとできません。

labserverとfedoraは大学のVPNで接続されており、互いに通信可能です。自宅からfedorasshで操作したい時は、まずlabserverにsshでログインします。そして、labserverから再度sshfedoraにログインしています。

問題は、fedoraCatalysthttpd(script/xxx_server.pl)を起動しても、研究室でないとCatalystアプリケーションをテストできないところです。何とかして、危険を承知の上で、Catalysthttpdをインターネット上から叩けるようにすれば、ひとまずこの問題は解決です。幸いにも、グローバルIPを持っているlabserverは8080番ポートをListenしようと思えばできる状態にあります。これで何とか解決できないものでしょうか...

任意のマシン宛てにTCPポート転送を行うHack

前述した問題を解決するための良い方法がないか、LinuxサーバHacksの本をちょっと読んでみました。そうすると、ちょうど良い解決方法が載っていました。その解決法とは、HACK #48の「任意のマシン宛てにTCPポート転送を行う」というもので、このHackによって別のところにあるサービスを自分が提供しているかのように見せかけることができるようになるそうです。

そこで、早速試してみました。

以下のコマンドをlabserverで行いました。manのインストール場所を少しだけ調整する必要がありました。

$ cd /usr/local/src/
$ wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
$ tar -zxvf rinetd.tar.gz 
$ cd rinetd
$ vi Makefile
(Redhat Linux 9用にmanのインストール場所を「/usr/share/man/man8」に修正)
$ make
$ sudo make install
$ vi /etc/rinetd.conf
0.0.0.0 8080 fedora 3000
$ sudo /usr/sbin/rinetd

これでlabserverで利用されずにいた8080番ポートに対してインターネットからアクセスがあると、fedoraの3000番ポート(Catalysthttpdが標準でListenするポート)にトラフィックが転送されるようになります。

前に実験で作ったHello WorldなCalalystアプリケーションのscriptディレクトリにあるhttpdサーバを起動して、インターネットからhttp://labserver:8080で叩いてみると、見事に動作しました。LinuxサーバHacks、ありがとう。

おわりに

このエントリーで紹介したHackで、どこにいてもCatalystの実験ができるようになりました。残るはセキュリティーの問題です。これについてはまた後日エントリーを書こうと思います。

参考文献

LinuxサーバHacks―プロが使うテクニック&ツール100選

LinuxサーバHacks―プロが使うテクニック&ツール100選