環境
~/.stack
をdotfileで管理しており、それをGithubで管理しています。
gitレポジトリの管理にはghqを使用しています。
問題
ghqのアップデートによって、デフォルトのパスが~/.ghq
から~/ghq
に変わりました(隠しディレクトリではなくなった)。
それに応じてdotfileから出しているシンボリックリンクもパスを変更したのですが、その後stackがうまく動かなくなりました。
$ stack build
Found an invalid compiler at "/Users/me/ghq/github.com/Cj-bc/dotfiles/dotfiles/stack/programs/x86_64-osx/ghc-8.6.5/bin/ghc-8.6.5": Received ExitFailure 126 when running
Raw command: /Users/me/ghq/github.com/Cj-bc/dotfiles/dotfiles/stack/programs/x86_64-osx/ghc-8.6.5/bin/ghc-8.6.5 --info
Standard error:
/Users/me/ghq/github.com/Cj-bc/dotfiles/dotfiles/stack/programs/x86_64-osx/ghc-8.6.5/bin/ghc-8.6.5: line 9: /Users/me/.ghq/github.com/Cj-bc/dotfiles/dotfiles/stack/programs/x86_64-osx/ghc-8.6.5/lib/ghc-8.6.5/bin/ghc: No such file or directory
/Users/me/ghq/github.com/Cj-bc/dotfiles/dotfiles/stack/programs/x86_64-osx/ghc-8.6.5/bin/ghc-8.6.5: line 9: exec: /Users/me/.ghq/github.com/Cj-bc/dotfiles/dotfiles/stack/programs/x86_64-osx/ghc-8.6.5/lib/ghc-8.6.5/bin/ghc: cannot execute: No such file or directory
解決策
パスは変えたはずなのですが、依然どこかで~/.ghq
以下を参照しているようです。
1. ghcを再ビルドさせる
$ rm -rf ~/.stack/programs/x86_64-osx/*
2. snapshotsを削除する
パッケージのファイルが足りないと言われるので、~/.stack/snapshots/
を削除します。
There are files missing in the 'lens-4.17.1' package,
try running 'ghc-pkg check'.
この時、ghc-pkg check
をしても何も出力されません。stack exec ghc-pkg check
を実行してください。
ack -l '.ghq' | xargs -L1 gsed -i "s/\.ghq/ghq/g"
等で置換をこころみましたが、別の問題が発生したので素直にsnapshot消しました。