goo blog サービス終了のお知らせ 

お散歩Linux

のんびりぷらぷら寄り道しながらLinuxでお散歩。

WindowsでCGIの続き

2004-08-03 15:23:45 | ひとやすみ
CGIでしたかったことは、アクセス解析でした。
社内のイントラネットのページに、どれだけアクセスがあったか
どの部署の人たちが見ているか、などなどを調べたかったのです。

アクセス解析ソフトをダウンロードして、解凍して
置いてみたのですが、なんだかうまくいきません。
※アクセス解析ソフトは
http://www.bayashi.net/st/ds/
dopvSTAR* というソフトを使用しました。

管理画面(dsa.cgiというファイル)を表示しようとすると

The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:

Can't locate ./dsi.pl in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at
c:inetpubwwwrootcgi-bindsdsa.cgi line 16.

こんな感じのエラー。
./dsi.plがみつからない と言っているみたいなのだけど
同じディレクトリ(ds)にあるのになぜ?

あれこれ試したあとに
dsフォルダを仮想ディレクトリとして発行してみました。
すると…
管理画面が表示された♪

でも、そこで管理者パスワードを設定しようとすると

『エラーが発生しました。

◆パスワードファイル書き込み時にロックが失敗しました。』

と出て、パスワードを設定できません。

なんだろう。。。としばらく悩む。
原因は、フォルダのアクセス権でした。←メロディさん発見。

Linuxとかだと、パーミッションで設定するのだと思いますが
Windowsでは、共有(Everyoneにフルコントロール) NTFSのときは
セキュリティタブでEveryoneにフルコントロールなどの権限がないと、書き込みができないようです。
フルコントロールまでしなくてもいいかもしれないけど…。

やっと、自分のマシン(Windows2000)でアクセス解析ソフトが動いたー。
Linuxで試すのは、どうなったんだろう...

※社内のWebサーバでは、実はなんの問題も無く、同じ解析ソフトが
動いています。
※ANHTTPを使わなくても、CGIはIISだけで、動いてるようです。
とても無駄なことをしていた?

WindowsでCGI

2004-07-30 15:26:23 | ひとやすみ
CGIをちょっと試してみたいと思って、WindowsでCGIを動かす設定を調べてみました。
(OSはWindows2000 Professionalです)
とほほさんのCGI入門 
WindowsでCGIを動かすには? を見ると、
ActivePerlとAN HTTPDを使う方法がのっていました。
そこでその順番に試してみました。

1.AvtivePerlをインストール

http://www.activestate.com/
というページにアクセスすると、英語ばっかりのページでやや泣きそうになりながら
Downloadというところをクリックしました。
名前とe-mailアドレスを聞かれたので
わからないけどとりあえず入れてNEXT。
Windowsとなっているところのファイルをダウンロード。
(ファイルの種類が2つあって、msiのほうをダウンロードしました。)
ダウンロードしたファイルをダブルクリックするとインストールされて
既定ではC:Perlというフォルダができました。


2.AN HTTPDをインストール

http://www.activestate.com/から
httpd142m.zipというファイルをダウンロードしました。
解凍すると、私の解凍ソフトではデスクトップに解凍されてしまったのだけど使いにくいかもと思って、C:Inetpubwwwrootの下へ移してみた。
ほかの場所のほうがよかったのかしらん。。
そしてAN HTTPDの設定をしました。

AN HTTPDを起動するときに、ポート80が使われています…というようなメッセージが出たので、適当に81としてみた。
81でよかったのかなあ。。
ドキュメントルート(C:Inetpubwwwroot)にtest.htmlを作って表示させるとOK。
次に、CGIのテストをしてみる。

