WSLを利用したLinux環境の構築
目次
1. はじめに
Windows10のMay 2019 Updateでwslの機能が大幅に改善され、cygwinのように WindowsとLinuxがシームレスに使えるようになりました。研究室のWindows環 境で長年使っていたcygwinは卒業して、wslに乗り換えることにしました。 cygwinのときに低速だったネットワークが早くなり、emacsのプロセス処理等 も問題なく動く(当然ですが)のが嬉しいところです。ちなみに大窪はwindows は使っていませんが、学生用のメモです。研究室に配属された3年生のセミナー Iは、wsl2+Debian環境を作成して実習とします。
2. Windows10のupdate
Windows updateを手動で行ってMay 2019以降のWindows10にupdateします。 Windows Updateで最新のWindows 10に更新してください。古いWindowsだと install手順がやや異なります。2022/9/27のversionは以下のとおりです。
windowsの更新に失敗する場合は、edgeでmicrosoftのpageに接続してupdateを試みる。
3. WSLとDebianのインストール
WSL上に構築するLinuxはDebianとします。Ubuntuでも良いですが、余計なプロ グラムを大量にインストールされるのと、commandをpythonでfilterしたりと 余計なことをしているようなので、Debianにします。なお、aptでinstallする mozc_emacs_helperが、うまく動かなかったのでお手製でコンパイルしたもの を使います。
Windows menuからWindws PowerShellを管理者として起動します。PowerShell のターミナルから次のコマンドでUbuntuをインストールします。ブラウザ上で コピーして、ターミナル上で右クリックすればペーストされます。
wsl --install -d Debian
コマンドでインストールすると、なぜか古いDebian 9 (stretch)がインストー ルされることがあるようです。Debianのインストールが終わったら、次のコマ ンドで、Debianのversionを確かめてください。
cat /etc/os-release
次のような出力になるはずです。
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" NAME="Debian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"
古いDebian 9 (stretch)がインストールされた場合は、StoreからDebianを入 れてみてください。
wslコマンドがnot foundな場合は、「コントロール パネル -> プログラム -> Windowsの機能の有効化または無効化」にすすんで、Linux用Windowsサブシス テムにチェックいれます。OKで再起動を求められるので従います。 PC再起動後、PowerShellでコマンド投入してください。
Debianのインストールは、しばらく時間がかかります。インストールが終わる と、terminal上でusernameとpasswordを尋ねられるので英数スペースなしの usernameとpasswordを設定します。passwordをタイプしても画面に表示されま せん。
以下、コマンド操作します。ターミナル上でマウスのright buttonクリックす ればコピーしたコマンドをペーストできます。
cmdまたはpower shellでWSL2+Debianがインストールされているか確認します。
wsl -l -v
次のように出力されればOKです。
NAME STATE VERSION * Debian Running 2
WSLのversionが1のままだったり、謎のエラーでDebianのインストールできない場合は、Download the Linux kernel update packageをダウンロードしてWSLを更新します。
4. localeの設定とpackageのインストール
package情報をapt updateで更新してupgradeします。
sudo apt update sudo apt upgrade -y
日本語環境にlocaleを変更します。configureのmenuに入ったらja_JP.UTF-8を 選びます。defaultもja_JP.UTF-8を選びます。
sudo dpkg-reconfigure locales
生活に必要なものとemacsをインストールします。少し時間がかかります。
sudo apt install rsync bc openssh-client curl emacs-lucid emacs-mozc-bin libgl1 libxcb-* -y
4.1から4.3のpackageは必要な人だけ。インストールに時間がかかるのでセミナーIを 受講する3年生はとりあえず必要ありません。
4.1. Cとfortran
sudo apt install make gcc gfortran -y
4.2. 画像と動画処理
sudo apt install imagemagick ffmpeg -y
4.3. 論文書くためのlatex
sudo apt install texlive-lang-japanese texlive-latex-recommended -y sudo apt install texlive-fonts-recommended texlive-fonts-extra -y sudo apt install texlive-publishers texlive-fonts-extra -y sudo apt install texlive-science -y sudo apt install latexmk -y
パッケージを更新するために時々、updateしてupgradeします。
sudo apt update sudo apt upgrade
5. 初期設定
.bashrcや.emacs.d等のdot.tgzに梱包したものを作成しています。$HOMEに展 開します。パスワードが必要です。
curl -u glass https://amorphous.tf.chiba-u.jp/memo.files/wsl/files/dot.tgz | tar xzf - -C ~/
lammpsとqeプログラムといくつかsampleデータを梱包したものを配布します。 aptのpackageにlammpsとquantum espressoが準備されていますが、一部ファイ ルのダウンロードに失敗する場合があったのと、コンパイル用にほぼ関係ない 依存packageを大量に入れられるので、お手製でコンパイルしたものを配布し ます。
curl -u glass https://amorphous.tf.chiba-u.jp/memo.files/wsl/files/local.tgz | tar xzf - -C ~/
6. Xwindowsのインストール
windows側で動かすXwindowsのサーバーはVcXsrvを使います。
https://sourceforge.net/projects/vcxsrv/
うまく動作しない場合は、環境変数DISPLAYとfirewallの設定でVcXsrvに許可
を与えているか確認します。wsl2の場合はVcXsrvの起動時に-acを渡すのと
/etc/resolve.confからIPアドレスを拾う必要があります。
https://github.com/microsoft/WSL/issues/4106
マカフィ何とかかfirewallでXwindowの通信を遮断してXwindowのapplication を表示できない場合があります。その場合は、マカフィの設定でXwindowの通 信を許可するようにしてください。
7. Python 3.X
Linux用のminicodaをダウンロードしてインストールする。$HOME/.miniconda3 にインストールすることとします。インストールは、batchで $HOME/.miniconda3にインストールするよう指定します。
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh sh Miniconda3-latest-Linux-x86_64.sh -b -p ~/.miniconda3 -u
終わったら、inlstallerは不要なので削除する。
rm Miniconda3-latest-Linux-x86_64.sh
よく使うモジュール一式とemacsでpython書くためのelpy用のモジュールもインストールします。
conda install numpy scipy matplotlib pandas -y conda install epc virtualenv jedi flake8 yapf autopep8 -y
7.1. CondaHTTPError: HTTP 000 CONNECTION FAILED対策
Ubuntu 20.04: CondaHTTPError: HTTP 000 CONNECTION FAILED #9948を参照する。 terminalからpermissionの変更。
chmod -R 777 ~/.miniconda3
power shellからwslのshutdownする必要があるかもしれない。
wsl --shutdown
この後にconda installをもう一回試す。
8. WSL2でのsshd
外部からPCにssh接続したい場合、sshdを起動しておく必要があります。WSL2では仮想ネットワークを介した接続になるので、portforward(connectport?)してやる必要があります。sshdをインストールして起動します。
sudo apt install openssh-server -y sudo service ssh start
管理者権限でdebianを起動し、以下のshell scriptを実行します。
#!/bin/sh IP=`ip -4 addr show eth0|grep inet | awk '{print $2}' | sed -e 's/\/20//'` netsh.exe interface portproxy delete v4tov4 listenport=22 netsh.exe interface portproxy add v4tov4 listenport=22 connectaddress=$IP sc.exe config iphlpsvc start=auto sc.exe start iphlpsvc
これでwindows PCにssh接続すれば、debianにloginできます。うまくいかない場合は、firewallの設定をみなおす。
9. Tips
- Linux側から/mnt/cでwindows側のファイルにアクセス可能。
- Ubuntuのpackageにlammpsとqeがあるが正常に動作しなかった。また大量に 依存ファイルをインストールされるので、apt経由のインストールはおすす めしない。
- Linux上で「explorer . 」でカレントディレクトリを表示
- Widows上で\\wsl$\ でLinuxシステムのファイルにアクセス可能。ただしwindow 上からlinuxにファイルをコピーするとpermissionがrootでrxrxrxになり気味が悪い。
- Linuxを再起動したい時はWindowsのServiceからLxssManagerを再起動する。
ubuntuのverision詳細を知る。
cat /etc/os-release
loginするデフォルトユーザを変更するためには、コマンドプロンプト上で設定する。
debian config --default-user <user_name>
- wslconfigで任意のLinuxを起動できるらしい(確かめていない)
http://my-web-site.iobb.net/~yuki/2018-03/soft-tool/wsl-config/ aptコマンドの例
apt search <keyword> # keywordのpackageを探す apt remove <package> # pacakgeのdeinstall apt list --installed # installしているpackage一覧
service制御 daemon管理はservieコマンドを使います。sshdを起動します。
sudo service ssh start
Power Shellで使うwslの管理コマンド例。管理者権限で実行する必要があることに注意する。
wsl --help # help wsl -l -v # インストールされているlinux一覧を表示 wsl -l -o # インストールできるlinux一覧 wsl --install -d Ubuntu # ubuntuのインストール wsl --set-version Ubuntu 1 # Ubuntuをwsl2からwsl1にdowngrade wsl --set-version Ubuntu 2 # Ubuntuをwsl2からwsl1にupgrade wsl --unregister Ubuntu # Ubuntuの削除
PowerShellが使いにくいのでhelpをベタ貼りしとく。
Linux バイナリーをwsl上から実行する引数:
--exec, -e <コマンドライン> 既定の Linux シェルを使用せずに、指定されたコマンドを実行します。 -- 残りのコマンド ラインをそのまま渡します。 オプション: --distribution, -d <ディストリビューション> 指定されたディストリビューションを実行します。 --user, -u <ユーザー名> 指定されたユーザーとして実行します。
Linux 向け Windows サブシステムを管理するための引数:
--help 使用法情報を表示します。 --install [Options] 追加の Windows Subsystem for Linux ディストリビューションをインストールします。 有効なディストリビューションの一覧を表示するには、'wsl--list--online' を使用してください。 オプション: --distribution, -d [Argument] 名前を指定して配布をダウンロードしてインストールします。 引数: 有効なディストリビューション名 (大文字と小文字は区別されません)。 例: wsl --install -d Ubuntu wsl --install --distribution Debian --set-default-version <Version> 新しいディストリビューションの既定のインストールバージョンを変更します。 --shutdown 直ちに、すべての実行中の配布および WSL2 軽快なユーティリティの仮想マシンを終了します。 --status Linux の Windows Subsystem の状態を示します。 --update [Options] オプションが指定されていない場合、WSL2 カーネルは更新され 、最新バージョンになります。 オプション: --rollback 以前のバージョンの WSL2 カーネルに戻します。
Windows Subsystem for Linuxのディストリビューションを管理するための引数:
--export <Distro> <FileName> ディストリビューションを tar ファイルにエクスポートします。 ファイル名には、標準出力として - を使用できます。 --import <Distro> <InstallLocation> <FileName> [Options] 指定した tar ファイルを新しいディストリビューションとしてインポートします。 ファイル名には標準入力として - を使用できます。 オプション: --version <Version> 新しいディストリビューションに使用するバージョンを指定します。 --list, -l [Options] ディストリビューションの一覧を表示します。 オプション: --all 現在インストールまたはアンインストールされているディストリビューションを含む、すべてのディストリビューションを表示します。 --running 現在実行中のディストリビューションのみを表示します。 --quiet, -q ディストリビューション名のみを表示します。 --verbose, -v すべてのディストリビューションに関する詳細な情報を表示します。 --online, -o 'wsl --install' を使用してインストールするために使用できるディストリビューションの一覧を表示します。 --set-default, -s <Distro> ディストリビューションを既定として設定します。 --set-version <Distro> <Version> 指定されたディストリビューションのバージョンを変更します。 --terminate, -t <Distro> 指定されたディストリビューションを終了します。 --unregister <Distro> ディストリビューションの登録を解除し、ルートファイルシステムを削除します。
- wsl –exportと–importでLinux丸ごとコピーできるようです。
10. 参考資料
- https://ja.wikipedia.org/wiki/Windows_Subsystem_for_Linux
- https://forest.watch.impress.co.jp/docs/shseri/win10may2019/1182605.html
- https://ja.wikipedia.org/wiki/Windows_Subsystem_for_Linux
- https://www.clear-code.com/blog/2017/11/8.html
- https://www.atmarkit.co.jp/ait/articles/1806/15/news048.html
- http://my-web-site.iobb.net/~yuki/2018-03/soft-tool/wsl-config/