「Systemd-nspawn」の版間の差分
細 (1版 をインポートしました) |
|
(相違点なし)
|
2015年1月12日 (月) 22:36時点における版
systemd-nspawn は chroot コマンドに似ていますが、chroot を強化したものです。
systemd-nspawn を使えば軽量な名前空間コンテナでコマンドや OS を実行することができます。ファイルシステム構造だけでなく、プロセスツリーや様々な IPC サブシステム、ホスト・ドメイン名も完全に仮想化するため chroot よりも強力です。
systemd-nspawn は /sys
, /proc/sys
, /sys/fs/selinux
などのコンテナの様々なカーネルインターフェイスへのアクセスを読み取り専用に制限します。コンテナの中からネットワークインターフェイスやシステムクロックを変更することは出来ません。デバイスノードを作成することも不可能です。コンテナの中からホスト環境を再起動することはできず、カーネルモジュールをロードすることも制限されます。
仕組みとしては Lxc-systemd や Libvirt-lxc と異なり、とてもシンプルなツールで設定を行います。
目次
pacstrap でインストール
systemd-nspawn 自体は systemd に含まれていますが、効果的に使用するには公式リポジトリからパッケージ arch-install-scripts をインストールする必要があります。
そして、お好きな場所にディレクトリを作成してください。例えば: $ mkdir ~/MyContainer
。
次のコマンドで base グループから全てのパッケージがインストールされます。base-devel グループのパッケージも全てインストールすることを強く推奨します。
# pacstrap -i -c -d ~/MyContainer base
インストールが完了したら、コンテナを起動してください:
# 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.
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:
他のターミナルからログインすることで複数のセッションを開くことができます。
コンテナのシャットダウン
reboot
や poweroff
など 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 を削除 してみてください。