WSL2にHeroku CLIをインストールする
Sep 26, 2021 01:00 · 1501 words · 3 minute read
今月の目標に掲げている「Webアプリの公開」を進めています。
2021年8月の振り返りと2021年9月の目標 · kapieciiのブログ
Vercel+Next.jsも試したのですが、諸々の都合でHerokuで公開することにしました。
VercelでNext.jsアプリのデプロイを試してみた · kapieciiのブログ
WSL2(Ubuntu18.04)にHeroku CLIをインストールしたときに少し詰まったので、メモを残しておきます。
目次
要約
- Herokuのドキュメントでは、Ubuntu18.04の場合にはsnapを使ってHeroku CLIをインストールする方法が記載されている。
- しかしWSL2のUbuntuではsnapが動作しない。
- snapが動く状態にした上でsnapでのインストールを試したが、エラーが発生。
- 結局curlでインストールした。
$ curl https://cli-assets.heroku.com/install-ubuntu.sh | sh
WSL2とsnapd
以前herokuを使ったときと同じ手順でHeroku CLIのインストールを試しましたが、エラーが発生。
Herokuで罠サイトを作ってアクセスログを確認した - kapieciiのブログ (hatenablog.com)
$ sudo apt install snapd
$ sudo snap install --classic heroku
error: cannot communicate with server: Post http://localhost/v2/snaps/heroku: dial unix /run/snapd.socket: connect: no such file or directory
どうやらWSL2ではsnapdがうまく通信できていないらしい。
解決方法がGitHubにあったので、紹介されているコマンドを使ってsnapを使える状態にします。
※後述する「詳細な解説記事」に記載されていますが、WSL2環境でこれらのコマンドを実行することで、他の箇所で意図しない動作につながる場合があるようです。
万人におすすめできる方法ではないので、実行する場合は自己責任でお願いします。
$ sudo apt-get update && sudo apt-get install -yqq daemonize dbus-user-session fontconfig
$ sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
$ exec sudo nsenter -t $(pidof systemd) -a su - $LOGNAME
$ snap version
snap 2.49.2+18.04
snapd 2.49.2+18.04
series 16
ubuntu 18.04
kernel 5.4.72-microsoft-standard-WSL2
「これらのコマンドで何をしているのか?」に関する詳細な解説記事はこちら。
Using snapd in WSL2 - WSL2 - Ubuntu Community Hub
すごく要約すると、WSL環境が動いているコンテナではsystemdの動作が制限されているので、手動で実行しているとのこと。
というわけでsnapコマンドが使えるようになったので、今度こそHeroku CLIのインストールを試します。
が、またしてもエラー。
エラーを見ると、「wsl-x64」に合致するKeyがなく、CLIのダウンロードに失敗しているようです。
$ sudo snap install --classic heroku
2021-09-19T15:07:42+09:00 INFO Waiting for automatic snapd restart...
error: cannot perform the following tasks:
- Run configure hook of "heroku" snap if present (run hook "configure":
-----
> Warning: Our terms of service have changed:
> https://dashboard.heroku.com/terms-of-service
heroku: Updating CLI... !
Error: HTTP Error 404 for GET https://cli-assets.heroku.com/wsl-x64
<html>
<head><title>404 Not Found</title></head>
<body>
<h1>404 Not Found</h1>
<ul>
<li>Code: NoSuchKey</li>
<li>Message: The specified key does not exist.</li>
<li>Key: wsl-x64</li>
<li>RequestId:{ID文字列}</li>
<li>HostId: {ID文字列}</li>
</ul>
<hr/>
</body>
</html>
at HTTP._request (/snap/heroku/4076/node_modules/http-call/lib/http.js:215:19)
at async Function.request (/snap/heroku/4076/node_modules/http-call/lib/http.js:162:9)
at async UpdateCommand.fetchManifest (/snap/heroku/4076/node_modules/@oclif/plugin-update/lib/commands/update.js:46:28)
at async UpdateCommand.run (/snap/heroku/4076/node_modules/@oclif/plugin-update/lib/commands/update.js:26:26)
at async UpdateCommand._run (/snap/heroku/4076/node_modules/@oclif/plugin-update/node_modules/@oclif/command/lib/command.js:43:20)
at async Config.runCommand (/snap/heroku/4076/node_modules/@oclif/command/node_modules/@oclif/config/lib/config.js:173:24)
at async Main.run (/snap/heroku/4076/node_modules/@oclif/command/lib/main.js:21:9)
at async Main._run (/snap/heroku/4076/node_modules/@oclif/command/lib/command.js:44:20)
-----)
curlでHeroku CLIをインストールする
snapは諦め、こちらの方法でHeroku CLIをインストールします。
The Heroku CLI | Heroku Dev Center > Other installation methods > Ubuntu / Debian apt-get
$ curl https://cli-assets.heroku.com/install-ubuntu.sh | sh
ok
$ heroku
CLI to interact with Heroku
VERSION
heroku/7.59.0 linux-x64 node-v12.21.0
USAGE
$ heroku [COMMAND]
というわけで、紆余曲折ありましたが、最終的にはcurlコマンド一発でWSL2(Ubuntu18.04)環境にHeroku CLIをインストールすることができました。
最後に
「WSL2が使えるようになってWindowsの開発環境もかなり便利になってきたな」と思っていたのですが、やはり罠は存在しますね。
エラーに出くわしたことで、また一つWSLのことを知れた気がしました。