少し前に WSL 2 の Ubuntu の挙動がおかしくなってしまったので、溜まっているゴミを掃除するついでに新しいバージョンを入れ直すことにした。
WSL 2 は単に開発環境のクリーンアップというよりは、これならではの手順が多く、メモってなくて毎度面倒くさくなっているので今回ちゃんと記録しておくものです。
昔にこんな記事も書いていたが、これは単なる「Ubuntu のセットアップ手順」程度のものでしかなくほとんど役に立たなかったのと、中身のツール類は陳腐化してしまいやすい内容だったので全体的に書き直すことにした。今回も一部この内容は踏襲されています。
前提とか
- WSL 2 自体の設定は有効化されているものとします
- 現在の Windows 11 は WSL 2 の利用がものすごく楽になっています
- パッケージのインストール類のコマンドは現時点での公式サイトのものを当然そのまま転記してきていますが、特にシェルスクリプトを curl してきて実行するようなタイプの場合はご自身で公式サイトの最新情報をよくチェックすることをおすすめします
.profile
は使わず(Ubuntu はもともと.bash_profile
はない)、内容によらず全部.bashrc
に書く方針でやっているwsl
コマンドは基本的に Windows 側(PowerShell でも cmd でも可)で実行する
Zone.Identifier 問題
重要なのでひとつ項目として先に取り上げて書いておきます。
WSL には、WSL から見て外部の世界から入ってきたものには Zonde.Identifier
というサフィックスがついたファイル が生成されてしまうというやっかいで有名な問題があります。一応セキュリティ目的のものであるようだが、実感できるメリットに対して邪魔さ加減がとんでもないため基本的に嫌われています。
WSL 2 のディストリビューションを新しくしようとするとき、多かれ少なかれ旧ディストリビューションから新ディストリビューションへコピーしたいファイルが出てくると思います。このとき、Windows に一旦コピーしてから移動させたり、もしくは WSL 同士で直接コピーや切り取りしようが、基本的にはすべてのファイルで Zone.Identifer が生成されてしまうため、大量にディレクトリコピーとかを行うと悲惨なことになります(なった)。
いままでグローバルの .gitignore に入れるとかしながらだましだましやってきたが、今回根本的に対処することに。結果としては、以下の Reddit スレで解決できました。
https://www.reddit.com/r/wsl2/comments/1giszi8/zoneidentifier_log_files
レジストリの場所的におそらくディストリビューションを横断して WSL 2 全体に永続的に効果があると思う。ぜひ今回を機に実施するのをおすすめします。
WSL 2 再インストール手順
- ディストリビューションのインストールに Microsoft Store 版を使うのはやめる
wsl --install -d Ubuntu-24.04
- username を訊かれるので答える
wsl --set-default Ubuntu-24.04
- apt
sudo apt update && sudo apt upgrade
sudo apt install build-essential openssl libssl-dev pkg-config unzip jq
- pyenv
curl -fsSL https://pyenv.run | bash
sudo apt install zlib1g-dev libbz2-dev liblzma-dev libsqlite3-dev libreadline-dev libffi-dev
pyenv install 3.12.11
pyenv global 3.12.11
- mise-en-place
- これはなに:自分のポスト
curl https://mise.run | sh
mise use -g node@20.12.2
- 基本的にグローバル用の npm コマンドのためのみに使う
npm i -g npm-check-updates @google/gemini-cli @expo/ngrok @nestjs/cli @azu/github-label-setup
- 過去 n に入ってたバージョンめも
- node/16.20.2
- node/18.16.1
- node/20.12.2
- 基本的にグローバル用の npm コマンドのためのみに使う
- Bun はグローバルでは入れない、リポジトリの .tool-versions のみを唯一のソースとする
- Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- tfenv
git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
tfenv install 1.2.2
- 古い…
tfenv use 1.2.2
- ro-soku
- 自分用自作ツールです
- VS Code の WSL の接続先を変える
- これは
wsl --set-default Ubuntu-24.04
が実行されていれば大丈夫なはず(初回は「プロファイルを指定して実行」みたいなやつするといいかも) - もともとの Ubuntu 自体にインストールされていた拡張は「ローカル」に残らないせいか自動で移行されないため、インストールしていたリストを控えておく必要があることに注意
- これは
- Zone.Identifier が生成されないようにする(上述したもの)
- 旧 WSL 2 削除
- Windows 設定アプリから見えている Ubuntu があればまずそれを削除
- そのあと PowerShell から以下を実行
wsl --terminate Ubuntu-22.04
wsl --unregister Ubuntu-22.04