Windows で Linux 環境を作る

Windows
公開日:
更新日:

ソースは Windows で編集して、アセットコンパイル関連は Linux にやらせるという環境を作りました。

WSL のインストール

Microsoft の記事があるので、手動インストールの手順通りに実行します。

但し、Webpack の watch を実行する環境が欲しい場合は、手順 5 の「WSL 2 を既定のバージョンとして設定する」を飛ばしましょう。

また、手順 6 では Debian あたりをオススメします。この記事では Debian をインストールしている前提で説明しています。

Ubuntu は全部入りといった感じで、インストールすると 2.2GB ぐらいになるので重いです。最も軽いのは Alpine WSL(182MB ぐらい)ですが、nodebrew 入れても node 動かなかったので諦めました。

環境を整える

パッケージの最新化

$ sudo apt update
$ sudo apt upgrade

vi が使いにくい

sudo vi したときに方向キーで移動したり、空行を削除したりといったことができないっぽいので、新たに vim をインストールします。

$ sudo apt install vim

インストールしたら、vi でも vim でも新たにインストールした vim が動きます。これで wsl.conf などの sudo しないと編集できないファイルでも、思い通りの挙動になります。

$ # どっちでもよい
$ sudo vi /etc/wsl.conf
$ sudo vim /etc/wsl.conf

自動マウントの無効化

デフォルトで C や D ドライブがマウントされますが、不要な場合は設定ファイルを作って無効化できます。

$ sudo vi /etc/wsl.conf

vim エディタが起動するので、i キーを押して insert モードにします。

以下のように入力して、esc キーで insert モードを終了し、:wq と入力すると保存できます。

[automount]
enabled=false

wsl.conf の内容は WSL の再起動後に反映されるので、exit でログアウトしてから、ディストリビューションを終了して再起動します。

$ exit
PS C:\Users\hoge> wsl --shutdown
PS C:\Users\hoge> wsl

これでログインしたときに居るフォルダが /mnt/c/Users/hoge$ ではなく ~$ になるかと思います。自動でドライブがマウントされていたフォルダは空になります。

$ ls /mnt/c
$ ls /mnt/d

Windows の環境変数を引き継がない

echo $PATH してみると、Windows から引き継がれた環境変数 PATH の内容がずらずらと出てきます。自動マウントの無効化の要領で、wsl.conf ファイルに以下を追記すると、環境変数を引き継がなくなります。

[interop]
appendWindowsPath=false

Windows と Linux 間のファイル共有

HDD に新たにパーティションを切って、そのドライブとだけ Linux 環境からもアクセスできるようにします。/etc/fstab というファイルに追記することで、好きなドライブを自動でマウントさせることができます。

fstab の設定を書くにあたって、自分の ID を調べておきます。

$ whoami
hoge
$ id hoge
uid=1000(hoge) gid=1000(hoge) 以下略

uid と gid を控えておいて、fstab に追記します。

$ vi /etc/fstab

$ # /etc/fstab に追記
W: /mnt/wsl drvfs defaults,metadata,uid=1000,gid=1000,umask=022 0 0

W: の部分は切ったパーティションのドライブレターに合わせます。マウント先のフォルダは勝手に作られていると思いますが、もしなければ作ります。

$ cd /mnt
$ ls
$ sudo mkdir wsl # wsl フォルダがなければ

これでディストリビューションを再起動すると、/mnt/wsl に W ドライブの内容が確認できます。毎度 cd /mnt/wsl するのは怠いので、ホームフォルダにシンボリックリンクを作成しておくと便利です。

$ cd ~
$ ln -s /mnt/wsl wsl

消したくなったら unlink wsl で消えます。

nodebrew のインストール

Debian には curl も wget もないようなので、前者をインストールします。

$ sudo apt install curl

nodebrew のリポジトリにインストール方法が載っているので、実行します。

$ curl -L git.io/nodebrew | perl - setup

export~ と表示されるので、実行します。その後に $PATH を見ると、.nodebrew を含んだパスが見られます。

$ export PATH=$HOME/.nodebrew/current/bin:$PATH
$ echo $PATH
/home/hoge/.nodebrew/current/bin: ...

一度 WSL を再起動すると、export したパスが消えてしまうので、nodebrew が実行できなくなってしまいます。

$ exit
PS C:\Users\hoge> wsl --shutdown
PS C:\Users\hoge> wsl
$ nodebrew
-bash: nodebrew: command not found

起動するたびにいちいち export ~ を実行するのは面倒なので、.profile というファイルに追記しておきます。するとシェルの起動時に勝手に実行してくれます。

$ cd ~
$ vi .profile

$ # .profile に追記
export PATH=$HOME/.nodebrew/current/bin:$PATH

nodebrew で node をインストール

安定版をインストールします。

$ nodebrew install stable

インストールしたら、使うバージョンを指定します。

$ nodebrew use stable

node, npm, npx のバージョンを表示してみます。この記事を書いた時点での安定版のバージョンなので、異なるバージョンが表示されるかもしれません。

$ node -v
v14.16.0
$ npm -v
6.14.11
$ npx -v
6.14.11

特定のバージョンをインストール

昔に作ったスクリプトを動かしたいなどの理由で、古いバージョンが必要になるかもしれません。その場合は、以下のコマンドでインストール可能なバージョンを調べます。

$ nodebrew ls-remote

バージョンを指定してインストールします。

$ nodebrew install v12      # v12 の最新(v12.21.0)をインストール
$ nodebrew install v12.20   # v12.20 の最新(v12.20.2)をインストール
$ nodebrew install v12.20.0 # v12.20.0 をインストール

nodebrew lsでインストールしたバージョンを一覧表示できます。その中から使うバージョンを指定します。バージョン指定のルールはnodebrew installと同じです。

$ nodebrew ls
v12.20.0
v12.20.2
v12.21.0
v14.16.0

current: v14.16.0
$ nodebrew use v12
use v12.21.0

参考文献