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. Windows10のupdate

Windows updateを手動で行ってMay 2019以降のWindows10にupdateします。 Windows Updateで最新のWindows 10に更新してください。古いWindowsだと install手順がやや異なります。2022/9/27のversionは以下のとおりです。

windws_version.png

windowsの更新に失敗する場合は、edgeでmicrosoftのpageに接続してupdateを試みる。

https://www.microsoft.com/ja-jp/software-download/windows10

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. 参考資料

著者: 大窪 貴洋

Created: 2023-10-03 火 15:24

Validate