飞行心得


由于一些众所周知而又不便提起的原因,从国内到外网的通信常常受到限制。即使未受封锁,通信质量也可能不高。
对于程序员而言,学习如何飞越这些障碍已经成为了一项必备的生存技能。本飞行手册记录和总结了几类常见的“飞行技巧”。

适用范围

  • pip installconda install时提升速度;
  • 使用apt-get为Ubuntu系统安装软件时。例如,安装nvidia-container-toolkit时,必须配置源为“nvidia.github.io/……”,然而“github.io”这类网址是被封禁的,从而导致安装失败;
  • git clone 或 git push 失败;
  • 其它因为外网通信质量不佳导致的异常;

本文只介绍各类命令,参数的使用,不介绍代理服务器和信道的设置方法。

使用代理服务器

用环境变量设置全局代理

最常见的一个做法是在终端中设置环境变量来设置代理服务器。具体要执行的命令视操作系统的不同而有所区别。

在命令行环境或者终端中,可以执行下述命令来指定网络代理。
Linux:

export http_proxy="http://localhost:8889"
export https_proxy="http://localhost:8889"

Windows:

set http_proxy=http://localhost:8889
set https_proxy=http://localhost:8889

這種方式與在系統設置中設置代理的效用是相似的。

经验证,以下程序支持用这种方式设置代理:

  • conda install
  • pip install

遗憾的是,不是所有程序都从环境变量中读取代理设置。

下面列出了一些常见的无法通过环境变量设置代理的程序,介绍了它们的代理设置方法。

Apt的代理设置

sudo apt -o Acquire::http::proxy="http://localhost:8889" update

Git代理的设置和取消

git使用如下命令設置代理服務器:

git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080

代理设置可以在~/.gitconfig文件中看到
若要取消代理,可以使用如下命令:

git config --unset http.proxy 
git config --unset https.proxy

不要忘了在不用時撤銷代理設置。

無法設置代理服務器的情況

某些時候,我們找不到為某個軟件設置代理服務器的途徑,或者不想花費過多的時間在查詢文檔上面。這時候可以考慮更通用的做法。

通過瀏覽器將所需的資源預先下載下來

该方法以瀏覽器配置了代理,可以順利取得該資源为前提。例如,如果在運行DockerFile中的apt命令遇到問題,可以將無法下載的deb包記錄下來,用瀏覽器下載這個包。將該包複製到docker中,然後就可以從本地安裝這個包。

通过Gitee同步Github的仓库
Gitee有同步Github仓库的功能,并且不受墙的影響。當我們無法从Github拉取源碼時,可以考慮利用這一途徑。

例如,通過git安裝pycocotools失敗(命令:pip install -U 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI' ),那麼可以在Gitee上同步該倉庫,將命令改為pip install -U 'git+https://gitee.com//cocoapi.git#subdirectory=PythonAPI'.

未完待續

此文旨在記錄各種常見的,因爲“墻”而導致的,影響正常工作生活的網絡問題,以及記錄相應的解決方法。然而,短短几段文字無法記錄所有情況。
今後若我遇到值得記載的問題和解決方法,還會補充。

參考資料

  • 軟件:shadowsocksr-cli
  • 軟件:Qv2ray
  • 説明文檔:Qv2ray实现局域網共享
  • 文章:正向代理和反向代理