環境変数TMPDIRに,RAMディスクのディレクトリを指定していたのが,不具合の原因でした.「unset TMPDIR」を入れることで,解決しました.
WSL2に移行してからrbenv installができなくなったなあとぼやきながら
汗をかこう!
具体的には,次の状況でした.
- tmuxで新規ウィンドウ(シェルはzsh)を作成すると,コマンドプロンプトの前に「cat: -: そのようなファイルやディレクトリはありません」と表示される.
- rbenv install 2.8.0-devを実行すると,インストールが途中で終了する.ログを見ても,原因が何なのか分からない.
rbenvのログの終わりのほうは,こんな感じで,「cat: -: No such file or directory」が大量に出力されています.
cat: -: No such file or directory
cat: -: No such file or directory
cat: -: No such file or directory
cat: -: No such file or directory
cat: -: No such file or directory
cat: -: No such file or directory
cat: -: No such file or directory
cat: -: No such file or directory
cat: -: No such file or directory
checking for ruby... (略)
downloading config.guess ... done
downloading config.sub ... done
checking build system type... cat: -: No such file or directory
x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for gcc... gcc
cat: -: No such file or directory
checking whether the C compiler works... no
configure: error: in `/mnt/z/wsl_tmp/ruby-build.(略)':
configure: error: C compiler cannot create executables
See `config.log' for more details
catコマンドが悪いようには,思えません.むしろrbenvのほうです.シェルでrbenv init -を実行すると,出力はこうでした.
export PATH="/home/takehikom/.rbenv/shims:${PATH}"
export RBENV_SHELL=zsh
source '/home/takehikom/.rbenv/libexec/../completions/rbenv.zsh'
command rbenv rehash 2>/dev/null
cat: -: そのようなファイルやディレクトリはありません
.zshrcには,~/.rbenvのディレクトリがあるときには,~/.rbenv/binをPATHに追加してから,eval "$(rbenv init -)"を実行するよう,書いていて,ここが原因と分かったものの,対策が思いつかずに,1か月近くが過ぎました.
昨夜,いくつか記事を読んで,Microsoft Store経由でインストールしていたUbuntuをアンインストールし,再起動してから,Microsoft Store経由でUbuntuをインストールしてみました.
.zshrcや.tmux.confなど,重要なディレクトリやファイルはバックアップをとっていて,Ubuntuの端末上でコピーしてからUbuntu(やPC本体の)再起動をしたところ,catのエラーがなくなったかのように見えました.
しかしrbenvをインストールしたあと,tmuxで新規ウィンドウを作成すると,再び,「cat: -: そのようなファイルやディレクトリはありません」と表示されるようになりました.
一つ一つ,zshの設定行を見ていくと,環境変数TMPDIRが目に留まりました.WSLのとき,YドライブとZドライブを順に見て,実在するドライブ---Windowsで個人的に設定している,RAMディスクのドライブです---なら,そこにwsl_tmpというディレクトリを作り,そのパスを環境変数としています.上記のエラーログの「/mnt/z/wsl_tmp」の箇所です.
シェル上でunset TMPDIRを実行し,rbenv init -を実行すると,catのエラーがなくなりました.
export PATH="/home/takehiko/.rbenv/shims:${PATH}"
export RBENV_SHELL=zsh
source '/home/takehiko/.rbenv/libexec/../completions/rbenv.zsh'
command rbenv rehash 2>/dev/null
rbenv() {
(略)
}
.zshrcに,ホスト名の条件指定で,unset TMPDIRを実行するよう,指示を加えて,シェルを起動すると,エラーが出なくなり,rbenv install 2.8.0-devも,できるようになりました.さっそくrbenv global 2.8.0-devを実行しました.
自分が使用しているいくつかのWindows PCで,WSL2を使用しているのは,この記事を書いているPCのみです.Windows Insider Program(スロー)に登録しています.
WSL2のインストール・再インストールで参考にした記事です.
tmuxの起動時にエラーが出るようになりました.以下のページを読んで対処すると,解決しましたので,はてブしました.
.zshrcに記載している,WSLであるかの判定方法も,書き換えました.変更後のコードの抜粋は次のとおりです.
case "`uname -sr`" in Linux*icrosoft*); export ARCHI="wsl" ;; Linux*); export ARCHI="linux" ;; CYGWIN*); export ARCHI="cygwin" ;; *); export ARCHI="unknown" ;; esac
WSL2の利用前は,「Linux*icrosoft*)」ではなく「Linux*Microsoft); 」でした.あるWSL環境での,uname -srの出力は,「Linux 4.4.0-18362-Microsoft」でした.しかしWSL2では「Linux 4.19.84-microsoft-standard」となっています.両方に対応するよう,「Linux*icrosoft*)」としたのでした.