CGManager とは?

CGManager はシンプルな D-Bus API を通して全ての cgroup を管理する、特権を持つデーモンです。 CGManager はネストした LXC コンテナも、ユーザ名前空間での UID/GID の解決を含む特権を持たないユーザからのリクエストも受け付けるように設計されています。

コンポーネント

cgmanager

このデーモンはホスト上で実行します。ホストとは別のマウント名前空間内で cgroupfs をマウントし (なのでホスト上からは見えません)、D-Bus の問い合わせを受け付けるために /sys/fs/cgroup/cgmanager/sock をバインドし、ホスト上で実行されている全てのクライアントを扱います。

cgmanager は、名前空間をまたいだ uid、gid、pid の変換のために使う D-Bus + SCM 認証情報を使った認証リクエストも、ホストレベルから来る「非認証の」(初期の ucred) D-Bus を使ったリクエストも受け付けます。

cgproxy

このデーモンの実行は 2 種類のケースで目にするかも知れません。(PID名前空間へのアタッチがサポートされていない) 3.8 より古いカーネルのホスト上においてと、(cgproxy のみが実行される) コンテナ内においてです。

cgproxy は自身ではいかなる cgroup に対する設定の変更を行いません。しかし、代わりに名前が示すように、プロキシリクエストをメインの cgmanager プロセスに投げます。

cgproxy は、プロセスが直接 D-Bus を使って (例えば dbus-send を使って) /sys/fs/cgroup/cgmanager/sock と通信を行うのに必要です。

cgproxy はクエリから ucred を受信し、実際の cgmanager ソケットに認証された SCM クエリを投げ、ホストの名前空間にいる cgmanager が理解できるものに適切に変換できるように ucred 構造体を通して引数を渡します。

cgm

D-Bus サービスと通信するシンプルなコマンドラインツールです。コマンドラインを通して通常の cgroup の全ての操作が実行できます。

通信プロトコル

先に述べたように、cgmanager と cgproxy は D-Bus を使います。外部のクライアント (cgproxy は違います) は標準の D-Bus API を使い、不要で容易に間違いの起こる SCM cred プロトコルを実装しようとしないことを推奨します。

そうしないことで、/sys/fs/cgroup/cgmanager/sock と通信を行うことが常に正しいと簡単に仮定できます。

cgmanager API は独立した D-Bus ソケット上でのみ利用可能です。cgmanager 自身はシステムのバスには接続しません。なので、 dbus デーモンの実行は cgmanager/cgproxy に必須ではありません。

D-Bus API の更に詳しい情報は こちら で読むことができます。

ライセンス

CGManager はフリーソフトウェアで、コードのほとんどの部分が GNU LGPLv2.1+ の条項に基づいてリリースされています。GNU GPLv2 ライセンスに基づいてリリースされているバイナリもあります。

プロジェクトのデフォルトのライセンスは GNU LGPLv2.1+ です。

CGManager の stable リリースは各 Linux ディストリビューションの stable に対する修正とセキュリティアップデートのポリシーに依存します。

Ubuntu LTS リリースに含まれる CGManager に対する商用サポートは Canonical Ltd から受けることができます。