「Systemd-nspawn」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Kusakata がページ「Arch systemd コンテナ」をリダイレクトの「Systemd-nspawn」に移動しました)
1行目: 1行目:
  +
{{Lowercase title}}
 
[[Category:仮想化]]
 
[[Category:仮想化]]
[[en:Arch systemd container]]
+
[[en:Systemd-nspawn]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related2|systemd|systemd}}
 
{{Related2|systemd|systemd}}
17行目: 18行目:
 
仕組みとしては [[Lxc-systemd]] や [[libvirt|Libvirt]]-lxc と異なり、とてもシンプルなツールで設定を行います。
 
仕組みとしては [[Lxc-systemd]] や [[libvirt|Libvirt]]-lxc と異なり、とてもシンプルなツールで設定を行います。
   
== pacstrap でインストール ==
+
== インストール ==
  +
  +
''systemd-nspawn'' は {{Pkg|systemd}} に含まれています。
  +
  +
== サンプル ==
  +
  +
=== コンテナに最小限の Arch Linux ディストリビューションを作成して起動 ===
  +
  +
まず[[公式リポジトリ]]からパッケージ {{Pkg|arch-install-scripts}} を[[pacman|インストール]]してください。
   
''systemd-nspawn'' 自体は ''systemd'' に含まれていますが、効果的に使用するには[[公式リポジトリ]]からパッケージ {{Pkg|arch-install-scripts}} を[[pacman|インストール]]する必要があります。
 
 
そして、お好きな場所にディレクトリを作成してください。例えば: {{ic|$ mkdir ~/''MyContainer''}}。
 
そして、お好きな場所にディレクトリを作成してください。例えば: {{ic|$ mkdir ~/''MyContainer''}}。
   
のコドで {{Grp|base}} グループから全てのパッケージがインストールされます。{{Grp|base-devel}} グループのパッケージも全てインストールすることを強く推奨します。
+
pacstrap を使って最小限 arch システムをコンテナにインストールます。最低限でも {{Grp|base}} グループインストールする必要があります。
  +
# pacstrap -i -c -d ~/''MyContainer'' base
 
  +
