Help us understand the problem. What is going on with this article?

WSL2にHaskell (Stack経由) を入れたときにハマったこと

はじめに

先日 Windows10 May 2020 update が来て、WSL2がようやく正式版になりましたね!
そこでWSL2にHaskellを入れてみようと思ったのですが、エラーが出たのでハマったので、解決方法を忘備録として載せます。

WSL2のインストール方法はQiitaを探せばいくらでもありそうなので、ここでは紹介しません。
また、WSLとVSCodeの連携は こちらの記事 に書いたので、ぜひ読んでください!

今回私は、WSL2のUbuntu 20.04 LTSを使いました。

ハマったこと

stack setupコマンドを実行すると以下のようにエラーが出る

bash
$ 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のものに変更します。

まず、以下を実行

bash
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が早く成熟してくれるといいなぁ

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした