はじめに
先日 Windows10 May 2020 update が来て、WSL2がようやく正式版になりましたね!
そこでWSL2にHaskellを入れてみようと思ったのですが、エラーが出たのでハマったので、解決方法を忘備録として載せます。
WSL2のインストール方法はQiitaを探せばいくらでもありそうなので、ここでは紹介しません。
また、WSLとVSCodeの連携は こちらの記事 に書いたので、ぜひ読んでください!
今回私は、WSL2のUbuntu 20.04 LTSを使いました。
ハマったこと
stack setup
コマンドを実行すると以下のようにエラーが出る
$ stack setup
Preparing to install GHC (tinfo6) to an isolated location.
This will not interfere with any system-level installation.
Preparing to download ghc-tinfo6-8.4.4 ...
Download expectation failure: HttpExceptionRequest Request {
host = "github.com"
port = 443
secure = True
requestHeaders = [("User-Agent","The Haskell Stack")]
path = "/commercialhaskell/ghc/releases/download/ghc-8.4.4-release/ghc-8.4.4-x86_64-fedora27-linux.tar.xz"
queryString = ""
method = "GET"
proxy = Nothing
rawBody = False
redirectCount = 10
responseTimeout = ResponseTimeoutDefault
requestVersion = HTTP/1.1
}
ConnectionTimeout
Preparing to download ghc-tinfo6-8.4.4 ...
解決
https://github.com/commercialhaskell/stack/issues/5063 と
https://docs.microsoft.com/ja-jp/windows/wsl/troubleshooting
を参考にしました。
どうやら、DNS関連の問題らしいです。
手順
DNSサーバを一時的にGoogleのものに変更します。
まず、以下を実行
sudo cp /etc/resolv.conf /etc/resolv.conf.new
sudo unlink /etc/resolv.conf
sudo mv /etc/resolv.conf.new /etc/resolv.conf
/etc/resolv.conf を開いて、内容を以下のように書き換える
nameserver 8.8.8.8
nameserver 8.8.4.4
この状態でstack setup
を実行することで、無事インストールできます。
インストールが終わったら、以下のコマンドで元の設定に戻しましょう。
cd /etc
sudo mv resolv.conf resolv.conf.new
sudo ln -s ../run/resolvconf/resolv.conf resolv.conf
お疲れさまでした。
最後に
インストールするだけで結構面倒でしたね。
HIEをインストールする際にも同様の問題が起きるみたいです。
また、hackageからライブラリを取ってくる時も同じ問題が起こるので、日常的にWSL2で開発するのはしんどいかもしれません
WSL2が早く成熟してくれるといいなぁ