プロキシ環境化の Windows に Rust 開発環境構築
プロキシ環境化で Windows に Rust 開発環境を構築する方法のメモです。
やりたいこと
Rust 自体のインストールや Cargo での crates.io の外部クレートの利用にはインターネットアクセスが必要で、プロキシ環境だといろいろ怒られるので、設定方法を纏めておきます。
環境
- OS
- Windows 10 21H2
- Rust
- rustup
1.25.1, rustc1.62.1, cargo1.62.1
Visual Studio C++ Build tools インストール
Rust をインストール - Rustプログラミング言語 に記載がありますが、Windows の場合 Cコンパイラとして Visual Studio C++ Build tools が必要です。
なお、Visual Studio C++ Build tools のライセンスは以下の通りですので、個人利用以外の場合はライセンスを確認してください。
- インストールと使用権。
お客様は、Visual Studio Community、Visual Studio Professional、Visual Studio Enterprise と共に使用する場合に限り、本ソフトウェアの任意の数の複製をインストールして使用し、お客様のアプリケーションを開発およびテストすることができます。
- マイクロソフト ソフトウェア ライセンス条項
-
Visual Studio C++ Build toolsインストーラーのダウンロードMicrosoft C++ Build Tools - Visual Studio からインストーラーをダウンロードします。
-
インストーラーの実行
ダウンロードした
vs_BuildTools.exeを実行します。ワークロード等の選択をする必要がありますが、The Rust Programming Language 日本語版 に以下の記載があります。どのワークロード (workloads) をインストールするかと質問されたときは、“C++ build tools"が選択されており、Windows 10 SDKと英語の言語パック (English language pack) が含まれていることを確かめてください。
- インストール - The Rust Programming Language 日本語版こちらに沿って、
ワークロードタブではC++ によるデスクトップ開発を選択し、右側のオプションでWindows 10 SDKが選択されていることを確認します。他のオプションの要否は確認していませんが、デフォルト選択されているものはそのままにしています。
同様に
言語パックタブでは英語が選択されていることを確認し、インストールをクリックします。
-
必要なリソースをダウンロードしながらインストールが進みます。このときもプロキシの影響を受けるはずですが、私の環境では影響ありませんでした。おそらく既存の Windows プロキシ設定を参照していると思われます。
Windows のプロキシ設定は
インターネットオプションでの設定とWinHTTPでの設定の2箇所ありますが、おそらく後者を参照していると思われます。WinHTTPでのプロキシ設定の確認はコマンドプロンプトあるいはPowershellで以下コマンドで確認できます。netsh winhttp show proxy
rustup インストール
Rust をインストール - Rustプログラミング言語 のおすすめに沿って、rustup を使用して Rust をインストールします。
-
Rust をインストール - Rustプログラミング言語 から
rustup-init.exeをダウンロードします。 -
rustup-init.exeは必要リソースをダウンロードしてインストールするので、プロキシ情報を環境変数に設定する必要があります。Network proxies - The rustup bookに沿ってコマンドプロンプトあるいはPowershellで以下のように設定します。コマンドプロンプトの場合:set https_proxy=http://<IP>:<PORT>Powershellの場合:$env:https_proxy="http://<IP>:<PORT>" -
rustup-init.exeを実行します。以下のようにオプションを選択する必要がありますが、1を選択します。This path will then be added to your PATH environment variable by modifying the HKEY_CURRENT_USER/Environment/PATH registry key. You can uninstall at any time with rustup self uninstall and these changes will be reverted. Current installation options: default host triple: x86_64-pc-windows-msvc default toolchain: stable (default) profile: default modify PATH variable: yes 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation >1ここでプロキシ設定ができていないと以下のようなエラーが出てインストールに失敗します。
error: could not download file from 'https://static.rust-lang.org/dist/channel-rust-stable.toml.sha256' to 'C:\Users\<User>\.rustup\tmp\xc9ggdng9i4u6nt1_file': failed to make network request: error sending request for url (https://static.rust-lang.org/dist/channel-rust-stable.toml.sha256): operation timed out: operation timed out Press the Enter key to continue. -
インストールが完了したら、以下コマンドで確認します。
rustup -V次のように表示されればインストールできています。
rustup 1.25.1 (bb60b1e89 2022-07-12) info: This is the version for the rustup toolchain manager, not the rustc compiler. info: The currently active `rustc` version is `rustc 1.62.1 (e092d0b6b 2022-07-16)`
cargo のプロキシ設定
Rust のビルドやパッケージ管理には cargo が必須ですが、crates.io の外部パッケージに依存がある場合、cargo はビルド時に crates.io を参照し、依存するリソースをダウンロードし、ビルドするため、cargo にもプロキシ設定が必要です。
cargo は様々な設定を config.toml ファイルで定義することができます。config.toml は Configuration - The Cargo Book で説明されていますが、パッケージ、プロジェクト、ユーザー、コンピューター等様々な単位で設定できます。プロキシ設定はどのプロジェクトでも必要だと思いますので、ここではユーザー単位の config.toml に設定していきます。
プロジェクトの Cargo.toml に誤って設定しないよう注意してください。Cargo.toml に設定するとビルド時等に、warning: unused manifest key: http というワーニングが出てしまいます。(もちろん設定も反映されません)
-
デフォルトインストールだと、
%USERPROFILE%(=c:\Users\<ユーザー名) の直下に.cargoというディレクトリがあります。.cargoディレクトリの直下にconfig.tomlというファイルを作成します。 -
Configuration - The Cargo Book に沿って
config.tomlに以下のようにプロキシ情報を記載します。[http] proxy = "http://<IP>:<PORT>"この設定は環境変数
CARGO_HTTP_PROXY,HTTPS_PROXY,https_proxy,http_proxyのいずれかで代替できるので、rustupのときに設定した環境変数が生きていれば使いまわせます。 -
試しに新しいプロジェクトを作成します。
cargo new test1 -
適当な
crates.ioのパッケージを依存関係に追加します。cd ./test1 cargo add windows --features "Win32_System_Com"cargo addは Cargo 1.62 (2022-06-30) で追加されたオプションです。これより前のバージョンの場合は、Cargo.tomlに次のエントリーを記述し、cargo fetchを実行してください。 -
Cargo.tomlに以下のようなエントリーができていれば成功です。[dependencies] windows = { version = "0.39.0", features = ["Win32_System_Com"] }
cargo の SSL connection error 対応
デフォルトでは Cargo はビルド時に依存パッケージをダウンロードします。このときに私の環境では以下のようなエラーが発生しました。
warning: spurious network error (1 tries remaining): [35] SSL connect error (schannel: next InitializeSecurityContext failed: Unknown error (0x80092012))
error: failed to download from `https://crates.io/api/v1/crates/autocfg/1.1.0/download`
Caused by:
[35] SSL connect error (schannel: next InitializeSecurityContext failed: Unknown error (0x80092012))推測ですが、恐らく SSL コネクションが プロキシで終端していることによるものかと考えられます。
Configuration - The Cargo Bookの通り、Config.toml の http.check-revoke を false にすることで、TLS 証明書チェックをバイパスでき、エラーがでなくなります。
[http]
proxy = "http://<IP>:<PORT>"
check-revoke = falseあとがき
何かと面倒臭いプロキシ環境化の Windows に Rust 開発環境を構築しました。Windows だと Visual Studio C++ Build tools が必要になってしまいますので、Windows Subsystem for Linux で gcc でコンパイルする環境も整えようかなと思いますが、こちらもプロキシ環境化では悩まされそうですね。