「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 ディストリビューションを作成して起動 === |
||
+ | |||
+ | まず[[公式リポジトリ]]からパッケージ {{Pkg|arch-install-scripts}} を[[pacman|インストール]]してください。 |
||
− | ''systemd-nspawn'' 自体は ''systemd'' に含まれていますが、効果的に使用するには[[公式リポジトリ]]からパッケージ {{Pkg|arch-install-scripts}} を[[pacman|インストール]]する必要があります。 |
||
そして、お好きな場所にディレクトリを作成してください。例えば: {{ic|$ mkdir ~/''MyContainer''}}。 |
そして、お好きな場所にディレクトリを作成してください。例えば: {{ic|$ mkdir ~/''MyContainer''}}。 |
||
− | + | 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 ~/ |
+ | # systemd-nspawn -bD ~/MyContainer |
これで終わりです。空のパスワードを使って "root" でログインしてください。 |
これで終わりです。空のパスワードを使って "root" でログインしてください。 |
||
+ | セッションを終了するには {{ic|Ctrl}} を押しながら {{ic|]}} を3回押してください。コンテナは実行し続けますが、セッションは終了します。 |
||
− | == 使用方法 == |
||
− | |||
− | === machinectl === |
||
− | |||
− | コンテナの管理は原則 {{ic|$ machinectl}} コマンドで行います。このサービスを使って仮想マシンやコンテナの状態を確認したり操作します。オプションの詳細なリストは {{ic|machinectl(1)}} を参照してください。 |
||
=== マシンのブート時にコンテナを起動する === |
=== マシンのブート時にコンテナを起動する === |
||
− | コンテナを頻繁に使用したいのなら、マシンの [[Arch ブートプロセス|init]] で起動させるのが楽で |
+ | コンテナを頻繁に使用したいのなら、マシンの [[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]] を見て下さい。 |
== トラブルシューティング == |
== トラブルシューティング == |
||
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-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
control group の中身を表示したい場合は、$ systemd-cgls
を実行してください。
管理
machinectl
コンテナの管理は原則 $ machinectl
コマンドで行います。このサービスを使って仮想マシンやコンテナの状態を確認したり操作します。オプションの詳細なリストは machinectl(1)
を参照してください。
例:
- 実行中のコンテナに新しいシェルを起動:
machinectl login MyContainer
- コンテナの詳細情報を表示:
machinectl status MyContainer
- コンテナを再起動:
machinectl reboot MyContainer
- コンテナを電源オフ:
machinectrl poweroff MyContainer
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 を削除 してみてください。