windows下openvpn源码编译

来源:互联网 发布:mis软件有哪些 编辑:程序博客网 时间:2024/04/29 22:42

网络上目前的有关Windows平台下,OpenVPN的编译方式无非两种,一种就是使用VS2010来编译,第二种就是使用MinGW来编译。

我想作为一名Windows程序员,对VS编译器的钟爱是可以理解的,本人最开始也是使用VS对OpenVPN2.1.1的源代码进行了编译。非常的幸运,虽然有一些编译错误,不过用了不到两天时间就一一解决了。编译通过后,心情舒畅,不过随之而来的一个问题是如何使用呢?如果是下载的OpenVPN的exe安装包,安装完成后,会生成一个虚拟网卡,而且会有gui的界面,简单的改写配置文件后,双击OpenVPN的图标就可以运行了。但是使用VS2010编译OpenVPN的源码包之后,在Debug目录下只生成了一个OpenVPN.exe文件。据我所知,此文件只能用来对OpenVPN进行一些配置工作,对于其他的功能,比如OpenVPN的虚拟网卡是没有办法通过此exe文件生成的。

依据我的观点,那就是如果在VS中编译OpenVPN,那么其他周边的功能,需要你自己去下载第三方的软件来完成,比如生成一个虚拟VPN网卡。

这样的话就很不方便了,而且网上也没有相关的操作说明,怎么安装,如何配置都需要自己摸索,对于我这等新手而言难度颇大。

至于OpenVPN编译的第二种方法,则是我力荐给大家的一种方法,它使用MinGW进行编译,每一步操作的详细说明网上教程都给的非常详细,资料比较多,而且最后生成的exe是一个OpenVPN的安装包,和官方提供的安装包别无二致,所以说,编译好之后,只要双击此安装包,至于安装虚拟VPN网卡等依赖第三方的工作,都可以轻松搞定了。

不过,对于源代码编译而言,一台机子也许就会有一台机子不同的问题,单纯地依赖网上的教程,很多时候没有办法达到我们最终的目的,下面我就讲一下,我的编译过程,其主要的步骤皆来自于互联网,其中补充了我自己在编译过程中遇到的问题,并且给出了解决之道,希望给大家以启发。

--------------------------------------

安装步骤

注意:以下提到的安装路径皆为示例,如无特殊说明,皆可根据实际情况作更改。


安装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

下载链接:链接地址

选择安装到D:\msys\1.0\目录下。


安装msysDTK

下载链接:链接地址


和MSYS选择安装在相同位置,D:\msys\1.0\目录下。

配置环境变量

我的电脑,右键->属性->高级->环境变量,观察窗口上部“XXX的用户环境变量”,看是否有PATH这个环境变量。

如果有,双击修改,在最后加上’;c:\MinGW\bin;d:\msys\1.0\bin‘(单引号内内容,注意最前面的分号)。

如果没有,新建一个,变量名PATH,变量值’c:\MinGW\bin;d:\msys\1.0\bin‘(单引号内内容,注意最前面没有分号)

完成操作后,开始->运行,打开cmd窗口,输入bash。如果出现“bash-3.1$”字样,说明环境变量修改成功。输入exit退出bash。

下载OpenVPN预编译文件

这里的预编译文件不是openvpn本身的预编译文件,而是例如openssl,tap驱动等等openvpn编译过程中需要的二进制文件

下载链接:链接地址

版本不是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个目录中都复制到C:\下

下载OpenVPN GUI二进制文件

下载链接:链接地址

如果想深度定制自己的OpenVPN安装程序,可以自行编译安装OpenVPN GUI,修改源码中的rc文件得到自定义效果。具体就不在这里介绍了

下载后在C盘下建立openvpn-gui目录,将openvpn-gui-1.0.3.exe放到这个目录下

下载OpenVPN 2.1.1源码

下载链接:链接地址

下载解压,获得openvpn-2.1.1目录,放到C盘下

至此,C盘目录下有如下文件夹:

openvpn-2.1.1
openvpn-gui
gen-prebuilt
lzo-2.02
openssl-0.9.8l
pkcs11-helper

如果有缺少目录,请返回前面步骤检查:-)

修改编译配置文件

注意:下面提到的所有修改文件操作,请一律用“写字板”或其他专业文本编辑器,如gvim,notepad++等打开。


最后一个修改比较复杂。为了减少编译安装的复杂度,就不自己编译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 “c:\gen-prebuilt\”

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

!undef GEN
!define GEN “..”

可选:给openvpn打补丁

如果需要给openvpn打上特殊的补丁,例如openvpn ipv6补丁,可以在这个时候完成。


修改openssl、lzo等的路径

修改C:\openvpn-2.1.1\install-win32\settings.in
找到
# Include the OpenVPN GUI exe in the installer.
# May be undefined.
!define OPENVPN_GUI_DIR "../openvpn-gui"
!define OPENVPN_GUI "openvpn-gui-1.0.3.exe"

# Include the OpenVPN XML-based GUI exe in the installer.
# May be undefined.
;!define OPENVPN_XGUI_DIR "../ovpnxml"

# Prebuilt libraries. DMALLOC is optional.
!define OPENSSL_DIR "../openssl.mingw/openssl-0.9.8o"
!define LZO_DIR "../lzo-2.02"
!define PKCS11_HELPER_DIR "../pkcs11-helper"
;!define DMALLOC_DIR "../dmalloc-5.4.2"


将对应内容修改成
# Include the OpenVPN GUI exe in the installer.
# May be undefined.
!define OPENVPN_GUI_DIR "../gen-prebuilt"
!define OPENVPN_GUI "openvpn-gui-1.0.3.exe"

# Include the OpenVPN XML-based GUI exe in the installer.
# May be undefined.
;!define OPENVPN_XGUI_DIR "../ovpnxml"

# Prebuilt libraries. DMALLOC is optional.
!define OPENSSL_DIR "../openssl-0.9.8l"
!define LZO_DIR "../lzo-2.02"
!define PKCS11_HELPER_DIR "../pkcs11-helper"

///////////////////////////////////////////////////////////////////////////////////////////////下面这部分内容到end结束,是在下载了较高版本的openVPN之后才需要的,而且如果版本太新,那么第三方的库跟不上更新的话,是没有办法使用的,所以强烈建议大家下载2.1.1版本的openVPN源代码

之后,将C:\openvpn-2.2.1\easy-rsa\2.0目录下的openssl-1.0.0.cnf(也许大家看不到.cnf的后缀名,它是一个类似快捷方式的文件,图标是一个电脑样式,实际上只要确定文件名没错就行了)


将此文件复制到C:\openvpn-2.2.1\easy-rsa\Windows目录下就好了。

////////////////////////////////////////////////////////////////////////////////////////////// end 

编译安装

开始->运行,运行cmd,依次输入以下命令:

d:
cd openvpn-2.1.1
bash domake-win

OK,openvpn开始编译了:-)


如果仅需编译部分文件,如OpenVPN主程序,则仅需使用msys.bat在源文件根目录下执行install-win32/makeopenvpn即可(重新编译所有组件需要的时间太长,也不是很有必要,单独编译OpenVPN的话仅需半分钟);如需单独编译其他组件执行对应的makeXXX即可。


编译好之后的安装文件将出现在C:\openvpn-2.1.1\gen\文件夹下。Enjoy~

0 0
原创粉丝点击