WSLを利用したLinux環境の構築
目次
1. はじめに
Windows10のMay 2019 UpdateでWSLの機能が大幅に改善され、cygwinのように WindowsとLinuxがシームレスに使えるようになりました。研究室のWindows環 境で長年使っていたcygwinは卒業して、WSLに乗り換えることにしました。 cygwinのときに低速だったネットワークが早くなり、emacsのプロセス処理等 も問題なく動くのが嬉しいところです。ちなみに大窪はWindowsを普段使って いませんが、学生用のメモです。研究室に配属された3年生のセミナーIは、 WSL2+Debian環境を作成して実習とします。
2. Windowsのupdate
3. WSLとDebian
3.1. Windowsサブシステム
3.2. Debian
WSL上に構築するLinuxはDebianとします。Ubuntuでも良いですが、余計なプロ グラムを大量にインストールされるのと、commandをpythonでfilterしたりと 余計なことをしているようなので、Debianにします。
Widows StoreからDebianを検索してイントールします。
インストールが終わり、terminalを起動すると、terminal上でusernameと passwordを尋ねられるので英数スペースなしのusernameとpasswordを設定しま す。passwordをタイプしても画面に表示されません。
terminalから次のコマンドで、Debianのversionを確かめてください。
cat /etc/os-release
次のような出力になるはずです。
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)" NAME="Debian GNU/Linux" VERSION_ID="12" VERSION="12 (bookworm)" VERSION_CODENAME=bookworm ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"
さらにPowerShellでWSL2がインストールされているか確認 します。
wsl --version
次のように出力されればOKです。
WSL バージョン: 2.2.4.0 カーネル バージョン: 5.15.153.1-2 WSLg バージョン: 1.0.61 MSRDC バージョン: 1.2.5326 Direct3D バージョン: 1.611.1-81528511 DXCore バージョン: 10.0.26091.1-240325-1447.ge-release Windows バージョン: 10.0.22631.4037
WSLのversionが1のままだったり、謎のエラーでDebianのインストールできな い、なぜか古いDebainがインストールされる場合は、 Download the Linux kernel update package からWSLとDebianのinstallerをダウンロー ドしてWSLとDebianを更新します。
4. localeの設定
以下、コマンド操作して環境構築を行います。terminal上でマウスの右ボタン をクリックすればコピーしたコマンドをペーストできます。まず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
5. 生活に必要なpackage
生活に必要なものとemacsをインストールします。少し時間がかかります。
sudo apt install man rsync bc openssh-client curl -y sudo apt install emacs-lucid emacs-mozc-bin libgl1 libxcb-* fonts-ricty-diminished -y sudo apt install make gcc g++ gfortran -y
パッケージを更新するために時々、updateしてupgradeします。
sudo apt update sudo apt upgrade
以下のpackageは必要な人だけ。インストールに時間がかかるのでセミナーIを 受講する3年生はとりあえず必要ありません。
5.1. 画像と動画処理
画像や動画をコマンドラインで処理するためです。
sudo apt install imagemagick ffmpeg -y
5.2. latex
論文を作成するための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
6. 初期設定
.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を大量に入れられるので、お手製でコンパイルしたものを配布し ます。またaptでインストールしたmozc_emacs_helperがemacsと接続できなかっ たので、こちらもお手製のものを配布しています。パスワードが必要です。
curl -u glass https://amorphous.tf.chiba-u.jp/memo.files/wsl/files/local.tgz | tar xzf - -C ~/ curl -u glass https://amorphous.tf.chiba-u.jp/memo.files/wsl/files/data.tgz | tar xzf - -C ~/
WindowsにマウントしたファイルシステムのPermissionが気持ち悪いことになるので、/etc/wsl.confで制御します。
cd /etc sudo curl -O https://amorphous.tf.chiba-u.jp/memo.files/wsl/files/wsl.conf
VMDの動作が極端に遅くなるので、WSLgの利用は見送ることにした。WSL付属のWSLgが起動しないように、.wslconfigを作成してdefaultの挙動を変更する必要がある。また、networkingMode=mirroredでnatではなく透過的にネットワークを利用できるようにする。この設定のために、Windowsのユーザーホームディレクトリに、.wslconfigを作成する。PowerShellを立ち上げて.wslconfigを配置する。
cd ~ curl.exe -o .wslconfig https://amorphous.tf.chiba-u.jp/memo.files/wsl/files/.wslconfig
最後にWSLをrestartする。PowerShellを管理者権限で実行して、WSLをshutdownする。
wsl --shutdown
7. Xwindow
WSL付属のWSLgでLinuxのXwindowを利用できますが、見た目がショボいのと、
VMDの動作が絶望的に遅く使い物にならない。そのため、これまで通り、
VcXsrvを使う。
https://sourceforge.net/projects/vcxsrv/
マカフィ何とかかfirewallでXwindowの通信を遮断してXwindowのapplication を表示できない場合があります。その場合は、マカフィの設定でXwindowの通 信を許可するようにしてください。
8. Python 3.X
Linux用のminicodaをダウンロードしてインストールする。インストールは、$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
これで環境構築は完了です。 お疲れ様でした。
9. TIPS
9.1. sshd
sshdをインストールして起動します。networkingMode=mirroredでは、portが Windows側のポートと競合するので、10022でsshdを動かすよう /etc/ssh/sshd_configを修正してから起動する。またfirewallの設定で10022 ポートでの送信・受信に許可を与える。
sudo apt install openssh-server -y vi /etc/ssh/sshd_config ------ Port 10022 ------ sudo service ssh start
.wslconfigでignoredPortsを指定できれば、22ポートで動かせそうだが、 まだexperimentalなようです。
9.2. Linux操作
- Linux上で「explorer . 」でカレントディレクトリを表示
- Linux側から/mnt/cでWindows側のファイルにアクセス可能。
loginするデフォルトユーザを変更するためには、PowerShell上で設定する。
debian config --default-user <user_name>
aptコマンドの例
apt search <keyword> # keywordのpackageを探す apt remove <package> # pacakgeのdeinstall apt list --installed # installしているpackage一覧
service制御 daemon管理はservieコマンドを使う。sshdを起動します。
sudo service ssh start
PowerShellで使う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丸ごとコピーできるようです。
9.3. WSLの詳細設定
permissionやメモリ量等、/etc/wsl.confで詳細に指定できるようになった。
Windows側の気持ち悪いpermissionは/etc/wsl.confで回避する。Xwindowsは、WSLgを利用できるがOpenGLがうまく有効にならない。ファイル名の大文字小文字を区別するcaseはonにしたいが、opensshの起動に失敗するのでoffとした。
sudo vi /etc/wsl.conf ----- # see https://learn.microsoft.com/ja-jp/windows/wsl/wsl-config [automount] options = "metadata,uid=1000,gid=1000,umask=022,fmask=11,case=off" [boot] systemd=true [wsl2] guiApplications=false -----
wsl.confを作成したら、PowerShellを管理者で実行してwslを再起動する。
wsl --shutdown
9.4. WSL上のOS削除
管理者権限でPowerShellを立ち上げて目的のOSを探して削除します。
wsl --list wsl --unregister Debian
OSを削除してもDebina自体のデータは残っているので、Windows MenuでDebianを表示したらアンインストールを選択する。