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~
- windows下openvpn源码编译
- Windows平台编译openvpn
- Windows编译OpenVPN客户端
- windows下编译postgresql源码
- wireshark源码 windows下编译
- windows下编译openssl源码
- windows下编译lua源码
- Windows下编译Lua源码
- windows下编译postgresql源码
- windows下编译lua源码
- Windows下编译live555源码
- Windows下编译Spark源码
- 【Windows】下【Spark】源码编译
- Windows下编译live555源码
- Windows下Spring源码编译
- 在Windows下的OpenVPN
- Windows下使用“OpenVPN Client”
- ICS-OpenVPN源码编译Android客户端
- HTML5新增标记
- SElinux init.rc 详细解释
- UISearchBar去掉底部黑线
- bzoj 3519 线段树
- 正在加载。。。等待
- windows下openvpn源码编译
- Android adb “push pull”中文支持解决方案
- python学习笔记(五):字符串(二)
- PHP memcache扩展安装 for Windows
- hibernate查询返回值处理
- 排序算法之快速排序算法
- hibernate查询返回值
- Mybatis框架原理
- POJ 3710 Christmas Game 无向图删边 经典的删边游戏 Tarjan缩点