Windows下编译OpenVPN 2.1.1

为什么要编译OpenVPN

  1. OpenVPN官方提供的Windows二进制文件默认是不包含从文件读取用户名密码功能的。
  2. 作为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_rc222.1.0的代码变化不多,而2.1.02.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++等打开。

  1. openvpn-2.1.1文件夹,修改version.m4文件,将define(PRODUCT_VERSION,[2.1.1])中方括号的内容做自定义修改。例如修改为define(PRODUCT_VERSION,[2.1.1-yegle])。这个字符串会出现在OpenVPN安装程序中。
  2. 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

  3. 最后一个修改比较复杂。为了减少编译安装的复杂度,就不自己编译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\"

在这段代码最后一行后面插入一行:

undef
!define GEN ".."

可选:给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

Comments !

blogroll

social