「Systemd-nspawn」の版間の差分
細 Kusakata がページ「Arch systemd コンテナ」をリダイレクトの「Systemd-nspawn」に移動しました |
編集の要約なし |
||
| 1行目: | 1行目: | ||
{{Lowercase title}} |
|||
[[Category:仮想化]] |
[[Category:仮想化]] |
||
[[en: |
[[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 と異なり、とてもシンプルなツールで設定を行います。 |
||
== |
== インストール == |
||
''systemd-nspawn'' は {{Pkg|systemd}} に含まれています。 |
|||
== サンプル == |
|||
=== コンテナに最小限の Arch Linux ディストリビューションを作成して起動 === |
|||
| ⚫ | |||
| ⚫ | |||
そして、お好きな場所にディレクトリを作成してください。例えば: {{ic|$ mkdir ~/''MyContainer''}}。 |
そして、お好きな場所にディレクトリを作成してください。例えば: {{ic|$ mkdir ~/''MyContainer''}}。 |
||
pacstrap を使って最小限の arch システムをコンテナにインストールします。最低限でも {{Grp|base}} グループはインストールする必要があります。 |
|||
# pacstrap -i -c -d ~/ |
# pacstrap -i -c -d ~/MyContainer base [additional pkgs/groups] |
||
{{Tip|'''-i''' オプションはパッケージ選択の自動確認を無効にします。コンテナ上に Linux カーネルをインストールする必要はないため、パッケージリストの選択から[[Pacman#使い方|削除]]することができます。}} |
{{Tip|'''-i''' オプションはパッケージ選択の自動確認を無効にします。コンテナ上に Linux カーネルをインストールする必要はないため、パッケージリストの選択から[[Pacman#使い方|削除]]することができます。}} |
||
インストールが完了したら、コンテナを起動してください: |
インストールが完了したら、コンテナを起動してください: |
||
# systemd-nspawn -bD ~/ |
# systemd-nspawn -bD ~/MyContainer |
||
これで終わりです。空のパスワードを使って "root" でログインしてください。 |
これで終わりです。空のパスワードを使って "root" でログインしてください。 |
||
| ⚫ | |||
== 使用方法 == |
|||
| ⚫ | |||
| ⚫ | |||
=== マシンのブート時にコンテナを起動する === |
=== マシンのブート時にコンテナを起動する === |
||
コンテナを頻繁に使用したいのなら、マシンの [[Arch ブートプロセス|init]] で起動させるのが楽で |
コンテナを頻繁に使用したいのなら、マシンの [[Arch ブートプロセス|init]] で起動させるのが楽です。 |
||
| ⚫ | |||
まず、ホストにコンテナを''登録''する必要があります。登録するには、{{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}} にあることを想定したテンプレートユニットです。}} |
|||
| ⚫ | |||
その後 {{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 の基本的な使い方|有効化・起動]]していない場合は、次のコマンドを実行してください: |
|||
| ⚫ | |||
{{ic|# systemd-nspawn -bD /path_to/''MyContainer''}} |
|||
==== machinectl コマンド ==== |
|||
新しいターミナルウィンドウを開いて次のコマンドを実行してください: |
|||
| ⚫ | |||
{{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=}} オプションをツールに付けるだけです。 |
|||
| ⚫ | |||
例: |
|||
=== コンテナのシャットダウン === |
|||
* 特定のマシンの 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 == |
|||
| ⚫ | |||
=== X 環境 === |
=== X 環境 === |
||
新しいコンテナで X アプリケーションを動かす必要がある場合は [[Xhost]] を見て下さい。 |
新しいコンテナで X アプリケーションを動かす必要がある場合は [[Xhost]] を見て下さい。 |
||
外部の X サーバーにコンテナのセッションを接続するには {{ic|DISPLAY}} 環境変数を設定する必要があります。 |
|||
=== ネットワーク === |
=== ネットワーク === |
||
上で説明しているインストールでは、何も設定しなくてもネットワークが動作するコンテナが作られるので、追加の設定は必要ありません。もっと複雑なネットワークを設定してホストのネットワークからコンテナのネットワークを分離させたいときは、[[ |
上で説明しているインストールでは、何も設定しなくてもネットワークが動作するコンテナが作られるので、追加の設定は必要ありません。もっと複雑なネットワークを設定してホストのネットワークからコンテナのネットワークを分離させたいときは、[[systemd-networkd]] を見て下さい。 |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
| 110行目: | 114行目: | ||
== 参照 == |
== 参照 == |
||
| ⚫ | |||
* [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-nspawn は chroot コマンドに似ていますが、chroot を強化したものです。
systemd-nspawn を使えば軽量な名前空間コンテナでコマンドや OS を実行することができます。ファイルシステム構造だけでなく、プロセスツリーや様々な IPC サブシステム、ホスト・ドメイン名も完全に仮想化するため chroot よりも強力です。
systemd-nspawn は /sys, /proc/sys, /sys/fs/selinux などのコンテナの様々なカーネルインターフェイスへのアクセスを読み取り専用に制限します。コンテナの中からネットワークインターフェイスやシステムクロックを変更することは出来ません。デバイスノードを作成することも不可能です。コンテナの中からホスト環境を再起動することはできず、カーネルモジュールをロードすることも制限されます。
仕組みとしては Lxc-systemd や Libvirt-lxc と異なり、とてもシンプルなツールで設定を行います。
インストール
systemd-nspawn は systemd に含まれています。
サンプル
コンテナに最小限の Arch Linux ディストリビューションを作成して起動
まず公式リポジトリからパッケージ arch-install-scripts をインストールしてください。
そして、お好きな場所にディレクトリを作成してください。例えば: $ mkdir ~/MyContainer。
pacstrap を使って最小限の arch システムをコンテナにインストールします。最低限でも base グループはインストールする必要があります。
# pacstrap -i -c -d ~/MyContainer base [additional pkgs/groups]
インストールが完了したら、コンテナを起動してください:
# 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
/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
reboot や shutdown コマンドをコンテナのセッションの中から実行することでも可能です。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 を削除 してみてください。