跳到主要内容

Linux 包管理换源 + v2rayN 代理完整备忘录


Linux 包管理换源 + v2rayN 代理完整备忘录

换源与代理解决的是不同问题:镜像站影响包下载来源,代理影响采用它的工具如何连接网络。先在当前终端测试,确认有效后再持久保存。

一、确认系统和代理入口

cat /etc/os-release

记录发行版、版本代号及架构。原文的 HTTP 10809、SOCKS5 10808 只是端口示例,以代理软件实际监听为准;mixed 入口是否同时接受两种协议也要确认。

Linux 与代理在同一网络命名空间时可用 127.0.0.1。代理在 Windows 而 Linux 是 WSL 2 / 虚拟机时,需要使用该网络模式下可达的 Windows 地址,不能一律填写 Linux 自己的 localhost。

二、包管理器换源

2.1 Ubuntu / Debian(APT)

先确认生效配置来自 /etc/apt/sources.list 还是 /etc/apt/sources.list.d/ 中的文件。部分系统使用 deb822 格式的 .sources,不能只修改传统列表就认定换源完成。

修改前备份实际配置文件;例如传统列表确实存在时:

sudo cp -i /etc/apt/sources.list /etc/apt/sources.list.bak
sudo nano /etc/apt/sources.list

Ubuntu 22.04(jammy)的传统源格式示例:

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

不能用于 Debian、其他 Ubuntu 版本或所有 CPU 架构;Ubuntu ports 架构需要对应的镜像路径。检查重复条目和签名错误后更新:

sudo apt update

2.2 CentOS / Rocky / AlmaLinux

先查看版本和已启用仓库:

cat /etc/os-release
dnf repolist --enabled

这些发行版及各主版本的仓库不能互换。原文把所有 .repo 文件移动后统一换成 CentOS 7 源的步骤不适用于 Rocky / AlmaLinux,也不适用于任意 CentOS 版本。

使用对应发行版、主版本和架构的镜像说明,保留原有 repo 文件及仓库 ID,仅修改确认需要调整的条目。旧版 CentOS 归档源也不等于重新获得维护支持。

完成对应配置后验证:

sudo dnf makecache --refresh

使用 yum 的旧系统按自身版本处理,不把 yum 与 dnf 的示例当作跨版本仓库转换工具。

2.3 Arch Linux

编辑已有镜像列表,选择与当前架构匹配的有效镜像:

sudo nano /etc/pacman.d/mirrorlist

示例条目:

Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch

按 Arch 的完整更新方式同步和升级:

sudo pacman -Syu

不要只用 -Sy / -Syy 刷新数据库,随后在旧系统状态下安装部分新包,造成不受支持的部分升级。

三、当前终端使用代理

设置已经确认可达的 HTTP 代理入口。下面只是在代理与 Linux 同机时的示例,跨机器时替换地址:

PROXY_URL="http://127.0.0.1:10809"
export http_proxy="$PROXY_URL"
export https_proxy="$PROXY_URL"
export no_proxy="localhost,127.0.0.1,::1"
export NO_PROXY="$no_proxy"
curl --proxy "$PROXY_URL" --connect-timeout 10 -I https://example.com

如果还需要 SOCKS,先单独确认其端口与认证。socks5h:// 可让支持它的工具把域名交给代理解析;不要直接把同一个 HTTP 端口套成 SOCKS5。

取消这次设置:

unset http_proxy https_proxy no_proxy NO_PROXY

它只恢复这次设置的环境变量;已有 all_proxy / ALL_PROXY 和工具专用配置仍需单独检查。

四、APT 单次代理

确认 $PROXY_URL 可用后:

sudo apt -o Acquire::http::Proxy="$PROXY_URL" -o Acquire::https::Proxy="$PROXY_URL" update

长期配置可以编辑 /etc/apt/apt.conf.d/99proxy,填入已验证的实际地址。若 Windows 代理地址会随 WSL NAT 网络变化,固定地址也需相应更新。

五、常用工具的代理

Git

HTTP(S) 传输使用 http.proxy,可先只测试一次:

git -c http.proxy="$PROXY_URL" ls-remote https://github.com/git/git.git HEAD

需要持久设置时,在目标仓库中使用 git config --local http.proxy ...,或明确决定影响所有仓库后使用 --global。先记录原值,恢复时还原原值;只有原来没有设置时才移除该键。不要在每次 shell 启动时反复写全局配置,也不要使用无效的 https.proxy 代替 http.proxy。

pip

python -m pip install requests --proxy "$PROXY_URL"

镜像源可以用单次 --index-url,长期修改前先用 python -m pip config debug 检查配置来源。它与代理参数是两种设置。

npm

先查看当前值及配置位置:

npm config get userconfig
npm config get proxy
npm config get https-proxy

需要长期使用时,按选定作用域设置 proxy 和 https-proxy,其值使用已验证的 HTTP 代理 URL。换 registry 不会自动完成代理配置,退出终端也不会清除 npm 的持久设置。

六、Docker Engine 代理

下面只适用于 Linux 中以系统级 systemd 服务运行的 Docker Engine;Docker Desktop 和 rootless Docker 需使用各自的配置方式,不能直接套用。

编辑该服务的专用 drop-in:

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

仅当 Docker daemon 与代理同机时,示例地址才成立:

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:10809"
Environment="HTTPS_PROXY=http://127.0.0.1:10809"
Environment="NO_PROXY=localhost,127.0.0.1"

如果已有该文件,先保留原配置,再合并修改。Docker daemon 在 WSL / 另一台机器时,使用从 daemon 所在环境可达的地址;终端 curl 成功不能证明 daemon 可以访问同一个 localhost。

保存工作并评估正在运行的容器后,再重载服务配置、重启并验证:

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl show --property=Environment docker

这里需要的是 daemon-reload,不是重新执行 systemd 管理器的 daemon-reexec。docker build / 容器内部的代理又是另一层配置,不由上述 daemon 设置自动全部完成。

七、常见问题

先核对实际连接的主机、端口、协议和认证,再检查工具是否采用环境变量,以及已有配置是否覆盖。关闭终端只撤去该终端的临时变量,不会恢复 Git、APT、npm 或 Docker 的持久设置。

八、参考

WSL 网络与主机地址、Git http.proxy、Docker daemon 代理。


文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
赏
评论

评论将在接近此处时加载,也可点击立即加载。

  目录