くんすとの備忘録

IT系技術メモ

移転しました。

15秒後に自動的にリダイレクトします。

Bash on Ubuntu on Windowsのchrootを試してみた

4/11の配信日が待ちきれないので、Insider Programに登録して新しいBash on Ubuntu on Windowsをいち早く試してみましたっ!

セットアップ

Windows Insider Program に登録し、Insiderのレベルを スロー に設定しました。

f:id:kunst1080:20170402234641p:plain

※登録してから更新が降ってくるまで、1日待ちました

Bash on Ubuntu on Windowsのバージョン確認

まずはBash on Ubuntu on Windowsの環境のバージョンを確認します。 uname -acat /etc/lsb-release で確認です。

f:id:kunst1080:20170402234720p:plain

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(以降、「現行」)の方も見てみましょう。

f:id:kunst1080:20170402234728p:plain

※別マシンなので解像度は小さいですが…‥

見ての通り、Ubuntuのバージョンが14.04から16.04に上がったのがわかります。

日本語の表示

現行ではターミナルに日本語を入力すると横が切れたりしますが、Creators Update適用後は切れずに表示されるよう改善されたみたいです。

f:id:kunst1080:20170402234744p:plain

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

f:id:kunst1080:20170402234757p:plain

ちゃんと環境が変わってますね!

※少し遊んでみましたが、chroot環境ではターミナル内でスクロールできなかったり日本語を入力できなかったりしますね。()これは普通のLinuxとかでのchrootと同じかな)

f:id:kunst1080:20170402234808p:plain

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

f:id:kunst1080:20170402234826p:plain

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

f:id:kunst1080:20170402234840p:plain

どちらの方法でも動くようです。

環境をArchLinuxに入れ替える

前回(http://www.kunst1080.net/entry/2016/08/26/001940)と同じ手順でできました。

違うところは

  • isoのダウンロード用URLが変わってるので要チェック
  • resolv.conf書きましょう
  • pacmanでエラー出なくなってました。

f:id:kunst1080:20170402234854p:plain

前よりちゃんと使えそうです。


ひとまずこんな感じで!
これは本格的に色々コンテナ作って遊べそうです!!

参考URL