http://localhost/cgi-bin/test.cgi
を作って、表示してみると 書いたものがそのまま表示される(^^;

print …
print …
print …


違うでしょ。。

IISの管理画面を出してcgi-binフォルダのプロパティの
実行アクセス権を「スクリプトおよび実行可能ファイル」に設定しました。
次は、
%1 is not a valid Win32 application.
というなぞのメッセージが出ました。
ミケネコ研究所さんの
http://www.mikeneko.ne.jp/~lab/perl/iis/
よると、
拡張子.cgiに関連付けがされていないことが原因のようです。
そこでcgi-binのプロパティで、「ディレクトリ」タブの
アプリケーションの設定で、「設定」ボタンをクリック→「構成」ボタンをクリックし
アプリケーションのマッピングのところで「追加」
.cgiを、.plと同じように設定しました。

http://localhost/cgi-bin/test.cgi

CGIのテスト♪

やっと出た。

今日はくたびれたのでここまでです。

-ひとりごと-
よく考えたら、Linuxマシンがあるのだからそっちで試せば早かったかも。
来週試せたら試してみよう。

コンピュータアカウント

2004-05-31 23:14:43 | NTドメイン
NTドメインが、何と何を管理するものなのか、いまだによくわかっていないのですが、このあいだ、ユーザー名と、パスワードを集中して管理している、ということが、少しわかってきました。
さらにもう一つ、コンピュータアカウントも管理していたことがちょっぴり、理解しかかったところです。今頃になってこんなことを書いている人も時代遅れですよね。。。

先日、社内で検証用に構築したNT4.0Serverにユーザーを作成して、WindowsXPや、Windows2000のコンピュータから、そのユーザーでドメインに参加する作業を、試していました。(やっていたのは、私ではありません)
XPや、2000のコンピュータから、ドメインに参加しようとすると(システムのプロパティ-ネットワークID-プロパティから)「ドメインに参加するアクセス許可を与えられたアカウントのユーザー名とパスワードを入力してください」と、聞かれます。
ここで、たとえば今作成したユーザー名とパスワードを入れて、少し待つと「サーバーのセキュリティ データベースにこのワークステーションの信頼関係に対するコンピュータアカウントがありません。」と出て、ドメインに参加できませんでした。

あれれ、どうして?

NTドメインに、参加するには
・あらかじめ使用するコンピュータアカウントを、サーバーに登録しておく または
・ユーザー名とパスワードを聞かれたときに、『コンピュータアカウントを作成する権限を持っている』ユーザー名を入力する

の、どちらかが必要なのだそうです。
NTドメインには、ユーザー名、パスワード、コンピュータアカウントがすべて登録された人しか参加できません。つまり、NTドメインでは、ユーザー、パスワード、コンピュータアカウントを管理している…。そうだったんだ。。今頃になっての発見です。

Windows9Xマシンについては、こういう説明になっています。
『Windows 9x/MeなどのOSは、ドメインに参加できないのでアカウントは作成されない。ただしこれらのOSでも、ユーザー名とパスワードをドメインのIDと一致させることで、ドメインの共有資源を使うことはできる』
ユーザー名と、パスワードを一致させれば、共有資源を使うことはできる。だけど、ログインしても、コンピュータアカウントは作成されない。。
そっかあ。Win9Xは、ドメインに参加していたわけではなかったんだ…。

今ままで、このことを意識したことがなかったのは、社内では自分たちはAdministratorグループにいるため、コンピュータアカウントを作成する権限を持っていたからのようです。
検証サーバを作っても、クライアントから接続する検証は、どうやら、やっていなかったのかもしれません。

ではここで、今ままで、よくわからなくて勉強していなかったドメインモデルを、少しだけ、見てみます。
シングル・ドメイン・モデルしか、知らないのであまり信頼関係とかを意識しないで、勉強しようともせずに過ごしていました。

【シングル・ドメイン・モデル】
ユーザー、グループ、コンピュータを1つのドメインで管理するドメイン・モデル。
同じデータベースでドメインのすべてのアカウントを管理することができるシンプルなモデル。
1つのドメインだけ管理すればよいため、集中管理が行える。


【シングル・マスター・ドメイン・モデル】
ユーザーやグループを1つのドメインにまとめ、全従業員を集中管理し、コンピュータ・アカウントをそれぞれの拠点ドメインでまとめ管理するモデル。
ユーザーやグループのドメインをアカウント・ドメインと呼び、コンピュータのドメインをリソース・ドメインと呼ぶ。
ユーザーがコンピュータを使用するためには、リソース・ドメインはアカウント・ドメインを信頼しなければならない。


【マルチ・マスター・ドメイン・モデル】
ユーザーやグループを1つのドメインにまとめきれない場合や、
管理範囲が分散されているような場合において、アカウント・ドメインを複数用意したモデル。
すべてのユーザーがすべてのコンピュータを利用できるようにするためには、それぞれのリソース・ドメインはそれぞれのアカウント・ドメインを信頼する必要がある。
そのため、シングル・マスター・ドメイン・モデルと比較すると、信頼関係の設定が多くなる。


【完全信頼ドメイン・モデル】
それぞれのドメインにおいて、ユーザーやグループ・アカウントもコンピュータも管理し、さらに、お互いにリソースを共有できるように、それぞれで双方向に信頼関係を結ぶモデル。
拠点や、部門単位で管理が分散するような場合にこのようなモデルになる。
各ドメインが相互に信頼関係を結ぶので、ドメインの数が増えれば増えるほど、信頼関係も複雑化してしまう。

★何年も前から、眺めている図ですが、やっと少し図の意味がわかってきた気がします。

↓参考
http://www.atmarkit.co.jp/fwin2k/operation/admigrate01/admigrate01_01.html

ユーザー認証

2004-05-06 22:29:42 | Linux
今日の話題をLinuxのカテゴリにするのは、ちょっと苦しいですが。。。

Linux(UNIX)と、Windowsとで、ユーザー情報の管理方法が違うことが少しわかってきました。
Linuxでは、ユーザー認証は1台1台のマシンごとに独立していて、「/etc/passwd」ファイルで管理を行うようです。シャドウ・パスワード機能が有効になっている場合は、パスワードは「/etc/shadow」ファイルに暗号化されて記述されます。

へえ...と思って、さっそく自分のLinuxマシンを見てみると、ちゃんと、/etc/passwdファイルがありました。
パスワードの部分は、ちゃんとxになっていたので、シャドウ・パスワード機能は有効でした。
/etc/shadowの中も、見てみましたが、やっぱり暗号化されていました。

UNIX系のOSは、マルチユーザー環境が前提となっていたため、ローカルでユーザー認証を行う機能が基本となっていたそうです。

そうすると、ファイルサーバが2台あったとして、サーバごとに違うユーザー名とパスワードでログインするという使い方や、または、2台のサーバでユーザ名とパスワードを常に同じになるように管理する、といった使い方をするのかなあ...と思います。(あくまでも、想像です)
UNIX系のOSでも、ユーザーデータベースをネットワークで利用できるようにする仕組みがあるようです。よくわからないので、名前だけ。
(NIS)Network Information Service

WindowsのNTドメイン環境では、ユーザー名とパスワードの管理はディレクトリデータベースで行われます。このデータベースはセキュリティ アカウント マネージャ(SAM)データベースとも呼ばれて、実態は、システムフォルダの下の"system32\Config\sam"というファイルのようです。
SAMデータベースのマスタコピーは、プライマリドメインコントローラ(PDC)に保存されます。
そして、定期的にバックアップドメインコントローラ(BDC)に複製されて、ドメインの中ではどのBDCでも同じSAMデータベースが保存されます。

NTドメインの機能に該当するものが、UNIX系では何になるのだろう…と、しばらく疑問に思っていました。
そもそも、NTドメインの機能というものが自分でもよく説明できなかったのですが、なんとなくユーザー名とパスワードの管理を集中化してするものが、NTドメインかな?という気がしてきました。
これだけでは単純すぎますけれど。。。

ユーザー名とパスワードが、ネットワーク全体で共有されている状態を、あたりまえと思っていたのが(漠然と、ネットワークとは、そもそもそういう機能を持っていると思っていた)NTドメインのSAMデータベースがあるから、それができているということが少し、わかってきたようです。

SAMデータベースに該当するものは、ActiveDirectoryになると、ドメインコントローラの「NTDS.dit」ファイルになるようです。

■参考にしたページ
http://www.idg.co.jp/lw/weekly_2/030727/
■/etc/passwd ファイルのフォーマット
http://www.linux.or.jp/JF/JFdocs/Shadow-Password-HOWTO-2.html#ss2.2
■shadow ファイルのフォーマット
http://www.linux.or.jp/JF/JFdocs/Shadow-Password-HOWTO-2.html#ss2.3
■NT管理者のためのActiveDirectory入門
「第2回 アカウントの登録と管理」
http://www.atmarkit.co.jp/fnetwork/rensai/ad02/ad01.html

ルートゾーン(メモ)

2004-04-30 21:56:08 | ひとやすみ
今日は、DNSサーバのルートゾーンについてです。
ルートゾーンについてといっても、ルートゾーンが何かという話ではなくて、Windows2000serverでDNSサーバを構成したときに、どうして(ルートサーバじゃなくても)ルートゾーンができてしまうかということと、それがあるとどういうふうになるのかを、ちょびっとだけ調べました。

マイクロソフトの技術資料によると『インターネットに接続されていないWindows 2000 サーバにDNSをインストールすると、ドメインのゾーンが作成されるのといっしょに、ルートゾーンが作成される』仕組みになっているようです。

また、ルートサーバではないDNSサーバにルートゾーンがあると、ルートヒントや、フォワーダの設定が、できなくなるそうです。

以下は、調べた記事へのリンク。自分のコメントはまだよくわからないので、なしです。

■マイクロソフト サポート技術情報 - 298148
ルート ゾーン (ドット ゾーン) を削除する方法
http://support.microsoft.com/default.aspx?scid=kb;ja;298148
『インターネットに接続していない Windows 2000 サーバーにDNS をインストールすると、ドメインのゾーンが作成され、ルート ゾーン (ドット ゾーンともいう) も作成されます。このルート ゾーンが DNS および DNS のクライアントのインターネットへの接続を妨げることがあります。ルート ゾーンが存在する場合、DNS にリストされたゾーン以外のゾーンが存在せず、フォワーダやルート ヒント サーバーを構成できません。そのため、ルート ゾーンを削除することが必要になる場合があります。』

■マイクロソフト サポート技術情報 - 229840
DNS サーバーの [ルート ヒント] タブと [フォワーダ] タブが利用できない
http://support.microsoft.com/default.aspx?scid=kb;JA;229840

『DNS サーバー上に "." という名前のゾーンがあると、そのサーバーはルート サーバーとして動作します。"." ゾーンは、そのサーバーが最上位のルート サーバーであることを示します。ルート サーバーは DNS 階層の最上位にあるため、フォワーダを構成できず、またルート ヒントを必要としません。』

『Active Directory のインストール ウィザード (Dcpromo.exe) の実行時に、ローカル コンピュータ上で DNS サーバーを構成し、前方参照ゾーンを構成することができます。ウィザードは、コンピュータ上の TCP/IP 構成を調べ、そのコンピュータが DNS サーバーを使用するように構成されているかどうかを判断します。DNS サーバーを使用するように構成されている場合、Active Directory のインストール ウィザードはルート サーバーを照会します。DNS サーバーを使用するように構成されていない場合には、ウィザードは Cache.dns ファイル内にリストされたルート サーバー (インターネット ルート サーバー) を照会します。ルート サーバーに接続できない場合、ウィザードはローカル コンピュータをルート サーバーとして構成し、"." ゾーンを作成します。』

■マイクロソフト サポート技術情報 - 323380
Windows Server 2003 でインターネット アクセス用に DNS を構成する方法
http://support.microsoft.com/default.aspx?scid=kb;ja;323380

『Windows Server 2003 を実行している DNS サーバーは、特定の手順に従って名前解決を行います。DNS サーバーは、まずキャッシュに問い合わせを行い、次にゾーン レコードを確認し、フォワーダに要求を送信します。最後に、ルート サーバーを使用して解決を試みます。

デフォルトでは、Microsoft DNS サーバーはインターネットに接続し、さらにルート ヒントを使用して DNS 要求を処理します。Dcpromo ツールを使用してサーバーをドメイン コントローラに昇格する場合、ドメイン コントローラは DNS を要求します。昇格の過程で DNS をインストールすると、ルート ゾーンが作成されます。このルート ゾーンは、DNS サーバーに対して、ルート インターネット サーバーであることを示します。このため、DNS サーバーは名前解決の過程でフォワーダやルート ヒントを使用しません。』

Javaのswitch文

2004-04-23 00:59:36 | Java
Javaではswitch文というのが使えますが、JavaScriptでもswitch文があります。
私はJavaScriptのほうでは、ときどき使っていたので同じなのかな?と思ったら、少し違うところがありました。

【Javaでの書式】

switch( 式 ) {
case 定数式1:
   処理1
   break;

case 定数式2:
   処理2
   break;

default:
   処理3
   break;
 }

JavaScriptでも形は同じなのですが、違う点はJavaのときは、caseのあとには「整数の定数式」が入ります。整数の定数式として使えるのは、int型char型です。long型や、double型String型は使えません。long型ではない整数か、文字列なら1文字です。
これに対してJavaScriptでは、caseのあとに長い文字列でも、小数点つきの数値でも使えました。
Javaのほうが、区別が厳密みたいです。
…不思議ですね。


【Javaでcaseのあとがint型のとき】

switch (n) {
case 1:
System.out.println("オレンジジュースです。");
break;

case 2:
System.out.println("コーヒーです。");
break;

default:
System.out.println("どちらでもありません。");
break;
}


【Javaでcaseのあとがchar型のとき】

switch (c) {
case 'あ':
System.out.println("オレンジジュースです。");
break;
case 'い':
System.out.println("コーヒーです。");
break;
default:
System.out.println("どちらでもありません。");
break;
}

【JavaScriptのとき】

switch (xx) {
case "ふう":
alert("ふうさんこんにちは");
break;
case "ここあ":
alert("ここあさんこんにちは");
break;
default:
alert("こんにちは");
break;
}

[参考にした本&サイト]
Java:「Java言語プログラミングレッスン(上)」
JavaScript:とほほのWWW入門

Eclipseを入れてみた

2004-04-11 19:22:55 | Java
Eclipseをインストールしました。
パソコンのOSはWindowsXP。
Eclipseは
http://jakarta.apache.org/site/binindex.cgiから

eclipse-platform-2.1.2-win32.zip …(1)
eclipse-SDK-2.1.2-win32.zip    …(2)
eclipse2.1.2.1-SDK-win32-LanguagePackFeature.zip…(3)
をダウンロードして、それぞれのファイルを解凍するとそれぞれEclipseというフォルダができました。

Cドライブの下(場所は任意)に、(1)で解凍してできたEclipseフォルダをコピ。
次に同じ場所に(2)を解凍してできたEclipseフォルダを上書きでコピー。
次に(3)を解凍してできたEclipseフォルダを上書きでコピー。

そのあと、Eclipseフォルダの下にあるEclipse.exeを実行すると完成。
…のはずだったのですが、1回目は何を間違ったのか、Eclipseを起動してみると新規プロジェクトの中にJavaプロジェクトがありませんでした。(ただのプロジェクトになっている)
やーん。。
Eclipseフォルダごといったん削除して、もういちど上の手順を落ち着いてやってみると今度は、起動した後ちゃんとJavaプロジェクトが選べるようになっていました。
やれやれ。

Eclipseは、たくさん機能があって、とても便利なようです。
私にとっては、今のところスペルミスを発見するくらいしか使えていませんが、それでもちゃんと役に立っています。

例えば、Char a = 'A';
と入力すると『Charは解決できないか、型ではありません。』とメッセージが出ます。
どうして??CharだよChar。としばし悩む。
charとか、intとか、型の指定をするときは、小文字なのですね。

インストールをするときに参考にしたページ
http://www.atmarkit.co.jp/fjava/rensai2/eclipse01/eclipse01.html

★ところで内容とまったく関係ありませんが、今日の画像は「カラスノエンドウ」。カラスノエンドウって、ゲド戦記に出てきた魔法使いの名前なんですよね。こんなきれいな花だったとは。


ターゲットジョイン

2004-04-01 21:19:07 | データウェアハウス
このカテゴリーを使うとは思っていませんでしたが、今日は(今日だけかも)データウェアハウスの話を少しだけ。

きのうから社内のデータウェアハウスのレスポンスが極端に悪くなり、終わらないセッションがたまりすぎると、まったく結果が返って来なくなる状態が頻繁に起きるようになっていました。
月末で、利用する人が多いせいだろうか、社員が急にデータ活用に目覚めたのだろうか、そうではなくて単純にサーバの調子が悪いのか、データベースがどこかおかしくなっているのだろうか…
いろんなことを考えて、いくつか試してみたけれど、原因がわからないままサービスの再起動を繰り返していました。

今日になって、終わらなくなるセッションではいくつか共通するSQL文が流れていることに気がつきました。問題となるSQL文をRed Brickのset stats info;をつけて調べると、ターゲットジョインが使われていること、本来ならかかるはずがないくらい、結果が出るのに時間がかかって(あるいはぜんぜん結果が返ってこなくなって)いることがわかりました。
そこで、思い切ってターゲットジョインで使われている、あるターゲットインデックスを削除してみました。すると、うれしいことに、SQL文は、今までどおりきちんと結果を返し始めました。さっきまでターゲットジョインが使われていたSQL文を試すと、今度はスタージョインで、一瞬で結果が返りました。ああよかった...

Red Brickでは、スタージョインと、ターゲットジョイン、そのほかの検索で、どの方法がいいかを自動的に判別して最適な方法で結果を返してくれるはずなのですが、どうしてターゲットジョインが選ばれるようになってしまったのか、わかりません。このターゲットインデックスは、2年くらい前に作ったもので、たぶん、おとといくらいまではうまく選択ができていたと思うのですが、何かの要因で、最適ではないものが選ばれるようになってしまっていたのでしょうか。

とにかく、嵐のようなセッションのたまり方がおさまって、ほんとうにほっとしました。
Red Brickのスタージョインとターゲットジョインについて、説明されているページ

http://www-6.ibm.com/jp/software/data/developer/library/techdoc/star.html

マニュアルもそうなのですが、このページも私にはちょっと難しいみたいです。

JDBCでつなぐ話その2

2004-04-01 00:00:30 | Java
JDBCでつなぐ話の続きです。

自分がぜんぜんわかっていないことがわかってきて、ここにのせるのがちょっと恥ずかしくなってきました。

PostgreSQLとMySQLの場合を整理すると

1.Class.forName("ドライバ名");
でドライバクラスをロードする。
2.Connection con = DriverManager.getConnection("データベースのURL");
でデータベースへ接続する。

[MySQLのURL] "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS";
[PostgreSQLのURL] "jdbc:postgresql:hellodb","postgres","";

PostgreSQlは、サーバ名とポート番号を入れて記述することもできるみたい。
"jdbc:postgresql://localhost:5432/hellodb"
サーバが自分のパソコンじゃないときは、つなぐサーバ名を記述する。IPアドレスでもつながりました。
hellodbはDB名です。
MySQLのときはURLの中にユーザー名とかパスワードがいらないのかなあ?

そのつぎに
3.Statement stmt = con.createStatement();
ステートメントオブジェクトというのを作成。

4.String sql = "ここにselect文が入る";
5.ResultSet rs = stmt.executeQuery(sql);

その次に結果を表示する方法を記述する。
記述の仕方はいろいろ。

おしまいのほうで
stmt.close();
con.close();
などと書く。

通して書くと
(HelloWorldJDBCPostgre.java)

import java.sql.*;
public class HelloWorldJDBCPostgre {
public static void main(String[] args) {
try{
1から5まで
} catch (Exception e) {
e.printStackTrace();
}
}
}

まだほかに、気をつけることがたくさんあると思うけど、最低限つなぐための記述がこんな感じのようです。tryのところは調べていないのであまり自信がありません。

札幌は、今日(3月31日)は雪が降りました。
明日から4月なのに。
一進一退ですね。

休憩

2004-03-30 22:19:25 | ひとやすみ
今日は、ほんとにひとやすみ。
お花は桜草です。