IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エヌ・シー・アール・コーポレイションの特許一覧

特許7461521コンピュータにおいてターゲットドライバを構築及びインストールする方法
<>
  • 特許-コンピュータにおいてターゲットドライバを構築及びインストールする方法 図1
  • 特許-コンピュータにおいてターゲットドライバを構築及びインストールする方法 図2
  • 特許-コンピュータにおいてターゲットドライバを構築及びインストールする方法 図3
  • 特許-コンピュータにおいてターゲットドライバを構築及びインストールする方法 図4
  • 特許-コンピュータにおいてターゲットドライバを構築及びインストールする方法 図5
  • 特許-コンピュータにおいてターゲットドライバを構築及びインストールする方法 図6
  • 特許-コンピュータにおいてターゲットドライバを構築及びインストールする方法 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2024-03-26
(45)【発行日】2024-04-03
(54)【発明の名称】コンピュータにおいてターゲットドライバを構築及びインストールする方法
(51)【国際特許分類】
   G06F 8/61 20180101AFI20240327BHJP
【FI】
G06F8/61
【請求項の数】 19
(21)【出願番号】P 2023008574
(22)【出願日】2023-01-24
【審査請求日】2023-01-24
(31)【優先権主張番号】17/949,577
(32)【優先日】2022-09-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】391007161
【氏名又は名称】エヌ・シー・アール・コーポレイション
【氏名又は名称原語表記】NCR CORPORATION
(74)【代理人】
【識別番号】100098589
【弁理士】
【氏名又は名称】西山 善章
(74)【代理人】
【識別番号】100147599
【弁理士】
【氏名又は名称】丹羽 匡孝
(72)【発明者】
【氏名】シモン ウォーターマン
【審査官】武田 広太郎
(56)【参考文献】
【文献】米国特許出願公開第2018/0246715(US,A1)
【文献】特表2019-537812(JP,A)
【文献】米国特許出願公開第2019/0171436(US,A1)
【文献】特表2016-508653(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/61
(57)【特許請求の範囲】
【請求項1】
少なくとも1つの所定のターゲットドライバが、コンピューティングデバイスのカーネル上にインストールされるべきかどうかを判定するためのコンピュータ実装方法であって、
コンピューティングデバイスの1つ以上のプロセッサ上で実行可能である実行可能なソフトウェアを包含する少なくとも1つのソフトウェアコンテナエレメントによって、前記コンピューティングデバイスのカーネルから、前記カーネル上にインストールされている少なくとも1つのアクティブドライバを示す第1のデータを受信するステップと、
前記第1のデータを、前記カーネル上にインストールされるべき少なくとも1つの所定のターゲットドライバを示す第2のデータと比較するステップと、
前記比較に応答して、前記所定のターゲットドライバのうちの少なくとも1つが前記カーネル上にインストールされていないかどうかを判定するステップと、
前記カーネル上にインストールされていない、前記所定のターゲットドライバのうちの少なくとも1つの選択されたターゲットドライバが存在すると判定することに応答して、前記ソフトウェアコンテナエレメント内に、前記選択されたターゲットドライバのうちの少なくとも1つを構築するステップと、
を含むコンピュータ実装方法。
【請求項2】
動的カーネル作成システム(DKMS)を使用して、前記ソフトウェアコンテナエレメント内に、前記選択されたターゲットドライバを構築することを更に含む、請求項に記載のコンピュータ実装方法。
【請求項3】
前記ソフトウェアコンテナエレメント内に構築された、前記選択されたターゲットドライバを前記カーネルに提供することと、
前記ソフトウェアコンテナエレメント内に構築された、前記選択されたターゲットドライバを前記カーネル上にインストールすることと、を更に含む、請求項又はに記載のコンピュータ実装方法。
【請求項4】
前記所定のターゲットドライバの各々に関連付けられたソースコードと、前記所定のターゲットドライバの各々がどのように構築されるかを定義するコードと、を少なくとも定義するソフトウェアとして、前記実行可能なソフトウェアを単一のソフトウェアコンテナエレメント内に提供することを更に含む、請求項に記載のコンピュータ実装方法。
【請求項5】
前記所定のターゲットドライバの各々に関連付けられたソースコードと、
動的カーネル作成システム(DKMS)のフレームワークと、
前記DKMSの構成と、
前記所定のターゲットドライバを構築するためにDKMSによって使用可能な少なくとも1つの構築ツールと、を少なくとも定義するソフトウェアとして、前記実行可能なソフトウェアを単一のソフトウェアコンテナエレメント内に提供することを更に含む、請求項に記載のコンピュータ実装方法。
【請求項6】
前記所定のターゲットドライバのそれぞれの所定のターゲットドライバに関連付けられたソースコードと、前記それぞれの所定のターゲットドライバがどのように構築されるかを定義するコードと、を少なくとも定義するソフトウェアとして、実行可能なソフトウェアを各それぞれのソフトウェアコンテナエレメントに提供することを更に含む、請求項に記載のコンピュータ実装方法。
【請求項7】
前記カーネル上にインストールされている各アクティブドライバを示すデータとして、前記第1のデータを受信することを更に含む、請求項に記載のコンピュータ実装方法。
【請求項8】
前記カーネル上にインストールされている前記少なくとも1つのアクティブドライバのドライバタイプ及びドライババージョンを示すデータとして、前記第1のデータを受信することを更に含む、請求項に記載のコンピュータ実装方法。
【請求項9】
前記ソフトウェアコンテナエレメントで、1つ以上のカーネルヘッダファイルを受信することを更に含む、請求項に記載のコンピュータ実装方法。
【請求項10】
前記カーネルヘッダファイルを読み取り専用で前記ソフトウェアコンテナエレメントにマウントすることを更に含む、請求項に記載のコンピュータ実装方法。
【請求項11】
前記第1のデータを前記第2のデータと比較することが、前記カーネルから受信した1つ以上のファイルにクエリ実行して、前記カーネル上にインストールされている各アクティブドライバのタイプ及びバージョンを判定することを含む、請求項10に記載のコンピュータ実装方法。
【請求項12】
前記第1のデータを前記第2のデータと比較することが、前記実行可能なソフトウェアにクエリ実行して、前記少なくとも1つの所定のターゲットドライバのタイプ及びバージョンを判定することを更に含む、請求項11に記載のコンピュータ実装方法。
【請求項13】
前記比較に応答して、前記カーネル上に存在しない又は前記カーネル上に古いバージョンがインストールされている、前記所定のターゲットドライバのうちの少なくとも1つの選択されたターゲットドライバを判定することを更に含む、請求項12に記載のコンピュータ実装方法。
【請求項14】
INITタイプのソフトウェアコンテナエレメントとして、前記ソフトウェアコンテナエレメントを提供することを更に含む、請求項13に記載のコンピュータ実装方法。
【請求項15】
コンピューティング環境に関係なく実行可能であるソフトウェアとして、前記実行可能なソフトウェアを提供することを更に含む、請求項14に記載のコンピュータ実装方法。
【請求項16】
前記ソフトウェアコンテナエレメントを介して、隔離されたコンピューティング環境で前記実行可能なソフトウェアを実行することを更に含む、請求項14に記載のコンピュータ実装方法。
【請求項17】
ソフトウェアコンテナエレメント内に包含された実行可能なソフトウェアを実行するように構成された1つ以上のプロセッサを備えるコンピューティングデバイスであって、前記ソフトウェアが、実行されたときに、
コンピューティングデバイスのカーネルから、前記カーネル上にインストールされている少なくとも1つのアクティブドライバを示す第1のデータを受信するステップと
前記第1のデータを、前記カーネル上にインストールされるべき少なくとも1つの所定のターゲットドライバを示す第2のデータと比較するステップとつ、
前記所定のターゲットドライバのうちの少なくとも1つが前記カーネル上にインストールされていないかどうかを判定するステップと
前記カーネル上にインストールされていない、前記所定のターゲットドライバのうちの少なくとも1つの選択されたターゲットドライバが存在すると判定することに応答して、前記ソフトウェアコンテナエレメント内に、前記選択されたターゲットドライバのうちの少なくとも1つを構築するステップと、
の各ステップを遂行するコンピューティングデバイス。
【請求項18】
前記コンピューティングデバイスが、ポイントオブセール端末又はセルフサービス端末である、請求項17に記載のコンピューティングデバイス。
【請求項19】
命令を含むコンピュータプログラムであって、前記命令が、コンピューティングデバイスによって実行されたときに、前記コンピューティングデバイスに、請求項17又は18に定義されたステップを遂行させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ある特定の所定のターゲットドライバをコンピューティングデバイスのカーネル上にインストールする必要があるかどうかを判定するための方法及びコンピューティングデバイスに関する。特に、排他的ではないが、本発明は、方法論であって、それによって、セルフサービス端末又はポイントオブセール端末上で実行されるソフトウェアコンテナにファイルがマウントされ、
次いで、ソフトウェアコンテナが、所定のターゲットドライバのセットがカーネル上にインストールされているかどうかを判定することに関与する、方法論に関する。インストールされていないと判定された場合、ソフトウェアコンテナは、カーネル上にターゲットドライバを構築及びインストールするように構成されている。
【背景技術】
【0002】
セルフサービス端末(SST)及び/又はポイントオブセール(POS)端末は、小売業界で適宜、使用されることが知られている。SST及びPOS端末は、通常、顧客が小売施設と取引を行うことを可能にするために使用される。
【0003】
任意の小売施設の各SST又はPOS端末を、異なる周辺デバイスに接続することができる。各SST又はPOS端末はまた、異なる基礎となるオペレーティングシステム(Linux、Windowsなど)及び異なるソフトウェアアプリケーションを有するなどの、異なるソフトウェアを実行し得る。これは通常、SST又はPOS端末が使用される小売施設、及び小売施設におけるSST又はPOS端末の使用目的に依存する。適宜、SST又はPOS端末上で実行されているソフトウェアをアップグレードすることもでき、又は接続された周辺デバイスを変更することができる。
【0004】
端末間で頻繁に存在するばらつきのため、ソフトウェア開発者は、SST又はPOS端末上で実行する必要のあるソフトウェアを包含するソフトウェアコンテナを使用し始めている。ソフトウェアコンテナは、走るソフトウェアを隔離するので、複雑なプラットフォーム依存性を回避するのに役立つ。
【0005】
つまり、ソフトウェアコンテナは、端末のコンピューティング環境に関係なく、端末の1つ以上のプロセッサ上で実行することができる。これは、ソフトウェアコンテナがソフトウェア(アプリケーションコード及び任意のソフトウェア依存性)の全てを包含し、任意のコンピューティング環境で実行可能である必要があるためである。
【0006】
更に、これらのコンテナは独自の隔離されたコンピューティング環境で動作するため(ソフトウェアコンテナの外側にある他のソフトウェア/ハードウェアとのある特定の事前定義された通信経路(特定のファイル、特定のポートへのアクセスなど)は例外)、これによりまた、当該コンテナが特に安全になる。
【0007】
このように、ソフトウェアコンテナは、SST及びPOS端末上で使用するためのソフトウェアをパッケージング及び配信する効果的な方法である。ソフトウェア又はハードウェアのアップグレードが端末上で行われると、これらのアップグレードを構成する新しいソフトウェアコンテナが端末上で実行され得る。
【0008】
また、コンテナが事前構築され得るので、これは、あらゆる端末上での複雑な構築を回避するのに役立つ場合がある。ソフトウェアコンテナは、コンピューティングデバイス上にハイパーバイザをインストールする必要がないという点において、仮想マシンとは異なることが留意される。ソフトウェアコンテナはまた、通常、仮想マシンよりも軽量であり、かつ仮想マシンよりも速く走る。更に、仮想マシンはコンピュータシステム全体を仮想化するのに対し、ソフトウェアコンテナはオペレーティングシステムを仮想化する。ソフトウェアコンテナはまた、単一のオペレーティングシステムを共有するが、各仮想マシンは独自のオペレーティングシステムを有する。
【0009】
ソフトウェアコンテナを展開する場合、(docker、RKT、CRI-O、及びLXDなどのような)コンテナエンジンが利用される。コンテナエンジンは、ユーザ要求、又は(Kubernetes、Swarm、Mesosなどのような)コンテナオーケストレータのAPIサーバからの要求を受け入れ、レジストリから(特定のイメージ形式の)イメージファイルを引き出し、コンテナマウントポイントを準備し、ソフトウェアコンテナを実行するのに必要なメタデータを準備し、かつコンテナランタイムを呼び出すことができる。コンテナランタイムは、コンテナエンジンの一部である。
【0010】
コンテナランタイム(runc、containerd、crun、railcar、katacontainersなどのような)は、コンテナイメージファイルを実行し、かつそれによって、ソフトウェアコンテナを作成するために、マウントポイント、及びコンテナエンジンによって提供されるメタデータを使用し、コンピューティングデバイス上で走る(ホストOSの)カーネルと通信する。
【0011】
複数のコンピューティングデバイスにわたって複数のコンテナを実装する場合、ソフトウェアコンテナのオーケストレータプラットフォームがよく使用される。これらのプラットフォームは、複数のコンピューティングデバイス(例えば、SST又はPOS端末)にわたってコンテナのワークロードをスケジュールすることができ、かつまた、標準化されたアプリケーション定義ファイル(例えば、kube YAML、docker composeなど)を提供することができる。Kubernetesは、コンテナオーケストレーションプラットフォームの一例である。
【0012】
Kubernetesコンテナオーケストレーションプラットフォームは、クラスタを管理する、Kubernetesマスタと呼ばれる制御ユニットを含む、ユニットのクラスタ、及びワークロード(コンテナ)を走らせる少なくとも1つのノード(又はワーカ)である。Kubernetesオーケストレータプラットフォームの1つの部分は、kubeletである。kubeletは、Kubernetesシステムの一部である、あらゆるワーカ上で走るエージェントである。動作中、kubeletは、どのコンテナをコンピューティングデバイス上で走らせるべきかをkubeletに通知する(Kubernetesマスタ上のAPIサーバからの)コマンドを受信する。
【0013】
Kubernetesでは、これらのコンテナは、「ポッド」内に提供される。通常、単一のポッドは、単一のコンテナを含むが、ポッド内に複数のコンテナを含むことが可能である。kubeletは、コンテナエンジン内のコンテナランタイムを介してソフトウェアコンテナを実行するために、どのコンテナをコンピューティングデバイス上で走らせるべきかに関する情報を(例えば、コンテナランタイムインターフェース(CRI)を介して)コンテナエンジンに渡す。
【0014】
コンテナランタイムが、実行可能なコンテナイメージファイルを実行すると、ソフトウェアコンテナが作成される。そのため、ソフトウェアコンテナは本質的に、関連付けられた実行可能なコンテナイメージファイルのランタイムインスタンスである。
【0015】
この意味で、実行可能なコンテナイメージファイルは、ソフトウェアコンテナエレメントとして少なくとも実行可能である必要がある、ソフトウェアの全てを有するイメージファイルである。
【0016】
より詳細には、コンテナイメージファイルは通常、ソフトウェアコンテナの必要性及び能力を記述する任意のメタデータに加えて、ソフトウェアコンテナを走らせるための全ての必要な要件を含むバイナリファイルである。コンテナイメージファイル自体は、ソフトウェアコンテナを走らせるために必要な実行可能な命令を定義するいくつかの層から構成される。
【0017】
例えば、コンテナイメージファイルは、ソフトウェアアプリケーションの実行可能なコードを定義するいくつかの層、ソフトウェアアプリケーションが依存する任意のソフトウェア依存性に対するコードを定義するいくつかの層、及び任意の必要な構成設定に対するコードを定義するいくつかの層を含み得る。
【0018】
コンテナイメージファイルは、多くの場合、コンテナイメージレジストリに記憶される。各コンテナイメージファイルは、コンテナイメージファイル内の層及びメタデータを定義する特定のコンテナイメージ形式で記憶される。例えば、オープンコンテナイニシアチブ(OCI)イメージ形式は、各層のtarファイル、及びイメージファイルに関連付けられたメタデータを指定するJSON形式のマニフェストファイルとして、イメージファイルを定義する。
【0019】
SST又はPOS端末のカーネル上にインストールされているドライバは、適宜、更新する必要がある場合がある。これを行う1つの方法は、カーネルドライバを更新するために、ローカル又はリモートで端末にアクセスするエンジニアによる手動の介入によるものである。
【0020】
これを、別の方法では、SST又はPOS端末上で、特権アクセスを有するソフトウェアコンテナを走らせることによって達成することができ、これは、コンテナが、基礎となるホストコンピューティングデバイスのほとんど又は全てのルート機能を有し、それに伴って、非特権コンテナでは利用可能ではないことになるリソースへのアクセス(カーネルを更新することなど)を可能にすることを意味する。
【0021】
しかしながら、ゆえに特権アクセスを有するソフトウェアコンテナを提供することはセキュリティリスクであり、展開のベストプラクティスに反するものである。これは、SST及びPOS端末が堅牢なセキュリティを有する必要があることを考慮すると、特に小売において懸念される。
【0022】
既知のアプローチでは、Ansibleなどのいくつかの自動化システムを使用して、基礎となるホストコンピュータのベアメタル上にドライバのセットを自動的にインストールする。これらの全てのアプローチには、いくつかの問題がある。
【0023】
1.セキュリティ-誰か又は何らかのプロセスが、ベアメタルレベルでのホストコンピュータへの特権アクセスを必要とすること。
【0024】
2.ドライバの事前構築-どのドライバが必要になるか、及びどのカーネルバージョンがインストールされるかを事前に知っておく必要があるため、適切なカーネルのために適切なドライバを事前構築する必要があること。
【0025】
3.ホストファイルシステムが通常、「構成ドリフト」のソースである新しいドライバを含むように少なくとも修正され、その結果、同じであるべきシステムが互いに分岐することになること。
【0026】
4.アプリケーションソフトウェアの配信を管理するために使用されるライフサイクル及びツール類が、ドライバソフトウェアの配信を管理するために使用されるライフサイクル及びツール類とは異なること。
【0027】
本発明の目的は、上述の問題のうちの1つ以上を少なくとも部分的に軽減することである。
【0028】
本発明のある特定の実施形態の目的は、ソフトウェアコンテナが特権アクセスを有することを必要とすることなく、カーネルのドライバを更新することができるソフトウェアコンテナを提供するのを助けることである。
【0029】
本発明のある特定の実施形態の目的は、最新のカーネルドライバを自動的かつ安全にインストールするのを助けることである。
【0030】
本発明のある特定の実施形態の目的は、カーネルドライバのためのコードの配信、及びカーネルドライバ構築プロセスの抽象化を可能にする、ソフトウェアコンテナを提供するのを助けることである。このようにして、事前にドライバを調整及び構築する必要なしに、最新のドライバを、任意のコンピューティング環境において(すなわち、オペレーティングシステムに関係なく)カーネル上に、トランスペアレントにインストールすることができる。
【0031】
本発明のある特定の実施形態の目的は、ターゲットカーネルドライバを構築し、次いで、カーネルの必要性に従って、これらのターゲットカーネルドライバをカーネルに提供することができる、ソフトウェアコンテナを提供することである。
【0032】
本発明のある特定の実施形態の目的は、事前に構築されたバイナリを必要とせずに、様々なオペレーティングシステム及びカーネルバージョンを含む広範な動作環境で、ツリー外のカーネルドライバを使用する柔軟性を提供するのを助けることである。
【0033】
本発明の第1の態様によれば、少なくとも1つの所定のターゲットドライバが、コンピューティングデバイスのカーネル上にインストールされるべきかどうかを判定するためのコンピュータ実装方法であって、コンピューティングデバイスの1つ以上のプロセッサ上で実行可能である実行可能なソフトウェアを包含する少なくとも1つのソフトウェアコンテナエレメントによって、コンピューティングデバイスのカーネルから、カーネル上にインストールされている少なくとも1つのアクティブドライバを示す第1のデータを受信することと、第1のデータを、カーネル上にインストールされるべき少なくとも1つの所定のターゲットドライバを示す第2のデータと比較することと、比較に応答して、所定のターゲットドライバのうちの少なくとも1つがカーネル上にインストールされていないかどうかを判定することと、を含む、コンピュータ実装方法が提供される。
【0034】
いみじくも、本方法は、カーネル上にインストールされていない、所定のターゲットドライバのうちの少なくとも1つの選択されたターゲットドライバが存在すると判定することに応答して、ソフトウェアコンテナエレメント内に、選択されたターゲットドライバのうちの少なくとも1つを構築することを更に含む。
【0035】
いみじくも、本方法は、動的カーネル作成システム(DKMS)を使用して、ソフトウェアコンテナエレメント内に、選択されたターゲットドライバを構築することを更に含む。
【0036】
いみじくも、本方法は、ソフトウェアコンテナエレメント内に構築された、選択されたターゲットドライバをカーネルに提供することと、ソフトウェアコンテナエレメント内に構築された、選択されたターゲットドライバをカーネル上にインストールすることと、を更に含む。
【0037】
いみじくも、本方法は、所定のターゲットドライバの各々に関連付けられたソースコードと、所定のターゲットドライバの各々がどのように構築されるかを定義するコードと、を少なくとも定義するソフトウェアとして、実行可能なソフトウェアを単一のソフトウェアコンテナエレメント内に提供することを更に含む。
【0038】
いみじくも、本方法は、
所定のターゲットドライバの各々に関連付けられたソースコードと、
動的カーネル作成システム(DKMS)のフレームワークと、
DKMSの構成と、
所定のターゲットドライバを構築するためにDKMSによって使用可能な少なくとも1つの構築ツールと、を少なくとも定義するソフトウェアとして、実行可能なソフトウェアを単一のソフトウェアコンテナエレメント内に提供することを更に含む。
【0039】
いみじくも、本方法は、所定のターゲットドライバのそれぞれの所定のターゲットドライバに関連付けられたソースコードと、それぞれの所定のターゲットドライバがどのように構築されるかを定義するコードと、を少なくとも定義するソフトウェアとして、実行可能なソフトウェアを各それぞれのソフトウェアコンテナエレメントに提供することを更に含む。
【0040】
いみじくも、本方法は、カーネル上にインストールされている各アクティブドライバを示すデータとして、第1のデータを受信することを更に含む。
【0041】
いみじくも、本方法は、カーネル上にインストールされている少なくとも1つのアクティブドライバのドライバタイプ及びドライババージョンを示すデータとして、第1のデータを受信することを更に含む。
【0042】
いみじくも、本方法は、ソフトウェアコンテナエレメントで、1つ以上のカーネルヘッダファイルを受信することを更に含む。
【0043】
いみじくも、本方法は、カーネルヘッダファイルを読み取り専用でソフトウェアコンテナエレメントにマウントすることを更に含む。
【0044】
いみじくも、第1のデータを第2のデータと比較することは、カーネルから受信した1つ以上のファイルにクエリ実行して、カーネル上にインストールされている各アクティブドライバのタイプ及びバージョンを判定することを含む。
【0045】
いみじくも、第1のデータを第2のデータと比較することは、実行可能なソフトウェアにクエリ実行して、上記の少なくとも1つの所定のターゲットドライバのタイプ及びバージョンを判定することを更に含む。
【0046】
いみじくも、本方法は、比較に応答して、カーネル上に存在しない又はカーネル上に古いバージョンがインストールされている、所定のターゲットドライバのうちの少なくとも1つの選択されたターゲットドライバを判定することを更に含む。
【0047】
いみじくも、本方法は、INITタイプのソフトウェアコンテナエレメントとして、ソフトウェアコンテナエレメントを提供することを更に含む。
【0048】
いみじくも、本方法は、コンピューティング環境に関係なく実行可能であるソフトウェアとして、実行可能なソフトウェアを提供することを更に含む。
【0049】
いみじくも、本方法は、ソフトウェアコンテナエレメントを介して、隔離されたコンピューティング環境で実行可能なソフトウェアを実行することを更に含む。
【0050】
本発明の第2の態様によれば、ソフトウェアコンテナエレメント内に包含された実行可能なソフトウェアを実行するように構成された1つ以上のプロセッサを備えるコンピューティングデバイスであって、ソフトウェアが、実行されたときに、コンピューティングデバイスのカーネルから、カーネル上にインストールされている少なくとも1つのアクティブドライバを示す第1のデータを受信し、第1のデータを、カーネル上にインストールされるべき少なくとも1つの所定のターゲットドライバを示す第2のデータと比較し、かつ所定のターゲットドライバのうちの少なくとも1つがカーネル上にインストールされていないかどうかを判定するように構成されている、コンピューティングデバイスが提供される。
【0051】
いみじくも、コンピューティングデバイスは、ポイントオブセール端末又はセルフサービス端末である。
【0052】
本発明の第3の態様によれば、命令を含むコンピュータプログラムであって、命令が、コンピューティングデバイスによって実行されたときに、コンピューティングデバイスに、本発明の第1の態様によって定義される方法のステップを遂行させる、コンピュータプログラムが提供される。
【0053】
本発明のある特定の実施形態は、コンテナが、必要なドライバを用いてホストコンピューティングデバイスのカーネルを構成することができるように、ソフトウェアコンテナ内に動的カーネル作成システムを提供するのに役立つ。
【0054】
本発明のある特定の実施形態は、ソフトウェアコンテナ内にカーネルドライバ構築ソフトウェアを提供するのを助け、これにより、構築ソフトウェアがパッケージ化され、かつ任意のコンピューティング環境に配信されることを可能にする。
【0055】
本発明のある特定の実施形態は、SST又はPOS端末上で走っている広範なオペレーティングシステム及びカーネルバージョンに対して、事前にカーネルドライバを事前構築する必要なしに、最新のカーネルドライバをインストールするための方法論を提供するのに役立つ。したがって、この方法論は、どのOS及びカーネルバージョンが任意のSST又はPOS端末上にインストールされているかについての柔軟性を提供するのに役立つ。
【0056】
本発明のある特定の実施形態は、コンピューティングデバイスであって、コンピューティングデバイス上に存在するカーネルドライバが正しく、かつ最新のものであることを保証するソフトウェアコンテナを実行してから、コンピューティングデバイス上の他のソフトウェアコンテナを実行する、コンピューティングデバイスを提供するのに役立つ。
【0057】
本発明のある特定の実施形態は、カーネルドライバを構築するためのINITタイプのソフトウェアコンテナを提供するのに役立つ。
【0058】
本発明のある特定の実施形態は、カーネル上にインストールされるべき任意の所定のターゲットドライバがカーネル上にインストールされていないかどうかを判定するための方法論を提供するのに役立つ。
【0059】
本発明のある特定の実施形態は、任意のドライバをカーネル上にインストールする必要があるかどうかを判定し、実際にカーネル上にインストールする必要があるドライバを動的に構築し、かつこれらの構築されたドライバをインストールのためにカーネルに提供するための方法論を提供するのに役立つ。
【0060】
ここで、本発明の実施形態を、例としてのみ、添付図面を参照して以降で説明する。
【0061】
図面では、同様の参照番号は同様の部品を指す。
【図面の簡単な説明】
【0062】
図1】コンピューティングシステムを示す。
図2】Kubernetesオーケストレーションプラットフォームの制御下にあるコンピューティングシステムを示す。
図3】いくつかのソフトウェアコンテナを実行するセルフサービス端末のためのハードウェア及びソフトウェアアーキテクチャを示す。
図4】セルフサービス端末上で実行されるソフトウェアコンテナエレメントを示す。
図5】複数のセルフサービス端末と通信するサーバ上で実行されるソフトウェアを示す。
図6】実行可能なイメージファイルの層を示す。
図7】カーネルの必要性に従ってカーネルドライバを構築するように構成されたソフトウェアコンテナがどのように提供されるかを説明するフローチャートを示す。
【発明を実施するための形態】
【0063】
図1は、コンピューティングシステム100を示す。コンピューティングシステム100には、3つのセルフサービス端末(SST)110、110、110がある。
【0064】
SSTは、コンピューティングデバイスの一例である。本発明のある特定の他の実施形態では、コンピューティングデバイスは、ポイントオブセール(POS)端末、現金自動預け払い機(ATM)、パーソナルコンピュータ、ラップトップ、タブレットなどであってもよい。各SSTは、1つ以上のプロセッサ112、及び少なくとも1つのメモリ114を含む。
【0065】
メモリは、非一時的コンピュータ可読記憶媒体である。メモリ114は、SSTのプロセッサ112によって実行可能である実行可能なソフトウェアを記憶する。各SSTはまた、サーバと通信するための通信インターフェース(図示せず)、及び接続された周辺デバイスと通信するための1つ以上の通信インターフェース(図示せず)を含み得る。図1に示されるシステムでは、スキャナ周辺デバイス120及びスケール周辺デバイス120が、第1のSST110に接続されている。また、プリンタ周辺デバイス120及びスキャナ周辺デバイス120が、第2のSST110に接続されている。
【0066】
また、スケール周辺デバイス120、プリンタ周辺デバイス120、及びスキャナ周辺デバイス120が、第3のSST110に接続されている。本発明のある特定の他の実施形態では、各SSTは、周辺デバイスの異なる組み合わせに接続され得ることが理解されよう。各周辺デバイスは、有線インターフェース122を介して接続されるSSTと通信し得る。
【0067】
本発明のある特定の他の実施形態では、インターフェースは、無線、又は有線と無線との組み合わせであってもよいことが理解されよう。各SSTは、ネットワーク140を介してサーバ130と通信する。
【0068】
サーバもまた、コンピューティングデバイスの一例である。ネットワーク140は、有線、無線、又は有線と無線との組み合わせであってもよい。サーバ130もまた、1つ以上のプロセッサ132、及び少なくとも1つのメモリ134を含む。
【0069】
メモリ134もまた、非一時的コンピュータ可読記憶媒体である。メモリ134は、サーバのプロセッサによって実行可能である実行可能なソフトウェアを記憶する。SST及びサーバの実行可能なソフトウェアについて、以下でより詳細に説明する。
【0070】
図2は、コンピューティングシステム200を示す。コンピューティングシステムは、Kubernetesコンテナオーケストレーションプラットフォームの制御下にある、いくつかのコンポーネントを有する。そのため、本システムは、Kubernetesクラスタと称され得る。Kubernetesクラスタは、Kubernetesマスタ215を走らせるサーバ210と、それぞれのKubernetesワーカ230、230を走らせるセルフサービス端末(SST)220、220と、を含む。サーバ210は、物理サーバであっても、クラウドサーバであってもよいことが理解されよう。
【0071】
サーバ210及びSSTは、ローカルエリアネットワーク又はインターネットなどの、ネットワーク205を経由して通信する。ネットワークは、有線及び/又は無線であってもよい。SST以外のデバイスをネットワークに接続して、Kubernetesワーカを走らせることができることが理解されよう。
【0072】
サーバ210上で走るKubernetesマスタ215は、Kubernetesクラスタを管理するAPIサーバ216を含む。APIサーバ216は、マスタ215の他の内部コンポーネントから受信する情報に基づいてコマンドを発行し、かつKubernetesワーカ230、230上で走るkubectl212及びkubelet(SST2 220上のkubelet231など)などの外部コンポーネントとインターフェース接続する。Etcd217は、クラスタの構成などの情報を記憶するKubernetesクラスタのための配信データベースである。
【0073】
Etcd217はまた、Kubernetesワーカ230、230の望ましい状態、及びKubernetesワーカ230、230の実際の状態を記憶する。ある状態は、クラスタ内の各Kubernetesワーカ230、230上で走っている、ポッド(SST2 220上のポッド3 235など)及びポッドのコンテナ(ポッド235のコンテナ236など)の指標であると理解され得る。スケジューラ218は、新しいポッドをKubernetesワーカ上でいつ走らせるかを監視し、次いで、当該ポッドをどのKubernetesワーカ上に展開するかを決定する。
【0074】
コントローラマネージャ219は、etcd217に対して指定された望ましい状態に近づくようにKubernetesワーカ230、230の実際の状態を移動させることを試みるコントローラプロセスを走らせる。マスタ215はまた、kubectl212、APIサーバ216を介してKubernetesクラスタと通信するためのコマンドラインツール、及びオペレータインターフェース211を含む。
【0075】
Kubernetesクラスタ内に位置する各Kubernetesワーカ230、230は、SST上で走る。本発明のある特定の実施形態によれば、ワーカは、SSTの仮想マシン上で走らせることができる。
【0076】
ワーカ230は、ネットワーク205を介して、他のワーカ230及びマスタ215と通信することができる。各ワーカ230は、ワーカ230の動作を管理するkubeletを有する。kubelet(SST220上のkubelet231など)は、ワーカ230の他のコンポーネントにコマンドを発行し、ワーカ(ポッド235など)及びワーカのコンテナ(コンテナ236など)上で走るポッドを監視し、かつAPIサーバ216と通信する。kubelet231は、展開ファイルを受信し、これらの展開ファイルに記述されたコンテナ236が走っており、かつ正常であることを保証する。
【0077】
kube-proxy(kube-proxy232など)は、ポッドが、同じKubernetesワーカ及び異なるワーカの両方で通信することを可能にする、ネットワークプロキシである。コンテナエンジン(エンジン233など)は、コンテナを走らせ、かつ管理して、kubeletからのコマンド、及びレジストリからのコンテナイメージを受信する。
【0078】
コンテナエンジンは、内部にランタイムが位置するKubernetesワーカ内のコンテナを走らせることに関与するコンテナランタイム(コンテナランタイム234など)に渡されるコンテナメタデータを準備する。
【0079】
Kubernetesマスタ215のAPIサーバ216によってポッドがKubernetesワーカに展開された後、任意のKubernetesワーカ内にポッドが存在する。ポッドは一般に単一のコンテナを含むが、ポッドは、ストレージ及びネットワークリソースを共有することになる、類似の機能を有する複数のコンテナを含み得る。
【0080】
ポッドは、kubeletを介して、ワーカが利用可能な特定のリソースへのアクセスを要求するか、又はkube-proxyを使用することによって、他のポッドと通信することができる。
【0081】
図3は、いくつかのソフトウェアコンテナエレメントを実行するように構成されたセルフサービス端末のためのハードウェア及びソフトウェアアーキテクチャ300を示す。
【0082】
図3では、基礎となるハードウェアは、SST310である。これは、図1又は図2に関して記述されるSSTのうちの1つであってもよい。上述のように、SSTは、1つ以上のプロセッサ、及び少なくとも1つのメモリを含む。メモリは、プロセッサによって実行可能である実行可能なソフトウェアを記憶する。
【0083】
実行可能なソフトウェアには、(Unix、Ubuntuなどのような)ホストオペレーティングシステムの一部であってもよい、Linuxカーネル320が含まれる。本発明のある特定の他の実施形態では、他のカーネル及び他のホストオペレーティングシステム(Windows、Macなど)を利用することができることが理解されよう。実行可能なソフトウェアの一部として、コンテナエンジン330も含まれる。
【0084】
コンテナエンジンは、ユーザ要求、又は(Kubernetes、Swarm、Mesosなどのような)コンテナオーケストレータのAPIサーバからの要求を受け入れ、レジストリから(特定のイメージ形式の)イメージファイルを引き出し、コンテナマウントポイントを準備し、ソフトウェアコンテナを実行するのに必要なメタデータを準備し、かつコンテナランタイムを呼び出すことに関与する。
【0085】
コンテナランタイム(図示せず)は、コンテナエンジンの一部である。コンテナランタイム(runc、containerd、crun、railcar、katacontainersなどのような)は、いくつかのコンテナイメージファイルを実行し、かつそれによって、いくつかのソフトウェアコンテナを作成するために、マウントポイント、及びコンテナエンジンによって提供されるメタデータを使用し、コンピューティングデバイス上で走っているLinuxカーネル320と通信する。
【0086】
図3に示されるソフトウェアコンテナの各々についての実行可能なイメージファイルは、レジストリからダウンロードされ得る。図3では、4つのソフトウェアコンテナエレメントが示されている。
【0087】
第1のソフトウェアコンテナエレメント340は、デバイスサーバコンテナと称される。デバイスサーバコンテナは、アプリケーションソフトウェア342、並びに関連付けられたバイナリ及びライブラリ344を含む(バイナリ及びライブラリは、ソフトウェア依存性と称され得る)。
【0088】
デバイスサーバコンテナ内で走るアプリケーションは、低いレベルで、SSTに接続された周辺デバイスのうちの1つ以上を制御すること、構成すること、又は別様に当該周辺デバイスにアクセスすること、並びにネットワークを横切って、SSTの他のコンポーネントに事業レベルの機能を公開することに関与する。例えば、デバイスサーバは、「USB」プロトコルを介して、スキャナ(低レベル)と通信し、スキャンされたバーコード(事業レベル)を他のコンポーネントに報告し得る。デバイスサーバコンテナ内のソフトウェアは、周辺デバイスパスにアクセスし、ひいては、周辺デバイスを使用するか、又は周辺デバイスと相互作用することができる。
【0089】
第2のソフトウェアコンテナエレメント350は、INITコンテナと称される。INITコンテナは、アプリケーションソフトウェア352、並びに関連付けられたバイナリ及びライブラリ354を含む(バイナリ及びライブラリは、ソフトウェア依存性と称され得る)。INITコンテナ内で走るアプリケーションは、本明細書に記載されるように、カーネルドライバを検出、構築、及びインストールすることに関与する。当業者であれば、2つ以上のINITコンテナが提供され得ることを理解されよう。
【0090】
各INITコンテナは、特定のカーネルドライバを構築し得る。INITコンテナは、そのポッド内で初期化されてから、メイン(INITではない)コンテナを開始する。INITコンテナは、Kubernetesシステムの概念であるが、最初に(すなわち、他のコンテナの前に)実行されるように構成されたコンテナもまた、他のコンテナオーケストレーションプラットフォームにおいて利用され得ることが理解されよう。
【0091】
第3のソフトウェアコンテナエレメント360は、エンドポイントコンテナと称される。エンドポイントコンテナは、アプリケーションソフトウェア362、並びに関連付けられたバイナリ及びライブラリ364を含む(バイナリ及びライブラリは、ソフトウェア依存性と称され得る)。
【0092】
エンドポイントコンテナ内で走るアプリケーションにより、マザーボードのユニバーサル固有識別子(UUID)などの、SSTに関する情報が、Kubernetesクラスタの残りの部分に対して利用可能になる。第4のソフトウェアコンテナエレメント370は、デバイスプラグインコンテナと称される。
【0093】
デバイスプラグインコンテナは、アプリケーションソフトウェア372、並びに関連付けられたバイナリ及びライブラリ374を含む(バイナリ及びライブラリは、ソフトウェア依存性と称され得る)。デバイスプラグインコンテナ内で走るアプリケーションは、どの周辺デバイスがSSTに接続されているかを知らせることに関与する。
【0094】
図3に見ることができるように、各ソフトウェアコンテナエレメントは、独自のバイナリ及びライブラリ(bin/lib)を有する。しかしながら、本発明のある特定の他の実施形態によると、コンテナの任意の組み合わせは、bin/libを共有し得ることが理解されよう。
【0095】
ここで図4を参照すると、セルフサービス端末400、及びセルフサービス端末上で実行されるように構成された(SSTの1つ以上のプロセッサ上にある)ソフトウェアコンテナエレメントが示されている。
【0096】
SST上のソフトウェアコンテナの各々は、(イメージファイルによって定義される)実行可能なソフトウェアを包含する。実行可能なソフトウェアは、隔離されたコンピューティング環境でソフトウェアが実行されるような方法で、コンテナ内で実行される。ソフトウェアは、動作するためにSST上で同様に実行される他のソフトウェアコンテナのいずれにも依存しないという意味において、隔離されている。
【0097】
ソフトウェアは、独自のコンピューティング環境で効果的に実行され、かつ事前定義された通信経路を介して、この環境の外側にあるハードウェア/ソフトウェアと通信する。ソフトウェアコンテナ内に実行可能なソフトウェアを提供することは、コンピューティング環境に関係なくソフトウェアを実行することができることを意味する。
【0098】
図4では、コンテナは、Kubernetesコンテナオーケストレーションプラットフォームを使用して管理されている。図4に示されるSSTは、上記の図1図3のいずれかを参照して説明されるSSTであってもよい。SST400は、ホストオペレーティングシステムの一部としてLinuxカーネル405を走らせる。当然のことながら、本発明のある特定の他の実施形態に従って、他のオペレーティングシステムを使用することができる。
【0099】
Kubernetesシステムを使用して、セルフサービス端末は、Kubernetesワーカ410と称されるソフトウェアを実行する。Kubernetesワーカはまた、ノードと称されることもある。
【0100】
第1のソフトウェアコンテナエレメント420、第2のソフトウェアコンテナエレメント430、第3のソフトウェアコンテナエレメント440、及び第4のソフトウェアコンテナエレメント450が、Kubernetesワーカ410内に含まれる。
【0101】
Kubernetesプラットフォームは、図2を参照して説明されるように、これらのコンテナを管理することに関与する。第1のソフトウェアコンテナ、第2のソフトウェアコンテナ、第3のソフトウェアコンテナ、及び第4のソフトウェアコンテナは、図3を参照して説明されるのと同じコンテナであってもよい。
【0102】
セルフサービス端末400は、また、Kubernetesワーカ410の外部を実行する追加のソフトウェア(図示せず)を含む。Kubernetesワーカ410では、第1のソフトウェアコンテナ420及び第2のソフトウェアコンテナ430は、デバイスサーバポッド425と称される単一のポッド内で実行される。第1のソフトウェアコンテナ420はINITタイプのものであるため、デバイスサーバポッド内で実行される(すなわち、デバイスサーバコンテナの前に実行される)第1のコンテナである。第3のソフトウェアコンテナ440は、エンドポイントポッド445と称される単一のポッド内で実行される。 第4のソフトウェアコンテナ450は、デバイスプラグインポッド455と称される単一のポッド内で実行される。これらのポッドの各々の作成は、当業者によって理解されるように、3つの異なるポッド仕様ファイル(すなわち、deployment.YAMLファイル)によって定義される。
【0103】
ポッドは、共有ストレージ及びネットワークリソースを備えたコンテナ、並びにポッド内でコンテナをどのように走らせるかについての仕様を提供するために、Kubernetesで使用される。当然のことながら、本発明のある特定の他の実施形態では、異なるコンテナオーケストレーションプラットフォーム(例えば、Docker compose、Docker swarmなど)を使用することができ、これらの他のプラットフォームでは、ポッドを使用する必要がない場合があることが理解されよう。
【0104】
SST400の動作中、これらのポッド/コンテナの各々は、コンテナエンジン(図示せず)のコンテナランタイム(図示せず)によって実行される。これらのコンテナの各々に関連付けられたイメージファイルは、レジストリからダウンロードされ得る。
【0105】
SST400のスタートアップ時に、オペレーティングシステム及びコンテナエンジン(図示せず)に関連付けられたソフトウェアが実行されると、SST上で走っているkubelet(図示せず)に、Kubernetesマスタからの展開ファイルが提供される。展開ファイルは、ある特定のポッド(及びこれらのポッドに関連付けられたソフトウェアコンテナ)をSST上で実行するために、kubeletからコンテナエンジンに渡される。これらのポッドのうちの1つは、INITコンテナ及びデバイスサーバコンテナを含む、デバイスサーバポッドである。
【0106】
これらのコンテナの各々についてのイメージファイルは、コンテナイメージレジストリからダウンロードされる。INITコンテナイメージファイルは、SSTのカーネル上にインストールされるべき所定のターゲットドライバのセットの各々に対するソースコードに関連する実行可能な命令を定義する層を含む。INITコンテナの層はまた、動的カーネル作成システム(DKMS)のフレームワーク及び構成に関連する実行可能な命令を定義する。INITコンテナの層はまた、カーネルドライバ(すなわち、所定のターゲットドライバ)を構築するためにDKMSによって要求されるLinux構築ツールに関連する実行可能な命令を定義する。
【0107】
SSTがLinuxカーネルを走らせるため、構築ツールはLinuxベースであることが理解されよう。しかしながら、本発明のある特定の他の実施形態によれば、他のオペレーティングシステム(Windows、Macなど)が用いられる場合、構築ツールはLinuxベースである必要はない場合があることが理解されよう。
【0108】
本発明のある特定の他の実施形態では、単一のINITコンテナ内の所定のターゲットドライバのセットの各々に対してソースコードを提供する代わりに、各々が、それぞれの1つの所定のターゲットドライバのソースコードを含む別個のINITコンテナが提供され得ることが理解されよう。これらの別個のINITコンテナの各々はまた、各々がDKMSのフレームワーク及び構成と、Linux構築ツールと、を含むことになる。
【0109】
INITコンテナのイメージファイルが実行されると、INITソフトウェアコンテナが提供される。このソフトウェアコンテナは、実行可能なソフトウェアを包含し、かつ上で論じたようにイメージファイルによって定義される実行可能な命令を含む。INITコンテナは、事前定義されたタイプのものであり、事前定義されたタイプとは、INITコンテナが、同じポッド内の他のコンテナの前に実行されることを意味することが留意される。
【0110】
INITコンテナはKubernetesプラットフォームに特有なものであるが、他のコンテナオーケストレーションプラットフォームを使用して、他のコンテナの前に1つのコンテナを実行するための同様のメカニズムがあることが理解されよう。INITコンテナは、実行されると、ある特定のステップを行って、他のコンテナが実行される前に、カーネル上に最新のデバイスドライバがインストールされていることを保証する。
【0111】
まず、INITコンテナの実行時に、どのアクティブドライバがカーネル上にインストールされているかを示すデータがINITコンテナに送信される。データは、コンテナ内にマウントされているホストOSからのドライバ情報ファイルとして受信され得る。
【0112】
Linuxでは、カーネルは、ファイル「/proc/modules」にロードされたドライバのリストを公開し、コマンド「lsmod」を使用する。ドライバのバージョンは、「modinfo」コマンドを使用して確認することができる。したがって、ドライバ情報ファイルは、カーネル上に現在インストールされている各アクティブドライバのタイプ及びバージョンの指標を提供し得る。
【0113】
ドライバ情報ファイルがINITコンテナ内にマウントされると、INITコンテナは、ファイルに問い合わせて、必要なドライバ(及びバージョン)が既にカーネル上にインストールされているかどうかを判定する。これには、カーネルバージョンが最新であるかどうかを判定することが含まれる。
【0114】
これは、ファイルにクエリ実行して、カーネル上にインストールされている各アクティブドライバのタイプ及びバージョンを判定することと、INITコンテナ内の実行可能なソフトウェアにクエリ実行して、カーネル上にインストールされるべき各所定のターゲットドライバのタイプ及びバージョンを判定することと、を伴う。
【0115】
次いで、INITコンテナは、(カーネルドライバ情報ファイル及びINITコンテナからの)これらの2つのデータのセットを比較して、所定のターゲットドライバのいずれかのドライバをカーネル上にインストールするべきかどうかを判定する。
【0116】
このデータの比較により、必要なドライバ(及びバージョン)の全てがカーネル上にインストールされているという結論に至った場合、いかなるアクションも必要とせず、INITコンテナの実行が終了する。次いで、デバイスサーバポッド内のデバイスサーバコンテナが実行され得る。しかしながら、比較により、所定のターゲットドライバからのドライバのいずれもカーネル上にインストールされていない、又は所定のターゲットドライバのドライバのいずれかのバージョンが、カーネル上にインストールされているそれぞれのアクティブドライバよりも最新であるという結論に至った場合、INITコンテナは、更なるアクションを取る。
【0117】
特に、INITコンテナは、必要なドライバ(所定のターゲットドライバのうちのいくつか)がINITコンテナ内に構築される構築段階を始める。これは、INITコンテナの実行可能なソフトウェア内に定義されたフレームワーク及び構成を有する動的カーネル作成システム(DKMS)を使用して達成され得る。
【0118】
より詳細には、DKMSは、動的にカーネルドライバを構築するためのフレームワークである。これは、構成ファイルの形式で、走っているカーネルのカーネルヘッダ、ターゲットドライバのソースコード、及びいくつかの構築命令を取る。
【0119】
次いで、カーネルドライバを構築するために必要なコマンドを実現させるために構成ファイルをどのように解釈するかを理解し、次いで、コマンドを実行する。カーネルヘッダファイルは、コンテナが実行されたときに、カーネル読み取り専用からINITコンテナにマウントされ得る。カーネルヘッダの役割は、ターゲットドライバを正しく構築することを可能にし、かつ現在走っているカーネルとの互換性を保証することである。
【0120】
INITコンテナ内にドライバが構築されると、次いで、これらの構築されたドライバがカーネルに提供される。カーネルは、これらのドライバを受信し、次いで、カーネル上にドライバをインストールするプロセスを実行する。これは、ドライバの実行可能な命令をメモリにロードし、かつこれらの命令を、走っているカーネルにリンクすることによって遂行される。
【0121】
Linuxでは、構築されたドライバをINITコンテナからカーネルに提供するために、insmodコマンドが使用される。INITコンテナは、SYS_MODULE機能を有し、そのため、このコマンドを遂行することができる。他のオペレーティングシステムについては、他のコマンドが使用されることになることが理解されよう。このようにして、INITコンテナは、カーネルへの特権アクセスを有する必要はない。
【0122】
INITコンテナが、(インストールする必要のある)必要なターゲットドライバを全て構築し、これらをインストールのためにカーネルに提供すると、INITコンテナは実行を終了する。次いで、デバイスサーバポッド内のデバイスサーバコンテナが実行され得る。
【0123】
図5は、Kubernetesマスタ及びKubernetesワーカを隔離して、走らせているサーバ500を示す。
【0124】
サーバは、複数のSST(図5には示されていない)と通信し得る。サーバは、1つ以上のプロセッサ(図示せず)、及び少なくとも1つのメモリ(図示せず)を有する。メモリは、ランタイム時にプロセッサによって実行される実行可能なソフトウェアを記憶する。実行可能なソフトウェアは、(ホストOSの)Linuxカーネル510を含む。
【0125】
本発明のある特定の他の実施形態では、他のオペレーティングシステムが使用され得ることが理解されよう。実行可能なソフトウェアはまた、Kubernetesマスタ520を含む。
【0126】
Kubernetesは、図2を参照して上述したのと同様のコンポーネントを含む。これらは、APIサーバ522、スケジューラ524、コントローラマネージャ526、及びetcdデータベース528である。Kubernetesワーカ530もまた、サーバ上で実行される。Kubernetesワーカ530は、3つのポッドを含み、ポッド自体は、ソフトウェアコンテナエレメントを含む。
【0127】
サーバ上の第1のポッドは、動的コンテナプロキシポッド532である。このポッドは、対応する動的コンテナプロキシソフトウェアコンテナを含む。動的プロキシソフトウェアコンテナは、実行可能なイメージファイルに対するコンテナエンジンからの要求を受信することに関与する。
【0128】
サーバ上の第2のポッドは、上流のコンテナレジストリポッド534である。このポッドは、対応する上流のコンテナレジストリソフトウェアコンテナを含む。レジストリコンテナは、イメージファイルを記憶し、かつ要求に応じて、これらのイメージファイルをコンテナエンジンに提供することに関与する。サーバ上の第3のポッドは、事業ロジックポッド536である。このポッドは、対応する事業ロジックソフトウェアコンテナを含む。
【0129】
図6は、ソフトウェアコンテナとして実行するための実行可能なイメージファイル600の概略図を示す。図6に示されるイメージファイルは、図4のデバイスサーバコンテナを提供するために実行可能である。
【0130】
図6に見ることができるように、実行可能なイメージファイルは、ベースオペレーティングシステム層605、Java層610、ドライバ層615、共通層620、ユーティリティ層625、スキャナ層630、スケール層635、プリンタ層640、及びデバイスサーバ層645を有する。これらの層を有するこのイメージファイルは、レジストリに記憶され、かつ端末のコンテナエンジンからの要求に応じてダウンロードされ得る。ベースOS層は、ソフトウェアコンテナ(例えば、Ubuntu)内で利用されるオペレーティングシステムを定義する。
【0131】
しかしながら、ベースOS層は、本発明のある特定の他の実施形態で必要とされない場合がある。Java層は、Javaプログラミング言語を解釈するための実行可能な命令を定義する。しかしながら、本発明のある特定の他の実施形態では、他のプログラミング言語が使用されている場合、Java層は必要とされない場合があることが理解されよう。
【0132】
ドライバ層は、イメージにユーザ空間ドライバをインストールすることに関与する実行可能な命令を定義する、任意選択の層である。ユーザ空間ドライバの一例は、低レベルのUSBヘルパであってもよい。一部のイメージは、いずれのユーザ空間ドライバも必要としない場合があることが理解されよう。
【0133】
共通層は、他の層によって共有又は使用されるフレームワークコンポーネントを包含する実行可能な命令を定義する。かかるフレームワークの一例は、他のコンポーネントからのログを制御及びキャプチャするために使用されるロギングフレームワークであってもよい。ユーティリティ層は、ユーザ向けユーティリティ及びツールを含む実行可能な命令を定義する、任意選択の層である。
【0134】
かかるツールの一例は、SST上にインストールされているデバイスのリストを閲覧し、かつ診断チェックを走らせるなどの動作により、これらのデバイスと相互作用するために使用され得る、システムメンテナンスユーティリティであってもよい。ドライバ層、共通層、及びユーティリティ層は、ソフトウェア依存性と集合的に称され得る。ドライバ層及び/又は共通層及び/又はユーティリティ層は、本発明のある特定の実施形態において必要とされない場合があることが理解されよう。
【0135】
スキャナ層は、スキャナ周辺デバイスと通信するための実行可能な命令を定義し、スケール層は、スケール周辺デバイスと通信するための実行可能な命令を定義し、プリンタ層は、プリンタ周辺デバイスと通信するための実行可能な命令を定義する。これらの層は、周辺デバイスドライバイメージ層と称され得る。
【0136】
スキャナ、スケール、及びプリンタの層は、特定のスキャナ、スケール、又はプリンタに関連付けられた層であることが理解されよう。一例として、スキャナは、NCR2356ハンドヘルドスキャナであってもよく、スケールは、NCR8789スケールであってもよく、プリンタは、NCR7169サーマルレシートプリンタであってもよい。
【0137】
本発明のある特定の他の実施形態では、他の周辺デバイス(バーコードリーダ、カメラなど)に関連付けられた層が必要となる場合があることも理解されよう。図6に示される周辺デバイスイメージ層は、必ずしも必要ではない場合があることも理解されよう。
【0138】
デバイスサーバ層は、低いレベルで、SSTに接続された周辺デバイスのうちの1つ以上を制御し、構成し、又は別様に当該周辺デバイスにアクセスし、かつネットワークを横切って、SSTの他のコンポーネントに事業レベルの機能を公開するための実行可能な命令を定義する。INITコンテナでは、層は、ホストOS層(例えば、Ubuntu層)、DKMSフレームワーク及び構築ツール層、カーネルドライバソースコード層、並びにドライバ検出、構築、及びロードコントローラ層であってもよい。
【0139】
図7は、必要に応じてカーネルドライバを更新するソフトウェアコンテナエレメントが、セルフサービス端末(SST)上で初期化されたときに行われる、ある特定のステップのブロック図700を示す。
【0140】
SSTは、図1図6に示されるSSTのいずれかであってもよい。SSTが最初に展開されるとき、第1のステップS705は、SSTのスタートアップ時に初期化されるべきコンテナのインスタンスの構成を指定する1つ以上の展開ファイルを作成することを伴う。
【0141】
展開ファイルは、他のものの中でも、ソフトウェアコンテナを提供するためにダウンロード及び実行されるイメージファイルの名前を指定する。展開ファイルはまた、どのリソースがコンテナによってアクセス可能になるかを指定する。
【0142】
展開ファイルが作成されると、展開ファイルは、SSTと通信するサーバ上で走っているKubernetesマスタのAPIサーバにアップロードされる。Kubernetesマスタは、図2又は図5に関して示されるのと同じマスタであってもよい。APIサーバは、展開ファイルを受信し、かつ展開ファイルを、Kubernetesマスタのetcdデータベースに記憶する。
【0143】
次のステップS710は、SSTの電源を入れることである。これは、店舗の開店時又は端末の再始動時など、毎日行われる場合がある。次いで、ホストOS及びKubernetesワーカ構成を含む、SST上のソフトウェアが、SSTのメモリからロードされ、SSTのプロセッサによって実行される。ホストOSは、カーネルを含む。Kubernetesワーカ構成がロードされると、最初、走っているポッドはない。次のステップS715は、Kubernetesマスタのコントローラマネージャによって、etcdに記憶されている展開ファイルで指定されるようにSST上で走らせる必要があるポッドと、SST上で現在走っているポッドとの間の差異を検出することを伴う。
【0144】
ポッドによって必要とされるリソースがKubernetesワーカで利用可能であることを判定するために、Kubernetesワーカで利用可能なリソースもチェックされることになる。SST上で実行する必要があるポッドがないこと、及び好適なリソースが利用可能であることを検出することに応答して、KubernetesマスタのAPIサーバは、この不一致を解決するためにSST上のkubeletに情報を送信する。
【0145】
この情報は、SST上で実行される各ポッドのための展開ファイルを含む。Kubernetesオーケストレーションプラットフォームを使用しない、本発明のある特定の他の実施形態によれば、コンテナは、ポッド内で走らせる必要なしに実行され得る(これは、Kubernetesシステムの特定の特徴である)ことが理解されよう。
【0146】
次のステップS720は、kubeletによって、APIサーバからの情報を受信し、かつ展開ファイルをSST上のコンテナエンジンエレメントに渡すことを伴う。
【0147】
展開ファイルを受信することに応答して、次のステップS725は、コンテナエンジンによって、展開ファイルを読み取り、かつコンテナイメージレジストリから、展開ファイルで指定された実行可能なイメージファイルを要求することを伴う。
【0148】
次いで、次のステップS730は、コンテナエンジンによって、複数のINITコンテナを含み得るポッドを実行することを伴う。INITコンテナの各々は、実行可能なソフトウェアを包含する。
【0149】
実行可能なソフトウェアは、SSTのプロセッサ(又は複数のプロセッサ)上で実行することができる。各INITコンテナ内の実行可能なソフトウェアは、所定のターゲットドライバのそれぞれの所定のターゲットドライバに関連付けられたソースコード、並びにそれぞれの所定のターゲットドライバがどのように構築されるかを定義するコードを定義する。
【0150】
より詳細には、INITコンテナの各々の中の実行可能なソフトウェアは、それぞれの所定のターゲットドライバ、動的カーネル作成システム(DKMS)のフレームワーク、DKMSの構成、及びそれぞれの所定のターゲットドライバを構築するためにDKMSによって使用されるLinux構築ツールに関連付けられたソースコードを定義する。
【0151】
本発明のある特定の他の実施形態では、構築ツールは、非Linuxベース(すなわち、カーネルがLinuxカーネルでない場合)であることになることが理解されよう。本発明のある特定の他の実施形態では、それぞれの所定のターゲットドライバに別個のINITコンテナを提供する代わりに、1つ、2つ、又は3つのINITコンテナが提供され得ることも理解されよう。
【0152】
これらのINITコンテナの各々は、例えば、所定のターゲットドライバのセット、動的カーネル作成システム(DKMS)のフレームワーク、DKMSの構成、及び所定のターゲットドライバのセットの各ターゲットドライバを構築するためにDKMSによって使用されるLinux構築ツールに関連付けられたソースコードを定義する実行可能なソフトウェアを包含し得る。
【0153】
単一のINITコンテナが提供される場合、このコンテナ内の実行可能なソフトウェアは、所定のターゲットドライバの各々、DKMSのフレームワーク、DKMSの構成、及び所定のターゲットドライバの各々を構築するためにDKMSによって使用可能な構築ツールに関連付けられたソースコードを定義することができる。
【0154】
SST上で必要とされる任意のINITコンテナのコンテナイメージファイルを、コンテナイメージレジストリで利用可能とすることができる。コンテナイメージファイルは、SSTのカーネル上にインストールされ得る最新のカーネルドライバを考慮して、必要に応じて及び必要なときに更新され得る。
【0155】
上述したように、INITコンテナは、ポッド内の他のコンテナの前に走らされ、そのため、実行する前に他のコンテナの環境を確立するために使用される。次いで、INITコンテナは、タスクを完了すると終了する。
【0156】
INITコンテナは、ソフトウェアコンテナエレメントの一例である。INITコンテナ内の実行可能なソフトウェアは、以下で説明されるように、SSTのホストOSのカーネル上にカーネルモジュールを構築及びロードすることに関与する。
【0157】
各INITコンテナの実行時、次のステップS735は、INITコンテナにおいて、カーネル上にインストールされているアクティブドライバを示すデータを受信することを伴う。データは、例えば、アクティブドライバの各々のタイプ及びバージョンを示す。
【0158】
データは、アクティブドライバの各々に関連付けられたOSから受信したファイルの形態で受信され得る。これらのファイルは、ドライバ情報ファイルと称され得る。これらのファイルは、INITコンテナにマウントされ得る。ファイルは、kubernetesワーカを走らせているSSTのカーネルから受信される。
【0159】
INITコンテナが、カーネル上にインストールされているアクティブドライバを示すデータを受信すると、次のステップS740は、このデータを、カーネル上にインストールされるべきそれぞれの所定のターゲットドライバを示す更なるデータと比較することを伴う。
【0160】
この更なるデータは、INITコンテナ内で指定され得る。(上で論じたように)単一のINITコンテナが提供される、本発明のある特定の他の実施形態では、更なるデータは、カーネル上にインストールされるべき所定のターゲットドライバの各々を示し得ることが理解されよう。
【0161】
この比較を行うために、ドライバ情報ファイルにクエリ実行して、カーネル上にインストールされている各アクティブドライバのタイプ及びバージョンを判定する。更に、INITコンテナ内の実行可能なソフトウェアにもクエリ実行して、インストールされるべきそれぞれの所定のターゲットドライバのタイプ及びバージョンを判定する。この比較は、実行される各INITコンテナに対して行うことができる。
【0162】
INITコンテナの実行可能なソフトウェアで指定されたそれぞれの所定のターゲットドライバが既にカーネル上にインストールされていると判定された場合、INITコンテナの実行を終了するステップS745が始められる。
【0163】
この場合、INITコンテナの実行可能なソフトウェアで指定されたそれぞれの所定のターゲットドライバとして、正しいタイプ及びバージョンのものであるアクティブドライバが既にカーネル上にあると推論されている。結果として、ホストOSのカーネル上に新しいドライバを構築及びインストールするためのアクションは必要ない。
【0164】
一方、INITコンテナの実行可能なソフトウェアで指定されたそれぞれの所定のターゲットドライバがカーネル上にインストールされていないと判定された場合、INITコンテナ内にそれぞれの所定のターゲットドライバを構築する次のステップS742がその後に続く。構築される所定のターゲットドライバは、選択されたターゲットドライバと称され得る。
【0165】
選択されたターゲットドライバは、動的カーネル作成システム(DKMS)を使用して構築される。上述したように、ドライバのカーネルソースコードは、INITコンテナ内に含まれる。更に、ターゲットドライバを正しく構築することを可能にするため、及び現在走っているカーネルとの互換性のための関連するカーネルヘッダファイルは、読み取り専用で、カーネルからコンテナにマウントされる。
【0166】
これらのヘッダファイルは、INITソフトウェアコンテナの実行時にマウントされている可能性がある。したがって、各INITコンテナは、カーネル上にインストールされている対応するアクティブドライバがないと判定する(又はインストールされているドライバが古いと判定する)と、選択されたターゲットドライバを構築することができる。本発明のある特定の他の実施形態では、いくつかのアクティブドライバがカーネル上にインストールされていないと判定される(又はインストールされているドライバが古いと判定される)と、必要な選択されたターゲットドライバの各々を構築する単一のINITコンテナが提供され得ることが理解されよう。これは、単一のINITコンテナ内に所定のターゲットドライバの各々に対するソースコードを含めることによって達成され得る。これについては、上で論じている。
【0167】
選択されたターゲットドライバを構築する必要性が判定された各INITコンテナについて、次いで、次のステップS743は、構築されている、選択されたターゲットドライバをカーネルに提供することを伴う。
【0168】
これは、INITコンテナからカーネルへの所定の通信経路を提供することを伴う。Linuxを使用する場合、これは、コンテナにSYS_MODULE機能を与え、次いで、insmodコマンドを使用することによって達成され得る。しかしながら、他のオペレーティングシステムを用いる場合に他の機構を使用することができることが理解されよう。
【0169】
このコマンドを使用することは、INITコンテナがカーネルへの特権アクセスを有する必要はない。次いで、次のステップS744でホストOSを走らせている間に、選択されたターゲットドライバがホストOSのカーネル上にロード又はインストールされる。これは、上述した「insmod」コマンドを使用して、走っているカーネルにドライバをロードすることによって達成され得る。
【0170】
選択されたターゲットドライバを構築すること、及びこのドライバを、インストールのためにカーネルに提供することに続いて、INITコンテナの実行を終了するステップS745が選遂行され得る。上で論じたように、記載されるS735~745のステップは、SST上に存在する各INITコンテナに対して遂行される。
【0171】
Kubernetesのマスタ、又はSST上で走っているコンテナエンジンによって、展開ファイルを利用することができる。展開ファイルは、Kubernetesクラスタ内のコンテナを走らせるポッドの数及び構成を指定する。ポッド内の各コンテナは、展開ファイルで定義されたイメージのランタイムインスタンスである。
【0172】
本明細書の記述及び特許請求の範囲全体を通して、「備える(comprise)」及び「包含する(contain)」という言い回し及びこれらの変形例は、「を含むが、これらに限定されない」ことを意味し、他の部分、添加物、コンポーネント、整数、又はステップを除外する(及び除外しない)ことを意図するものではない。本明細書の記述及び特許請求の範囲全体を通して、文脈上別段の解釈が要求されない限り、単数形は複数形を包含する。特に、不定冠詞が使用される場合、文脈上別段の要求がない限り、本明細書は、複数及び単数を企図するものとして理解されるべきである。
【0173】
好ましい実施形態及びこれらの様々な態様を参照して、本開示を具体的に示し、説明してきたが、当業者は、本開示の趣旨及び範囲から逸脱することなく、様々な変更及び修正がなされ得ることを理解されよう。添付の特許請求の範囲は、本明細書に記載される実施形態、上述の代替案、及びこれら全ての等価物を含むものとして解釈されることが意図される。
【0174】
本発明の特定の態様、実施形態、又は実施例と併せて記載される特徴、整数、特性、又は群は、これらとの互換性がない場合を除き、本明細書に記載される任意の他の態様、実施形態、又は実施例に適用可能であると理解されるべきである。
【0175】
本明細書(任意の添付の特許請求の範囲、要約、及び図面を含む)に開示される全ての特徴、並びに/又はそのように開示される任意の方法若しくはプロセスの全てのステップは、特徴及び/又はステップのうちの少なくともいくつかが相互に排他的である組み合わせを除いて、任意の組み合わせで組み合わせられてもよい。本発明は、任意の前述の実施形態のいかなる詳細にも限定されない。本発明は、本明細書(任意の添付の特許請求の範囲、要約、及び図面を含む)に開示される特徴の任意の新しい1つ、又は新しい組み合わせ、あるいはそのように開示される任意の方法又はプロセスのステップの任意の新しい1つ、若しくは任意の新しい組み合わせに及ぶ。
【0176】
読者の注意は、本出願に関連して本明細書と同時に、又は本明細書の前に出願され、かつ本明細書に関して一般に閲覧される全ての論文及び文献に向けられ、かかる全ての論文及び文献の内容は、参照により本明細書に組み込まれる。
【要約】
【課題】コンピューティングデバイスにおいて、ターゲットカーネルドライバを構築し、次いで、カーネルの必要性に従って、これらのターゲットカーネルドライバをカーネルに提供することか可能なソフトウェアコンテナを提供する。
【解決手段】コンピューティングデバイスの1つ以上のプロセッサ上で実行可能である実行可能なソフトウェアを包含する少なくとも1つのソフトウェアコンテナエレメントによって、コンピューティングデバイスのカーネルから、カーネル上にインストールされている少なくとも1つのアクティブドライバを示す第1のデータを受信し、第1のデータを、カーネル上にインストールされるべき少なくとも1つの所定のターゲットドライバを示す第2のデータと比較し、比較に基づいて所定のターゲットドライバのうちの少なくとも1つがカーネル上にインストールされていないかどうかを判定する。
【選択図】図3
図1
図2
図3
図4
図5
図6
図7