PEAK XOOPS - CGIを使った強力なWebアプリケーションインストーラ in englishin japanese

Archive | RSS |
XOOPS
XOOPS : CGIを使った強力なWebアプリケーションインストーラ
Poster : GIJOE on 2008-10-09 17:45:23 (22672 reads)

in englishin japanese

●アプリケーションインストーラの原理等

前の記事でも書いたのですが、rsync+sshやsshログインが出来ない環境で、大量のファイルを展開するWebアプリケーションのセットアップは、かなり辛いものがあります。FTPでアップロードするのにもとても時間がかかり、途中で切れることも珍しくありません。アップロードが不完全であることに気がつければまだ良い方で、成功したと思い込んで作業を進めてしまうと、後になってから面倒なトラブルが頻出することになります。

しかし、そういう環境(安価な共有型ホスティングサービス)であれば、おそらくCGIはsuExecです。であれば、アーカイブの展開をCGIでやってしまえば良いのです。ファイルオーナーはFTPでアップするのと一緒です。つまり、FTPで大量のファイルをアップロードする必要なんてなくなります。

ついでに、アーカイブもwgetで取得してしまえば、FTPでアップロードするのは、そのCGIのみとなります。そうなれば本当に楽ちんです。

ここで注意しなければならないのは、wgetのパラメータが任意ではいけません。そんなことをしたら、そのCGIが存在しているタイミングに、任意のアプリケーションをインストールされてしまいます。(もちろん、そうであってもなくても、そのCGIは実行後、即座に消すべきですが)


とりあえず、サンプル的な意味で、ホダ塾ディストリビューションをインストールするためのCGIを書いてみました。

http://www.peak.ne.jp/support/xoops/hd_installer.zip

●bashCGI版インストーラ使い方

このファイルを解凍すると、hd_installer.cgi というファイルが出来ますので、これをサーバにFTPでアップロードします。アップロード先が重要で、XCLのルートフォルダとなるべきフォルダにアップロードしなければなりません。

例えば、サーバのDocumentRootが /home/foo/public_html で、そのルートにインストールしたいのであれば、そのまま /home/foo/public_html の下にアップします。
このファイルはCGIですから、実行パーミッションを与えます。755または705が一般的でしょう。また、サーバによっては、.htaccess に
Options +ExecCGI
の一行を追加する必要があるかもしれません。

あとは、ブラウザで、そのCGIにアクセスするだけです。例えば、
http://www.example.com/hd_installer.cgi
など。

あとは画面に表示される手順に従うだけで、インストーラ画面が開きます。tar.gzアーカイブを、パーミッション保存したまま展開するので、cache, uploads, mainfile.php などのパーミッションをFTPで変更する必要すらありません。「5分でインストール」どころか2分を切れそうです

一度遊びで試してみれば、その簡単さに驚くはずです。

ただ、「遊び」とは言っても、ローカルでテストしたら、たいがいうまく行きません。xampp環境ではそもそもbashがないでしょうし、自宅サーバなどに*nixをインストールして開発に使っているケースでも、ちゃんとsuExecを有効にしていることはほとんどないでしょう。このCGIは、suExecを有効にしている共有型レンタルサーバでないと動かないし動かす意味もない、ということをお忘れなく。


●余談

wgetで取得可能なアーカイブは、 http://downloads.sourceforge.net/hodajuku/ 直下のファイルに限定されます。ただ、サーバがファイルをリモートから取ってくる形ではなく、CGIと同一フォルダにアーカイブを用意しておけば、一部のモジュールのインストールにも利用可能です。少なくとも私のD3モジュールであれば、そのまま行けます。(もっとも、そのほとんどがHDに同梱されているのでほとんど意味はありませんが)

