Systemd-nspawn

提供: ArchWiki
2015年1月12日 (月) 22:36時点におけるKusakata (トーク | 投稿記録)による版 (1版 をインポートしました)
ナビゲーションに移動 検索に移動

関連記事

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

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

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

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

pacstrap でインストール

systemd-nspawn 自体は systemd に含まれていますが、効果的に使用するには公式リポジトリからパッケージ arch-install-scriptsインストールする必要があります。 そして、お好きな場所にディレクトリを作成してください。例えば: $ mkdir ~/MyContainer

次のコマンドで base グループから全てのパッケージがインストールされます。base-devel グループのパッケージも全てインストールすることを強く推奨します。

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

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

# systemd-nspawn -bD ~/MyContainer

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

使用方法

machinectl

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

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

コンテナを頻繁に使用したいのなら、マシンの init で起動させるのが楽です。それから machinectl を使ってログインすることが出来ます。

まず、ホストにコンテナを登録する必要があります。登録するには、# mv /path/to/MyContainer /var/lib/container/MyContainer を実行するかまたはディレクトリのシンボリックリンクを作成してください:

# ln -s /path/to/MyContainer /var/lib/container/MyContainer

その後 systemd-nspawn@MyContainer.service有効化・起動してください。コンテナが登録されていることを確認するために、次のコマンドを実行してください:

$ machinectl list
MACHINE                          CONTAINER SERVICE         
MyContainer                      container nspawn          

1 machines listed.
ヒント:
  • 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 を実行してください。

コンテナにログイン・ログアウト

systemd-nspawn コマンド

まだ systemd-nspawn@MyContainer.service有効化・起動していない場合は、次のコマンドを実行してください:

# systemd-nspawn -bD /path_to/MyContainer

machinectl コマンド

新しいターミナルウィンドウを開いて次のコマンドを実行してください:

# machinectl login MyContainer
Connected to container MyContainer. Press ^] three times within 1s to exit session.
Arch Linux Custom Kernel (pts/1)
MyContainer login:

他のターミナルからログインすることで複数のセッションを開くことができます。

ノート: ^]Ctrl+] キーシーケンスに相当します。セッションを終了するには Ctrl を押しながら ] を3回押します。コンテナは立ち上がったまま、コンテナからログアウトされます。

コンテナのシャットダウン

rebootpoweroff など systemctl と同じように machinectl で同じオプションを使ってコンテナの状態を制御することができます。「仮想マシンやコンテナの全てのプロセスを終了し、そのインスタンスで使われていたリソースの割り当てを全て解除」する terminate オプションもあります。

他のオプションについては man machinectl を見て下さい。

X 環境

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

ネットワーク

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

トラブルシューティング

root ログインが失敗する

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

arch-nspawn login: root
Login incorrect

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

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

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

参照