WSL2でapt updateができない件
概要
社内のPCにwsl2をインストールした場合、ネットワークにはつながるが、symantec protectionのせいでaptコマンドが実行できない
回答としては、aptコマンドを実行するときだけsymantecを切ればよいのだが、そうもいかないので、暫定的なワークアラウンドを検討する
対応方法
以下のページを参考にしている
WSL環境から(Symantec Endpoint Protectionが邪魔して) apt update できない場合の対処法
ホスト端末自体からは通信可能なため、ホストの Windows にフォワード Proxy を立てて、この Proxy を経由すれば対処可能。
windowsにApacheの導入
Apache Loungeからhttpd-2.4.54-win64-VS16.zip
をダウンロードする
https://www.apachelounge.com/download/
適当なディレクトリに解凍し、powershellで以下を実行する
> bin\httpd -v Server version: Apache/2.4.54 (Win64) Apache Lounge VS16 Server built: Jun 22 2022 09:58:15
conf\httpd.conf
を編集
SRVROOTに解凍したディレクトリを指定し、Listen
に適当なポートを指定
Define SRVROOT "c:/<path>/apache24" ServerRoot "${SRVROOT}" Listen 8080
Proxyモジュール読み込み設定を追記(末尾に追記でよい)
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so <IfModule proxy_module> ProxyRequests On ProxyVia On AllowCONNECT 443 <Proxy *> Require all granted </Proxy> </IfModule>
変更したら、powershellで以下を実行
> bin\httpd -t
問題なければ、Apacheを起動する
停止するときはCtrl+C
> bin\httpd
WSL2側の設定
httpプロキシの環境変数を指定する
# export http_proxy=http://$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):8080 # export https_proxy=${http_proxy}
これによりaptコマンドを実行することができるようになる
# apt update # apt upgrade # apt install net-tools (など)
bashrcへの記載
WSL2を起動するたびにexportするのは骨が折れるのでbashrcに環境変数を記載する
基本的なLinuxでの環境変数の記載は、/etc/environment
に定義することが多い。
しかし、Win10 20H2 時点の WSL ではこのファイルに定義した内容が bash から見えない模様(Win11 でも同様)
そのため、.bashrc
などに記載するが、今回は/etc/bash.bashrc
に記載することにする
もちろん、この環境変数を使うのはaptコマンドを実行するときのみなので、bashrcに記載せずに都度指定し、PowerShellからApacheを立ち上げるという手順を手動で実行するのでも可
一番下に下記を追記する形でよい
if [ -z "$http_proxy" ]; then /mnt/c/<windows側にあるApacheのPath>/bin/httpd.exe & export http_proxy=http://$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):8080 export https_proxy=${http_proxy} export HTTP_PROXY=${http_proxy} export HTTPS_PROXY=${https_proxy} fi
上記ではWSL2を起動した際にwindows側のApacheも起動するようになっているためaptを実行したいときに都度PowerShellからApacheを立ち上げる必要はない