使用 Mac 时的一些经验分享
关于代理
科学上网(shadowsocks + VPS)
搭建 shadowsocks 代理服务器
在 DigitalOcean 买一个 VPS(5$/mo),然后安装 shadowsocks,网上有很多教程(例如 这个),再次不再累述。
使用 supervisor 管理 shadowsocks,配置文件如下:
1 | # cat /etc/supervisor/conf.d/shadowsocks.conf |
本地下载安装 shadowsocks 客户端,然后如下图所示进行配置。
关于 shadowsocks 安装错误
ShadowSocks 启动时,会报错
undefined symbol EVP_CIPHER_CTX_cleanup
错误信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
252018-12-09 12:38:00 INFO loading libcrypto from libcrypto.so.1.1
Traceback (most recent call last):
File "/usr/local/bin/ssserver", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/server.py", line 34, in main
config = shell.get_config(False)
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/shell.py", line 262, in get_config
check_config(config, is_local)
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/shell.py", line 124, in check_config
encrypt.try_cipher(config['password'], config['method'])
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py", line 44, in try_cipher
Encryptor(key, method)
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py", line 83, in __init__
random_string(self._method_info[1]))
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py", line 109, in get_cipher
return m[2](method, key, iv, op)
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py", line 76, in __init__
load_openssl()
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py", line 52, in load_openssl
libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)
File "/usr/lib/python2.7/ctypes/__init__.py", line 379, in __getattr__
func = self.__getitem__(name)
File "/usr/lib/python2.7/ctypes/__init__.py", line 384, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup原因
openssl 升级到 1.1.0 以上版本,导致 shadowsocks2.8.2 启动报 undefined symbol: EVP_CIPHER_CTX_cleanup 错误。
解决方法
修改 /usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py,将 CIPHER_CTX_cleanup 替换为 CIPHER_CTX_reset (应该有两处)
使用 Proxifier 全局代理
shadowsocks 只能实现 socks 代理,限制了很多应用的使用。Proxifier 可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理。 Proxifier 的使用非常简单,装好之后写 rules 就可以了。如下图所示,目前我只是将 Google Drive 的请求转发到 socks 上
让 iOS 使用 SSH 代理访问 Web 服务
思路是在本地局域网内想办法建立一个 SSH 代理,然后让 iOS 设备将请求转发到这个代理上。
我们在一台 Macbook 和一个 iPad 的环境下实现这样的操作。具体操作步骤如下:
在 Macbook(IP 地址是 192.168.0.8) 上搭建一个 SSH 代理
ssh -g -N -D 192.168.0.8:8000 mypc # -g 表示外部机器可以连到这个地址
创建一个PAC文件 proxy.pac,指定如何配置proxy。
1
2
3function FindProxyForURL(url, host) {
return "SOCKS 192.168.0.8:8000";
}在 Macbook 上开启 web 服务,并将 proxy 文件放在 web 服务上。
cp proxy.pac /Library/WebServer/Documents sudo apachectl start
可以通过
http://192.168.0.8/proxy.pac
访问这个代理文件。在iOS上设置。
通过“Settings”->”WLAN Networks”找到现在连上的Wifi,查看details(蓝色箭头)在最下面有设置http proxy的地方。选择”Auto”, 填入 http://192.168.0.8/proxy.pac (注意:需要添加 http 头)
Done!
这样在 Macbook 开启代理的情况下,iOS 设备可以通过该代理访问web服务。
参考:
关于 WebDav
参考 How To Configure WebDAV Access with Apache on Ubuntu 14.04
关于工具
Alfred
常用插件
- Dict
- Kill Process
- TerminalFinder
- IP Address
Atom
常用插件
- atom-beautify
- autocomplete-python
- vim-mode-plus
- platformio-ide-terminal
- go-plus
- Remote FTP
Visual Studio Code
Zotero (这在 Zotero 使用笔记 讲过)
Vim
环境配置使用 The Ultimate vimrc
Emacs
环境配置使用 spacemacs