WSLを利用したLinux環境の構築

目次

1. はじめに

Windows10のMay 2019 UpdateでWSLの機能が大幅に改善され、cygwinのように WindowsとLinuxがシームレスに使えるようになりました。研究室のWindows環 境で長年使っていたcygwinは卒業して、WSLに乗り換えることにしました。 cygwinのときに低速だったネットワークが早くなり、emacsのプロセス処理等 も問題なく動くのが嬉しいところです。ちなみに大窪はWindowsを普段使って いませんが、学生用のメモです。研究室に配属された3年生のセミナーIは、 WSL2+Debian環境を作成して実習とします。

screen_shot.png

図1: WSL上Linuxにて、emacsのnowindow-modeでメールを書いたり、wikipediaを調べたり、elpy-modeでpython書いたり、google-translateしているスクリーンショット

2. Windowsのupdate

Windows updateを手動で行ってMay 2019以降のWindowsにupdateします。 Windows Updateで最新のWindowsに更新してください。古いWindowsだと install手順がやや異なります。手持ちPCの2024/8/13のversionは以下のとお りです。

windws_version.png

3. WSLとDebian

3.1. Windowsサブシステム

「コントロール パネル -> プログラム -> Windowsの機能の有効化または無効 化」にすすんで、「Linux用Windowsサブシステム」にチェックいれます。OKで再起 動を求められるので従います。

wsl_subsystem.png

3.2. Debian

WSL上に構築するLinuxはDebianとします。Ubuntuでも良いですが、余計なプロ グラムを大量にインストールされるのと、commandをpythonでfilterしたりと 余計なことをしているようなので、Debianにします。

Widows StoreからDebianを検索してイントールします。

debian_store.png

インストールが終わり、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を表示したらアンインストールを選択する。

10. 参考資料

著者: 大窪 貴洋

Created: 2024-08-29 木 10:11

Validate