なお、XCL2.1.xはなぜかzipしか用意がないので、この手が使えません。もちろん、unzipコマンドを使えば解凍できるので、そのようにCGIを改変すれば良いのですが、unzipはあまり一般的ではないので、そういうコードにしていません。さらにzipにはパーミッションの概念がないので、解凍したファイル群に対するパーミッション変更までCGIに記述する必要があります。


このタイプのインストーラに興味があるなら、ぜひhd_installer.cgiを改変してください。
スパゲッティになりやすいbashスクリプトにしては、そこそこ見やすく再利用しやすいコードとなるよう努力したつもりです。スクリプトの最初の方にある定数定義だけいじれば、ImpressCMSや本家版XOOPSにも利用できるでしょう。再利用しやすいように、ライセンスも修正BSDとしてあります。


今回はインストーラでしたが、このシステムが本当に効いてくるのは、むしろアップデータでしょう。大量のファイルをFTPで上書きアップロードするというのは、本当に面倒です。しかもインストール時よりもさらに、途中で切れたかどうかの判断が難しくなります。

さらに、アップデータであれば、インストールされた情報(XOOPSであればmainfile.php)を参考にすることが出来るので、インストーラのようにリクエストに依存する必要がなくなります。つまり、サーバに置きっぱなしでも良いようなCGIを作れる可能性はあります。

次回はそのアップデータを作ってみたいと思います。


Related articles
Printer friendly page Send this story to a friend

Comments list

GIJOE  Posted on 2008/10/14 17:48
hi gigamaster.

Quote:

It made me remember some script installer I tried with Mikhail on some free hosts ans shared hosting accounts.
What kind of "script"?

The point of my idea is to write the script by "bash".
Because "bash" must be installed into all Unix/Linux system.

Try it at your hosting server.
You can find this script's value, easily
GIJOE  Posted on 2008/10/14 17:42
Quote:

tohokuaiki wrotes:
ロリポはwgetが無いのか、
cannot download http://downloads.sourceforge.net/hodajuku/hd_full_1_0_2.tar.gz
と言われました。
*追記
which curlしたら/usr/bin/curl だったので、curlはあるようです。fetchするプログラムを分岐すると対応サーバが増えそうです。
/*追記
wgetのない環境なんてあるんですね。
さっそくwgetでダメだった時に、curlを試すコードにしてみました。
しかし wget がダメなら curl を試す、とか、まんまyumっぽいですね(笑)。

Quote:
sakuraは/usr/local/bin/bashだったようで、これを書き直したら問題なく行
けました。私が試したのはhttp://www.sakura.ne.jp/rentalserver/pro/
の高めのコースですが。
sakuraは、それはそれで特別なんですよね。
PHPも、ユーザ権限でのみ動作しているわけで。

sakuraみたいなサーバばかりなら、それこそ普通にPHPでも、Webアプリケーションのファイル群を展開するインストーラが書けてしまいますね。(だとしたらどんなに楽か)
gigamaster  Posted on 2008/10/13 21:11
It made me remember some script installer I tried with Mikhail on some free hosts ans shared hosting accounts.
Finally we gave up due to security and server configs
issues.

But still very interesting solution ^^
wikeyIMS  Posted on 2008/10/11 20:42
Very nice! Now you can create your special flavoured CMS Installer!

Thanks a lot for GIJOE being a really generous part of the XOOPS Community!
tohokuaiki  Posted on 2008/10/10 10:55 | Last modified
GREAT!!!!!

これは、すごい。XREAで試してみました。O.Kでした。

ロリポはwgetが無いのか、
cannot download http://downloads.sourceforge.net/hodajuku/hd_full_1_0_2.tar.gz
と言われました。
*追記
which curlしたら/usr/bin/curl だったので、curlはあるようです。fetchするプログラムを分岐すると対応サーバが増えそうです。
/*追記

sakuraは/usr/local/bin/bashだったようで、これを書き直したら問題なく行けました。私が試したのは
http://www.sakura.ne.jp/rentalserver/pro/
の高めのコースですが。

これは本当に素晴らしいです。
Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!