Windows版のWindsurfからWSL2(Ubuntu)に接続した際、Server installationが失敗する問題に遭遇しました。本記事では、プロキシ環境下での原因調査と解決方法をまとめます。
発生した問題
Windows上のWindsurfからWSL2上のUbuntu(Ubuntu 24.04 LTS)にリモート接続を行ったところ、Server installation のステップで失敗しました。
エラーとしては以下のようなメッセージが表示されます。
Error downloading server from ...
Server installation failed
プロキシ環境下で作業していたため、ネットワーク周りが怪しいと考え調査を始めました。
環境
| 項目 | バージョン |
|---|---|
| OS(ホスト) | Windows 11 |
| WSL2 ディストリビューション | Ubuntu 24.04 LTS |
| Windsurf | 最新版 |
| ネットワーク | 社内プロキシ環境 |
原因の調査
curlでの直接ダウンロードは成功する
まず、WindsurfがダウンロードしようとしているURLに対して、WSL2上から直接curlコマンドでアクセスしてみました。
curl -x http://proxy.example.com:8080 -O https://windsurf-server-url/...
すると、正常にダウンロードが完了しました。つまり、WSL2のネットワーク自体やプロキシ設定には問題がないことがわかります。
インストールスクリプトの挙動を確認
Windsurfのインストールスクリプトを調査したところ、以下のことがわかりました。
- スクリプトは**
wgetを優先的に使用**し、wgetがインストールされていない場合のみcurlにフォールバックする - Windsurfは以下のような形式でWSL2上にスクリプトを実行する
wsl.exe --distribution Ubuntu -- bash -c 'install script ...'
bash -c の落とし穴
ここが問題の核心です。bash -cで実行されるシェルは、非ログインかつ非インタラクティブなシェルです。
そのため、通常プロキシ設定を記述している以下のファイルは読み込まれません。
~/.bashrc~/.bash_profile~/.profile
つまり、これらのファイルに設定したhttp_proxyやhttps_proxyの環境変数は、Windsurfのインストールスクリプト実行時には一切反映されていない状態でした。
原因
まとめると、原因は以下の通りです。
- Windsurfのインストールスクリプトは
wgetを優先して使用 する - スクリプトは
wsl.exe ... bash -c経由で実行されるため、非ログイン・非インタラクティブシェルとして動作する - そのため
.bashrcや.profileに設定したプロキシ環境変数(http_proxy/https_proxy)が読み込まれない - 結果として
wgetがプロキシなしで外部にアクセスしようとし、ダウンロードに失敗する
一方でcurlコマンドは環境変数を手動で指定して実行したため成功していた、という状況でした。
解決方法
wgetは、シェルの環境変数とは別に独自の設定ファイル ~/.wgetrc を読み込みます。このファイルにプロキシ設定を記述することで、非ログイン・非インタラクティブシェルからの実行でもプロキシが適用されます。
~/.wgetrc の作成
vi ~/.wgetrc
以下の内容を記述します。
http_proxy = http://proxy.example.com:8080
https_proxy = http://proxy.example.com:8080
設定後の確認
~/.wgetrc を保存した後、WindsurfからWSL2への接続を再度実行すると、Server installationが正常に完了しました。
wgetは起動時に~/.wgetrcを読み込むため、シェルの種別に関係なくプロキシ設定が反映されます。
まとめ
- Windsurfのインストールスクリプトは
wgetを優先利用する wsl.exe ... bash -c経由の実行では、.bashrc等の設定ファイルが読み込まれない- プロキシ環境では
~/.wgetrcにプロキシ設定を記述 することで解決できる wgetは独自に~/.wgetrcを読み込むため、シェルの種別に依存しない
同様のプロキシ環境でWSL2を利用している方は、~/.wgetrcの設定を忘れずに行っておくと、Windsurf以外のツールでも同様のトラブルを未然に防ぐことができます。
