之前公众号上有人说,我回大陆了会有一波科学上网的教程,今天的推文算一个吧。真的是被你们言中了!

做为Bioconductor包作者,而git push传代码到Bioconductor上是被封的。这很是恼火,随着10月份将迎来新一版本的Bioconductor发布,不能够push代码是多么惨的一件事。

代理其实也挺恼火的,因为各种协议啊,你要各种设置啊,http/https/ssh/git都是各种配置,其实我只要有一个socks5的代理,然后你们所有需要走代理的程序都通过它就好了。

谁特么有空天天在琢磨怎么配置各种不同协议的代理!只要我们想得到的,一般都有人做了。

于是万能的github上找到了proxychains

A hook preloader that allows to redirect TCP traffic of existing
dynamically linked programs through one or more SOCKS or HTTP
proxies

它强制给定程序发起的TCP连接通过事先配置的代理。可以涵盖所有需要代理的情景。就以git为例,没有proxychains的话,就必须为每个协议(https, git, ssh)按照git文档的要求分别设置代理,过程复杂且不稳定。有了proxychains,这些完全可以不用管,当然应用场景不限于git,任何一个需要代理的命令行程序都是一样在运行的指令前面加proxychains完事。

Arch安装很容易:

yay -S proxychains-ng

安装之后,打开/etc/proxychains.conf,注释掉下面这行(disable远程DNS解析,有DNS污染风险)。

proxy_dns

最后添加如下行:

socks5 127.0.0.1 32997

上面这个代理是我自己机器上跑了某著名软件,用于每日科学上网。

我平时是同时push到Bioconductor和github上的,所以我不会跑完一个git push再跑一个,而是写在Makefile里,自动化这个过程,我只需要make push指令就OK。

所以此处我用的指令是:

proxychains make push          

这样就加了代理。

$ proxychains make push
####
#### 实际的指令,有两条,分别push到两个服务器
####          
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 4.13
[proxychains] DLL init: proxychains-ng 4.13
[proxychains] DLL init: proxychains-ng 4.13
[proxychains] DLL init: proxychains-ng 4.13
[proxychains] DLL init: proxychains-ng 4.13
[proxychains] DLL init: proxychains-ng 4.13
[proxychains] DLL init: proxychains-ng 4.13
git push upstream master;\
git push origin master
####
#### 第一条指令,push到Bioconductor
####    
[proxychains] DLL init: proxychains-ng 4.13
[proxychains] DLL init: proxychains-ng 4.13
[proxychains] DLL init: proxychains-ng 4.13
[proxychains] Strict chain  ...  127.0.0.1:32997  ...  34.192.48.227:22  ...  OK
[proxychains] DLL init: proxychains-ng 4.13
Enumerating objects: 56, done.
Counting objects: 100% (56/56), done.
Delta compression using up to 4 threads
Compressing objects: 100% (34/34), done.
Writing objects: 100% (41/41), 4.87 KiB | 4.87 MiB/s, done.
Total 41 (delta 32), reused 11 (delta 7)
To git.bioconductor.org:packages/ggtree.git
   c372741..e84c1f7  master -> master
####
#### 第二条指令,push到github
####       
[proxychains] DLL init: proxychains-ng 4.13
[proxychains] DLL init: proxychains-ng 4.13
[proxychains] Strict chain  ...  127.0.0.1:32997  ...  192.30.253.112:22  ...  OK
[proxychains] DLL init: proxychains-ng 4.13
Enumerating objects: 11, done.
Counting objects: 100% (11/11), done.
Delta compression using up to 4 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 843 bytes | 843.00 KiB/s, done.
Total 6 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), completed with 5 local objects.
To github.com:GuangchuangYu/ggtree.git
   92847e8..e84c1f7  master -> master

整个世界清静了,没法pushBioconductor困扰我多时。而且经过了这个事件,以后打命令,只要需要代理的,都可以直接加proxychains搞定了,没有各种配置的烦恼。