# pacstrap -i -c -d ~/MyContainer base [additional pkgs/groups]
   
 
{{Tip|'''-i''' オプションはパッケージ選択の自動確認を無効にします。コンテナ上に Linux カーネルをインストールする必要はないため、パッケージリストの選択から[[Pacman#使い方|削除]]することができます。}}
 
{{Tip|'''-i''' オプションはパッケージ選択の自動確認を無効にします。コンテナ上に Linux カーネルをインストールする必要はないため、パッケージリストの選択から[[Pacman#使い方|削除]]することができます。}}
   
 
インストールが完了したら、コンテナを起動してください:
 
インストールが完了したら、コンテナを起動してください:
# systemd-nspawn -bD ~/''MyContainer''
+
# systemd-nspawn -bD ~/MyContainer
   
 
これで終わりです。空のパスワードを使って "root" でログインしてください。
 
これで終わりです。空のパスワードを使って "root" でログインしてください。
   
  +
セッションを終了するには {{ic|Ctrl}} を押しながら {{ic|]}} を3回押してください。コンテナは実行し続けますが、セッションは終了します。
== 使用方法 ==
 
 
=== machinectl ===
 
 
コンテナの管理は原則 {{ic|$ machinectl}} コマンドで行います。このサービスを使って仮想マシンやコンテナの状態を確認したり操作します。オプションの詳細なリストは {{ic|machinectl(1)}} を参照してください。
 
   
 
=== マシンのブート時にコンテナを起動する ===
 
=== マシンのブート時にコンテナを起動する ===
   
コンテナを頻繁に使用したいのなら、マシンの [[Arch ブートプロセス|init]] で起動させるのが楽です。それから ''machinectl'' を使ってログインすることが出来ます。
+
コンテナを頻繁に使用したいのなら、マシンの [[Arch ブートプロセス|init]] で起動させるのが楽です。
   
  +
# mv ~/MyContainer /var/lib/container/MyContainer
まず、ホストにコンテナを''登録''する必要があります。登録するには、{{ic|# mv /path/to/''MyContainer'' /var/lib/container/''MyContainer''}} を実行するか'''または'''ディレクトリのシンボリックリンクを作成してください:
 
  +
# systemctl enable systemd-nspawn@MyContainer.service
  +
# systemctl start systemd-nspawn@MyContainer.service
   
  +
{{Note|''systemd-nspawn@.service'' は nspawn コンテナが {{ic|/var/lib/container}} にあることを想定したテンプレートユニットです。}}
# ln -s /path/to/''MyContainer'' /var/lib/container/''MyContainer''
 
 
その後 {{ic|systemd-nspawn@''MyContainer''.service}} を[[systemd#systemctl の基本的な使い方|有効化・起動]]してください。コンテナが登録されていることを確認するために、次のコマンドを実行してください:
 
 
{{hc|$ machinectl list|
 
MACHINE CONTAINER SERVICE
 
''MyContainer'' container nspawn
 
 
1 machines listed.
 
}}
 
   
 
{{Tip|
 
{{Tip|
  +
* 上記のようにコンテナを移動する代わりに、''シンボリックリンク''を作成することもできます: {{ic|# ln -s ~/MyContainer /var/lib/container/MyContainer}}。
 
* ''systemd-nspawn'' サービスは次のコマンドを実行します: {{ic|<nowiki>/usr/bin/systemd-nspawn --quiet --keep-unit --boot --link-journal=guest --directory=/var/lib/container/%i </nowiki>}}。ディスクイメージファイルを使用したりコンテナに [[SELinux|SELinux]] セキュリティを設定するために、コンテナのディレクトリから {{ic|/var/lib/container/MyCoantainer}} にシンボリックリンクが貼られていない場合、このファイルを修正してオプションを追加する必要があります。コンテナのネットワーク設定を分離させたい場合、[[systemd-networkd|systemd-networkd]] を参照してください。さらに詳しいブートオプションの情報は {{ic|systemd-nspawn(1)}} に載っています。
 
* ''systemd-nspawn'' サービスは次のコマンドを実行します: {{ic|<nowiki>/usr/bin/systemd-nspawn --quiet --keep-unit --boot --link-journal=guest --directory=/var/lib/container/%i </nowiki>}}。ディスクイメージファイルを使用したりコンテナに [[SELinux|SELinux]] セキュリティを設定するために、コンテナのディレクトリから {{ic|/var/lib/container/MyCoantainer}} にシンボリックリンクが貼られていない場合、このファイルを修正してオプションを追加する必要があります。コンテナのネットワーク設定を分離させたい場合、[[systemd-networkd|systemd-networkd]] を参照してください。さらに詳しいブートオプションの情報は {{ic|systemd-nspawn(1)}} に載っています。
 
* {{ic|systemd-nspawn@.service}} を無効にすると、{{ic|# systemd-nspawn -bD /path/to/container}} を実行して手動でコンテナを起動することができます。コンテナにログインした後は、{{ic|# systemctl poweroff}} を実行すればシャットダウンします。
 
* {{ic|systemd-nspawn@.service}} を無効にすると、{{ic|# systemd-nspawn -bD /path/to/container}} を実行して手動でコンテナを起動することができます。コンテナにログインした後は、{{ic|# systemctl poweroff}} を実行すればシャットダウンします。
62行目: 61行目:
 
[[cgroups|control group]] の中身を表示したい場合は、{{ic|$ systemd-cgls}} を実行してください。
 
[[cgroups|control group]] の中身を表示したい場合は、{{ic|$ systemd-cgls}} を実行してください。
   
  +
== 管理 ==
=== コンテナにログイン・ログアウト ===
 
==== systemd-nspawn コマンド ====
 
まだ {{ic|systemd-nspawn@''MyContainer''.service}} を[[systemd#systemctl の基本的な使い方|有効化・起動]]していない場合は、次のコマンドを実行してください:
 
   
  +
=== machinectl ===
{{ic|# systemd-nspawn -bD /path_to/''MyContainer''}}
 
==== machinectl コマンド ====
 
新しいターミナルウィンドウを開いて次のコマンドを実行してください:
 
   
  +
コンテナの管理は原則 {{ic|$ machinectl}} コマンドで行います。このサービスを使って仮想マシンやコンテナの状態を確認したり操作します。オプションの詳細なリストは {{ic|machinectl(1)}} を参照してください。
{{hc|# machinectl login ''MyContainer''|
 
  +
Connected to container ''MyContainer''. Press ^] three times within 1s to exit session.
 
  +
例:
Arch Linux ''Custom Kernel'' (pts/1)
 
  +
''MyContainer'' login:
 
  +
* 実行中のコンテナに新しいシェルを起動: {{bc|machinectl login MyContainer}}
}}
 
  +
* コンテナの詳細情報を表示: {{bc| machinectl status MyContainer}}
  +
* コンテナを再起動: {{bc| machinectl reboot MyContainer}}
  +
* コンテナを電源オフ: {{bc| machinectrl poweroff MyContainer}}
  +
  +
{{Tip|シャットダウンや再起動は systemd の {{ic|reboot}} や {{ic|shutdown}} コマンドをコンテナのセッションの中から実行することでも可能です。}}
   
  +
=== systemd ツールチェイン ===
他のターミナルからログインすることで複数のセッションを開くことができます。
 
   
  +
systemd のコアツールチェインは多くがコンテナでも使えるようにアップデートされています。コンテナの名前を引数とする {{ic|1=-M, --machine=}} オプションをツールに付けるだけです。
{{Note|{{ic|^]}} は {{ic|Ctrl+]}} キーシーケンスに相当します。セッションを終了するには {{ic|Ctrl}} を押しながら {{ic|]}} を3回押します。コンテナは立ち上がったまま、コンテナからログアウトされます。}}
 
   
  +
例:
=== コンテナのシャットダウン ===
 
   
  +
* 特定のマシンの journal ログを表示: {{bc| $ journalctl -M MyContainer}}
{{ic|reboot}} や {{ic|poweroff}} など {{ic|systemctl}} と同じように {{ic|machinectl}} で同じオプションを使ってコンテナの状態を制御することができます。「仮想マシンやコンテナの全てのプロセスを終了し、そのインスタンスで使われていたリソースの割り当てを全て解除」する {{ic|terminate}} オプションもあります。
 
  +
* control group の中身を表示: {{bc|$ systemd-cgls -M MyContainer}}
  +
* コンテナの起動時間を表示: {{bc|$ systemd-analyze -M MyContainer}}
   
  +
== Tips ==
他のオプションについては [http://www.freedesktop.org/software/systemd/man/machinectl.html man machinectl] を見て下さい。
 
   
 
=== X 環境 ===
 
=== X 環境 ===
   
 
新しいコンテナで X アプリケーションを動かす必要がある場合は [[Xhost]] を見て下さい。
 
新しいコンテナで X アプリケーションを動かす必要がある場合は [[Xhost]] を見て下さい。
  +
  +
外部の X サーバーにコンテナのセッションを接続するには {{ic|DISPLAY}} 環境変数を設定する必要があります。
   
 
=== ネットワーク ===
 
=== ネットワーク ===
   
上で説明しているインストールでは、何も設定しなくてもネットワークが動作するコンテナが作られるので、追加の設定は必要ありません。もっと複雑なネットワークを設定してホストのネットワークからコンテナのネットワークを分離させたいときは、[[systemd-networkd|systemd-networkd]] を見て下さい。
+
上で説明しているインストールでは、何も設定しなくてもネットワークが動作するコンテナが作られるので、追加の設定は必要ありません。もっと複雑なネットワークを設定してホストのネットワークからコンテナのネットワークを分離させたいときは、[[systemd-networkd]] を見て下さい。
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
110行目: 114行目:
 
== 参照 ==
 
== 参照 ==
   
  +
* [http://www.freedesktop.org/software/systemd/man/machinectl.html machinectl man ページ]
 
* [http://www.freedesktop.org/software/systemd/man/systemd-nspawn.html systemd-nspawn man ページ]
 
* [http://www.freedesktop.org/software/systemd/man/systemd-nspawn.html systemd-nspawn man ページ]
 
* [http://lwn.net/Articles/572957/ Creating containers with systemd-nspawn]
 
* [http://lwn.net/Articles/572957/ Creating containers with systemd-nspawn]
  +
* [https://www.youtube.com/results?search_query=systemd-nspawn&aq=f Lennart Pottering による systemd-nspawn のプレゼンテーション]
* [http://www.freedesktop.org/software/systemd/man/machinectl.html machinectl man ページ]
 

2015年2月22日 (日) 12:14時点における版

関連記事

systemd-nspawnchroot コマンドに似ていますが、chroot を強化したものです。

systemd-nspawn を使えば軽量な名前空間コンテナでコマンドや OS を実行することができます。ファイルシステム構造だけでなく、プロセスツリーや様々な IPC サブシステム、ホスト・ドメイン名も完全に仮想化するため chroot よりも強力です。

systemd-nspawn/sys, /proc/sys, /sys/fs/selinux などのコンテナの様々なカーネルインターフェイスへのアクセスを読み取り専用に制限します。コンテナの中からネットワークインターフェイスやシステムクロックを変更することは出来ません。デバイスノードを作成することも不可能です。コンテナの中からホスト環境を再起動することはできず、カーネルモジュールをロードすることも制限されます。

仕組みとしては Lxc-systemdLibvirt-lxc と異なり、とてもシンプルなツールで設定を行います。

インストール

systemd-nspawnsystemd に含まれています。

サンプル

コンテナに最小限の Arch Linux ディストリビューションを作成して起動

まず公式リポジトリからパッケージ arch-install-scriptsインストールしてください。

そして、お好きな場所にディレクトリを作成してください。例えば: $ mkdir ~/MyContainer

pacstrap を使って最小限の arch システムをコンテナにインストールします。最低限でも base グループはインストールする必要があります。

# pacstrap -i -c -d ~/MyContainer base [additional pkgs/groups]
ヒント: -i オプションはパッケージ選択の自動確認を無効にします。コンテナ上に Linux カーネルをインストールする必要はないため、パッケージリストの選択から削除することができます。

インストールが完了したら、コンテナを起動してください:

# systemd-nspawn -bD ~/MyContainer

これで終わりです。空のパスワードを使って "root" でログインしてください。

セッションを終了するには Ctrl を押しながら ] を3回押してください。コンテナは実行し続けますが、セッションは終了します。

マシンのブート時にコンテナを起動する

コンテナを頻繁に使用したいのなら、マシンの init で起動させるのが楽です。

# mv ~/MyContainer /var/lib/container/MyContainer
# systemctl enable systemd-nspawn@MyContainer.service
# systemctl start systemd-nspawn@MyContainer.service
ノート: systemd-nspawn@.service は nspawn コンテナが /var/lib/container にあることを想定したテンプレートユニットです。
ヒント:
  • 上記のようにコンテナを移動する代わりに、シンボリックリンクを作成することもできます: # ln -s ~/MyContainer /var/lib/container/MyContainer
  • systemd-nspawn サービスは次のコマンドを実行します: /usr/bin/systemd-nspawn --quiet --keep-unit --boot --link-journal=guest --directory=/var/lib/container/%i 。ディスクイメージファイルを使用したりコンテナに SELinux セキュリティを設定するために、コンテナのディレクトリから /var/lib/container/MyCoantainer にシンボリックリンクが貼られていない場合、このファイルを修正してオプションを追加する必要があります。コンテナのネットワーク設定を分離させたい場合、systemd-networkd を参照してください。さらに詳しいブートオプションの情報は systemd-nspawn(1) に載っています。
  • systemd-nspawn@.service を無効にすると、# systemd-nspawn -bD /path/to/container を実行して手動でコンテナを起動することができます。コンテナにログインした後は、# systemctl poweroff を実行すればシャットダウンします。

control group の中身を表示したい場合は、$ systemd-cgls を実行してください。

管理

machinectl

コンテナの管理は原則 $ machinectl コマンドで行います。このサービスを使って仮想マシンやコンテナの状態を確認したり操作します。オプションの詳細なリストは machinectl(1) を参照してください。

例:

  • 実行中のコンテナに新しいシェルを起動:
    machinectl login MyContainer
  • コンテナの詳細情報を表示:
     machinectl status MyContainer
  • コンテナを再起動:
     machinectl reboot MyContainer
  • コンテナを電源オフ:
     machinectrl poweroff MyContainer
ヒント: シャットダウンや再起動は systemd の rebootshutdown コマンドをコンテナのセッションの中から実行することでも可能です。

systemd ツールチェイン

systemd のコアツールチェインは多くがコンテナでも使えるようにアップデートされています。コンテナの名前を引数とする -M, --machine= オプションをツールに付けるだけです。

例:

  • 特定のマシンの journal ログを表示:
     $ journalctl -M MyContainer
  • control group の中身を表示:
    $ systemd-cgls -M MyContainer
  • コンテナの起動時間を表示:
    $ systemd-analyze -M MyContainer

Tips

X 環境

新しいコンテナで X アプリケーションを動かす必要がある場合は Xhost を見て下さい。

外部の X サーバーにコンテナのセッションを接続するには DISPLAY 環境変数を設定する必要があります。

ネットワーク

上で説明しているインストールでは、何も設定しなくてもネットワークが動作するコンテナが作られるので、追加の設定は必要ありません。もっと複雑なネットワークを設定してホストのネットワークからコンテナのネットワークを分離させたいときは、systemd-networkd を見て下さい。

トラブルシューティング

root ログインが失敗する

ログインしようとしたときに以下が表示される場合:

arch-nspawn login: root
Login incorrect

そして journalctl が以下のように表示する場合:

pam_securetty(login:auth): access denied: tty 'pts/0' is not secure !

コンテナのファイルシステムから /etc/securetty を削除 してみてください。

参照