参考https://www.ebaina.com/articles/140000002640
参考https://www.cnblogs.com/bai2022/p/12247373.html
参考https://blog.51cto.com/linuxcgi/1966848
1.依赖
依赖于系统时间ntpdate,openssl,libpam,lzo,tun
下载
linux-pam-1.5.2
lzo-2.10
openssl-1.1.1p
openvpn-2.5.7
2.交叉编译lzo
http://www.oberhumer.com/opensource/lzo/#download
2.1 解压
tar xvf lzo-2.10.tar.gz
2.2 编译
#!/bin/sh
export PATH=$PATH:/opt/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
INSTALLDIR=/home/reasonss/imx6-new/source/VPN/build
./configure CC=arm-linux-gnueabihf-gcc --host=arm-none-linux-gnueabihf --enable-shared --disable-static --prefix=$INSTALLDIR/lzo/usr
make -j8
make install
3.交叉编译libpam
https://github.com/linux-pam/linux-pam/releases
3.1编译
ci/install-dependencies.sh
./autogen.sh
export PATH=$PATH:/opt/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
INSTALLDIR=/home/reasonss/imx6-new/source/VPN/build
./configure CC=arm-linux-gnueabihf-gcc --host=arm-none-linux-gnueabihf --prefix=$INSTALLDIR/lzo/usr
make -j8
make install
3.2 编译异常 cannot find -ltirpc
如果已经编译出来了libpam.so,其他不用管它了,用不上
4.交叉编译libopenssl
https://www.openssl.org/source/
https://www.openssl.org/source/openssl-1.1.1p.tar.gz
4.1编译
#!/bin/sh
export PATH=$PATH:/opt/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
INSTALLDIR=/home/reasonss/imx6-new/source/VPN/build/ssl
./Configure linux-armv4 --cross-compile-prefix=arm-linux-gnueabihf- --prefix=$INSTALLDIR
make -j8
make install
5.交叉编译openvpn
5.1下载
https://openvpn.net/
5.2编译
#!/bin/sh
export PATH=$PATH:/opt/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
INSTALLDIR=/home/reasonss/imx6-new/source/VPN/build/vpn
./configure --host=arm-linux-gnueabihf \
CC=arm-linux-gnueabihf-gcc \
AR=arm-linux-gnueabihf-ar \
BANLIB=arm-linux-gnueabihf-ranlib \
LZO_CFLAGS=-I/home/reasonss/imx6-new/source/VPN/build/lzo/usr/include \
LZO_LIBS=-L/home/reasonss/imx6-new/source/VPN/build/lzo/usr/lib \
LIBPAM_CFLAGS=-I/home/reasonss/imx6-new/source/VPN/build/pam/usr/include \
LIBPAM_LIBS=-L/home/reasonss/imx6-new/source/VPN/build/pam/usr/lib \
OPENSSL_CFLAGS=-I/home/reasonss/imx6-new/source/VPN/build/ssl/include \
OPENSSL_LIBS=-L/home/reasonss/imx6-new/source/VPN/build/ssl/lib \
--prefix=$INSTALLDIR
make -j8
make install
5.3异常
5.3.1 configure: error: OpenSSL version too old
有可能是版本太老,太老就把依赖换一下
但我这个是openssl1.1.1
//依赖的目录调整一下 不要加上ssl/include/ssl/
OPENSSL_CFLAGS=-I/home/reasonss/imx6-new/source/VPN/build/ssl/include
5.3.2 undefined reference to `X509_NAME_entry_count’
vim source/VPN/openvpn-2.5.7/config.status
S["LDFLAGS"]="-L/home/reasonss/imx6-new/source/VPN/build/lzo/usr/lib -L/home/reasonss/imx6-new/source/VPN/build/pam/usr/lib -L/home/reasonss/imx6-new/source/VPN/build/ssl/lib"
S["LIBS"]="-lssl -lcrypto -llzo2 -ldl"
make
5.3.3 auth-pam.c:33:31: fatal error: security/pam_appl.h: No such file or directory
#把文件位置调整一下
#原本的路径是
/home/reasonss/imx6-new/source/VPN/build/pam/usr/include/pam_appl.h
#新建一个文件夹
cd /home/reasonss/imx6-new/source/VPN/build/pam/usr/include/
mkdir security
#把原来的头文件移动到security
/home/reasonss/imx6-new/source/VPN/build/pam/usr/include/security/pam_appl.h
5.4 编译成功
6.测试
6.1 简单调用程序
6.2 加载证书登陆
openvpn --config aliyun_openvpn_remote_access_l3.ovpn