编译安装wpa_supplicant

  • 下载指定wpa_supplicant包
  • 下载指定openssl包
  • 编译安装openssl
  • 编译安装wpa_supplicant

本文记录了编译安装wpa_supplicant2.6的详细流程。系统ubuntu 12.04,内核3.4.111。
由于wpa_supplicant需要使用到openssl的库,故编译安装wpas还需先安装匹配版本的openssl

下载指定wpa_supplicant包

1.下载指定版本的wpa_supplicant源码包:访问网址 w1.fi/releases/
这一页提供了多个源码版本,可直接在主界面搜索需要的版本号。

下载后:

2. 将源码解压到自己指定的安装目录里:

test@test-Vostro-3268:~/下载$ cp wpa_supplicant-2.6.tar.gz /home/test/workspace/
test@test-Vostro-3268:~/下载$ cd
test@test-Vostro-3268:~$ cd workspace/
test@test-Vostro-3268:~/workspace$ ls
0122   wpa_supplicant-2.6.tar.gz ...
test@test-Vostro-3268:~/workspace$
test@test-Vostro-3268:~/workspace$ tar zxvf wpa_supplicant-2.6.tar.gz
wpa_supplicant-2.6/
wpa_supplicant-2.6/wpa_supplicant/
wpa_supplicant-2.6/wpa_supplicant/wpas_glue.c
... ... ... ...
wpa_supplicant-2.6/hs20/client/osu_client.h
wpa_supplicant-2.6/README
test@test-Vostro-3268:~/workspace$

3.查看wpa_supplicant支持的openssl版本。
进入解压的源码文件夹。

test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6$ ls
CONTRIBUTIONS  COPYING  README  hs20  src  wpa_supplicant
test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6$ cd wpa_supplicant/
test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6/wpa_supplicant$ vim README

README中有段话:

