方法
systemd-nspawnを使います。
※ dockerでもできるかもしれませんが、この記事では systemd-nspawn を使う方法を解説します。
※ 以下、本文中でVPSと記載している箇所は Amazon Lightsail を想定しています。
準備
ローカルで動作中のArch Linux環境上で、最小限のArch Linuxイメージを構築し、圧縮します。
mkdir arch
sudo pacstrap arch base
tar zcvf arch.tar.gz arch
scpコマンド等で、VPSサーバーに転送します。
scp -i myprivatekey.pem arch.tar.gz ubuntu@123.123.123.123:
VPSサーバ側で /var/lib/machines
へ展開します。ディレクトリがなければ作ります。
sudo mkdir /var/lib/machines
sudo tar zxvf arch.tar.gz -C /var/lib/machines
systemd-container をインストールします
apt install systemd-container
nspawn用設定ファイルを作成します。
[Exec]
PrivateUsers=no
[Network]
VirtualEthernet=no
初期設定をするためにコンテナを起動します。
systemd-nspawn -D /var/lib/machines/arch
コンテナの中で作業します。
とりあえず最小限必要なパッケージをインストールします。(エディタはお好みのものを)
pacman -Syu
pacman -S sudo nano
sudoを使用するための権限設定を変更します。
EDITOR=nano visudo
# ↓ この行の先頭の # を消してコメント解除します
%wheel ALL=(ALL) ALL
保存して終了します。(nanoエディタなら Ctrl+O Enter Ctrl+X)
ユーザーを作成します
useradd -m -G wheel taro
passwd taro
Ctrl+D または exit
で終了します。(何故か終了できなくなった場合は Ctrl を押しながら ]
を3回を押してみてください)
起動
コンテナを起動します。
sudo machinectl start arch
作成したユーザーでコンテナにログインします。
sudo machinectl login arch
コンテナ内でsudo
を実行できるか確認します。
sudo su
exit
ログアウトします。
Ctrl+D または exit
でログインプロンプトに戻ります。
端末を終了します。
Ctrl を押しながら ]
を3回を押します。普段はこちらを使ってコンテナから抜ければ良いようです。
コンテナを停止します。
sudo machinectrl stop arch
トラブルシューティング
Q. 端末を終了できない(ホストに戻れない)
A. 上にも書きましたが、Ctrl を押しながら ]
を3回を押します。
Q. /var/lib/machine/arch のパーミッション値がおかしなことになっている
A. もし、PrivateUsers=no
の設定を忘れていた場合、systemd-nspawn がホストとは別のユーザーIDを付与するようになります。
Q. コンテナの中から外と通信できない。
A. もし、VirtualEthernet=no
の設定を忘れていた場合、、systemd-nspawn がホストとは別の仮想ネットワークを提供します。
プライベートユーザーモードや仮想ネットワークモードを理解した上で意図的に使うのであればそれでいいのですが、お手軽に利用するには面倒だと思いますので、本記事ではユーザーIDやネットワークはホストのものを利用する方法を解説しています。
パーミッション値がおかしくなった状態で、/etc/systemd/nspawn/arch.nspawn
を修正してから、プライベートではないモードで使いたい場合は、以下のようにしてパーミッションを修正します。
sudo machinectrl stop arch
sudo chown root.root /var/lib/machines/arch -R
sudo systemd-nspawn -D /var/lib/machines/arch
passwd taro
chown taro.taro /home/taro -R
exit
まとめ
メンテナンスのためにrootでコンテナに入りたい
sudo systemd-nspawn -D /var/lib/machines/arch
普段使いのためのコンテナ起動
sudo machinectl start arch
普段使いのためのコンテナログイン
sudo machinectl login arch
端末終了
Ctrl
+ ]
]
]
コンテナ停止
sudo machinectl stop arch