経緯
もともとはwindowsにリポジトリをクローンし、それをWSL1で動かして開発していたのですが、流石にWSL2にしようかなと思ってアップグレードしました。
しかし、WSL2にしたらホットリロードが効かなくなりました。
流石にファイルを変更する度にnpm run devを入力するのはとても手間で仕方がありません。
そこで、リポジトリをWSL2のUbuntuにクローンすることにしました。
しかし、今までGitHub Desktop for Windowsを使っていたのですが、どうやらWSLのファイルにアクセスするのは一苦労あり(仮想環境にアクセスするのだから当然ですが)、WSL側でどうにかGitHub Desktopを使えないかなぁと思っていました。
そこで見つけたのが、GitHub Desktop - The Linux Forkです。
本記事ではその導入時にあれこれ苦戦したことを備忘録的に残しておきます。
環境
Windows 11 Pro
WSL バージョン: 2.2.4.0
カーネル バージョン: 5.15.153.1-2
Ubuntu 22.04
導入
GitHubのページにあるREADMEの「Debian/Ubuntu」に従えばインストールできます。
ここに関しては詰まらなかったので割愛します。
※一度環境をリセットしてからgithub-desktopをインストールしたので、環境によっては何か問題が生じるかもしれません。
GitHubへの接続
ターミナルでgithub-desktopと入力するとGitHub Desktopが起動します。
起動後、ブラウザでgithub.comを開いてGitHubに接続するよう要求されるので、(スキップすることもできますが)ここで接続しましょう。
UbuntuにChromeを入れてそこでGitHubにサインインするのが手っ取り早いと思います。
Chromeの導入: https://postgresweb.com/install-google-chrome-ubuntu-20-04
"Could not connect: No such file or directory"というエラーが出たら
ブラウザ上で認証を終えてアプリに戻ったら、「"Could not connect: No such file or directory"」というエラーが出ていました。
困って当該リポジトリのIssuesを見ていたところ、似たような現象に遭遇している人を発見しました。
https://github.com/shiftkey/desktop/issues/1040
github-desktopを開いてからずっと次のようなエラーが出ていたのですが、それが原因のようです。
Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory
ひとまずIssueの中で提案されていた方法に従ってみました。
まず、/run/user/1000/busというディレクトリを作ります。
sudo mkdir -p /run/user/1000/bus
次に、chmodを用いて作成したディレクトリへの権限を設定します。
chmod 777 /run/user/1000/bus
すると、今度は"Could not connect: Connection refused"というエラーが出ました。
困り果ててGPT-4oに助けを求め、取り敢えず次のコマンドを打ってみることにしました。
systemctl --user status dbus
するとこんなログが出てきました(個人情報は***で隠しています)。
○ dbus.service - D-Bus User Message Bus
Loaded: loaded (/usr/lib/systemd/user/dbus.service; static)
Active: inactive (dead)
TriggeredBy: × dbus.socket
Docs: man:dbus-daemon(1)
Aug 07 19:08:50 *** systemd[430]: Dependency failed for D-Bus User Message Bus.
Aug 07 19:08:50 *** systemd[430]: dbus.service: Job dbus.service/start failed with result 'dependency'.
どうやらD-busが起動に失敗しているようです。そこでdbus.socketの様子を見てみました。
systemctl --user status dbus.socket
すると今度はこんなログが。
× dbus.socket - D-Bus User Message Bus Socket
Loaded: loaded (/usr/lib/systemd/user/dbus.socket; static)
Active: failed (Result: resources)
Triggers: ● dbus.service
Listen: /run/user/1000/bus (Stream)
Aug 07 19:08:50 *** systemd[430]: dbus.socket: Failed to create listening socket (/run/user/1000/bus): Address already in use
Aug 07 19:08:50 *** systemd[430]: dbus.socket: Failed to listen on sockets: Address already in use
Aug 07 19:08:50 *** systemd[430]: dbus.socket: Failed with result 'resources'.
Aug 07 19:08:50 *** systemd[430]: Failed to listen on D-Bus User Message Bus Socket.
どうやら/run/user/1000/busのアドレスが既に使用されているようです。
しかし調べてみても原因がわかりませんでした。
仕方がないので、駄目元で/run/user/1000/busを消して再起動を試みました。
rm -r /run/user/1000/bus
systemctl --user restart dbus.socket
systemctl --user restart dbus
statusを見てみたら今度は正常に動いていそうです。
この状態でもう一度github-desktopを起動したところ、"/run/user/1000/bus"関連のエラーは全くでなくなりました。
消したのに"No such file or directory"と言われていないのはなぜだ?と思って当該箇所を見に行ったところ、/run/user/1000の中にbusというファイルができていました。
そもそもファイルではなくディレクトリを作っていたのが間違っていたようです。
(結局このファイルが何なのかはよく分かりませんでしたが……)
これでもう一度GitHubに接続してみたところ、"choose password for keyring"なるダイアログが登場しました。
調べてみたところ、空欄のままEnterで問題なかったようなのでそれで続行してみたところ、GitHubへの接続が完了しました。
参考: https://ebiss.hatenablog.com/entry/2019/02/10/200000
リポジトリのクローン
準備ができたのでリポジトリをクローンしよう、と思ったら"Authentication Failed"と出てきてしまいました。
ログを見たところ(~/.config/GitHub Desktop/logsにあります)、次のようなエラーが出ていました。
error: [ui] Failed to look up repository clone info for '***'
Error: Although you appear to have the correct authorization credentials, the `***` organization has enabled OAuth App access restrictions, meaning that data access to third-parties is limited. For more information on these restrictions, including how to enable this app, visit https://docs.github.com/articles/restricting-access-to-your-organization-s-data/
at fn (/home/***/webpack:/app/src/lib/http.ts:178:11)
at nr.fetchRepositoryCloneInfo (/home/***/webpack:/app/src/lib/api.ts:984:11)
at Object.clone [as onSubmit] (/home/***/webpack:/app/src/ui/clone-repository/clone-repository.tsx:727:11)
公式には、組織のオーナーに"the GitHub Desktop development App"がアクセスするのをapproveするよう依頼しろ、という記載がありました。
https://github.com/shiftkey/desktop/blob/linux/docs/known-issues.md#i-cannot-access-repositories-under-my-organization
しかし、GitHubのSettings/Integrations/Applicationsからthe GitHub Desktop development Appの項目を見てみましたが、どの組織にも緑色のチェックマーク("This organization allows the application to access organization data as described in the permissions above.と説明されている")が付いています。
Issueを眺めていたところ、何人か同様の状況に陥っていますが、解決した事例はありません。
しかしクローンの際にGitHub.comを使うのではなくsshを使うとうまくいくようなので、GitHub DesktopからSSHでクローンしてみたところ、正常にクローンできました。
SSH秘密鍵のpasspharaseが毎回要求される
試しに使用してみましたが、SSHであればプッシュ、プル、フェッチ、マージといった操作は問題なく動作するようです。
ただし、実行の度にgithub-desktopを実行しているターミナルでSSH秘密鍵のpasspharaseを要求されてしまいます。
特にフェッチの際はなぜか2回要求されます。
調べたらどうやら解決策はあるようなのですが、どうも上手くいきませんでした。
例: https://zenn.dev/kaityo256/articles/ssh_agent_on_wsl
結局、面倒なのでSSH秘密鍵のpassphraseをなしにすることで解決としました。
ひとまずはこれでいこうかなと思います。
日本語が正常に表示されない
Historyを見ていたところ、日本語が正常に表示されていないことがわかりました。
以下の記事に日本語へ対応する方法が書いてあったので、この通りにやると正常に表示されるようになりました。
https://astherier.com/blog/2021/07/windows11-wsl2-wslg-japanese/
おわりに
ちょっと重いですがGUIで作業できるのはやはり快適です。
皆様も入れてみてはいかがでしょうか。
8/9補足: 再起動したらサクサク動くようになりました。