编译安装wpa_supplicant

编译安装wpa_supplicant本文记录了编译安装wpa_supplicant2.6的详细流程。系统ubuntu 12.04,内核3.4.111。1.下载指定版本的wpa_supplicant源码包:访问网址 w1.fi/releases/ 这一页提供了多个源码版本,可直接在主界面搜索需要的版本号。 下载后: …

编译安装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 to
  work with most relatively recent versions; this is likely to be
  available 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_64
    no-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  25 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  27 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$ make
  CC  config.c
  CC  notify.c
  ... ... ... ...
  CC  scan.c
  CC  main.c
  CC  ../src/drivers/driver_wext.c
  CC  ../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$ make
  CC  ../src/drivers/driver_nl80211.c
  CC  ../src/drivers/driver_nl80211_capa.c
  CC  ../src/drivers/driver_nl80211_event.c
  ... ... ... ...
  CC  ../src/utils/edit_simple.c
  LD  wpa_cli
  CC  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  27 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$ make
  LD  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安装成功。

今天的文章编译安装wpa_supplicant分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/21373.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注