WSL2を使ってみる その1(Ubuntu 22.04、Node-RED、メモリ制限)
はじめに
今回はWindows環境でLinuxディストリビューションをインストールできる、WSL(Windows Subsystem for Linux)の環境を構築してみました。
最近オープンソースのソフトウェアを使おうとすると、Windows環境ではインストールできず、Ubuntu環境だとインストールして実行できることがありました。そこで、WSLを試してみようと考えた次第です。
デスクトップ環境の構築も試していたのですが、行き詰まったのでまた後日検証する予定です。なお、Windows 10とWindows 11のPCで試しています。
▼以前の記事はこちら
WSL2のセットアップ
調べていると、インストールしたことが無い場合は簡単にインストールできそうな感じでした。ただし私の場合は一度Dockerで構築したことがあり、中途半端に削除していたのでややこしくなっていました。
スナップショット、仮想環境の作成などで管理する方法があるようです。今後はこういった方法を導入したほうが良いのかもしれません。
▼『グチャグチャになった「Ubuntu on WSL2」のやり直し方』という名前の記事がありました。グチャグチャになりがちなんでしょうね...
https://qiita.com/PoodleMaster/items/b54db3608c4d343d27c4
インストールしたことが無い場合
私の環境ではすでにインストールしたことがあったため再現できないのですが、コマンド1つでインストールできるようです。
▼インストールするためのコマンドは、こちらに書かれています。既定ではWSL2がインストールされるようですね。
▼Windows PowerShellを右クリックして、管理者権限で実行します。
▼コマンドはこれだけです。これですんなりインストールできればOKです。
wsl --install
▼他のバージョン、ディストリビューションを利用する場合は、こちらを参考にすると良さそうです。
https://learn.microsoft.com/ja-jp/windows/wsl/install-manual
すでにインストールしたことがある場合
私の場合、wsl --installを実行してもインストールが始まりませんでした。
▼ヘルプを表示したときのようになりました。
アプリ自体は削除済みだったので打つ手が無かったのですが、Virtual Machine Platform(仮想マシンプラットフォーム)とWindows Subsystem for Linux(Linux用Windowsサブシステム)の機能を無効化すると、インストールできるようになりました。
▼こちらの記事を参考にしました。削除方法も書かれています。
https://jp.minitool.com/news/uninstall-wsl.html
▼「Windowsの機能の有効化または無効化」で、機能を無効しました。
▼その後再起動しました。
▼再起動後、wsl --installを実行すると、インストールできました。
さらにパソコンを再起動しました。
▼再起動後にコマンドプロンプトでUbuntuのユーザー名やパスワードを設定しました。Ubuntu 22.04.3が入ったみたいですね。
▼WSLのバージョンも確認しておきました。WSL2が入ったようです。
wsl -l -v
削除して再インストールしてみる
これまでの手順で一度構築したのですが、やり直したくなったのでもう一度試してみました。今回はちゃんとアプリケーションを削除しました。
▼再度こちらの記事を参考にしました。
https://jp.minitool.com/news/uninstall-wsl.html
▼Ubuntuは「アプリと機能」から削除しました。Windows Subsystem for Linuxは無かったです。
この状態でwsl --installを行うと、以下のエラーが出ました。
Error code: Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_FILE_NOT_FOUND
▼Ubuntuは入っているようでした。
WSLに登録されているディストリビューションを解除すると、解決しました。
▼以下の記事が参考になりました。
https://qiita.com/insilicomab/items/7d23020206939c821864
https://www.rk-k.com/archives/6873
wsl -l でディストリビューション名を確認後、以下のコマンドを入力しました。
▼今回のディストリビューション名はUbuntuでした。
wsl -l
wsl --unregister <ディストリビューション名>
▼Ubuntuを起動すると、初期設定が始まりました。
Node-REDをインストールする
Linux環境ではNode-REDの環境を構築したことはあるのですが、WSL2でも試してみました。
必要なパッケージのインストール
▼以下のコマンドで、Node.jsとnpm、Node-REDがインストールされます。
sudo apt install npm nodejs
sudo npm install -g --unsafe-perm node-red
▼エラーが表示されていました。バージョンによるものですね。
▼バージョンを確認してみると、ここでもエラーが出ていました。
記事を参考に、新しいバージョンをインストールしてみました。
▼こちらの記事を参考にしました。
https://qiita.com/nouernet/items/d6ad4d5f4f08857644de
▼以下のコマンドを実行しました。
sudo npm install n -g
sudo n stable
sudo apt purge -y nodejs npm
sudo apt autoremove -y
▼コマンドを実行後、バージョンを確認してみると表示されませんでした。
Raspberry Piのときは再起動していたなと思い、一度コマンドプロンプトを閉じて開き直しました。もう一度バージョンを確認すると表示されました。
▼nodeはv20.13.1、npmは10.5.2でした。むしろバージョンが下がっているのですが、開き直したのが良かったのでしょうか。
この状態で、node-redと入力するとNode-REDを起動することができました。
Node-REDのポートの変更
Node-REDを起動できたのはいいのですが、WSLとWindowsのNode-REDでポートが被っていました。
▼どちらもhttp://127.0.0.1:1880になっています。
この状態だと、Node-REDのエディタにアクセスした際に、どちらか一方だけが表示されるようになります。
そこで、WSL上のNode-REDのポートを変更しました。setting.jsを編集します。
▼WindowsのエクスプローラーにLinuxの項目があり、その中にUbuntuフォルダがあります。
▼Linux/Ubuntu/home/<ユーザー名>/.node-redフォルダに、setting.jsがあります。このファイルを編集します。
▼ポート番号は1881に変更しました。
▼1881ポートで起動することができました!これでWindowsとUbuntuのNode-REDを同時に起動できます。
WSL2のメモリ使用量を制限する
WSL2の環境を構築してから、私のノートパソコンの処理が遅くなっているような気がしたので調べてみました。
▼タスクマネージャーで見てみました。タスクバーを右クリックすると開くことができます。
▼「Vmmem」というものがかなりの割合を占めていました。
Vmmemについて調べてみると、WSL関連のものだそうです。今回はメモリの使用量を制限しました。
▼以下の二つの記事を参考にしました。
https://jp.minitool.com/news/vmmem-high-memory.html
https://helog.jp/windows/vmmem-memory
▼WSLはこちらのコマンドで停止できます。
wsl --shutdown
▼C:\Users\<ユーザー名>\.wslconfigファイルに、以下のように記述しました。
[wsl2]
memory=1GB
▼タスクマネージャーを見ていると、メモリの使用量が1GB程度に収まっていました。
neofetchを試してみる
この記事のアイキャッチ画像用にちょうどいいものを調べていたのですが、プロンプトでUbuntuのアイコンが表示されるものがありました。
neofetchコマンドで、システム情報を表示することができるようです。
▼こちらに他のOSでの実行方法も書かれていました。
https://qiita.com/yoshi_yast/items/74225c73f6e30ede07ea
▼aptでインストール後、neofetchを実行しました。
sudo apt install neofetch
neofetch
▼実行してみるとこんな感じ。メモリは965MiBに抑えられていますね。
最後に
WSL2の環境が構築できたので、Windowsでは動かず、Ubuntuでは動いたソフトウェアを試してみたいなと思っています。私のNode-RED用のノードやソフトウェアが、他の環境でも動くかどうかを検証するのに役立てたいです。
USBブートでUbuntuの環境を起動するというのも試してみたいところです。全然知識が無いのですが、うっかりデータを全消去しちゃったりしないか心配です。Raspberry Piのように、簡単に切り替えられるのでしょうか。