以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態のソフトウェア情報管理装置を示す図である。ソフトウェア情報管理装置1は、ソフトウェア情報管理装置1にインストールされるソフトウェアのソフトウェア構成情報を生成し、管理する。ソフトウェア構成情報は、ソフトウェアの識別情報とソフトウェアに関係する情報(ソフトウェアのプログラムやソフトウェアの処理に利用されるデータ等)とを関連づけた情報である。このような情報をインベントリ情報と呼ぶこともある。ソフトウェア情報管理装置1は、ソフトウェア情報管理装置1以外の装置にインストールされるソフトウェアのソフトウェア構成情報を管理してもよい。
ソフトウェア情報管理装置1は、記憶部1aおよび演算部1bを有する。記憶部1aは、RAM(Random Access Memory)等の揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリ等の不揮発性記憶装置でもよい。演算部1bは、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)等を含み得る。演算部1bはプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る。
記憶部1aは、ソフトウェアαのプログラムを記憶する。ソフトウェアαのプログラムには、インストーラのプログラムも含まれる。インストーラのプログラムは、ソフトウェア情報管理装置1にソフトウェアαをインストールするためのプログラムである。例えば、演算部1bがインストーラのプログラムを実行することで、インストーラの機能がソフトウェア情報管理装置1上で発揮される。インストーラは、ソフトウェアαの処理に用いられるデータを、ソフトウェア情報管理装置1が備えるHDD等の記憶装置に配置する。
演算部1bは、ソフトウェアのインストールの際に、ソフトウェアのインストーラが生成する複数のプロセスを監視する。プロセスは、ソフトウェア情報管理装置1で実行されるオペレーティングシステム(OS:Operating System)によるプログラムの実行単位である。ソフトウェア情報管理装置1で実行されるOSは、あるソフトウェアのプログラムを実行するとき、プログラムを実行するためのプロセスを生成する。プロセスは、プログラムを実行するために割り当てられた種々のリソースの情報を含む。
例えば、ソフトウェアαのインストーラのプログラムがソフトウェア情報管理装置1で実行されるとき、ソフトウェア情報管理装置1のOSは、ソフトウェアαのインストーラのプログラムを実行するためのプロセスP1を生成する。ソフトウェアαが別のプログラムを呼び出すこともある。すなわち、プロセスP1(ソフトウェアαのインストーラ)により別のプロセスが生成され得る。
例えば、ソフトウェアαが、コンポーネントとなる他のソフトウェアを含む場合、ソフトウェアαのインストーラが、他のソフトウェアのインストーラのプログラムを呼び出す。すると、OSは呼び出されたプログラムを実行するために、他のプロセスを生成する。例えば、ソフトウェアαのインストーラにより呼び出されたあるプログラムに対してプロセスP2を生成し、ソフトウェアαのインストーラにより呼び出された別のプログラムに対してプロセスP3を生成する。この場合、プロセスP1は、プロセスP2,P3の親プロセスである。プロセスP2,P3は、プロセスP1の子プロセスである。プロセスの親子関係は、OSにより管理され得る。
演算部1bは、生成された複数のプロセスそれぞれがアクセスした複数のファイルそれぞれのファイル情報、および、複数のプロセス間の関係に基づき、複数のファイルに対応する複数のファイル情報を、ソフトウェアに関連づけた、ソフトウェア構成情報を生成する。
例えば、プロセスP1は、ファイルF1にアクセスする。プロセスP2は、ファイルF2にアクセスする。プロセスP3は、ファイルF3にアクセスする。ファイルF1,F2,F3は、例えばプログラムの実行可能コードやプログラムの処理に用いられるデータ等である。ファイル情報は、例えばファイルF1,F2,F3の識別情報である。ファイル情報は、ソフトウェア情報管理装置1におけるファイルF1,F2,F3のパス、更新日時およびサイズ等の情報を含み得る。
例えば、演算部1bは、プロセスP1,P2の親子関係、および、プロセスP1,P3の親子関係を特定する。前述のように各プロセスの親子関係はOSから取得される。演算部1bは、プロセスP1,P2の親子関係およびプロセスP1,P3の親子関係に基づき、ファイルF1,F2,F3それぞれのファイル情報を、ソフトウェアαに関連づけたソフトウェア構成情報2を生成する。すなわち、プロセスP1によりアクセスされたファイルF1のファイル情報だけでなく、プロセスP1の子プロセスであるプロセスP2によりアクセスされたファイルF2のファイル情報をソフトウェアαに関連づける。同様に、プロセスP1の子プロセスであるプロセスP3によりアクセスされたファイルF3のファイル情報をソフトウェアαに関連づける。
ソフトウェア情報管理装置1によれば、ソフトウェアαのインストールの際に、ソフトウェアαのインストーラが生成するプロセスP1,P2,P3が監視される。プロセスP1,P2,P3それぞれがアクセスしたファイルF1,F2,F3それぞれのファイル情報、および、プロセスP1,P2,P3間の関係に基づき、ファイルF1,F2,F3に対応する複数のファイル情報を、ソフトウェアαに関連づけた、ソフトウェア構成情報2が生成される。これにより、管理対象のコンピュータのファイルや設定を、ソフトウェアと対応づけて管理することができる。
ここで、管理対象のコンピュータ数が増大したクラウド環境等において、システムの安定稼働や保守作業の効率化の観点から、各コンピュータにインストールされているソフトウェアの同一性を確認できることが求められている。しかしながら、インベントリ収集等で把握できる差分は、管理者が管理可能な単位(例えば、製品単位)よりもはるかに細かい単位となる。
個別のファイルやレジストリ項目と、管理者が管理可能な単位とが対応づけられていなければ、インベントリ収集等によりコンピュータ間でファイルに相違が存在し、同一でないことが判明したとしても、どのような対処が必要であるか(逆引き)がわからない。
また、予め用意されたソフトウェア辞書では、全てのソフトウェア製品について、個別のファイルとの対応づけが十分に網羅されているとは限らない。例えば、ソフトウェアαが他のソフトウェアをコンポーネントとして含むスイート(Suite)製品である場合もある。この場合、単にソフトウェア毎にファイルの情報が対応づけられているのみでは、ソフトウェアαの処理に影響する他のソフトウェアのファイルを把握するのが容易でない。
そこで、ソフトウェア情報管理装置1では、ソフトウェアαのインストールの際に生成されたプロセス間の関係に基づいて、各プロセスがアクセスした各ファイルのファイル情報をソフトウェアαに対応づける。
ソフトウェアαのインストール時には、ソフトウェアαの動作に関連するファイルがソフトウェア情報管理装置1に一括して生成/変更される。このため、インストーラのプロセスP1およびインストーラのプロセスP1に関係するプロセスP2,P3によりアクセスされたファイルF1,F2,F3を、ソフトウェアαに対応づけることができる。
特に、ソフトウェアαが他のソフトウェアをコンポーネントとして含む場合、ソフトウェアαのインストール時に、ソフトウェアαのインストーラにより他のソフトウェアのインストールも行われる。この場合、ソフトウェアαのインストーラのプロセスP1が、他のソフトウェアのインストーラを起動する。すると、他のソフトウェアのインストーラを実行するためのプロセス(例えば、プロセスP2,P3)が生成される。
この場合、プロセスP2やプロセスP3は、プロセスP1の子プロセスとして管理される。したがって、プロセスP1の子プロセスであるプロセスP2,P3によりアクセスされたファイルF2,F3をソフトウェアαに対応づけることで、ソフトウェアαのコンポーネントとなる他のソフトウェアのファイルを、ソフトウェアαに対応づけることができる。
また、ソフトウェア情報管理装置1では、インストーラとは関係ないプロセスも多数存在している。ソフトウェア情報管理装置1は、ソフトウェアαに関係しないファイルを、プロセス間の関係に基づいて判断できる。例えば、ソフトウェア情報管理装置1は、プロセスP1と親子関係にないプロセスP4によりアクセスされたファイルF4のファイル情報を、ソフトウェアαに対応づけない。このため、余計なファイル情報がソフトウェアαに対応づけられてしまうことを防げる。このように、ソフトウェア情報管理装置1は、ソフトウェアαとファイルF1,F2,F3とを適切に対応づけることができる。
更に、ソフトウェア情報管理装置1は、既存のソフトウェア辞書にソフトウェアαの情報が予め登録されていなくても、ソフトウェアαに関連するファイル情報を取得できる。このため、ソフトウェア辞書の拡張を容易に行える。また、他の装置もソフトウェア構成情報を同様にして生成できる。
ソフトウェア情報管理装置1は、生成したソフトウェア辞書を用いて、他のコンピュータにインストールされたソフトウェアが、ソフトウェア辞書に登録されたソフトウェアと同一であるかを確認できる。特に、スイート製品のようなソフトウェアのグループ単位での同一性を確認できるようになる。例えば、複数のソフトウェアが、他のコンピュータにおいて、スイート製品としてまとめてインストールされたものか、それとも個別にインストールされたものかといった確認も可能となる。
なお、上記の例では、ソフトウェア情報管理装置1にソフトウェアαをインストールする場合を示したが、他の場合も考えられる。例えば、ソフトウェア情報管理装置1で動作する仮想マシンにソフトウェアαをインストールするときも、演算部1bは第1の実施の形態の処理を行える。その場合、ソフトウェア情報管理装置1で動作する複数の仮想マシン間で、インストールされたソフトウェアの同一性のチェックを行うことも考えられる。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムを示す図である。第2の実施の形態の情報処理システムは、サーバ100,100a,100b、管理サーバ200および端末装置21,22を含む。サーバ100,100a,100bおよび管理サーバ200は、ネットワーク10に接続されている。ネットワーク10は、例えば、LAN(Local Area Network)である。ネットワーク10は、ネットワーク20に接続されている。ネットワーク20は、例えば、WAN(Wide Area Network)やインターネット等の広域ネットワークである。
サーバ100,100a,100bは、端末装置21,22に対して所定のサービスを提供するサーバコンピュータである。例えば、サーバ100,100a,100bには種々のソフトウェアがインストールされる。サーバ100,100a,100bは、第1の実施の形態のソフトウェア情報管理装置1の一例と考えることができる。
管理サーバ200は、サーバ100,100a,100bにインストールされたソフトウェアのソフトウェア情報を一元管理するサーバコンピュータである。管理サーバ200は、サーバ100,100a,100bにインストールされたソフトウェアの同一性の管理も行う。
端末装置21,22は、ネットワーク10,20を介してサーバ100,100a,100bにアクセスするクライアントコンピュータである。端末装置21,22それぞれのユーザは、ネットワーク10,20を介して、サーバ100,100a,100bにインストールされたソフトウェアを利用できる。
図3は、サーバのハードウェア例を示す図である。サーバ100は、プロセッサ101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、読み取り装置106および通信インタフェース107を有する。各ユニットはサーバ100のバスに接続されている。サーバ100a,100bおよび管理サーバ200もサーバ100と同様のハードウェアにより実現できる。
プロセッサ101は、サーバ100の情報処理を制御する。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、DSP、ASICまたはFPGA等である。プロセッサ101は、CPU、DSP、ASIC、FPGA等のうちの2以上の要素の組み合わせであってもよい。
RAM102は、サーバ100の主記憶装置である。RAM102は、プロセッサ101に実行させるOSのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、プロセッサ101による処理に用いる各種データを記憶する。
HDD103は、サーバ100の補助記憶装置である。HDD103は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。サーバ100は、フラッシュメモリやSSD(Solid State Drive)等の他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
画像信号処理部104は、プロセッサ101からの命令に従って、サーバ100に接続されたディスプレイ11に画像を出力する。ディスプレイ11としては、CRT(Cathode Ray Tube)ディスプレイや液晶ディスプレイ等を用いることができる。
入力信号処理部105は、サーバ100に接続された入力デバイス12から入力信号を取得し、プロセッサ101に出力する。入力デバイス12としては、例えば、マウスやタッチパネル等のポインティングデバイス、キーボード等を用いることができる。
読み取り装置106は、記録媒体13に記録されたプログラムやデータを読み取る装置である。記録媒体13として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDD等の磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)等の光ディスク、光磁気ディスク(MO:Magneto-Optical disk)を使用できる。また、記録媒体13として、例えば、フラッシュメモリカード等の不揮発性の半導体メモリを使用することもできる。読み取り装置106は、例えば、プロセッサ101からの命令に従って、記録媒体13から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
通信インタフェース107は、ネットワーク10を介して他の装置と通信を行う。通信インタフェース107は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
図4は、サーバおよび管理サーバの機能例を示す図である。サーバ100は、記憶部110、プロセス群120、ソフトウェア構成情報記憶部130、監視部140および生成部150を有する。記憶部110およびソフトウェア構成情報記憶部130は、RAM102やHDD103に確保された記憶領域を用いて実現できる。監視部140および生成部150は、プロセッサ101によって実行されるプログラムのモジュールであってもよい。なお、サーバ100a,100bもサーバ100と同様の機能を有している。
記憶部110は、各種ファイル(ソフトウェアのプログラムやレジストリなどのOSの設定項目を含む)を記憶する。
プロセス群120は、種々のプログラムを実行するためにOSが生成する複数のプロセスである。例えば、あるプログラムを実行するために、OSはプロセスを生成する。プログラムはプロセスを用いて実行される。
例えば、OSがプロセスを生成するタイミングとして、OS起動に伴い所定のプログラムを実行するタイミング、あるプログラムの実行をユーザによって指示されたタイミング、あるプロセスが他のプログラムを呼び出したタイミング等が考えられる。各プロセスは、プログラムを実行する際に、プログラムのファイル(例えば、実行可能コード)にアクセスする。また、各プロセスは、プログラムの実行に応じて、プログラムの処理に用いられる各種の設定を登録したファイルにアクセスすることもある。
ソフトウェア構成情報記憶部130は、ソフトウェア構成情報を記憶する。ソフトウェア構成情報は、ソフトウェアの識別情報とソフトウェアに関係する情報(ソフトウェアのプログラムやソフトウェアの処理に利用されるデータ等)とを関連づけた情報である。このような情報をインベントリ情報と呼ぶこともある。
監視部140は、プロセスの生成状況、プロセス間の関係、プロセスによる記憶部110へのアクセス状況を監視し、監視結果を生成部150に提供する。監視部140は、プロセス監視部141、ファイルアクセス監視部142およびレジストリアクセス監視部143を有する。
プロセス監視部141は、プロセスの生成状況およびプロセス間の関係を監視する。プロセス監視部141は、プロセスが生成された時刻やプロセス間の関係の情報をOSから取得し、生成部150に提供する。
ファイルアクセス監視部142は、プロセスによるファイルへのアクセスを監視する。ファイルアクセス監視部142は、プロセスによるファイルへのアクセスを検出し、アクセスしたプロセスやアクセス対象のファイル等の情報を生成部150に提供する。
レジストリアクセス監視部143は、プロセスによるレジストリへのアクセスを監視する。レジストリアクセス監視部143は、プロセスによるレジストリへのアクセスを検出し、アクセスしたプロセスやアクセス対象のレジストリ等の情報を生成部150に提供する。
生成部150は、監視部140による監視結果に基づいて、ソフトウェア構成情報を生成し、ソフトウェア構成情報記憶部130に格納する。監視部140による監視結果には、前述のプロセス監視部141、ファイルアクセス監視部142およびレジストリアクセス監視部143により提供される情報が含まれる。
具体的には、生成部150は、あるソフトウェアがインストールされるときに、該当のソフトウェアのインストーラのプロセスおよび当該プロセスに関連するプロセスの情報を取得する。更に、生成部150は、取得した各プロセスによってアクセスされたファイルの情報を取得する。生成部150は、取得した情報に基づいて、インストールされたソフトウェアと、インストールされたソフトウェアに関連するファイルやレジストリの情報とを対応づけることで、ソフトウェア構成情報を生成する。生成部150は、生成したソフトウェア構成情報を管理サーバ200に送信する。
ここで、上記の説明ではサーバ100の機能を説明したが、サーバ100a,100bもサーバ100と同様の機能を有している。
管理サーバ200は、記憶部210および管理部220を有する。記憶部210は、管理サーバ200が備えるRAMやHDDに確保された記憶領域を用いて実現できる。管理部220は、管理サーバ200が備えるプロセッサによって実行されるプログラムのモジュールであってもよい。
記憶部210は、サーバ100,100a,100bから受信したソフトウェア構成情報を記憶する。記憶部210は、複数のソフトウェアに関するソフトウェア構成情報を記憶する。
管理部220は、記憶部210に記憶された情報に基づいて、サーバ100,100a,100bに記憶されたソフトウェアの同一性をチェックする。管理部220は、サーバ100,100a,100bにインストールされたソフトウェアの管理も行う。
図5は、プロセスの監視例を示す図である。プロセス群120は、プロセスPx,Pa,Pb,Pcを含む。プロセスPxは、ソフトウェアXのインストーラのプログラムを実行するためのプロセスである。ここで、ソフトウェアXは、ソフトウェアA,B,Cを含むスイート製品である。
プロセスPaは、ソフトウェアAのインストーラのプログラムを実行するためのプロセスである。プロセスPbは、ソフトウェアBのインストーラのプログラムを実行するためのプロセスである。プロセスPcは、ソフトウェアCのインストーラのプログラムを実行するためのプロセスである。
プロセスPxは、プロセスPa,Pb,Pcの親プロセスである。プロセスPa,Pb,Pcは、プロセスPxの子プロセスである。
プロセス監視部141は、プロセスPx,Pa,Pb,Pcの生成・消滅等を監視する。プロセス監視部141は、プロセスPx,Pa,Pb,Pcの親子関係をOSに問い合わせることもある。
ファイルアクセス監視部142は、プロセスPx,Pa,Pb,Pcによるファイルへのアクセス(ファイルアクセス)を監視する。プロセスPx,Pa,Pb,Pcがアクセスするファイルには、インストーラプログラムのファイルやインストールされるファイル(インストールファイル)等が含まれる。
レジストリアクセス監視部143は、プロセスPx,Pa,Pb,Pcによるレジストリへのアクセス(レジストリアクセス)を監視する。
図6は、インストールプロセス管理テーブルの例を示す図である。インストールプロセス管理テーブル131は、ソフトウェア構成情報記憶部130に記憶される。インストールプロセス管理テーブル131は、親プロセスID(IDentifier)、子プロセスID、ファイル情報格納先およびレジストリ情報格納先の項目を有する。
親プロセスIDには、親プロセスの識別情報が登録される。子プロセスIDの項目には、親プロセスに関連する子プロセスの識別情報が登録される。ファイル情報格納先の項目には、親プロセスおよび子プロセスによってアクセスされたファイルのファイル情報が登録される。ファイル情報には、プロセスの識別情報に対応づけて、各プロセスがアクセスしたファイルの情報(ファイル名、パスおよび更新日時等)が記録される。レジストリ情報格納先の項目には、親プロセスおよび子プロセスによってアクセスされたレジストリのレジストリ情報(レジストリ設定を識別する名称(レジストリ名)、パスおよび更新日時等)が登録される。レジストリ情報には、プロセスの識別情報に対応づけて、各プロセスがアクセスしたレジストリの情報が記録される。
例えば、インストールプロセス管理テーブル131には、親プロセスIDが“1234”、子プロセスIDが“1235”、“1236”、“1300”、ファイル情報格納先が“file0000.txt”、レジストリ情報格納先が“reg0000.txt”という情報が登録される。
これは、プロセスID“1234”のプロセスに対して、プロセスID“1235”、“1236”、“1300”が子プロセスとして生成されたことを示す。また、これらのプロセスによってアクセスされたファイルのファイル情報が“file0000.txt”であることを示す。ファイル情報“file0000.txt”には、プロセスID“1235”、“1236”、“1300”の各プロセスによってアクセスされたファイルのファイル名、パスおよび作成日時等が、プロセスIDに対応づけて記録されている。
更に、これらのプロセスによってアクセスされたレジストリのレジストリ情報が“reg0000.txt”であることを示す。レジストリ情報“reg0000.txt”には、プロセスID“1235”、“1236”、“1300”の各プロセスによってアクセスされたレジストリのレジストリ名、パスおよび作成日時等が、プロセスIDに対応づけて記録されている。なお、子プロセスIDの項目における設定“−”(ハイフン)は、設定なしを示している。
図7は、コンポーネント構成管理テーブルの例を示す図である。コンポーネント構成管理テーブル132は、ソフトウェア構成情報記憶部130に記憶される。コンポーネント構成管理テーブル132は、プロセスID、最初に更新されたファイルまたはレジストリ名、最後に更新されたファイルまたはレジストリ名、更新時刻(最初)、更新時刻(最後)の項目を含む。
プロセスIDの項目には、プロセスの識別情報が登録される。最初に更新されたファイルまたはレジストリ名の項目には、当該プロセスによって最初に更新されたファイルまたはレジストリの名称(識別情報)が登録される。最後に更新されたファイルまたはレジストリ名の項目には、当該プロセスによって最後に更新されたファイルまたはレジストリの名称が登録される。なお、「更新」は、新たなファイル/レジストリ設定の生成、または、既存のファイル/レジストリ設定の変更の何れかである。更新時刻(最初)の項目には、最初に更新されたファイルまたはレジストリの更新時刻が登録される。更新時刻(最後)の項目には、最後に更新されたファイルまたはレジストリの更新時刻が登録される。
例えば、コンポーネント構成管理テーブル132には、プロセスIDが“1234”、最初に更新されたファイルまたはレジストリ名が“aaa”、最後に更新されたファイルまたはレジストリ名が“bbb”、更新時刻(最初)が“12:21:19:00”、更新時刻(最後)が“12:30:00:00”という情報が登録される。
これは、プロセスID“1234”のプロセスが、“aaa”の名称で示されるファイルまたはレジストリを最初に更新しており、当該最初の更新の時刻が12時21分19秒であることを示す。また、プロセスID“1234”のプロセスが、“bbb”の名称で示されるファイルまたはレジストリを最後に更新しており、当該最後の更新の時刻が12時30分00秒であることを示す。
図8は、チェック開始時刻管理テーブルの例を示す図である。チェック開始時刻管理テーブル133は、ソフトウェア構成情報記憶部130に記憶される。チェック開始時刻管理テーブル133は、起動順番、起動開始時刻およびプロセスIDの項目を含む。
起動順番の項目には、プロセス毎の起動された(生成された)順番(起動順番)が登録される。起動順番は1以上の整数であり、値が小さい程、早い時刻に起動されたことを示す。起動時刻の項目には、該当のプロセスの起動時刻が登録される。プロセスIDの項目には、プロセスの識別情報が登録される。
例えば、チェック開始時刻管理テーブル133には、起動順番が“1”、起動時刻が“12:21:19:00”、プロセスIDが“1234”という情報が登録される。これは、プロセスID“1234”のプロセスが、起動順番“1”のプロセスであり、起動時刻が12時21分19秒であることを示す。
プロセス監視部141は、チェック開始時刻管理テーブル133に登録された起動時刻のうち、最も古い起動時刻をチェック開始時刻とする。
図9は、ソフトウェア辞書テーブルの例を示す図である。ソフトウェア辞書テーブル134は、ソフトウェア構成情報記憶部130に記憶される。ソフトウェア辞書テーブル134は、ソフトウェア名、対応するスイート製品、ファイル情報格納先およびレジストリ情報格納先の項目を含む。
ソフトウェア名の項目には、ソフトウェアの名称が登録される。対応するスイート製品の項目には、該当のソフトウェアが属するスイート製品(ソフトウェア)の名称が登録される。ファイル情報格納先の項目には、該当のソフトウェアに関連するファイルに関する情報(ファイル情報)が登録される。レジストリ情報格納先の項目には、該当のソフトウェアに関連するレジストリに関する情報(レジストリ情報)が登録される。
例えば、ソフトウェア辞書テーブル134には、ソフトウェア名が“X”、対応するスイート製品が設定なし“−”(ハイフン)、ファイル情報格納先が“file0000X.txt”、レジストリ情報格納先が“reg0000X.txt”という情報が登録される。これは、ソフトウェアXに関連するファイル情報として“file0000X.txt”が取得されていること、ソフトウェアXに関連するレジストリ情報として“reg0000X.txt”が取得されていることを示す。ソフトウェアXは、ソフトウェアX自身がスイート製品の名称なので、対応するスイート製品の項目は設定なしとなる。
また、ソフトウェア辞書テーブル134には、ソフトウェア名が“A”、対応するスイート製品が“X”、ファイル情報格納先が“file0000A.txt”、レジストリ情報格納先が“reg0000A.txt”という情報が登録される。これは、ソフトウェアAに関連するファイル情報として“file0000A.txt”が取得されていること、ソフトウェアAに関連するレジストリ情報として“reg0000A.txt”が取得されていることを示す。また、ソフトウェアAが属するスイート製品がソフトウェアXであること、すなわち、ソフトウェアAはソフトウェアXのコンポーネントのソフトウェアであることを示す。
ソフトウェア辞書テーブル134の例では、ソフトウェアA,B,Cそれぞれのレコードに対し、対応するスイート製品としてソフトウェアXが登録されている。このため、ソフトウェア辞書テーブル134により、ソフトウェアA,B,Cは、ソフトウェアXのコンポーネントのソフトウェアであることが分かる。
図10は、コンポーネント構成管理辞書テーブルの例を示す図である。コンポーネント構成管理辞書テーブル135は、ソフトウェア構成情報記憶部130に記憶される。コンポーネント構成管理辞書テーブル135は、ソフトウェア名、対応するスイート製品、最初に更新されたファイルまたはレジストリ名、最後に更新されたファイルまたはレジストリ名およびコンポーネントのインストール順序の項目を含む。
ソフトウェア名の項目には、ソフトウェアの名称が登録される。対応するスイート製品の項目には、該当のソフトウェアが属するスイート製品の名称が登録される。最初に更新されたファイルまたはレジストリ名、および、最後に更新されたファイルまたはレジストリ名の項目の設定内容は、コンポーネント構成管理テーブル132の同名の項目と同じである。コンポーネントのインストール順序の項目には、対応するスイート製品のインストールの際に、コンポーネントのソフトウェアがどの順番でインストールされたかを示す値が登録される。スイート製品本体を示すエントリに対しては、コンポーネントのインストール順序の設定値は設定なし“−”となる。
例えば、コンポーネント構成管理辞書テーブル135には、ソフトウェア名が“X”、対応するスイート製品が設定なし“−”、最初に更新されたファイルまたはレジストリ名が“aaa”、最後に更新されたファイルまたはレジストリ名が“bbb”、コンポーネントのインストール順序が設定なし“−”という情報が登録される。これは、ソフトウェアXが、“aaa”の名称で示されるファイルまたはレジストリを最初に更新することを示す。また、ソフトウェアXが、“bbb”の名称で示されるファイルまたはレジストリを最後に更新することを示す。ソフトウェアXは、ソフトウェアX自身がスイート製品の名称なので、対応するスイート製品およびコンポーネントのインストール順序の項目は設定なしとなる。
また、コンポーネント構成管理辞書テーブル135には、ソフトウェア名が“A”、対応するスイート製品が“X”、最初に更新されたファイルまたはレジストリ名が“ccc”、最後に更新されたファイルまたはレジストリ名が“ddd”、コンポーネントのインストール順序が“1”という情報が登録される。これは、ソフトウェアAが、スイート製品であるソフトウェアXのコンポーネントであること、ソフトウェアXのインストール時に、コンポーネントとして1番目にインストールされることを示す。また、ソフトウェアAが、“ccc”の名称で示されるファイルまたはレジストリを最初に更新することを示す。更に、ソフトウェアAが、“ddd”の名称で示されるファイルまたはレジストリを最後に更新することを示す。
図11は、時間間隔テーブルの例を示す図である。時間間隔テーブル136は、スイート製品のソフトウェアに対して、コンポーネントのソフトウェアがインストールされる時間間隔の情報を保持する。ここでいう時間間隔とは、あるコンポーネントのソフトウェアのインストールが完了してから、次のコンポーネントのソフトウェアのインストールが開始されるまでの時間間隔を示す。時間間隔テーブル136は、ソフトウェアの同一性をチェックするための情報として利用される。時間間隔テーブル136は、ソフトウェア構成情報記憶部130に記憶される。時間間隔テーブル136は、ソフトウェア名の項目、平均時間間隔および標準偏差の項目を含む。
ソフトウェア名の項目には、スイート製品のソフトウェア名が登録される。平均時間間隔の項目には、コンポーネントのソフトウェアがインストールされる時間間隔の平均値が登録される。
例えば、時間間隔テーブル136には、ソフトウェア名が“X”、平均時間間隔が“9sec”、標準偏差が“1sec”という情報が登録される。これは、ソフトウェアXのコンポーネントであるソフトウェアA,B,Cをインストールする際の、ソフトウェアA,B,Cのインストールの時間間隔の平均が9秒であり、計測された時間間隔の標準偏差が1秒であることを示す。ここで、時間間隔の情報は、ソフトウェアA,B,Cそれぞれのインストーラによる、ファイルやレジストリの更新時刻に基づいて取得できる。
図12は、ファイル/レジストリの更新時刻の時系列の例を示す図である。ソフトウェアXのコンポーネントであるソフトウェアA,B,Cは、直列にインストールされる。複数のソフトウェアを並列にインストールすると、共通のファイルや共通のレジストリに対する複数のインストーラによる操作が競合する可能性があり、インストールの失敗や不具合の要因となり得るからである。ソフトウェアXの例では、ソフトウェアA,B,Cの順番でインストールが行われる。インストール順序は、例えばソフトウェアXのインストーラによって制御される。
時刻Ta1は、ソフトウェアAのインストーラによるファイルまたはレジストリの最初の更新時刻である。時刻Ta2は、ソフトウェアAのインストーラによるファイルまたはレジストリの最後の更新時刻である。この場合、ソフトウェアAのインストーラは、ソフトウェアAのインストールを、時刻Ta1から時刻Ta2の期間に行っていたことになる。
時刻Tb1は、ソフトウェアBのインストーラによるファイルまたはレジストリの最初の更新時刻である。時刻Tb2は、ソフトウェアBのインストーラによるファイルまたはレジストリの最後の更新時刻である。この場合、ソフトウェアBのインストーラは、ソフトウェアBのインストールを、時刻Tb1から時刻Tb2の期間に行っていたことになる。
時刻Tc1は、ソフトウェアCのインストーラによるファイルまたはレジストリの最初の更新時刻である。時刻Tc2は、ソフトウェアCのインストーラによるファイルまたはレジストリの最後の更新時刻である。この場合、ソフトウェアCのインストーラは、ソフトウェアCのインストールを、時刻Tc1から時刻Tc2の期間に行っていたことになる。
時刻Ta2,Tb1の時間間隔ΔT1は、ソフトウェアA,Bそれぞれのインストール期間の間の時間間隔に相当する。時刻Tb2,Tc1の時間間隔ΔT2は、ソフトウェアB,Cそれぞれのインストール期間の間の時間間隔に相当する。時間間隔ΔT1,ΔT2の平均が平均時間間隔である。平均時間間隔に対して、時間間隔ΔT1,ΔT2の分散や標準偏差を求めることができる。コンポーネントのソフトウェアが4つ以上である場合も平均時間間隔や標準偏差等を求めることができる。
また、ソフトウェアA,B,Cの各インストーラによるファイルまたはレジストリの最初/最後の更新時刻の時系列により、ソフトウェアA,B,Cのインストール順序を判断できる。例えば、時刻Ta1は、時刻Tb1,Tc1よりも前である。このため、ソフトウェアAは、ソフトウェアB,Cよりも前にインストールされたことになる。同様に、時刻Tb1は、時刻Tc1よりも前である。このため、ソフトウェアBは、ソフトウェアCよりも前にインストールされたことになる。この場合、ソフトウェアXのコンポーネントとしてのソフトウェアA,B,Cのインストール順序は、ソフトウェアAが最初(1番目)、ソフトウェアBが次(2番目)、ソフトウェアCが最後(3番目)ということになる。
図13は、インストール時の処理例を示すフローチャートである。以下、図13に示す処理をステップ番号に沿って説明する。以下では、ソフトウェアXのインストールがサーバ100により行われる場合を想定する。
(S1)監視部140は、イベントの発生の有無を検出する。イベントの種類は、何れかのプロセスによるファイルアクセス、レジストリアクセスおよび一定時間経過したことの何れかである。監視部140は、ファイルアクセスの発生を検出すると、処理をステップS2に進める。監視部140は、レジストリアクセスの発生を検出すると、処理をステップS3に進める。監視部140は、一定時間経過したことを検出すると、処理をステップS4に進める。ここで、「一定時間経過」とは、ソフトウェアXのインストールが開始された時刻から一定時間が経過したこと、または、前回ステップS4を実行完了してから一定時間が経過したこと、の何れかである。「一定時間」の時間間隔としては、例えば、30秒または1分等が考えられる。
(S2)監視部140は、ファイルアクセス時の処理を実行する。具体的には、アクセスされたファイルの種類やアクセス時刻、ファイルアクセスを行ったプロセスの特定、プロセスの親子関係の記録等を行う。詳細については、後述する。
(S3)監視部140は、レジストリアクセス時の処理を実行する。具体的には、アクセス時刻やレジストリアクセスを行ったプロセスの特定、プロセスの親子関係の記録等を行う。詳細については後述する。
(S4)監視部140は、チェック開始時刻の確認を行う。チェック開始時刻の確認は、ソフトウェアXのインストーラとは明らかに関係のないプロセスを除外するために行われる。詳細については後述する。
このように、監視部140はソフトウェアXのインストール開始に応じて、各プロセスによるファイルアクセスやレジストリアクセスを監視し、何れかのイベントを検出するたびに上記の手順を実行する。例えば、ユーザは、ソフトウェアXのインストールを開始する際に、上記の監視を開始するようサーバ100に指示することもできる。監視部140はソフトウェアXのインストールが完了するまで(すなわち、ソフトウェアXのインストーラのプロセスPxがOSにより消去されるまで)、上記の監視を行う。
図14は、ファイルアクセス時の処理例を示すフローチャートである。以下、図14に示す処理をステップ番号に沿って説明する。以下の手順は、図13のステップS2に相当する。
(S11)ファイルアクセス監視部142は、ファイルにアクセスしたプロセスのプロセスIDをプロセス監視部141に通知する。プロセス監視部141は、通知されたプロセスIDに対応するプロセスの起動時刻をOSから取得する。
(S12)プロセス監視部141は、チェック開始時刻管理テーブル133を参照して、ステップS11で取得した起動時刻が、チェック開始時刻管理テーブル133に登録された最も過去の起動時刻(チェック開始時刻)以降の時刻であるか否かを判定する。チェック開始時刻以降の時刻である場合、処理をステップS13に進める。チェック開始時刻よりも前の時刻である場合、処理を終了する。
(S13)プロセス監視部141は、着目するプロセスのプロセスID(子プロセスID)と当該プロセスの親プロセスのプロセスID(親プロセスID)とを取得する。着目するプロセスのプロセスIDは、ステップS11においてファイルアクセス監視部142から通知されるプロセスIDである。プロセス監視部141は、当該プロセスIDに対応する親プロセスIDをOSから取得する。
(S14)ファイルアクセス監視部142は、着目するプロセスによるアクセス先のファイルがインストールプログラムであるか否かを判定する。インストールプログラムである場合、処理をステップS15に進める。インストールプログラムでない場合、処理をステップS19に進める。例えば、ファイルアクセス監視部142は、アクセス先のファイルのファイル名やアクセスに用いられたコマンドによって本判定を行える。具体的には、ファイル名にsetup.exe等の文字列を含むファイル、msi形式やrpm形式のファイル(拡張子がmsiやrpmのファイル)およびpkgaddコマンドによりアクセスされるファイル等をインストールプログラムであると判定する。あるいは、tar、zipおよびgzip等のアーカイブ形式のファイルをインストールプログラムであると判定することも考えられる。
(S15)プロセス監視部141は、着目するプロセスのプロセスID(ステップS13の子プロセスID)と起動時刻(ステップS11で取得した起動時刻)とを、チェック開始時刻管理テーブル133に登録する。
(S16)生成部150は、プロセス監視部141およびファイルアクセス監視部142からステップS11〜S14で取得された情報を収集する。生成部150は、ステップS13で取得された親プロセスIDが、インストールプロセス管理テーブル131の親プロセスIDの項目に登録されているか否かを判定する。登録されている場合、処理をステップS17に進める。登録されていない場合、処理をステップS18に進める。
(S17)生成部150は、ステップS13で取得された親プロセスIDに対応づけて、着目するプロセスのプロセスIDをインストールプロセス管理テーブル131に登録する。この場合、親プロセスIDは、インストールプロセス管理テーブル131に既に登録済であるから、当該親プロセスIDの子プロセスIDとして着目するプロセスのプロセスIDを登録すればよい。そして、処理を終了する。
(S18)生成部150は、着目するプロセスのプロセスIDをインストールプロセス管理テーブル131の親プロセスIDの項目に登録する。例えば、ソフトウェアXのインストーラのプロセスPxのように親プロセスとなり得るプロセスが本ステップで登録されることになる。そして、処理を終了する。
(S19)生成部150は、プロセス監視部141およびファイルアクセス監視部142からステップS11〜S14で取得された情報を収集する。このとき、生成部150は、着目するプロセスによるファイルアクセスがファイルの更新(変更または生成の何れか)であるか否かという情報もファイルアクセス監視部142から取得する。生成部150は、ステップS13で取得されたプロセスIDがインストールプロセス管理テーブル131の親プロセスIDまたは子プロセスIDの項目に登録されているか否かを判定する。登録されている場合、処理をステップS20に進める。登録されていない場合、処理を終了する。
(S20)生成部150は、着目するプロセスのプロセスIDに対応づけて、アクセスされたファイルのファイル情報を登録する。インストールプロセス管理テーブル131の例において、着目するプロセスのプロセスIDが“1235”であれば、生成部150は、“file0000.txt”にファイル情報を登録することになる。
(S21)生成部150は、着目するプロセスによるファイルアクセスがファイルの更新である場合、当該プロセスのプロセスIDに対応づけて、更新されたファイルのファイル名およびファイル更新時刻を、コンポーネント構成管理テーブル132に登録する。このとき、生成部150は、コンポーネント構成管理テーブル132に該当のプロセスのレコードが存在していないときは、最初のファイル更新として登録する。一方、該当のプロセスに対して、最初または最後の更新情報が登録済であれば、最後のファイル更新として登録する(最後のファイルやレジストリ更新に関する情報がある場合は上書きする)。なお、生成部150は、着目するプロセスによるファイルアクセスがファイルの更新でなければ(例えば、ファイルの読み出し等)、ステップS21をスキップしてよい。そして、処理を終了する。
このようにして、サーバ100は、インストーラのプロセス(インストールプロセス)の生成状況を管理する。また、サーバ100は、インストーラのプロセスによるファイルアクセスを管理する。
なお、ステップS11やステップS13において、プロセス監視部141は、プロセスの起動時刻やプロセスの親子関係の情報をOSから取得するものとした。例えば、OSがWindows(登録商標)であれば、wmi(Windows Management Instrumentation)やwmic(Windows Management Instrumentation Command line)等を用いて、各プロセスの起動時間や、あるプロセスに対する親プロセス等の情報をOSから取得することが考えられる。また、例えばOSがUNIX(登録商標)やLinux(登録商標)であれば、psコマンド等を用いて、各プロセスの起動時刻や親プロセス等の情報をOSから取得することが考えられる。
図15は、レジストリアクセス時の処理例を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。以下の手順は、図13のステップS3に相当する。
(S31)レジストリアクセス監視部143は、レジストリにアクセスしたプロセスのプロセスIDをプロセス監視部141に通知する。プロセス監視部141は、通知されたプロセスIDに対応するプロセスの起動時刻をOSから取得する。
(S32)プロセス監視部141は、チェック開始時刻管理テーブル133を参照して、ステップS31で取得した起動時刻が、チェック開始時刻管理テーブル133に登録された最も過去の起動時刻(チェック開始時刻)以降の時刻であるか否かを判定する。チェック開始時刻以降の時刻である場合、処理をステップS33に進める。チェック開始時刻よりも前の時刻である場合、処理を終了する。
(S33)プロセス監視部141は、着目するプロセスのプロセスID(子プロセスID)と当該プロセスの親プロセスのプロセスID(親プロセスID)とを取得する。着目するプロセスのプロセスIDは、ステップS31においてレジストリアクセス監視部143から通知されるプロセスIDである。プロセス監視部141は、当該プロセスIDに対応する親プロセスIDをOSから取得する。
(S34)生成部150は、プロセス監視部141およびレジストリアクセス監視部143からステップS31〜S33で取得された情報を収集する。このとき、生成部150は、着目するプロセスによるレジストリアクセスがレジストリの設定内容の更新(変更または生成の何れか)であるか否かという情報もファイルアクセス監視部142から取得する。生成部150は、ステップS33で取得されたプロセスIDがインストールプロセス管理テーブル131の親プロセスIDまたは子プロセスIDの項目に登録されているか否かを判定する。登録されている場合、処理をステップS35に進める。登録されていない場合、処理をステップS37に進める。
(S35)生成部150は、着目するプロセスのプロセスIDに対応づけて、アクセスされたレジストリ情報を登録する。インストールプロセス管理テーブル131の例において、着目するプロセスのプロセスIDが“1235”であれば、生成部150は、“reg0000.txt”にレジストリ情報を登録することになる。
(S36)生成部150は、着目するプロセスによるレジストリアクセスがレジストリにおける設定内容の更新である場合、当該プロセスのプロセスIDに対応づけて、更新されたレジストリのレジストリ名および更新時刻を、コンポーネント構成管理テーブル132に登録する。生成部150は、コンポーネント構成管理テーブル132に該当のプロセスのレコードが存在していないときは、最初のレジストリ更新として登録する。一方、該当のプロセスに対して最初または最後の更新情報が登録済であれば、最後のレジストリ更新として登録する(最後のファイルまたはレジストリ更新の情報がある場合は上書きする)。そして、処理を終了する。なお、生成部150は、着目するプロセスによるレジストリアクセスがレジストリ更新でなければ、ステップS36をスキップし、処理を終了してよい。
(S37)生成部150は、ステップS33で取得された親プロセスIDがインストールプロセス管理テーブル131の親プロセスIDの項目に登録されているか否かを判定する。登録されている場合、処理をステップS38に進める。登録されていない場合、処理を終了する。
(S38)生成部150は、ステップS33で取得された親プロセスIDに対応づけて、着目するプロセスのプロセスIDをインストールプロセス管理テーブル131に登録する。この場合、親プロセスIDは、インストールプロセス管理テーブル131に既に登録済であるから、当該親プロセスIDの子プロセスIDとして着目するプロセスのプロセスIDを登録すればよい。
(S39)プロセス監視部141は、チェック開始時刻管理テーブル133に、着目するプロセスのプロセスID(ステップS33の子プロセスID)と起動時刻(ステップS31で取得した起動時刻)とを登録する。
このようにして、サーバ100は、インストーラのプロセスによるレジストリアクセスを管理する。
図16は、チェック開始時刻の確認例を示すフローチャートである。以下、図16に示す処理をステップ番号に沿って説明する。以下の手順は、図13のステップS4に相当する。
(S41)プロセス監視部141は、チェック開始時刻管理テーブル133の先頭プロセスが既に終了しているか否かを判定する。ここで、チェック開始時刻管理テーブル133の先頭プロセスとは、起動順序の番号が最小のレコードのプロセスIDに対応するプロセスである。当該プロセスが既に終了している場合、処理をステップS42に進める。当該プロセスが未だ終了していない場合、処理を終了する。
(S42)プロセス監視部141は、チェック開始時刻管理テーブル133の先頭プロセスのエントリを削除する。
このようにして、サーバ100は、チェック開始時刻管理テーブル133で管理されるチェック開始時刻を更新する。ここで、図14のステップS12や図15のステップS32の判定により、ソフトウェアXのインストール開始前に起動されたプロセスによるファイルアクセスを処理の対象から除外できる。これにより、サーバ100による処理量を低減でき、サーバ100の負荷を軽減できる。
その後、ソフトウェアXのインストールが完了すると、生成部150は、インストールプロセス管理テーブル131およびコンポーネント構成管理テーブル132に基づいて、ソフトウェア辞書テーブル134およびコンポーネント構成管理辞書テーブル135を生成し、ソフトウェア構成情報記憶部130に格納する。
具体的には、生成部150は、インストールプロセス管理テーブル131に登録された親プロセスIDと子プロセスIDとの関係から、スイート製品のソフトウェアと、コンポーネントのソフトウェアとを特定する。例えば、生成部150は、各プロセスに対応するファイル情報から、各プロセスによって更新されたファイルを特定する。そして、生成部150は、各プロセスによって更新されたファイルのヘッダ等を参照して、各プロセスに対応するソフトウェア名(製品名)やソフトウェアの製造元等の情報を特定する。また、生成部150は、図12で例示したように、コンポーネントの各ソフトウェアによるファイルやレジストリの更新時刻から、コンポーネントの各ソフトウェアのインストール順序を把握できる。
更に、生成部150は、コンポーネント構成管理テーブル132に基づいて、時間間隔テーブル136を生成し、ソフトウェア構成情報記憶部130に格納する。具体的には、生成部150は、ソフトウェアXのコンポーネントの各ソフトウェアによる、ファイルまたはレジストリの最初の更新時刻と最後の更新時刻とをコンポーネント構成管理テーブル132から取得できる。このため、生成部150は、図12で例示したように各ソフトウェアのインストールの時間間隔ΔT1,ΔT2を計算でき、各時間間隔を用いて、平均時間間隔および標準偏差を求めることができる。
生成部150は、生成したソフトウェア辞書テーブル134、コンポーネント構成管理辞書テーブル135および時間間隔テーブル136を管理サーバ200に送信する。
管理部220は、ソフトウェア辞書テーブル134、コンポーネント構成管理辞書テーブル135および時間間隔テーブル136を受信し、記憶部210に格納する。これにより、記憶部210にソフトウェアXの情報が追加される。なお、管理部220は、ソフトウェアXの情報をサーバ100の識別情報に対応づけて記憶することで、サーバ100にソフトウェアXがインストールされていることを管理する。
ここで、以下の説明では、ソフトウェア辞書テーブル134と同様の情報を複数のスイート製品に関して登録した情報を、ソフトウェア辞書と称する。また、コンポーネント構成管理辞書テーブル135と同様の情報を複数のスイート製品に関して登録した情報を、コンポーネント構成管理辞書と称する。
そして、管理部220は、記憶部210に記憶されたソフトウェア辞書に基づいて、あるサーバ(例えば、サーバ100)と他のサーバ(例えば、サーバ100a)とにインストールされたソフトウェアの同一性のチェックを行える。
図17は、ソフトウェアの同一性チェックの例を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。以下では、サーバ100aにインストールされたソフトウェアと、ソフトウェア辞書に登録済のソフトウェアとの同一性のチェックを行う場合を想定する。
(S51)管理部220は、サーバ100aからインベントリ情報を収集する。インベントリ情報は、サーバ100aにインストールされているソフトウェアのファイル情報およびレジストリ情報を含む。
(S52)管理部220は、取得したインベントリ情報と記憶部210に記憶されたソフトウェア辞書のファイル情報およびレジストリ情報とを比較し、サーバ100aにインストールされているソフトウェアを検出する。ソフトウェア辞書テーブル134の例によれば、ソフトウェアAは、インストールの際に、ファイル情報“file0000A.txt”で示されるファイルおよびレジストリ情報“reg0000A.txt”で示されるレジストリ設定を生成することが分かる。よって、ファイル情報“file0000A.txt”で示されるファイルおよびレジストリ情報“reg0000A.txt”で示されるレジストリ設定が、サーバ100aのインベントリ情報で示されるファイル/レジストリ設定に全て含まれていれば、サーバ100aにソフトウェアAがインストールされていることになる。他のソフトウェアについても同様である。
(S53)管理部220は、記憶部210に記憶されたソフトウェア辞書からスイート製品のソフトウェア(着目するスイート製品)を1つ選択する。例えば、ソフトウェアXを選択する。
(S54)管理部220は、ステップS52の検出結果を基に、着目するスイート製品に含まれる全ソフトウェアを検出したか否かを判定する。着目するスイート製品に含まれる全ソフトウェアを検出した場合、処理をステップS55に進める。着目するスイート製品に対して、少なくとも何れかのソフトウェアを未検出の場合、処理をステップS58に進める。例えば、着目するスイート製品がソフトウェアXであるとき、サーバ100aのインベントリ情報からソフトウェアX,A,B,Cを全て検出できていればステップS55に進める。一方、ソフトウェアX,A,B,Cのうち少なくとも何れかを検出できていなければ処理をステップS58に進める。
(S55)管理部220は、記憶部210に記憶されたコンポーネント構成管理辞書を参照して、着目するスイート製品のコンポーネントのソフトウェアにより最初/最後に更新されたファイルまたはレジストリ名を取得する。そして、ステップS51で収集したサーバ100aのインベントリ情報に含まれる各ファイルやレジストリの更新時刻に基づき、ステップS54で検出した各ソフトウェアのインストール順序を特定する。特定方法は、図12の説明と同様である。
具体的には、サーバ100aのインベントリ情報には、各ファイルおよびレジストリ毎の更新時刻が含まれる。このため、管理部220は、各ソフトウェアが、どの時間帯にサーバ100aにインストールされたかを把握でき、インストールの時系列から、サーバ100aにおける各ソフトウェアのインストール順序を特定できる。管理部220は、記憶部210に記憶されたコンポーネント構成管理辞書を参照して、着目するスイート製品に対して取得済のインストール順序と、サーバ100aのインベントリ情報から取得したインストール順序とが一致するか否かを判定する。一致する場合、処理をステップS56に進める。一致しない場合、処理をステップS58に進める。ソフトウェアXの例でいえば、コンポーネント構成管理辞書テーブル135から、ソフトウェアA,B,Cの順にインストールされることが分かる。サーバ100aのインベントリ情報から、ソフトウェアA,B,Cの順にインストールされたことが分かれば、インストール順序が一致していることになる。
(S56)管理部220は、記憶部210に記憶されたコンポーネント構成管理辞書を参照して、着目するスイート製品に対応するコンポーネントのソフトウェアにより最初/最後に更新されたファイルまたはレジストリ名を取得する。そして、ステップS51で収集したインベントリ情報に含まれる各ファイルやレジストリの更新時刻に基づき、ステップS54で検出した各ソフトウェアのサーバ100aにおけるインストールの時間間隔を計算する。計算方法は、図12の説明と同様である。管理部220は、記憶部210に記憶された時間間隔テーブル136を参照して、計算した各時間間隔が、着目するスイート製品に対して取得済の平均時間間隔と所定の誤差内で一致するか否かを判定する。一致する場合、処理をステップS57に進める。一致しない場合、処理をステップS58に進める。例えば、着目するスイート製品がソフトウェアXの場合、管理部220は、サーバ100aにおけるソフトウェアA,B,Cのインストールの各時間間隔(ΔT1,ΔT2に対応する時間間隔)を計算する。例えば、管理部220は、計算した各時間間隔が、ソフトウェアXに対して取得済の平均時間間隔+標準偏差×2よりも小さい場合は、一致すると判定する。一方、計算した各時間間隔が、当該平均時間間隔+標準偏差×2以上である場合は、一致しないと判定する。
(S57)管理部220は、着目するスイート製品がサーバ100aにインストールされていると判断し、ステップS54で検出した各ソフトウェアを、ステップS53で選択したスイート製品に関連づける。すなわち、管理部220は、ステップS54で検出された複数のソフトウェアをグループ化する。
(S58)管理部220は、記憶部210に記憶されたソフトウェア辞書に含まれる全てのスイート製品を選択し、ステップS54以降の確認を行ったか否かを判定する。全スイート製品を確認済みの場合、処理をステップS59に進める。未確認のスイート製品がある場合、処理をステップS53に進める。なお、以後のステップS53では、未確認のスイート製品が選択の対象となる。
(S59)管理部220は、ステップS57における関連づけの結果に基づいて、サーバ100aにインストールされたソフトウェアの一覧を作成する。例えば、ユーザは、作成されたソフトウェアの一覧を参照することで、サーバ100aにインストールされたスイート製品およびコンポーネントのソフトウェアを確認できる。例えば、ユーザは、ソフトウェアXというスイート製品およびソフトウェアXのコンポーネントとしてのソフトウェアA,B,Cがサーバ100aにインストールされていることを確認できる。
このようにして、管理サーバ200は、サーバ100,100a,100bにインストールされているソフトウェアとソフトウェア辞書に登録されたソフトウェアとの同一性を確認する。このとき、ソフトウェア単体の同一性だけでなく、あるソフトウェアが他のソフトウェアのコンポーネントであることも確認できる。
特に、ステップS55やステップS56の判定を行うことで、スイート製品を適切に特定できる。具体的には、スイート製品によるインストールの順序は、スイート製品のインストーラによる制御を反映するものであり、異なる順序でインストールされている場合は、当該スイート製品に相当するものではないと判断できる。また、複数のソフトウェアが、比較的長い時間間隔でインストールされたものであれば、各ソフトウェアは、スイート製品のコンポーネントに相当するものではないと判断できる。
なお、サーバ100,100a,100bの何れかに、管理部220の機能を設けてもよい。すなわち、サーバ100,100a,100bにより、ステップS57における、複数のソフトウェアのグループ化を実行してもよい。
図18は、スイート製品の検出例を示す図である。例えば、ソフトウェアXをサーバ100にインストールする際、サーバ100のOSは、ソフトウェアXのインストーラを実行するためにプロセスPxを生成する。プロセスPxは、ソフトウェアXのインストーラのプログラム“SetupX.exe”の実行に用いられる。また、プロセスPxは、インストール手順において種々のファイルやレジストリにアクセスする。
そして、ソフトウェアXのインストーラは、ソフトウェアA,B,Cのインストーラを順次呼び出して、ソフトウェアA,B,Cのインストールを行う。すなわち、プロセスPxは、ソフトウェアAのインストーラ(“SetupA.exe”)を実行するためのプロセスPaを生成する。また、プロセスPxは、ソフトウェアBのインストーラ(“SetupB.exe”)を実行するためのプロセスPbを生成する。更に、プロセスPxは、ソフトウェアCのインストーラ(“SetupC.exe”)を実行するためのプロセスPcを生成する。プロセスPa,Pb,Pcも、インストール手順において種々のファイルやレジストリにアクセスする。
この場合、プロセスPx,Pa,Pb,Pcの親子関係により、プロセスPxの子プロセスであるプロセスPa,Pb,Pcがアクセスしたファイル/レジストリの情報を、ソフトウェアXの情報として対応づけることができる。また、プロセスPa,Pb,Pcは、それぞれソフトウェアA,B,Cに対応する。このため、ソフトウェアA,B,Cを、ソフトウェアXというスイート製品に同梱される一群のソフトウェアとして管理できる。
すなわち、サーバ100は、複数のプロセスの親子関係に基づいて、ソフトウェアXの実行に応じて生成されたプロセスPx,Pa,Pb,Pcを特定する。サーバ100は、プロセスPx,Pa,Pb,Pcによってアクセスされたファイル/レジストリの情報をソフトウェアXに対応づけたソフトウェア構成情報を生成する。
図19は、ソフトウェアの同一性チェックの例を示す図である。図19(A)は、第2の実施の形態の方法で生成されたソフトウェア辞書を用いた場合のソフトウェアの同一性チェックを例示している。図19(B)は、第2の実施の形態の方法を用いない場合を示す比較例である。ここでは、ソフトウェアX,X’の区別を考える。ソフトウェアX’は、ソフトウェアB,Cを含む点はソフトウェアXと変わらない。ソフトウェアX’は、ソフトウェアAの代わりにソフトウェアAのバグ修正後のバージョンであるソフトウェアA’を含む点がソフトウェアXと異なる。
図19(A)で示されるように、第2の実施の形態で作成されるソフトウェア辞書によれば、ソフトウェアXの情報の中にソフトウェアAの情報を含めることができ、ソフトウェアX’の情報の中にソフトウェアA’の情報を含めることができる。このため、ソフトウェアAとソフトウェアA’との相違を、スイート製品であるソフトウェアXとソフトウェアX’との相違として区別できるようになる。
他方、各ソフトウェアをスイート製品として関連づけない場合、ソフトウェア辞書では、各ソフトウェアは個別に管理されることになる。すると、図19(B)で示されるように、ソフトウェアA,A’の相違を把握できるとしても、ソフトウェアA,A’の相違をソフトウェアX,X’の相違として識別することができない。
例えば、サーバ100,100a,100bで同一の処理を行う場合、システムの安定稼働維持のため、各サーバにインストールされているソフトウェアを全く同一のものとしたいことがある。ところが、図19(B)の例のように、ソフトウェアを個別に管理していると、各サーバにインストールされているソフトウェアA,A’の相違が分かるだけである。すなわち、ソフトウェアA,A’が単一製品としてインストールされたのか、スイート製品の一部としてインストールされたのかを把握できない。このため、各サーバのソフトウェアを全く同一のものとするために、ソフトウェアAをソフトウェアA’に置き換えればよいのか、あるいは、スイート製品であるソフトウェアXをソフトウェアX’に置き換えればよいのか、の判断が容易でない。
これに対し、第2の実施の形態の方法によれば、ソフトウェアA,A’がスイート製品であるソフトウェアX,X’のコンポーネントである場合に、ソフトウェアA,A’の相違をソフトウェアX,X’の相違として適切に把握できる。例えば、あるソフトウェアに問題が検出された場合、問題の影響範囲(単一ソフトウェア単位かスイート製品単位か)を容易に把握でき、適切な対処を行える。このように、システムの安定稼働維持のためのソフトウェア管理を効率的に行うことができる。
図20は、ソフトウェア辞書の拡張の例を示す図である。例えば、管理サーバ200の記憶部210に記憶されたソフトウェア辞書に、ソフトウェアY1の情報が登録されていないこともある。この場合、サーバ100は、ソフトウェアY1のインストール時に、ソフトウェアY1の情報をソフトウェア辞書に追加する。ここで、例えばソフトウェアY1はコンポーネントのソフトウェアA,Bを含む。この場合、サーバ100は、ソフトウェアY1のインストール時、記憶部210に記憶されたソフトウェア辞書およびコンポーネント構成管理辞書に、ソフトウェアY1とソフトウェアA,Bとの関係や各ソフトウェアのファイル/レジストリ情報を登録する。
同様に、サーバ100aはソフトウェアY2の情報をソフトウェア辞書およびコンポーネント構成管理辞書に追加する。例えば、ソフトウェアY2は、コンポーネントのソフトウェアA,Bおよび同梱のオープンソースソフトウェア(OSS:Open Source Software、同梱OSSという)を含む。この場合、サーバ100aは、ソフトウェアY2のインストール時、コンポーネント構成管理辞書およびソフトウェア辞書に、ソフトウェアY2とソフトウェアA,Bおよび同梱OSSとの関係や各ソフトウェアのファイル/レジストリ情報を登録する。
すると、管理サーバ200は、記憶部210に記憶されたコンポーネント構成管理辞書やソフトウェア辞書を用いて、他のサーバにインストールされているスイート製品のソフトウェアY1,Y2を検出できるようになる。
特に、OSSやフリーのソフトウェアは、無数に存在しておりソフトウェア辞書に予め登録されていないことも多い。第2の実施の形態の方法によれば、OSSやフリーのソフトウェアについても、スイート製品に同梱されるコンポーネントのソフトウェアとしてソフトウェア辞書に登録できる。また、このように拡張されたソフトウェア辞書を用いて、OSSやフリーのソフトウェアを同梱するスイート製品が他のサーバにインストールされていても、適切に検出可能となる。また、例えば、当該OSSなどのソフトウェアがスイート製品とは別個にインストールされている場合と、当該OSSなどのソフトウェアがスイート製品に同梱されてインストールされている場合とを適切に区別可能となる。
なお、サーバ100,100a,100bの何れかに、管理部220の機能を設けてもよい。その場合、管理サーバ200を別個に設けなくてもよい。
また、上記の例では、サーバ100,100a,100bにソフトウェアをインストールする場合を示したが、ソフトウェアをインストールする対象のマシンは仮想マシンでもよい。例えば、サーバ100で動作する仮想マシンにソフトウェアXをインストールするときも、当該仮想マシンにより監視部140や生成部150の機能を実現できる。第2の実施の形態と同様の方法により、複数の仮想マシンにインストールされた各ソフトウェアの同一性のチェックを行うこともできる。
なお、第1の実施の形態の情報処理は、演算部1bにプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、プロセッサ101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体13に記録できる。
例えば、プログラムを記録した記録媒体13を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体13に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103等の記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。