Ubuntu14.04下编译shadowsocks-qt5以支持chacha20-ietf-poly1305加密方式

前言

最近因为折腾ROS和ARDrone,在笔记本上装了Ubuntu14.04,无法Google很是头疼。由于我的shadowsocks服务提供商使用的是较新的chacha20-ietf-poly1305加密协议,而通过PPA源安装的shadowsocks-qt5大概是长时间没有更新,不支持该协议,于是需要从源码编译安装。

具体内容参考的是github上这个issue下的讨论 Add support for chacha20-ietf-poly1305 ,但是几个步骤走下来出了很多错误,因此把整个编译安装shadowsocks-qt5的步骤记录下来,供我以后参照,也供你参考。

编译步骤

安装 libsodium-dev和其他依赖项

Ubuntu14.04中并没有搜索到libsodium-dev,所以通过PPA源安装。

1
2
3
sudo add-apt-repository ppa:chris-lea/libsodium
sudo apt-get update
sudo apt-get install libsodium-dev

安装其他依赖项

1
sudo apt-get install libzbar-dev libqrencode-dev  qtbase5-dev  qt5-default qt5-qmake

编译libbotan-2.x以供调用

1
2
3
4
5
6
7
wget https://botan.randombit.net/releases/Botan-2.3.0.tgz
tar xvf Botan-2.3.0.tgz
cd Botan-2.3.0
./configure.py
make
sudo make install
sudo ldconfig

注意,一定要运行ldconfig 刷新配置。

更新CMake版本

Ubuntu14.04 默认CMake版本为version 2.8,编译libQtShadowsocks库需要最低version 3.1,厦门通过PPA源更新至version 3.2,参考Ubuntu 14.04 更新cmake版本到3.2

1
2
3
4
5
sudo add-apt-repository ppa:george-edison55/cmake-3.x
sudo apt-get update
sudo apt-get install cmake # 从来没装过cmake
sudo apt-get upgrade # 装过cmake
cmake --version # 查看cmake 版本

安装g++-6 gcc-6以支持c++14

libQtShadowsocks的编译需要c++14支持,而Ubuntu14.04默认gcc g++不支持,因此需要安装更高版本的gcc g++,作者安装的是g++-6,gcc-6,步骤如下:

安装 gcc-6 g++-6

1
2
3
4
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-6
sudo apt-get install gcc-6

添加gcc g++ 选项

1
2
sudo update-alternatives –install /usr/bin/g++ g++ /usr/bin/g++-6 20
sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-6 20

手动选择gcc g++ 版本

1
2
sudo update-alternatives --config g++
sudo update-alternatives --config gcc

查看gcc g++ 版本

1
2
g++ --version
gcc --version

安装Qt 5

编译需要用到Qt库,步骤如下:
下载,64位

1
wget http://download.qt.io/official_releases/qt/5.7/5.7.0/qt-opensource-linux-x64-5.7.0.run

安装

1
2
chmod +x qt-opensource-linux-x64-5.7.0.run
./qt-opensource-linux-x64-5.7.0.run

~/.bashrc中追加下面Qt5的bin和lib路径,默认Qt安装在/home/user/下。

1
2
PATH = /home/user/Qt/5.0/gcc_64/bin:PATH
LD_LIBRARY_PATH = /home/user/Qt/5.0/gcc_64/lib:LD_LIBRARY_PATH

确保运行source ~/.bashrc刷新配置。

编译libQtShadowsocks

经验告诉我,master分支的版本不太好使,作者使用stable分支完成了编译。

下载源码

1
2
3
git clone https://github.com/shadowsocks/libQtShadowsocks.git
cd libQtShadowsocks
git checkout stable

修改CMakeLists.txt的第八行,将OFF改为ON

1
2
3
4

option(USE_BOTAN2 "Build ${PROJECT_NAME} with Botan-2" OFF)
改为
option(USE_BOTAN2 "Build ${PROJECT_NAME} with Botan-2" ON)

编译前记得看代码Merge,具体看Fix qToBigEndian compile error

lib/encryptor.cpp 第141行,uint8_t和uint16_t的区别,我是在uint16_t下编译成功的。

1
qToBigEndian(inLen, reinterpret_cast<uint16_t*>(&rawLength[0]));

编译

1
2
3
4
5
mkdir build
cd build
cmake ..
make
sudo make install

编译安装shadowsocks-qt5

1
2
3
4
5
6
7
git clone https://github.com/shadowsocks/shadowsocks-qt5
cd shadowsocks-qt5
mkdir build
cd build
cmake ..
make
sudo make install

运行

在Terminal运行ss-qt5还是ss-qt,具体哪个忘记了了,就能弹出shadowsocks-qt5界面。
然后就是设置PAC代理的事情了。

参考链接

  1. Ubuntu 14.04 更新cmake版本到3.2
  2. Install Qt 5 on Ubuntu
  3. GenPAC