debian(WSL) apt 代理配置
🛠️问题:
windows开启了网络代理,且wsl已设置网络为镜像模式,但是安装了第三方软件源(被墙)后却无法通过sudo apt update更新缓存。
🔍原因:
APT 有自己的配置体系:APT 使用独立的配置文件(如 /etc/apt/apt.conf)或专用命令行参数,不会自动继承 shell 的 http_proxy。
apt 命令本身确实支持读取 http_proxy 和 https_proxy 环境变量。但是,执行 apt 必须拥有 root 权限(即使用 sudo),而 sudo 默认会“清空”环境变量。sudo 为了安全,默认只保留极少数环境变量(如 PATH、TERM),将 http_proxy 等绝大多数变量丢弃。
解决方案
✅方案 1,为 APT 配置代理(推荐持久配置)
在 apt 的命令行配置中,Acquire 是 APT 内部负责文件获取(下载)子系统的名称。
简单来说,Acquire 就是 APT 的“下载引擎”,所有通过网络获取软件包、索引文件(Packages、InRelease 等)的操作,都由这个子系统负责。
在 WSL 中执行
sudo bash -c 'echo "Acquire::http::Proxy \"http://127.0.0.1:你的代理端口/\";" > /etc/apt/apt.conf.d/95proxies'
sudo bash -c 'echo "Acquire::https::Proxy \"http://127.0.0.1:你的代理端口/\";" >> /etc/apt/apt.conf.d/95proxies'
注意
http必须是小写,因为 APT 的配置字段是区分大小写的。
验证:
cat /etc/apt/apt.conf.d/95proxies
然后再次执行 sudo apt update
删除代理配置文件(可选):
sudo rm /etc/apt/apt.conf.d/95proxies
✅方案 2. 临时命令行方式(不持久)
sudo apt -o Acquire::http::Proxy="http://127.0.0.1:你的代理端口" -o Acquire::https::Proxy="http://127.0.0.1:你的代理端口" update
⚠️只在
apt update这一个命令的执行过程中生效, 之后apt install <package>还是不会走代理导致失败。
✅方案 3. 在 sudo 命令前临时指定(不持久)
sudo http_proxy=http://127.0.0.1:你的端口 https_proxy=http://127.0.0.1:你的代理端口 apt update
⚠️只在
apt update这一个命令的执行过程中生效, 之后apt install <package>还是不会走代理导致失败。
✅方案 4.使用 sudo -E 选项,保留当前用户的所有环境变量(不持久)
export http_proxy="http://127.0.0.1:你的代理端口"
export https_proxy="http://127.0.0.1:你的代理端口"
sudo -E apt update
⚠️只在
apt update这一个命令的执行过程中生效, 之后apt install <package>还是不会走代理导致失败。
附录,apt update 返回内容的状态标识
在 apt update 的输出中,这四种状态标识代表了 APT 在连接软件源服务器并比对本地缓存时的具体处理结果。简单来说:
- Hit(命中):本地缓存有效,跳过下载(速度快)。
- Get(获取):检测到更新,正在下载新数据。
- Ign(忽略):文件无变化或非必需,主动跳过(通常无害)。
- Err(错误):下载失败,需要立即关注并修复。
浙公网安备 33010602011771号