Bash on Ubuntu on Windowsのchrootを試してみた
4/11の配信日が待ちきれないので、Insider Programに登録して新しいBash on Ubuntu on Windowsをいち早く試してみましたっ!
セットアップ
Windows Insider Program に登録し、Insiderのレベルを スロー に設定しました。
※登録してから更新が降ってくるまで、1日待ちました
Bash on Ubuntu on Windowsのバージョン確認
まずはBash on Ubuntu on Windowsの環境のバージョンを確認します。
uname -a
と cat /etc/lsb-release
で確認です。
uname -a
が
Linux DESKTOP-T3CMM04 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 GNU/Linux
cat /etc/lsb-release
が
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
ですね。
ここで、Creators Updateしてない版のbash(以降、「現行」)の方も見てみましょう。
※別マシンなので解像度は小さいですが…‥
見ての通り、Ubuntuのバージョンが14.04
から16.04
に上がったのがわかります。
日本語の表示
現行ではターミナルに日本語を入力すると横が切れたりしますが、Creators Update適用後は切れずに表示されるよう改善されたみたいです。
chroot対応の確認 - コンテナで遊ぼう
現行のBash on Ubuntu on Windowsではchrootに対応しておらず、中でコンテナを起動させたり、無理やりArchLinuxを動かしてもpacman
でエラーが出るといった問題が発生1していました。
リリースノート2によると、Creators Updateにchroot対応が含まれているようです。そういうことなので、いろいろコンテナを作って試してみたいと思います。
※自分の中ではこれが今回の一番の目玉!!!
Ubuntuのコンテナの作成
必要なパッケージのインストール
# apt install debootstrap
debootstrapを使ったUbuntuのインストール
違いがわかりやすいよう、XenialではなくVividを入れます。
# debootstrap vivid /srv/chroot/vivid http://ftp.riken.go.jp/Linux/ubuntu/ # cp -L /etc/resolv.conf /srv/chroot/vivid/etc
デバイスのマウント
bashを閉じる度に設定し直しになるので注意
# cd /srv/chroot # mount -t proc none vivid/proc # mount -t sysfs none vivid/sys # mount -o bind /dev vivid/dev
ログインと確認
# chroot /srv/chroot/vivid /bin/bash
コンテナ内で
# uname -a # cat /etc/lsb-release
ちゃんと環境が変わってますね!
※少し遊んでみましたが、chroot環境ではターミナル内でスクロールできなかったり日本語を入力できなかったりしますね。()これは普通のLinuxとかでのchrootと同じかな)
sudo付きでchrootするとわかりやすいんですが、ホストのプロセスが見えてるっぽいんですよね……
Debianのコンテナの作成
※動かそうとしたらセグフォったのでパス!
ArchLinuxのコンテナの作成(ブートストラップイメージを使う方法)
ArchWiki3を見ながらインストールを進めます。
ブートストラップイメージの取得と展開
# cd /tmp # wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/latest/archlinux-bootstrap-2017.04.01-x86_64.tar.gz # tar xzf archlinux-bootstrap-2017.04.01-x86_64.tar.gz # mv root.x86_64 /srv/chroot/arch
デバイスのマウント
# mount --bind /srv/chroot/arch /srv/chroot/arch # cd /srv/chroot/arch # cp /etc/resolv.conf etc # mount -t proc /proc proc # mount --rbind /sys sys # mount --rbind /dev dev # mount --rbind /run run
pacmanの設定
pacmanで使用するmirrorlist
のファイルを先に修正しておきます。
# vim /srv/chroot/arch/etc/pacman.d/mirrorlist
好きなミラーサーバのコメントを外しておきます。
ログインと環境のセットアップ
ログイン
# chroot /srv/chroot/arch /bin/bash
コンテナ内で環境をセットアップ
# pacman-key --init # pacman-key --populate archlinux # pacman -Syy # pacman -S base
動作確認(gitのインストール)
# pacman -S git
Archちゃん動きました。
ArchLinuxのコンテナの作成(LiveCD イメージを使う方法)
airootfs.sfsの取得
# apt install -y squashfs-tools p7zip-full # wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/latest/archlinux-2017.04.01-x86_64.iso # 7z x archlinux-*.iso # cp arch/x86_64/airootfs.sfs /srv/chroot/
airootfs.sfsからルートイメージの取り出し
# cd /srv/chroot # unsquashfs airootfs.sfs # mv squashfs-root arch2 # rm airootfs.sfs
デバイスのマウント
# mount --bind /srv/chroot/arch2 /srv/chroot/arch2 # cd /srv/chroot/arch2 # cp /etc/resolv.conf etc # mount -t proc none proc # mount -t sysfs none sys # mount -o bind /dev dev # mount -o bind /dev/pts dev/pts
ログインと環境のセットアップ
ログイン
# chroot /srv/chroot/arch2 /bin/bash
コンテナ内で環境をセットアップ
# pacman-key --init # pacman-key --populate archlinux # pacman -Syy
動作確認(gitのインストール)
# pacman -S git
どちらの方法でも動くようです。
環境をArchLinuxに入れ替える
前回(http://www.kunst1080.net/entry/2016/08/26/001940)と同じ手順でできました。
違うところは
- isoのダウンロード用URLが変わってるので要チェック
- resolv.conf書きましょう
- pacmanでエラー出なくなってました。
前よりちゃんと使えそうです。
ひとまずこんな感じで!
これは本格的に色々コンテナ作って遊べそうです!!