为什么要编译OpenVPN
- OpenVPN官方提供的Windows二进制文件默认是不包含从文件读取用户名密码功能的。
- 作为OpenVPN卖家,可以在自己编译的OpenVPN安装包里提供自己的logo等信息
安装步骤
注意:以下提到的安装路径皆为示例,如无特殊说明,皆可根据实际情况作更改。
安装NSIS
下载链接:http://sourceforge.net/projects/nsis/files/NSIS 2/2.46/nsis-2.46-setup.exe/download
正常安装即可。如无必要,请选择完整安装。
安装MinGW
下载链接:http://sourceforge.net/projects/mingw/files/Automated MinGW Installer
选择文件列表里的MinGW-5.1.6.exe下载。选择完整安装,安装到D:\MinGW
下。
安装MSYS
下载链接:http://downloads.sourceforge.net/mingw/MSYS-1.0.11.exe
选择安装到D:\msys\1.0\
目录下。
安装msysDTK
下载链接:http://downloads.sourceforge.net/mingw/msysDTK-1.0.1.exe
和MSYS选择安装在相同位置,D:\msys\1.0\
目录下。
配置环境变量
我的电脑,右键->属性->高级->环境变量
,观察窗口上部_XXX的用户环境变量_,看是否有PATH
这个环境变量。
如果有,双击修改,在最后加上;d:\MinGW\bin;d:\msys\1.0\bin
(注意最前面的分号)。
如果没有,新建一个,变量名PATH
,变量值d:\MinGW\bin;d:\msys\1.0\bin
(注意最前面没有分号)
完成操作后,开始->运行
,打开cmd窗口,输入bash
。如果出现bash-3.1$
字样,说明环境变量修改成功。输入exit退出bash。
下载OpenVPN预编译文件
这里的预编译文件不是openvpn本身的预编译文件,而是例如openssl,tap驱动等等openvpn编译过程中需要的二进制文件
下载链接:http://openvpn.net/prebuilt/2.1_rc22-prebuilt.tbz
版本不是2.1.1
没有关系,因为2.1_rc22
到2.1.0
的代码变化不多,而2.1.0
到2.1.1
只是修正了一下内置的rpm打包用的spec文件而已…
解压,获得以下目录:
gen-prebuilt
lzo-2.02
openssl-0.9.8l
pkcs11-helper
将以上4个目录中都复制到D:\
下
下载OpenVPN GUI二进制文件
下载链接:http://openvpn.se/files/binary/openvpn-gui-1.0.3.exe
如果想深度定制自己的OpenVPN安装程序,可以自行编译安装OpenVPN GUI,修改源码中的rc文件得到自定义效果。具体就不在这里介绍了
下载后在D盘下建立openvpn-gui
目录,将openvpn-gui-1.0.3.exe
放到这个目录下
下载OpenVPN 2.1.1源码
下载链接:http://openvpn.net/release/openvpn-2.1.1.tar.gz
下载解压,获得openvpn-2.1.1目录,放到D盘下
至此,D盘目录下有如下文件夹:
openvpn-2.1.1
openvpn-gui
gen-prebuilt
lzo-2.02
openssl-0.9.8l
pkcs11-helper
如果有缺少目录,请返回前面步骤检查:-)
修改编译配置文件
注意:下面提到的所有修改文件操作,请一律用"写字板"或其他专业文本编辑器,如gvim,notepad++等打开。
- 到
openvpn-2.1.1
文件夹,修改version.m4
文件,将define(PRODUCT_VERSION,[2.1.1])
中方括号的内容做自定义修改。例如修改为define(PRODUCT_VERSION,[2.1.1-yegle])
。这个字符串会出现在OpenVPN安装程序中。
-
到openvpn-2.1.1\install-win32
文件夹,修改settings.in
文件,找到;!define ENABLE_PASSWORD_SAVE
一行,去掉行首的分号。
注意:根据官方的manual,在settings
里反注释掉!define ENABLE_PASSWORD_SAVE
之后就可以保存密码了,但是实际编译的时候并没有生效。请直接修改openvpn-2.1.1\misc.c
文件,在#ifundef ENABLE_PASSWORD_SAVE
一行前面加上#define ENABLE_PASSWORD_SAVE
-
最后一个修改比较复杂。为了减少编译安装的复杂度,就不自己编译tap-win32驱动了,用openvpn提供的prebuilt包里的tapinstall目录来代替。没有找到特别好的办法做这个hack,所以只能这么dirty了。到openvpn-2.1.1\install-win32文件夹,修改openvpn.nsi文件,找到以下代码:
; tap-64bit:
DetailPrint "We are running on a 64-bit system."
SetOutPath "$INSTDIR\bin"
File "${GEN}\tapinstall\amd64\tapinstall.exe"
SetOutPath "$INSTDIR\driver"
File "${GEN}\driver\amd64\OemWin2k.inf"
File "${GEN}\driver\amd64\${PRODUCT_TAP_ID}.cat"
File "${GEN}\driver\amd64\${TAPDRV}"
goto tapend
tap-32bit:
DetailPrint "We are running on a 32-bit system."
SetOutPath "$INSTDIR\bin"
File "${GEN}\tapinstall\i386\tapinstall.exe"
SetOutPath "$INSTDIR\driver"
File "${GEN}\driver\i386\OemWin2k.inf"
File "${GEN}\driver\i386\${PRODUCT_TAP_ID}.cat"
File "${GEN}\driver\i386\${TAPDRV}"
tapend:
SectionEnd
在这段代码第一行前插入:
!undef GEN
!define GEN "d:\gen-prebuilt\"
在这段代码最后一行后面插入一行:
可选:给openvpn打补丁
如果需要给openvpn打上特殊的补丁,例如openvpn ipv6补丁,可以在这个时候完成。
编译安装
开始->运行
,运行cmd,依次输入以下命令:
d:
cd openvpn-2.1.1
bash domake-win
OK,openvpn开始编译了:-)
编译好之后的安装文件将出现在D:\openvpn-2.1.1\gen\
文件夹下。Enjoy~
这里是我编译好的安装文件,根据官方源码+启用密码保存选项编译出来的,供参考:http://yegle.net/openvpn-2.1.1-yegle-install.exe
There are comments.