カラクリスタ

『輝かしい青春』なんて失かったヒトのブログ

【新版】Windows Subsystem for Linux で 普通の Archlinux を使う

僕は以前、この記事ページで Archlinux on WSL の作り方を記載していましたが、 2017 年 12 月現在、そのやり方も古くなり、最新の Windows 10 Pro ではまた状況が変ってきたため、 この記事の内容を最新の内容に合わせて修正しました。

1. 参考にしたページ

2. 用意するモノ

  1. Windows 10 Fall Creators Update 以降の Windows Subsystem for Linux が使える環境
  2. VirtualBox や VMware といった環境 or Archlinux 系 Distro がインストールされた実機
  3. 途中で失敗しても諦めない心持ち

3. 手順

基本的には、

に記載された内容の通りに作業をしていきますが、途中、色々と表記やらが更新されてない部分もあるので、 その辺りは適宜読み替えて作業を行っていきます。

3.1 Ubuntu を Windows Store からインストールしてセットアップ

まず、Windows Subsystem for Linux が有効になっている Windows 環境で、Ubuntu を Windows Store からインストールしてきます。 そして、Ubuntu のインストールが終ったら、Ubuntu を起動し、一応のアカウントの初期設定を済ませておきます。

3.2 Ubuntu のデフォルトアカウントを root にする

これは、 Windows 側の shell 環境 (cmd.exe や powershell.exe) から行いますが、 上記リンク先の記事にも有るとおり、下記の様なコマンドでアカウントを切り替えます:

> ubuntu config --default-user root

3.3 Archlinux の rootfs を取得し展開

そして、Archlinux の rootfs のtarball を

から Download し、WSL の Ubuntu 上で tarball を展開します:

# tar  /mnt/c/Users/<username>/Downloads/archlinux-bootstrap-<version>.tar.gz

なお <username><version> は各自の環境に読み替えてください。

3.4 Archlinux の rootfs 内の初期設定を行う

基本的には Archlinux Wiki にも有る通り、~/root.x86_64/etc/resolv.conf~/root.x86_64/etc/pacman.d/mirrorlist を編集します:

なお、mirrorlist の方は利用する ミラーをアンコメント、resolv.conf の方は、

$ echo "# This file was automatically generated by WSL. To stop automatic generation of this file, remove this line." > ~/root.x86_64/etc/resolv.conf

と言う感じで生成します。なお、上記コマンドサンプルは Archlinux Wiki からの引用です。

3.5 Archlinux の rootfs と Ubuntu の rootfs を入れ替える

これは、まず WSL Ubuntu のインスタンスをすべて終了し、Ubuntu の rootfs から、

  • bin
  • etc
  • lib
  • lib64
  • sbin
  • usr
  • var

を削除します。なお、Ubuntu の rootfs は、

  • %localappdata%\Packages\CanonicalGroupLimited.UbuntuonWindows_*\LocalState\rootfs

辺りに存在します。

そして、Ubuntu の rootfs から上記のディレクトリを削除した後、コピーではなくフォルダの移動で 、 Archlinux の rootfs を Ubuntu の rootfs のあるディレクトリに移動させます。

その際、注意する点としては、ファイルのコピーでは WSL から rootfs のファイルが認識されなくなる ので、 コピーするのではなく、フォルダごと移動させる 、と言う点です。

3.6 他のArchlinux系 環境で fakeroot-tcpglibc-wsl をコンパイルする

fakeroot-tcpglibc-wsl は、ともに AUR (Archlinux User Repository) からパッケージ定義が提供されているので、 そこから パッケージ定義を何かしらの方法でダウンロードし、そのパッケージ定義を使って上記二つのパッケージを build します。

ちなみに、この際に WSL 以外の Archlinux 系環境が必要になりますが、僕は、Virtual Machine として用意した、

を使って、上記二つのパッケージを build しました。なお、この際に、fakeroot-tcp の方は、 conflicts の定義に fakeroot を足す、という修正を加えています。

また、これら二つのパッケージが必要になる理由は、 WSL の Linux Kernel に起因する問題を回避するためで、 WSL の Linux Kernel の問題が取り除かれたならば、この辺りの手順は必要なくなります。

なお、上記二つのパッケージを WSL 上の Archlinux にインストールしました、たしかその時に、

  • sed

がインストールされている必要が有ったかと思ったので、それもインストールします。

それと、実際にパッケージをインストールする際には pacman の初期設定が終えてある必要があるので、 処理の流れとしては、

# pacman-key --init
# pacman-key --populate archlinux
# pacman -U /mnt/c/Users/<username>/Downloads/glibc-wsl-<version>-x86_64.pkg.tar.xz
# pacman -U /mnt/c/Users/<username>/Downloads/fakeroot-tcp-<version>-x86_64.pkg.tar.xz

と言う流れで処理を進める必要があります。

3.7 アカウントの初期設定を行う

以上まで作業が終了していれば、あとはWSL Archlinux の利用の際に必要となるアカウントをセットアップしたり、 追加のパッケージをインストールを行うだけで WSL Archlinux が利用可能となります。

が、WSL Archlinux を利用する際に、

# pacman -S base base-devel

と言う様なコマンドを使うと、 WSL 上では不要なパッケージや、

  • glibc-wslglibc
  • fakeroot-tcpfakeroot

が競合したりするので、基本的には必要となりそうなパッケージを単体で導入していった方が、 その手のトラブルが少なくて済むかと思います。

なお、WSL Archlinux でアカウントの設定が終った際に、デフォルトユーザーを root から変更するためには、

> ubuntu config --default-user <username>

で、デフォルトユーザーを変更する必要があります。

以上

と言うことで新版の内容は以上です。

何か判らない事などありましたら、コメント欄でお願いします。