WSL2でapt updateができない件

WSL2でapt updateができない件

概要

社内のPCにwsl2をインストールした場合、ネットワークにはつながるが、symantec protectionのせいでaptコマンドが実行できない

回答としては、aptコマンドを実行するときだけsymantecを切ればよいのだが、そうもいかないので、暫定的なワークアラウンドを検討する

対応方法

以下のページを参考にしている
WSL環境から(Symantec Endpoint Protectionが邪魔して) apt update できない場合の対処法

ホスト端末自体からは通信可能なため、ホストの Windowsフォワード Proxy を立てて、この Proxy を経由すれば対処可能。

windowsApacheの導入

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を立ち上げる必要はない