一、平台说明
为了防止网络抽风连不上github,可以设置代理,
- Windows/Mac :Winodws和Mac上可以使用'switchhosts'。它自带有图形化界面(所以没有图像化界面的机器用不了),使用方法可以参考switchHost使用指南
- Linux : 对于没有图形化界面的linux服务器可以使用
fastgithub,参考下面这里fastgisthub使用指南。
为防止链接失效,这里再给一个备份的使用sh脚本,直接运行就可以(保存为.sh然后chmod u+x赋予权限之后,用sudo指令执行,还不会建议问大D老师)。
二、fastgithub脚本封装
另外注意下,这个是从国内gitee的一个仓库上找的fastgithub的安装包,仓库没了的话需要自己修改脚本中的URL,替换为别的包的下载地址。
bash
#!/usr/bin/env bash
set -euo pipefail
VERSION="2.1.4"
INSTALL_DIR="/opt"
HTTP_PROXY_VALUE="http://127.0.0.1:38457"
HTTPS_PROXY_VALUE="http://127.0.0.1:38457"
NO_PROXY_VALUE="localhost,127.0.0.1,::1"
ARCH="$(uname -m)"
if [[ "$ARCH" == "aarch64" || "$ARCH" == "arm64" ]]; then
ZIP_NAME="fastgithub_linux-arm64.zip"
APP_DIR="${INSTALL_DIR}/fastgithub_linux-arm64"
else
ZIP_NAME="fastgithub_linux-x64.zip"
APP_DIR="${INSTALL_DIR}/fastgithub_linux-x64"
fi
URL="https://gitee.com/chcrazy/FastGithub/releases/download/${VERSION}/${ZIP_NAME}"
ZIP_PATH="${INSTALL_DIR}/${ZIP_NAME}"
SERVICE_NAME="fastgithub.service"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}"
if [[ "${EUID}" -ne 0 ]]; then
echo "请用 root 执行:sudo $0"
exit 1
fi
echo "[1/8] 安装依赖(unzip/wget/systemd)"
if command -v apt-get >/dev/null 2>&1; then
apt-get update -y
apt-get install -y unzip wget ca-certificates
elif command -v dnf >/dev/null 2>&1; then
dnf install -y unzip wget ca-certificates
elif command -v yum >/dev/null 2>&1; then
yum install -y unzip wget ca-certificates
else
echo "未识别的包管理器,请手动安装 unzip 和 wget"
fi
echo "[2/8] 写入全局代理环境变量:/etc/environment(新登录会话生效)"
cp -a /etc/environment "/etc/environment.bak.$(date +%F_%H%M%S)" 2>/dev/null || true
cat > /etc/environment <<EOF
http_proxy=${HTTP_PROXY_VALUE}
https_proxy=${HTTPS_PROXY_VALUE}
HTTP_PROXY=${HTTP_PROXY_VALUE}
HTTPS_PROXY=${HTTPS_PROXY_VALUE}
no_proxy=${NO_PROXY_VALUE}
NO_PROXY=${NO_PROXY_VALUE}
EOF
# 让"当前脚本进程"也立即使用这些变量(不等重新登录)
set -a
# shellcheck disable=SC1091
source /etc/environment
set +a
echo "[3/8] 下载:${URL}"
mkdir -p "${INSTALL_DIR}"
wget -c -O "${ZIP_PATH}" "${URL}"
echo "[4/8] 解压到:${INSTALL_DIR}"
unzip -o -d "${INSTALL_DIR}" "${ZIP_PATH}"
echo "[5/8] 删除压缩包:${ZIP_PATH}"
rm -f "${ZIP_PATH}"
BIN="${APP_DIR}/fastgithub"
if [[ ! -x "${BIN}" ]]; then
echo "ERROR: 找不到可执行文件:${BIN}"
echo "请检查解压后的目录结构:ls -lah ${INSTALL_DIR}"
exit 1
fi
echo "[6/8] 写入 systemd 服务文件(开机自启)"
cat > "${SERVICE_FILE}" <<EOF
[Unit]
Description=FastGithub
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Group=root
Environment="http_proxy=${HTTP_PROXY_VALUE}"
Environment="https_proxy=${HTTPS_PROXY_VALUE}"
Environment="HTTP_PROXY=${HTTP_PROXY_VALUE}"
Environment="HTTPS_PROXY=${HTTPS_PROXY_VALUE}"
Environment="no_proxy=${NO_PROXY_VALUE}"
Environment="NO_PROXY=${NO_PROXY_VALUE}"
WorkingDirectory=${APP_DIR}
ExecStart=${BIN}
Restart=on-failure
RestartSec=2
[Install]
WantedBy=multi-user.target
EOF
echo "[7/8] 重新加载 systemd 并启动服务"
systemctl daemon-reload
systemctl enable --now "${SERVICE_NAME}"
echo "[8/8] 输出服务状态与环境变量"
systemctl status "${SERVICE_NAME}" --no-pager -l || true
echo
echo "service env:"
systemctl show "${SERVICE_NAME}" -p Environment --no-pager
echo
echo "global env (/etc/environment):"
grep -E '^(http_proxy|https_proxy|HTTP_PROXY|HTTPS_PROXY|no_proxy|NO_PROXY)=' /etc/environment || true
三、注意事项
本质是是走代理,不要指望速度多快,有个几百k的速度算比较不错了,看代码足够了。
另外如果pip设置了代理,上面的操作可能导致代理失效,这个时候可以修改服务器的~/.bashrc,加入下面的一段
bash
proxy_on() {
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export all_proxy="socks5://127.0.0.1:7890"
export no_proxy="localhost,127.0.0.1,::1,*.tuna.tsinghua.edu.cn"
echo "proxy on, can connect to github but may cause pip install failure"
}
proxy_off() {
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
echo "proxy off, can not connec to github"
}
然后source ~/.bashrc,这样以后要上github就proxy_on,要pip下东西就是proxy_off,其他的设置代理也是同理。