
如果你使用 Linux 遇到了网络问题,可以配置代理。代理链接自己找。本文只推荐 GUI 程序,不涉及纯命令环境下的代理配置。
> 需要代理的主要网站是 GitHub。如果仅使用官方仓库、国内源和AUR上的国内软件,通常不需要配置代理。
- [flclash(英文字母小写 L)](代理.md#flclash)
- [daed](代理.md#daed)
- [GitHub代理](代理.md#github代理)
推荐使用 `flclash`。
## 测试代理是否生效
配置完代理后一定要测试是否生效。
```bash
curl -I www.google.com
```
返回由 `HTTP ... OK` 开头的一大串内容就是成功了。
## 临时图形环境
如果你准备使用我的一键配置脚本,那么你可能暂时还没有图形化环境用于运行图形界面。可以安装一个临时的图形化环境运行接下来介绍的软件,我推荐使用 labwc,它相当轻量。如果你已经有桌面了(任意桌面都可以),不需要这一步。
1. 安装 labwc
```bash
sudo pacman -S labwc kitty
```
labwc 是一个堆叠式窗口管理器,Kitty 是我使用的终端。会问你装哪个字体,回车默认就行。
2. 启动 labwc
```bash
labwc
```
labwc 打开之后是纯黑的,正常点击桌面选择 `terminal` 或者按下 `Super(Win 键)+ 回车键` 就能打开终端,选 `exit` 可以退出 labwc。
- 卸载 labwc
要做的事情结束之后想删除这个临时图形环境可以使用这条命令:
```bash
sudo pacman -Rns labwc
```
## flclash
flclash 支持随壁纸更换颜色,强推!
1. [添加 archlinuxcn](安装桌面环境前的准备.md#archlinuxcn源)
2. 安装
```bash
sudo pacman -S flclash
```
3. 启动
```bash
flclash
```
4. 在主页开启 TUN(虚拟网卡)
5. 导入链接
6. 主页右下角有个三角,点击可以启动代理
7. 测试是否生效
## daed
1. [添加 archlinuxcn](安装桌面环境前的准备.md#archlinuxcn源)
2. 安装
```bash
yay -S daed
```
3. 启动
```bash
sudo systemctl start daed
```
4. WebUI
daed 的面板以 WebUI 方式提供。
打开浏览器,访问 `localhost:2023` 即可进入 WebUI。导入订阅之后把订阅从右侧拖到左侧的群组。
5. 用其他设备访问 WebUI
运行 `ip a` 命令获取本机 IP 地址。然后打开手机浏览器,在处于同一局域网的情况下访问以下地址:
```text
你的 IP 地址:2023
```
假设我的 IP 地址是 192.168.0.155,那就用手机浏览器访问 `192.168.0.155:2023`。
6. 开启 TUN 虚拟网卡
7. 测试是否生效。
## 暂时不推荐使用的代理软件
[展开/收起]
### clash-verge-rev
0. [需要先添加 archlinuxcn](安装桌面环境前的准备.md#archlinuxcn源)
1. 安装
```bash
pacman -S clash-verge-rev
```
clash-verge 是基于 mihomo 内核和 Tauri 的面板软件。
2. 启动
```bash
clash-verge
```
3. 启动 TUN 模式(虚拟网卡模式)
如果出现 TUN 无法安装的情况,可以切换到 root 身份后打开 clash-verge。
```bash
su -
clash-verge
```
还可以 `Ctrl+Alt+F2~F8` 切换到另一个 TTY 用 root 身份登录后启动 labwc,这样就是 root 身份开启的图形化环境了。
如果启用 TUN 之后没有生效,可以尝试进入设置页面点击 Clash 内核边上的齿轮,切换成 mihomo alpha 内核,重启内核。
4. 记得导入链接和启动代理。
5. 测试是否生效。
## GitHub代理
>如果有梯子就不用配这个了
从 AUR 安装的软件如果要拉取 GitHub 上的资源,可能会出现网络问题。除了搭梯子,还可以使用 GitHub 加速站进行代理。加速原理并不复杂,用户请求加速站,加速站代替用户去访问 GitHub 拉取资源,然后返回给用户。
配置之前可以先简单了解一下拉取 GitHub 内容发生在哪里。
AUR 上的每一个包都是一个 git 仓库,存放着安装这个软件包的脚本,叫作 `PKGBUILD`。
>因为是一个 git 仓库,所以其实可以直接 `git clone` 拉取仓库,不需要 AUR 助手。仓库地址通常是这样的结构:`https://aur.archlinux.org/<包名>.git`。
当我们使用 yay 或者 paru 这样的 AUR 助手安装 AUR 上的软件时,有几个主要的网络难关:
1. 拉取 AUR 仓库
AUR没有被墙,并且仓库体积极小,一般不会有网络问题。
2. 获取资源
拉取下来的仓库里会有 `PKGBUILD` 安装脚本,使用 `makepkg -si` 命令执行安装。
阅读 `PKGBUILD` 的内容,可以找到 `source=()` 字段。这部分定义了需要获取的资源,分为普通 URL 源和 Git VCS 源两种情况:
- 普通 URL 源
```
source=("https://github.com/.../release.tar.gz")
```
`makepkg` 会使用 `/etc/makepkg.conf` 配置文件中 `DLAGENTS=()` 部分写的下载命令获取资源,我们可以简单看一下这个配置文件:
>用 head 命令打印文件顶部的 25 行。
```
head -n 25 /etc/makepkg.conf
```
会看到如下配置
```
DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'https::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'rsync::/usr/bin/rsync --no-motd -z %u %o'
'scp::/usr/bin/scp -C %u %o')
```
这种情况通过修改 `https` 的下载命令,让它走 GitHub 加速站,就能解决安装 AUR 包时下载 GitHub 资源困难的问题。
- Git VCS 源
>GitHub 仓库源码;AUR 包名通常会有 `-git` 后缀;`source` 开头的部分会有 `git+`
```
source=("git+https://github.com/owner/repo.git")
```
和普通 URL 源不同,这种情况下不使用 `makepkg` 的 `DLAGENTS`,而是使用 `git clone` 下载仓库,所以修改 `DLAGENTS` 里的命令对这种情况无效。我们可以通过 `git config` 命令,用加速站的链接替换掉`https://github.com`,这样就能做到源码包的 GitHub 加速。
3. 其他资源
`PKGBUILD` 还可能拉取 GitHub 之外的资源,这种情况无法走 GitHub 加速。
总结一下
`source=("https://github.com/...")` 走 `DLAGENTS` `curl`,通过自治包装脚本替换下载 `https` 资源的命令;
`source=("git+https://github.com/...git")` 走 `git clone` `git fetch`,通过`git config`命令替换 GitHub 地址。
了解了原理,接下来进行实操。
1. 加速发行包
在 `/usr/local/bin/` 中新建 `curl` 的 GitHub 加速包装脚本
>考虑到有些人的 `~/.local/bin` 可能不在 `PATH`里(这是寻找可执行文件的路径),所以使用 `/usr/local/bin`
```
sudo vim /usr/local/bin/curl-github-wrapper
```
```
#!/usr/bin/env bash
# 上面这行是 shebang,代表用 bash 运行这个脚本
# 定义两个变量
# makepkg 以“curl-github-wrapper %o %u”的形式调用脚本。
# output 变量获取第一个传入的参数 %o,代表下载内容保存路径
# url 变量获取第二个传入的参数 %u ,代表 PKGBUILD 中的资源链接
output=$1
url=$2
# 通过链接开头的域名判断是否为 GitHub 链接;星号代表任意字符
if [[ "$url" == https://github.com/* ]]; then
# 是 GitHub 链接,声明一个 target 变量,存入修改后的地址,应用 GitHub 加速。
target="https://gh-proxy.com/$url"
# 打印代理加速信息
printf '==> GitHub proxy: %s\n' "$target" >&2
else
# 如果不是 GitHub 链接,不做处理
target=$url
fi
# 运行 curl
# 这些 curl 的选项解释起来很麻烦,想知道可以问 AI,或者看帮助信息。
# 总之我的想法是这里和 makepkg.conf 里原本的 curl 命令保持一致
exec /usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o "$output" "$target"
```
保存脚本之后给予执行权限
```
sudo chmod +x /usr/local/bin/curl-github-wrapper
```
正式修改 `makepkg` 的下载命令,因为 `makepkg` 是不以 root 运行的,所以我们可以在用户空间编辑配置文件
```
#创建目录
mkdir -p ~/.config/pacman
#编辑配置
vim ~/.config/pacman/makepkg.conf
```
```
DLAGENTS=(
'file::/usr/bin/curl -qgC - -o %o %u'
'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'https::/usr/local/bin/curl-github-wrapper %o %u'
'rsync::/usr/bin/rsync --no-motd -z %u %o'
'scp::/usr/bin/scp -C %u %o'
)
```
`'https::/usr/local/bin/curl-github-wrapper %o %u'` 这段将原本的 curl 换成了我们刚刚创建的包装脚本,这样就加速成功了。
2. 加速源码包
这条命令把 `https://github.com/` 替换为 `https://gh-proxy.com/https://github.com/`
```
git config --global \
url."https://gh-proxy.com/https://github.com/".insteadOf \
"https://github.com/"
```
>它影响当前用户所有 https://github.com/ Git 操作;不要用于私有仓库或带 Token 的 URL;git@github.com: 和 git+ssh:// 不受影响。
3. 验证
安装一个普通 URL 源的包,例如 `ani-cli`
```
yay -S ani-cli
```
应该会看到类似下面这行的输出
```
==> GitHub proxy: https://gh-proxy.com/https://github.com/...
```
再试试git包,例如 `cmatrix-git`,用 `GIT_TRACE=1` 输出日志
```
GIT_TRACE=1 yay -S cmatrix-git
```
应该会看到类似下面这行的内容
```
git remote-https origin https://gh-proxy.com/https://github.com/aristocratos/cmatrix
```