Skip to content

systemdのポータブルサービス

This content is a draft and will not be included in production builds.

systemdにはポータブルサービス(Portable Services)という概念がある。

これは一言でいえば、systemdサービスユニットとその実行に必要な実行ファイル等をOSツリーやディスクイメージでまとめたもので、主に portablectl コマンドで操作する。

いちど portablectl attach すると、イメージに含まれているユニットをsystemdが認識する。このときsystemd editを使って一部の設定を更新する方法と同じで、ドロップインと RootDirectory= または RootImage= ディレクティブを使って、イメージに含まれるユニットを書き換えずに扱う。portablectl attach した結果は再起動しても維持するが、—runtime オプションで再起動すると消えるようにもできる。

イメージの利用者は、portablectl attach するときにプロファイルと呼ばれるしくみで適切な分離レベル(isolation level)を選択する。これは —profile= オプションで与えるが、省略すると default が使われる。手元のArch Linuxでは /usr/lib/systemd/portable/profile 以下に次の4つが定義されている。

  • default
  • strict
  • trust
  • nonetwork

これらは単に、systemdユニットのセキュリティ関連ディレクティブを事前に定義している service.conf ファイルを持つ。

配布する場所としては特に何も規定されない。標準的には /var/lib/portables 以下がイメージを展開するディレクトリとなるが、単に絶対パスを求められなくなるだけで別にどこに置いてもいい。

イメージを作るためには mkosi コマンドが便利かもしれないが、まだ試していない。

コンテナはホストと隔離した環境でアプリケーションを実行させるものだが、ポータブルサービスはそれとは異なり、ホストの拡張機能として提供されるものを想定している。