WSL上におけるJuliaの環境構築
WSLの入れ方などは省略します。
Juliaの導入
バージョン管理ができるようにJuliaupを導入します(普通に導入したら、何故かVSCodeでうまくいかなかったという事情もあります)。 基本的に GitHub - JuliaLang/juliaup: Julia installer and version multiplexer これに従います。
curl -fsSL https://install.julialang.org | sh
これを実行すると、インストール方法を聞かれるので、とりあえずデフォルトでインストールします。
あとは勝手にパスを通してくれてJuliaの最新のバージョンが使えるようになっているはずです。
一応、書いてある通り . コマンドなり、 source なりを使ってファイルを読み込むか、WSLを一度終了して再起動します。
Juliaが使えるか確認するために、以下のコマンドを実行します。
julia --version
Juliaのバージョンが確認できれば大丈夫です。
VSCodeの拡張の導入
Julia - Visual Studio Marketplace これを入れるだけです。 あとは念のため、VSCodeを再起動すればうまくいくはずです。
VSCode上でWSLを使えるようにしていない場合はうまくいかないと思うので、設定してから入れてください。
ゼロからのOS自作入門(MikanOS)のday03aでカーネルの読み込みがうまくいかない
下記の本を買ってからしばらく放置していたのですが、重い腰を上げてRustでやり始めました。
zero.osdev.jp
問題
day03a 初めてのカーネルを書いて実行し、qemuで見たところ明らかに違うアドレスがRIPに表示されていました。
一応RIP前後の命令を見ましたがhltは見当たりませんでした。
原因
同じような問題は結構起きているようで、サポートのレポジトリで何件が議論されていました。
上記に書いてある通り、リンカのバージョンが新しくなって仕様が変わったため、起こるバグのようです。
解決策
リンカの問題ということが分かったので、バージョンを下げるという手もありますが、リンカのオプションを追加するだけで治すことができます。
ld.lldのドキュメントを見ると、
Specify whether two adjacent PT_LOAD segments are allowed to overlap in pages. noseparate-code (default) allows overlap. separate-code allows overlap between two executable segments, or two non-executable segments. separate-loadable-segments disallows overlap.
のように記述があります。
従って、リンカのオプションに -z separate-loadable-segments を追加することで治すことができます。
先ほど挙げたURLのIssueに書かれているように、day04d ローダを改良するを先に書くことでも治すことができます。
Wi-Fiの設定がPublicのとき、WSL2上で一部の通信がうまくいかない
※注意: ここで紹介している解決方法は同じネットワーク上のユーザ全員を信頼できる必要があります。
喫茶店のような信頼できない環境では設定しないようにしてください。
何の設定をしているかわからない場合は、設定しない方がよいです。
WSL2でUbuntuを使っているのですが、apt update等がHash Sum Mismatchと出て、うまくいきませんでした。
また、VMWare等の仮想環境では問題が発生しなかったため、WSL特有の問題と考えられます。
理由を色々探しながら試しているうちに、
家だと成功して、大学のWi-Fiにつないでいるときにうまくいかないことがわかりました。
問題の原因としては、接続しているWi-Fiのプロパティでネットワーク プロファイルの種類がパブリックになっていることでした。
そこで、
- WSL2をシャットダウンする
- 設定>ネットワークとインターネット>Wi-Fi>既知のネットワークを管理 から現在使用しているネットワークを削除(削除前にプライベート設定にしておいた方がいいかも)
- もう一度接続して、プロファイルをプライベートにする
という手順で、Wi-Fiの設定を変更しました。
プライベートに変更して、PCを再起動するなどしてもうまくいかなかったのですが、上記の手順を踏むとうまくいきました。
学校や会社のWi-Fiを使っていて同じような症状になっている方の参考になれば幸いです。
公共のWi-Fiでプライベート設定にするべきではないので、パブリックのままうまくやる方法があれば、教えて頂けると助かります。
しばらく前はこんな問題なかったと思うんですが…
プロキシとかが関係あったりするんですかね…
Windows10(21H2)のWSL2でGPUの環境構築
Windows10でもついに使えるようになったので、WSL2のUbuntuで使えるようにしたときのメモ GUIはまだっぽいけど…
確認
windows10の21H2以降であるか確認する。 WSLのバージョンが2になっていることを確認する。
Windowsにグラフィックドライバのインストール
下記のURLにアクセスして、自分のGPUにあったドライバをインストールします。
https://developer.nvidia.com/cuda/wsl/download
WSLにCUDAのインストール
下記のURLにアクセスして書いてある通りのことをWSL上で行います。
現在(2021/11/26)は以下のように書いてあったのでそれを実行しました。
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/11.5.1/local_installers/cuda-repo-wsl-ubuntu-11-5-local_11.5.1-1_amd64.deb sudo dpkg -i cuda-repo-wsl-ubuntu-11-5-local_11.5.1-1_amd64.deb sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-5-local/7fa2af80.pub sudo apt-get update sudo apt-get -y install cuda
テスト
実際に認識できているかどうかを見るために、CUDAのSampleのdeviceQueryを実行します。
cd /usr/local/cuda/samples/1_Utilities/deviceQuery sudo make run
CUDAのバージョンやGPUの名前などが一致しているかなどから正しく認識できているかどうかがわかると思います。 確認を終えたら、
sudo make clean
をして、作成されたファイルを削除しておきましょう。
もちろん、
nvidia-smi
も動きます。
WSL2の環境構築
WSLをあまり使ってない理由がGPU対応してない、だけだったのが対応し始めたので、本格的にWSL使っていきたいと思います。
とはいえ、今回はGPU関連の環境構築はしません。
- WSLの設定とUbuntuのインストール
- パッケージの更新
- 日本語設定
- IPAフォントのインストール
- 最低限の開発環境が入ってるやつのインストール
- Gitのリポジトリの追加
- Emacsのインストールと設定
- Python周りの設定
- TeX Liveのインストール
- その他
WSLの設定とUbuntuのインストール
省略
パッケージの更新
sudo apt update sudo apt upgrade
日本語設定
sudo apt install language-pack-ja sudo update-locale LC_ALL=ja_JP.UTF-8 sudo update-locale LANG=ja_JP.UTF-8
Ubuntuを再起動して設定されていることを確かめる。
タイムゾーンは最初から設定されていそうなので書かない。
しばらく設定をしていると、Warningが出てきたので
sudo locale-gen ja_JP.UTF-8 # 要らないかも?
sudo dpkg-reconfigure locales
で現れた画面で ja_JP.UTF-8 を選択する。
IPAフォントのインストール
sudo apt install fonts-ipafont
最低限の開発環境が入ってるやつのインストール
sudo apt install build-essential
Gitのリポジトリの追加
Gitの最新の安定板を入れられるようにする。
sudo add-apt-repository ppa:git-core/ppa sudo apt update sudo apt upgrade
Emacsのインストールと設定
この辺りは好みがかなりあるのでそれに合わせて設定する。
sudo apt install emacs
その後、デフォルトのエディタをEmacsにするために
sudo update-alternatives --config editor
でEmacsを選択する。
Python周りの設定
とりあえずPyenvとPipenvを使う。
Pyenvの設定
まず、Pyenvに必要なパッケージをインストールする。
sudo apt install libffi-dev libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev
Pyenvのインストールをする。 大体これに従った。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv cd ~/.pyenv && src/configure && make -C src
.bashrc に以下を追記する。
export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init --path)" eval "$(pyenv init -)"
変更を反映する。
source ~/.bashrc
Pyenvを用いたPythonのインストールと設定
pyenv install --list でインストールできるPythonのバージョンを確認できる。
とりあえず 3.9.9 をインストールして標準に設定する。
pyenv install 3.9.9 pyenv global 3.9.9
Pipenvのインストール
まずpipをアップデートする。
pip install -U pip
pipenvをインストールする。
pip install pipenv
好みで export PIPENV_VENV_IN_PROJECT=true を .bashrc に追記する。
TeX Liveのインストール
sudo apt install texlive-full
かなり時間がかかるので気長に待つ。
その他
何かほかに設定することがあったと思いますが、 思い出せないので思い出したら追記します。
MSYS2の初期設定
インストール
まず、下記からMSYS2をダウンロードしてインストールする。
ミラーサイトの設定
※ JAISTはパッケージの更新が遅いっぽい?のでパッケージのアップデート後とかに設定した方がいいかも
そのままだとダウンロードが遅いのでミラーをJAISTのものを主に使うように設定する。
/etc/pacman.d/mirrorlist.mingw32 /etc/pacman.d/mirrorlist.mingw64 /etc/pacman.d/mirrorlist.msys
これらのファイルそれぞれの一番上に、下記の日本のところをコピペする。 一番上にする理由は、上から順に実行されるようになっているため。
パッケージのアップデート
ミラーの設定が終わったらターミナルを開き、
pacman -Syuu
をアップデートするものが無くなるまで何回かやる。
パッケージのインストール
必要なものをインストールしていく ここは人によってかなり異なる。
pacman -S base-devel pacman -S msys2-devel pacman -S mingw-w64-x86_64-toolchain pacman -S mingw-w64-x86_64-emacs pacman -S openssh pacman -S git pacman -S unzip pacman -S winpty
MSYS2のSSHが環境変数HOMEを参照してくれない
下記のことをした後に見つけたのですが、これの3つ目の解決方法のみ試していなかったのでやるべきでした... なぜか二つ目まではやってもうまくいかなかったんですが(マウントをするとできるようになるという情報も見ました)。
環境変数 HOME を参照してくれず、 /home を参照してしまうのであれば、最初からその場所を使うというだけのお話。
自分の場合は D:\MSYS\USER_NAME を HOME としていたので、再インストールしてインストール場所を D:\msys64\ とし、環境変数 HOME を D:\msys64\USER_NAME とした。
その後、元のホームディレクトリにあったファイルやディレクトリなどを持ってきて、ホームディレクトリの場所が変わったことにより何かエラーが出ていれば解決をして終了。