(57)【要約】【課題】コンピュータシステムにおいて、あるリソースが別のリソースを必要とする依存関係や、あるリソースとあるリソースがシステム内に共存できない排他関係を持つ場合に、指定されたリソースを、その依存リソースとともに他のリソースに影響を与えることなくリソースの追加や削除を可能にする。【解決手段】リソースの管理にリソースの依存や排他情報を記録したＤＢを用意し、リソースとリソース同士の依存関係を有向グラフとして管理し、この依存関係に基づいてリソースの削除や追加を行う。【選択図】  図１
2005044011.tif 000002
【特許請求の範囲】
【請求項１】
計算機を用いてソフトウェアパッケージを管理する際に、
あるリソースが他のリソースを使用して一つのシステムを構成するかどうかを検出し、
あるリソースと他のリソースが同時に利用できるかどうかを検出し、
前記検出したリソース相互の関連を依存関係として保持することを特徴とするソフトウェアパッケージ管理方法。
【請求項２】
計算機を用いてソフトウェアパッケージを管理する際に、
第一のリソースが第二のリソースを利用して一つのシステムを構成するかどうかを検出し、
一つのシステムを構成する場合、前記第一及び第二のリソースが共にインストールされていない時に、前記第一のリソースのインストール前に、前記第二のリソースをインストールを行うことを特徴とするソフトウェアパッケージ管理方法。
【請求項３】
計算機を用いてソフトウェアパッケージを管理する際に、
前記の第一のリソースが第二のリソースを使用して一つのシステムを構成するかどうかを検出し、
一つのシステムを構成する場合、前記第二のリソースがさらに第三のリソースを使用するかどうかを検出し、
前記第三のリソースを使用する場合、前記第三のリソースが第四のリソースを使用することを検出することにより、リソースが複数の階層にまたがる依存関係を抽出し、
前記第二から第四までのリソースがインストールされていない場合、前記依存関係に基づいて、使用される順にリソースを決定してインストールを行うことを特徴とするソフトウェアパッケージ管理方法。
【請求項４】
計算機を用いてソフトウェアパッケージを管理する際に、
第一のリソースが第二のリソースを使用することを検出し、
前記第一のリソースが前記第二のリソースを参照するためのポインタを情報として記録することによってリソース相互の関連を管理することを特徴とするソフトウェアパッケージ管理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、あるソフトウェアを使用するために必要なプログラム、データなどを管理する場合において、あるソフトウェアを使用するために必要なソフトウェアを自動的にインストールする方法、及びあるソフトウェアを削除する場合に、それに関連するソフトウェアを他のソフトウェアに影響の出ない範囲で削除できる方法及びシステムに関する。
【０００２】
【従来の技術】
従来、ソフトウェアの配布、インストールを行う手段として、様様な方法が提案されている。依存関係をもつソフトウェアパッケージを配布しインストールする方法として、特開２００１−６７２２５がある。しかし、この従来技術はインストールを行うものであり、不要になったものを削除する場合や、既にインストールされているソフトウェアと同居できないソフトウェアをインストールする場合、例えば、バージョンアップ／ダウンなどを他のソフトウェアに影響を与えることなく行う方法ではない。
【０００３】
【特許文献１】
特開２００１−６７２２５号公報
【０００４】
【発明が解決しようとする課題】
従来技術では、ソフトウェアインストール管理のソフトウェアのインストールに必要なソフトウェアを関連付けて管理しているが、それはインストールについてだけであり、パッケージをアンインストール（削除）する場合や、古いバージョンを削除して新しいバージョンへアップグレードする場合、また逆に新しいバージョンを削除して古いバージョンをインストールする場合に、対象全てのソフトウェアについて矛盾なくインストール・アンインストールする方法は示されていない。
【０００５】
また、従来の技術では関連したリソースを列挙する際に、３つ以上のリソースが依存関係をもつような複雑な依存関係を持つ場合、関連するリソースを列挙できるが、それぞれのリソースがどの順番で互いのリソースを必要としているかまでは管理できていない。
【０００６】
また、従来技術では、ソフトウェア情報として優先順位やバージョン情報をテーブルにもたせているため、ＤＢが巨大になり処理を行う時の判定も複雑である。
【０００７】
本発明の目的は、コンピュータシステムにおいて、あるリソースが別のリソースを必要とする依存関係や、あるリソースとあるリソースがシステム内に共存できない排他関係を持つ場合に、指定されたリソースを、その依存リソースとともに他のリソースに影響を与えることなくリソースの追加や削除を可能とすることである。
【０００８】
【課題を解決するための手段】
複雑な依存関係を持つソフトウェアを矛盾なくインストールするために、本発明では対象となるソフトウェアの関係を管理する手段を持つ。ソフトウェアの関連情報は対象となるソフトウェアパッケージ自身の情報と、そのソフトウェアパッケージが別のどのソフトウェアパッケージを必要としているかという依存情報と、またどのソフトウェアパッケージと同時にインストールすることができないかという排他情報を保持している。この情報はソフトウェア自身の情報をノード、ソフトウェア情報間の関連をブランチに対応させ、有向グラフで表される。
【０００９】
ソフトウエアの依存関係を有向グラフとして表わすことにより、あるソフトウェアをインストールする際に必要な依存ソフトウェアの探索を経路問題として解いたり、トポロジカルソートで適切なインストール順序を決定できる。例えば、インストールすることで他のインストール済みのソフトウェアの動作に影響を与える場合にはインストールを行わないか、影響のあるものを削除して新しく指定したソフトウェアのインストールを行う。また、インストールするソフトウェアの動作に別のソフトウェアが必要な場合、指定したソフトウェアをインストールする前に必要なソフトウェアをインストールして、指定したソフトウェアをインストールしたにもかかわらず、動作しないということを防止する。また、あるソフトウェアをバージョンアップする際に、それに関連するソフトウェアも同時にバージョンアップを行う仕組みを提供する。
【００１０】
本発明によれば、対象ソフトウェアとその関連するソフトウェアを自動でインストール／アンインストールでき、また、バージョンアップの際にも自動で関連するソフトウェアと対象ソフトウェアのバージョンアップを矛盾なく行うことができる。また、互いに共存できないソフトウェアを同時にインストールしてシステムが動作しなくなるといった問題をインストール前に確認でき、利用者や管理者の作業量を軽減できる。
【００１１】
本発明ではこれらソフトウエアの依存関係をグラフとして表し、それぞれのリソースのつながりで優先順位を決定する構造とした。これによりグラフを辿るという極めて単純な処理を繰り返すだけで複雑な依存関係を抽出できる。
【００１２】
【発明の実施の形態】
図１は本発明を実施するシステム構成図である。本発明においては、システムで利用可能なソフトウェア情報を格納したソフトウェア情報マスタＤＢ１０１とそのソフトウェアを利用するクライアント１０３がネットワーク１０９に接続されている。ネットワーク１０９は、インターネットの様な広域ネットワークや、ＬＡＮの様な局所的なネットワーク、またはクライアントと同一コンピュータ内に存在してもよい。また、クライアントから利用できるソフトウェアを全て格納したソフトウェア格納装置１０２がネットワーク１０９を介してクライアント１０３に接続される。
【００１３】
クライアント１０３には、ソフトウェア格納装置１０２よりソフトウェアを取得する手段であるソフトウェア取得部１０４、ソフトウェア格納装置１０２から取得したソフトウェアをインストールする手段であるソフトウェアインストール部１０５、ソフトウェアの情報をソフトウェア情報ＤＢ１０１より検索するＤＢ検索部１０６、及びクライアントが持つソフトウェア情報ＤＢ１０８を更新する手段であるＤＢ更新部１０７を有する。ソフトウェア情報ＤＢ１０８は、ソフトウェア情報マスタＤＢ１０１が持つ情報のうち、クライアント１０３にインストールされているソフトウェアの情報のみを持つＤＢである。
【００１４】
図２は、ソフトウェア情報マスタＤＢ１０１及びソフトウェア情報ＤＢ１０８が記録しているデータの一例を示したものである。ソフトウェアパッケージ情報をノード、ソフトウェアの依存情報や排他情報をブランチとした有向グラフを形成している。このＤＢにはソフトウェアパッケージの情報を記録したテーブルと、依存関係の情報を記録するテーブルが存在する。
【００１５】
パッケージ情報のテーブルには、パッケージごとに割り与えられるユニークなＩＤ２０１、ソフトウェアパッケージ名２０２、そのパッケージの依存関係を表すブランチのＩＤ２０４、及びソフトウェアパッケージの格納位置を示すＵＲＩ２０５が記録されている。また、依存関係の情報を示すテーブルには、個々のブランチを識別するユニークなＩＤ２０５と依存関係の種別を表す属性２０７、どのノード同士の関連を表しているかを指し示すノードへのポインタＦｒｏｍ２０８，及びＴｏ２０９を保存している。これらのポインタの値は関連するノードのＩＤである。
【００１６】
図２の例では、ブランチＩＤが１のＦｒｏｍとＴｏの値はそれぞれ２と１であり、その属性は依存である。これは、ノードＩＤ２がノードＩＤ１を必要としていることを表している。すなわち、ノードＩＤ２が表すリソースをインストールする場合にはノードＩＤ１の表すリソースを先にインストールする必要があることを示している。このソフトウェア情報はソフトウェアで自動生成したり、ソフトウェアの開発者によって記述される。
【００１７】
これら２つのテーブルより表される関係を図示したものが関連図２１０である。ブロック２１１はテーブル内のノードＩＤ１のパッケージである。また、同様に、ブロック２１２はノードＩＤ２、ブロック２１３はノードＩＤ３、ブロック２１４はノードＩＤ４のパッケージをそれぞれ表している。矢印２１５はテーブル内のブランチＩＤ１を表す。同様に、矢印２１６はブランチＩＤ２、矢印２１７はブランチＩＤ３、矢印２１８はブランチＩＤ４、矢印２１９はブランチＩＤ５、矢印２２０はブランチＩＤ６をそれぞれ表す。本発明において、競合のブランチで結ばれたパッケージは同時にインストールできない。また、依存で結ばれたものは同時にインストールされている必要がある。ただし、あるパッケージが依存している２つのパッケージが互いに競合属性のブランチで結ばれている場合には、そのどちらかがインストールされていればよいものとする。
【００１８】
図３はソフトウェアをインストールする場合のフローである。ソフトウェアをインストールする際には、ソフトウェア情報マスタＤＢ１０１を用いて、必要なソフトウェアのリストアップと順序の決定を行う。ソフトウェアのインストールは以下の様に行う。
【００１９】
まず、図２において、ユーザはインストールしたいソフトウェアをマスタＤＢ１０１の中から選択する。ここでは、例えばＰａｃｋａｇｅ  Ｄを選択したとする。次に、選択したソフトウェアに依存するパッケージがあるかどうか、マスタＤＢ１０１のチェックを行う（３０１）。図２のテーブルではＰａｃｋａｇｅ  Ｄに属するブランチＩＤは３，４，６ということが、テーブルから読み取れる。ここでブランチＩＤが３であるブランチを見ると、Ｆｒｏｍは４、Ｔｏが２であることがわかる。ＦｒｏｍとＴｏはノードのＩＤであるから、Ｐａｃｋａｇｅ  ＤはＰａｃｋａｇｅ  Ｂに対して依存関係があることがわかる。
【００２０】
この様にソフトウエア相互に依存関係が存在する場合、当該ノードと依存関係を持つパッケージについて同じように、依存するソフトウェアが存在するかどうかチェックする（３０２）。この処理は再帰的に行われ（３０３）、依存するパッケージが見つからなくなるまで繰り返される。依存するものが存在しない場合、クライアントのソフトウェア情報ＤＢ１０８を参照し、そのソフトウェアがすでに依存するソフトウェアがインストール済みかどうかを確認する（３０４）。既にインストール済みであればこれ以上インストールする必要ないので、この処理は終了である。インストールされていなければ、指定されたパッケージをインストールして処理を終了する（３０５）。この処理は再帰呼び出しであるため、処理終了後、依存関係の一つ前に戻り、同じ処理を繰り返す。
【００２１】
一つのソフトウェアに依存するものが複数あった場合、それぞれの依存関係について、同様に依存関係を辿っていく。すなわち、この処理は深さ優先探索である。これによって、依存関係の最も深いところから、実際にインストールしたいソフトウェアまで、必要なソフトウェアのリストを手に入れることができる。
【００２２】
図２において、システムにテーブル内で表されているのパッケージが一切インストールされていない状態で、Ｐａｃｋａｇｅ  Ｄのインストールを指定したとする。ここで、テーブルの情報を用いて依存関係を探索すると次の３つの経路を見つけることができる。
【００２３】
（１）Ｄ→Ｂ→Ａ
（２）Ｄ→Ｃ→Ａ
（３）Ｄ→Ａ
この結果からＤのインストールにＡ，Ｂ，Ｃが必要であることがわかる。しかし、Ａ，Ｂ，Ｃそれぞれのノードから競合関係を探索するとＣ→Ｂという関係があることがわかる。従って、上記の探索結果のうち（１），（２）は同時に存在できないため、どちらかを選択することになる。ここでいずれかをユーザに選択させてもよいし、あらかじめ優先方向を決めておき自動的にインストールを行ってもよい。この実施例ではＣ→Ｂという競合関係はＢを優先し、探索結果（１）を採用する。探索結果（３）は探索結果（１）とも（２）とも矛盾しない。この例では、探索結果（３）は（１）の始点と終点を表しているため、探索結果（１）のインストール結果で探索結果（３）を満たすことになる。従って、この探索結果（３）は無視する。この結果、インストールに必要なパッケージの順序はＡ，Ｂ，Ｄと決定する。
【００２４】
ここで得られる順序どおりにインストールすることで、インストール時や実行時に必要なソフトウェアを全てインストールできる。また、必要のないソフトウェアをインストールすることもない。インストール完了後に動作に必要なソフトウェアの過不足がなく、実際に実行する時点で問題が発生しない。また、既にインストール済みのソフトウェアを二重にインストールすることも防げる。
【００２５】
図２の例において、Ｐａｃｋａｇｅ  Ａが既にインストール済みである場合にＰａｃｋａｇｅ  Ｄをインストールすることを考える。前述の方法でＰａｃｋａｇｅ  Ｄのインストールに必要なソフトウェアをリストアップした場合、同様にＡ←Ｂ←Ｄという結果が得られる。ここで、最も依存関係の深いＡからインストールを行うが、その際にインストール済みかどうかのフラグである図２のインストール済み２０３をチェックする。インストール済みがＹＥＳであればインストールを行わない。これによって不要なインストールを防げる。
【００２６】
また、この方法によってインストール順序を特定したことにより、この順序情報を利用してソフトウェア格納装置１０２からクライアントへのソフトウェア転送を他のソフトウェアパッケージのインストールと同時に行い、インストール時間を短縮する。
【００２７】
あるリソースＡをインストールしている間はＡに依存するＢのリソースは必要なく、リソースＡの終了後に必要となる。本発明ではインストールの順序を先に決定するため、その順序をリソース取得の順番およびインストールの順番に利用する。最初のソフトウェアをインストールしている間に、次にインストールするソフトウェアをダウンロードすることで全体でのインストール時間を短縮する。
【００２８】
次に、ソフトウェアパッケージのアップデートを行う例を説明する。図４では、あるパッケージをインストールする際に、別のあるパッケージの削除が必要となる場合のフローを示している。この様な排他関係を持つソフトウェアパッケージ同士では、特定の二つのパッケージが同居できないため、どちらかを削除する必要がある。
【００２９】
まず、インストール時の時と同様に、ソフトウェア情報マスタＤＢ１０１をチェックし、指定したパッケージに依存したパッケージが存在しないか確認する（４０１）。次に、指定したパッケージに依存されているパッケージが存在するか確認する（４０２）。依存が全く存在しなくなった時点で、排他属性のブランチが存在するかチェックし、存在してかつそのブランチに接続されたノードがインストール済みである場合には、そのノードを削除し、指定されたノードのソフトウェアをインストールする（４０３）。排他関係を持つパッケージ間については属性が競合となったブランチで結びソフトウエア情報マスタＤＢ１０１へ登録しておく。
【００３０】
インストールが必要となった場合、ＤＢ検索部１０６によって、クライアントのソフトウェア情報ＤＢ１０１に対して競合というブランチが残らない経路を探し、その経路に該当しないブランチとノードを削除する。これによって、競合するソフトウェアとそれに関連するソフトウェアを、他のソフトウェアに影響を与えることなく削除できる。これらの処理は指定したソフトウェアに依存しているソフトウェア及び、指定したソフトウェアを必要としているソフトウェアそれぞれに対して再帰的に処理を行う（４０５、４０６）。これによって、依存関係を持つソフトウェア全てに対してチェックが行われ、必要なソフトウェアはインストールされ（４０４）、競合により不要となったソフトウェアは削除される。
【００３１】
ここでは、図２において、Ｐａｃｋａｇｅ  Ａ，Ｂ，Ｄがインストール済みであるとする。Ｐａｃｋａｇｅ  Ｃのインストールを指定した場合、Ｐａｃｋａｇｅ  Ｃのノードを表すテーブルをみると、Ｐａｃｋａｇｅ  ＢとＣの間に競合というブランチであるブランチ２が存在する。Ｐａｃｋａｇｅ  Ｂに依存するソフトウェアをテーブルから検索すると、さらにＰａｃｋａｇｅ  Ｄが存在することがわかる。ここからブランチの指す方向へ深さ優先探索を行い、Ｃと競合関係にあるＢを経由する全ての経路を抽出する。経路の抽出も、図２のテーブルを用いることで可能である。
【００３２】
Ｂを経由する経路を見つけるためにはＰａｃｋａｇｅ  Ｂへと関連付けられたブランチを持つノードを列挙すればよい。図２の例では、Ｐａｃｋａｇｅ  Ｂがもつブランチは１，２，３である。このうち属性が依存であるものは１，３である。ブランチ１，３を持つノードはＰａｃｋａｇｅ  ＡとＰａｃｋａｇｅ  Ｄである。従って、Ｂを経由する経路はＤ→Ｂ→Ａのみである。
【００３３】
この経路の中で依存の最上位にあるものはＰａｃｋａｇｅ  Ｄであることが分かる。Ｂを通る経路決定したときと同じように、Ｐａｃｋａｇｅ  Ｄから、属性が依存であるブランチの指し示すノードを辿ると、Ｄ→Ｃ→ＡとＤ→Ｂ→Ａという２つの経路が存在することがわかる。この二つの経路のうちＢのみを経由する経路にしかないノードは、Ｂだけが必要としていたノードであり、Ｃのインストール後には不要であることが分かる。本実施例では、それに該当するものはＰａｃｋａｇｅ  Ｂ自身であり、これを不要なノードであると判断し、削除する。このノードを削除することで、システム上同居できないソフトウェアを削除し、また不要な関連ソフトウェアも同時に削除する。不要ソフトウェアの削除後に、改めてＰａｃｋａｇｅ  Ｃをインストールすると全ての処理は終了する。この結果、不要なソフトウェアは残らないので、他のソフトウェアにも影響を与えない。
【００３４】
図５及び図６ではより複雑な実施例を示す。図５において、ノード５０１から５２２は、あるシステムにおいてインストールが可能であるソフトウェアパッケージを表している。矢印はすべて依存関係を表すブランチである。ここで、ノード５１０をインストールする。矢印によって依存関係が表されているため、ノード５１０から矢印の方向へソフトウェアを検索する。本発明では深さ優先探索を用いる。それによる検索結果は、ノード５１３，５１４，５１５，５１６，５１８，５１９，５２１，５２２，５２０，６１７である。探索結果とインストールの際にはこの順番の逆にインストールする。これによって必要なソフトウェアを必要な順番にインストールできる。
【００３５】
図６はバージョンアップの実施例である。ノード６０４から６１４は、あるシステムにインストールが可能なソフトウェアパッケージである。実線の矢印は依存の属性をもつブランチを、点線の矢印は競合の属性を持つブランチである。グループ６０１から６０３は、同じ種類でバージョンの異なるソフトウェアのグループを表している。グループ６０１に対して接続しているブランチは、ノード６０４、６０５両方に依存していることを表している。グループ６０２に対して接続しているブランチはノード６０６，６０７両方に、グループ６０３に接続しているブランチはノード６０８，６０９両方のノードに依存関係を持っていることを表す。
【００３６】
現在、このシステムではノード６０４，６０６，６０８，６１０，６１１，６１２，６１３，６１４がインストールされているとする。ここで、ノード６０８をバージョン１からバージョン２であるノード６０９へバージョンアップする。まず、ノード６０８の依存関係を列挙する。ノード６０８に接続している依存の属性のノードを全て探索すると、ノード６０４，６０６，６０８，６１０，６１１，６１２，６１３，６１４が接続している。
【００３７】
また、次にインストールするノード６０９に接続しているノードを列挙する。そこでは、ノード６０５，６０７，６０９，６１０，６１１，６１２，６１３，６１４が接続している。ここで、ノード６１０から６１４まではノード６０８，６０９両者に共通しているためバージョンアップには関係ない。そのため、以降は無視する。ここで残るノード６０４から６０９のパッケージの中でノード６０９に依存するものはノード６０９，６０７，６０５である。
【００３８】
一方、バージョン１のノード６０８に依存するパッケージはノード６０８，６０６，６０４である。ここで、ノード６０９と６０８、ノード６０６と６０７、ノード６０４と６０５はそれぞれ競合のブランチで結ばれているため、同時にインストールできない。本実施例においては、ノード６０９のインストールを指定しているため、ノード６０９の依存関係を優先する。従って、ノード６０４，６０５，６０８の削除が決定する。競合するソフトウェアを削除後、ノード６０９，６０７，６０５をインストールし、処理は完了する。
【００３９】
【発明の効果】
本発明によれば、ソフトウェアのインストール、削除、バージョンアップ、ダウンの作業を省力化できる。
【図面の簡単な説明】
【図１】本発明のシステム構成図である。
【図２】ソフトウェア情報マスタＤＢとソフトウェア情報ＤＢに記録されるテーブルの一例、及び、そのＤＢに記録された情報を示す。
【図３】ソフトウェアのインストールを行う際に、依存するソフトウェアを決定し、それらを含めてインストールを行う際の処理のフローである。
【図４】指定したソフトウェアに競合するソフトウェアがインストール済みの場合に削除可能なソフトウェアを決定し、指定したソフトウェアをインストールする場合のフローである。
【図５】ソフトウェアパッケージの依存関係の例を表す図である。
【図６】バージョンアップを行う際の依存関係の解決方法を表した図である。
【符号の説明】
１０１：ソフトウエア情報マスタＤＢ、１０２：ソフトウエア格納装置、１０３：クライアント、１０４：ソフトウエア取得部、１０５：ソフトウエアインストール部、１０６：ＤＢ検索部、１０７：ＤＢ更新部、１０８：ソフトウエア情報ＤＢ、１０９：ネットワーク
【図１】
2005044011.tif 000003
【図２】
2005044011.tif 000004
【図３】
2005044011.tif 000005
【図４】
2005044011.tif 000006
【図５】
2005044011.tif 000007
【図６】
2005044011.tif 000008