Optional libraries for EAP-TLS, EAP-PEAP, and EAP-TTLS:
- OpenSSL (tested with 1.0.1 and 1.0.2 versions; assumed towork with most relatively recent versions; this is likely to beavailable with most distributions, http://www.openssl.org/)
- GnuTLS
- internal TLSv1 implementation

由此知道,wpa_supplicant2.6对应可安装openssl1.0.1或openssl1.0.2

下载指定openssl包

1.下载包,访问:openssl.org

主页如下:

点击下方more连接,跳转至下图:

再点击上方导航栏中的downloads,跳转到下方页。

点击/source/old链接。可见到所有的版本。

点进具体版本后,下载tar.gz。

下载后:

2. 将源码解压到自己指定的安装目录里

test@test-Vostro-3268:~/下载$ cp openssl-1.0.1u.tar.gz /home/test/workspace/
test@test-Vostro-3268:~/下载$ cd
test@test-Vostro-3268:~$ cd workspace/
test@test-Vostro-3268:~/workspace$ tar zxvf openssl-1.0.1u.tar.gz
......

编译安装openssl

1.进入openssl解压目录,打开Makefile

test@test-Vostro-3268:~/workspace/openssl-1.0.1u$ vim Makefile

可以看到一句话:

# Do not edit this manually. Use Configure --openssldir=DIR do change this!
OPENSSLDIR=/usr/local/ssl

这说明,在配置阶段可以自主更改安装目录位置,默认安装位置是/usr/local/ssl。

2.配置:
将安装目录改为/usr/local/bin/openssl-1.0.1u,此目录可自定义。
PS:如果不加shared,make时不会生成libcrypto.so库文件,wpa_supplicant就无法make成功。会报错:cannot find -lcrypto

test@test-Vostro-3268:~/workspace/openssl-1.0.1u$ ./config --openssldir=/usr/local/bin/openssl-1.0.1u shared
Operating system: x86_64-whatever-linux2
Configuring for linux-x86_64
Configuring for linux-x86_64no-ec_nistp_64_gcc_128 [default]  OPENSSL_NO_EC_NISTP_64_GCC_128 (skip dir)no-gmp          [default]  OPENSSL_NO_GMP (skip dir)no-jpake        [experimental] OPENSSL_NO_JPAKE (skip dir)
... ... ... ...
Configured for linux-x86_64.

3.编译:

test@test-Vostro-3268:~/workspace/openssl-1.0.1u$ make
... ... ... ...
make[2]:正在离开目录 `/home/test/workspace/openssl-1.0.1u/test'
make[1]:正在离开目录 `/home/test/workspace/openssl-1.0.1u/test'
making all in tools...
make[1]: 正在进入目录 `/home/test/workspace/openssl-1.0.1u/tools'
make[1]: 没有什么可以做的为 `all'。
make[1]:正在离开目录 `/home/test/workspace/openssl-1.0.1u/tools'
test@test-Vostro-3268:~/workspace/openssl-1.0.1u$

4.安装

test@test-Vostro-3268:~/workspace/openssl-1.0.1u$ sudo make install
... ... ... ...

但这个时候which openssl和openssl version -a显示出来的信息表示安装在/usr/lib/ssl,且并不是本次安装的openssl的版本。

test@test-Vostro-3268:/usr/bin$ which openssl
/usr/bin/openssl
test@test-Vostro-3268:/usr/bin$ openssl version -a
OpenSSL 1.0.1 14 Mar 2012
built on: Mon Jan 30 20:37:15 UTC 2017
platform: debian-amd64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DOPENSSL_NO_TLS1_2_CLIENT -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/usr/lib/ssl"

这是因为系统目录下的openssl软链接指向的并非我们本次的安装目录。

5.修改软链接:
来到/usr/bin/,ls-l openssl会看到已存在,这就是系统默认使用的openssl版本的软链接。

将原本的软链接改个名字。若之后需要用这个原来的版本,只需要将名字改回openssl即可。

test@test-Vostro-3268:/usr/bin$ sudo mv openssl openssl_old
[sudo] password for test:
test@test-Vostro-3268:/usr/bin$ ls -l openssl
ls: 无法访问openssl: 没有那个文件或目录

新建一个名为openssl的软链接,指向我们的安装目录中的openssl可执行文件。

test@test-Vostro-3268:/usr/bin$ sudo ln -s /usr/local/bin/openssl-1.0.1u/bin/openssl /usr/bin/openssl
test@test-Vostro-3268:/usr/bin$ ls -l openssl
lrwxrwxrwx 1 root root 41  2月  5 20:20 openssl -> /usr/local/bin/openssl-1.0.1u/bin/openssl
test@test-Vostro-3268:/usr/bin$

此时再查看版本信息:

test@test-Vostro-3268:/usr/bin$ openssl version -a
OpenSSL 1.0.1u  22 Sep 2016
built on: Fri Feb  5 17:58:45 2021
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: gcc -I. -I.. -I../include  -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/usr/local/bin/openssl-1.0.1u"

openssl安装完成。

编译安装wpa_supplicant

1.查看系统自带的版本信息:

test@test-Vostro-3268:~$ which wpa_supplicant
/sbin/wpa_supplicant
test@test-Vostro-3268:~$ wpa_supplicant -v
wpa_supplicant v0.7.3
Copyright (c) 2003-2010, Jouni Malinen <j@w1.fi> and contributors
test@test-Vostro-3268:~$

2.进到目录:
如果此时直接make会报错缺少.config文件

test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6/wpa_supplicant$ make
Building wpa_supplicant requires a configuration file
(.config). See README for more instructions. You can
run "cp defconfig .config" to create an example
configuration.
make: *** [verify_config] 错误 1

上述报错告知,需要用复制一份defconfig作为.config。

查看defconfig:

test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6/wpa_supplicant$ vim defconfig

其中有一段:

# Uncomment following two lines and fix the paths if you have installed OpenSSL
# or GnuTLS in non-default location
#CFLAGS += -I/usr/local/openssl/include
#LIBS += -L/usr/local/openssl/lib

可知如果openssl安装目录并非默认安装位置,则需要加上这两行。
故而将defconfig修改为:

# Uncomment following two lines and fix the paths if you have installed OpenSSL
# or GnuTLS in non-default location
CFLAGS += -I/usr/local/bin/openssl-1.0.1u/include
LIBS += -L/usr/local/bin/openssl-1.0.1u/lib

3.用defconfig文件创建.config:

test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6/wpa_supplicant$ cp defconfig .config
test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6/wpa_supplicant$ ls -l .config
-rw-rw-r-- 1 test test 20053  2月  7 11:10 .config
test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6/wpa_supplicant$

4.再次编译:

test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6/wpa_supplicant$ makeCC  config.cCC  notify.c... ... ... ...CC  scan.cCC  main.cCC  ../src/drivers/driver_wext.cCC  ../src/drivers/driver_wired.c
../src/drivers/driver_nl80211.c:17: fatal error: netlink/genl/genl.h: 没有那个文件或目录
compilation terminated.
make: *** [../src/drivers/driver_nl80211.o] 错误 1

由报错,知缺少这个h文件。
去根目录下搜索这个文件,会发现根本没有,说明需要安装对应的包:

test@test-Vostro-3268:/$ sudo find -name genl.h
[sudo] password for test:
test@test-Vostro-3268:/$ sudo apt-get install libnl-dev

5.解决genl.h后,再次编译:

test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6/wpa_supplicant$ makeCC  ../src/drivers/driver_nl80211.cCC  ../src/drivers/driver_nl80211_capa.cCC  ../src/drivers/driver_nl80211_event.c... ... ... ...CC  ../src/utils/edit_simple.cLD  wpa_cliCC  wpa_passphrase.c
/usr/bin/ld: cannot find -lcrypto
collect2: ld returned 1 exit status
make: *** [wpa_passphrase] 错误 1

报错没有库文件libcrypto.so。若是配置openssl时,没有加shared选项,则默认编译时是不生产libcrypto.so库文件的。
若是配置了shared,则生成的位置在openssl安装目录下lib里

test@test-Vostro-3268:/usr/local/bin/openssl-1.0.1u/lib$ ls
engines      libcrypto.so        libssl.a   libssl.so.1.0.0
libcrypto.a  libcrypto.so.1.0.0  libssl.so  pkgconfig

所以,现在是有库文件,但是系统找不到这个库文件。

6.查看软链接:
到/usr/lib/目录下。

test@test-Vostro-3268:/usr/lib$ find -name libcrypto
test@test-Vostro-3268:/usr/lib$

该目录下确实没有这个库文件的软链接。

7.创建一个指向该库文件的软链接

test@test-Vostro-3268:/usr/local/bin/openssl-1.0.1u/lib$ sudo ln -s /usr/local/bin/openssl-1.0.1u/lib/libcrypto.so /usr/lib/libcrypto.so
... ... ... ...//cd到lib里
test@test-Vostro-3268:/usr/lib$ find -name "libcrypto.so"
./libcrypto.so
test@test-Vostro-3268:/usr/lib$ ls -l libcrypto.so
lrwxrwxrwx 1 root root 46  2月  7 12:11 libcrypto.so -> /usr/local/bin/openssl-1.0.1u/lib/libcrypto.so

8.重新编译

test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6/wpa_supplicant$ makeLD  wpa_passphrase... ... ... ...sed dbus/fi.w1.wpa_supplicant1.service.in

本次编译成功。
9.安装

test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6/wpa_supplicant$ sudo make install

10.查看版本:

test@test-Vostro-3268:~/workspace/wpa_supplicant-2.6/wpa_supplicant$ wpa_supplicant -v
wpa_supplicant v2.6
Copyright (c) 2003-2016, Jouni Malinen <j@w1.fi> and contributors

wpa_supplicant安装成功。

PS:后来在别的ubuntu上编译wpa_supplicant时,会遇到error: 'SSL_CERT_SET_NEXT' undeclared类似的几个变量未定义报错。后发现,安装下libssl-dev后,目录/usr/下搜索sudo grep -rin SSL_CERT_SET_NEXT 就能找到SSL_CERT_SET_NEXT等一系列变量的定义。在所需文件里添上所在头文件或引入头文件库再编译即可(一般都是/usr/include/openssl/ssl.h)。

编译安装wpa_supplicant相关推荐

  1. Windows 10下编译安装Hadoop2.6

    转自:https://www.linuxidc.com/Linux/2016-08/134131.htm Windows 10下安装Hadoop2.6,Windows10下编译64位Hadoop2.x ...

  2. 7 centos 源码安装samba_在CentOS7.6里编译安装PHP7.4(最新版),很详细

    拿到一个空的服务器,首先我们就要来用起来啦! 首先要先下载并编译安装PHP最新版本,请到php官网下载: 这里我首先在系统里在新建存储源码包的文件夹,比如我存放在这里 下载安装PHP7.4之前,你要先 ...

  3. mysql8.0.12最小化安装_简述MySql8.0编译安装过程

    [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core) 注意:不要用8以下的系统编译My ...

  4. debian编译安装python_编译安装python2.7及相关模块(debian5.0.1)

    基础环境说明及安装 当前系统 cat /etc/debian_version 5.0.1 因自带的python版本太旧 开发需要使用python2.7的版本 并需要paramiko Crypto My ...

  5. php编译7教程,PHP7 快速编译安装

    PHP7正式版发布啦, 之前没有安装过的,都来安装试一试 . 即将发布的ThinkPHP5 在PHP7环境下也完全兼容, 佩服鸟哥把兼容性做得这么好 快速编译安装PHP7步骤: 第一步: 安装必要一些 ...

  6. linux mysql 5.6.22_LinuxCentOS6.0下编译安装MySQL5.6.22

    Linux CentOS6.5下编译安装MySQL 5.6.22[给力详细教程] 一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库(安装过程注意有没出错) yum install gcc ...

  7. 在CentOS 6.6 64bit上编译安装LLVM3.7,Clang,Libc++和libc++abi

    一.简介 LLVM LLVM(之前称为低级虚拟机Low Level Virtual Machine)是一种非常强大的编译器基础架构框架,专门为使用您喜爱的编程语言编写的程序的编译时.链接时和运行时优化 ...

  8. 在Ubuntu 14.04 64bit上编译安装Crtmpserver trunk svn 811版本!

    这里仅在 在Ubuntu 12.04 64bit上搭建Crtmpserver视频点播服务 基础上补充一下在Ubuntu 14.04上编译安装Crtmpserver的方法,以作备忘.因为Ubuntu 1 ...

  9. 在Ubuntu 14.04 64bit下编译安装rtmpdump并调试输出

    2011年那会儿就开始研究rtmp, 但是后来很快又换了公司转作Android移动浏览器项目,就一直没有机会 继续进行下去.现在因为工作需要,我又重新捡使起来, 继续进行中断了几年的工作.下面记录下我 ...

  10. Ubuntu 14.04 64bit上编译安装simple-rtmp-server(srs)服务器

    下面的操作完全按照参考文献[1]进行,请采用root用户登陆,我这里只是记录了一下我在Ubuntu 14.04上面编译安装的过程.以作今后参考.该篇文章显示了srs提供的一个demo实例,包括实时流的 ...

最新文章

  1. 爬虫之selenium爬取斗鱼网站
  2. mysql 修改上传文件大小限制吗_修改PHP上传文件大小限制的方法(转)
  3. 使用JNA解决自动化测试无法做密码输入操作的问题
  4. java对cookie的操作_java对cookie的操作
  5. 系统进程间的同步机制
  6. HRSP热备份路由协议(思科私有协议)
  7. boost::math模块查找正态分布的均值或标准差的示例
  8. 使用sqlserver日期函数获取当前日期
  9. Linux_CentOS-服务器搭建 六
  10. Oracle 索引相关
  11. 想尝试转前端,但不知道从何学起
  12. 我滴个乖乖,一万三千颗卫星那
  13. ASP.NET中缓存(cache)的控制方法
  14. PHP搭建留言板,PHP搭建简易留言板
  15. 沉痛悼念游戏开发技术专家毛星云
  16. 双向循环链表的C++实现
  17. java编程比赛_[阶段一]java基础编程比赛
  18. 财报前被香港证监会点名,富途内控再受拷问
  19. 微信小程序支付错误提示“商户号mch_id或sub_mch_id不存在”
  20. 【b503】篝火晚会

热门文章

  1. redis lpush WRONGTYPE Operation against a key holding the wrong kind of value
  2. 油猴脚本使用方法与管理插件方法+开发插件与安装插件的方法
  3. TI AM3352/54/59 工业核心板硬件说明书
  4. 破解md5加密的方法
  5. 嵌入式(单片机方向)工程师如何做好定位和职业规划
  6. 以后你肯定会用到的,25个常用Matplotlib图的Python代码,可以不会不能没有,建议收藏
  7. android webview 文件下载,Android编程使用WebView实现文件下载功能的两种方法
  8. seo与sem的区别
  9. 上海麻辣马资深程序员叶劲峰:我的游戏人生
  10. 散列表的概念及其拉链法和常见的散列函数(C语言)