▼Ubuntu 20.04 で eapol_test だけをコンパイルする▼

RADIUS (FreeRADIUS) で mschapv2 やEAP-TLS (PEAP) のテストをするには FreeRADIUS同梱の radtest では力不足で、 wpa_supplicant に付属している eapol_test ツールが必要 なんですが、 Ubuntu の wpasupplicant パッケージでは同梱コンパイルされていないので、 仕方なく自分でコンパイルします。

$Id$


▼wpa_supplicantパッケージの入手

wpa-supplicant のホームページをwpasupplicantパッケージの情報から探す:

$ apt-cache show wpasupplicant #dpkg-query で出せないのかな
Package: wpasupplicant
Architecture: amd64
Version: 2:2.9-1ubuntu4.1
Multi-Arch: foreign
Priority: optional
Section: net
Source: wpa
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian wpasupplicant Maintainers <wpa@packages.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 3407
Depends: libc6 (>= 2.29), libdbus-1-3 (>= 1.9.14), libnl-3-200 (>= 3.2.21), libnl-genl-3-200 (>= 3.2.7), libnl-route-3-200 (>= 3.4.0), libpcsclite1 (>= 1.0.0), libreadline8 (>= 6.0), libssl1.1 (>= 1.1.1), lsb-base, adduser
Suggests: wpagui, libengine-pkcs11-openssl
Breaks: initscripts (<< 2.88dsf-13.3)
Filename: pool/main/w/wpa/wpasupplicant_2.9-1ubuntu4.1_amd64.deb
Size: 1182640
MD5sum: 06cbf9c983dee8248efbe3c104c3d767
SHA1: e01f11343b4213b6ee07a826845307663e8c8830
SHA256: 47c86350302ab551943f06b3a121da6c06e2d33bb518daf1630f6473e49c4fdf
SHA512: a83c83d2b614ff87085a1f7a2af3b2134d627ee92dd27f876a8cec58754f98c785014f3546aafec3f409d4b76dbbd1fa66f3b88078ba5f9b0a378aeb8d41faaf
Homepage: http://w1.fi/wpa_supplicant/
Description-en: client support for WPA and WPA2 (IEEE 802.11i)
 WPA and WPA2 are methods for securing wireless networks, the former
 using IEEE 802.1X, and the latter using IEEE 802.11i. This software
 provides key negotiation with the WPA Authenticator, and controls
 association with IEEE 802.11i networks.
Description-md5: db096b22f8ec5f5c7a8ec614d12ca20a
Task: ubuntu-desktop-minimal, ubuntu-desktop, ubuntu-core, kubuntu-desktop, xubuntu-core, xubuntu-desktop, lubuntu-desktop, ubuntustudio-desktop-core, ubuntustudio-desktop, ubuntukylin-desktop, ubuntu-mate-core, ubuntu-mate-desktop, ubuntu-budgie-desktop

http://w1.fi/wpa_supplicant/ に アクセスして、ソースパッケージを探す。 本文執筆時点では http://w1.fi/releases/wpa_supplicant-2.9.tar.gz 。

ダウンロードして展開し、wpa_supplicant ディレクトリへ移動する。

$ wget http://w1.fi/releases/wpa_supplicant-2.9.tar.gz
$ tar zxvpf wpa_supplicant-2.9.tar.gz
$ cd wpa_supplicant-2.9/wpa_supplicant

▼eapol_test のコンパイルを有効にする

./.config を作る。テンプレートが ./defconfig にあるが、eapol_test のビルドはデフォルトでは無効なので、有効にする。

$ sed -e 's/^#CONFIG_EAPOL_TEST=.*/CONFIG_EAPOL_TEST=y/' defconfig > .config

▼eapol_test をコンパイルする

libnlの開発者パッケージ(-dev)が必要なことがわかっているので、 インストールする。

$ sudo apt install libnl-3-dev

▼pkg-configコマンドがない

make eapol_test で eapol_test だけコンパイルする。

$ make eapol_test
pkg-config: Command not found

apt-file コマンドで、pkg-config コマンドが含まれているパッケージを探す。

$ sudo apt-get update
$ apt-file search -x '/pkg-config$'
acr: /usr/share/doc/acr/pkg-config
bash-completion: /usr/share/bash-completion/completions/pkg-config
check-all-the-things: /usr/share/check-all-the-things/data/pkg-config
cruft-common: /usr/lib/cruft/filters-unex/pkg-config
pkg-config: /usr/bin/pkg-config
pkgconf: /usr/bin/pkg-config
pkg-config パッケージが正しそうなので、インストールする。
$ sudo apt install pkg-config

▼dbus開発者ライブラリがない

$ make eapol_test
Package dbus-1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `dbus-1.pc'
to the PKG_CONFIG_PATH environment variable
apt-file で dbus-1.pc を探して、該当パッケージをインストールする。 今回は libdbus-1-dev
$ sudo apt install libdbus-1-dev

▼コンパイラがない

$ make eapol_test
/bin/sh: 1: cc: not found
コンパイラはデフォルトでは入っていない。
$ sudo apt-get update
$ sudo apt install gcc

▼OpenSSL開発者パッケージがない

$ make eapol_test
../src/common/dpp.c:12:10: fatal error: openssl/opensslv.h: No such file or directory
OpenSSL の開発者用パッケージが必要。
$ sudo apt install libssl-dev

▼パッチが必要

$ make eapol_test
dbus/dbus_new.c: In function ‘wpas_dbus_unregister_p2p_group’:
dbus/dbus_new.c:4793:3: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
 4793 |   wpa_printf(MSG_DEBUG,
      |   ^~~~~~~~~~~~~~~~~~~~~
 4794 |       "%s: Group object '%s' already unregistered",
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 4795 |       __func__, wpa_s->dbus_groupobj_path);
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
パッチ が出ている。 [2/2] dbus: Suppress to show NULL string
単純なパッチなので手動で適用する。
$ vi dbus/dbus_new.c

▼libnl-genl-3.so が必要

$ make eapol_test
/usr/bin/ld: cannot find -lnl-genl-3
libnl-genl-3.so が含まれているパッケージを探す。今回は libnl-genl-3-dev
$ sudo apt install libnl-genl-3-dev

▼eapol_test コンパイル (成功)

$ make eapol_test
エラー無し
ldd で、not found なライブラリが無いかチェックする。
$ ldd ./eapol_test
        linux-vdso.so.1 (0x00007ffc8f9d0000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb5ffd80000)
        libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007fb5ffced000)
        libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007fb5ffa17000)
        libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007fb5ff9c6000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb5ff7d4000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fb5fffb4000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb5ff7b1000)
        libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007fb5ff702000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb5ff6f7000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fb5ff6ce000)
        liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x00007fb5ff6ad000)
        libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007fb5ff58f000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007fb5ff56a000)

※インストールした libnl-genl-3.so (libnl-genl-3-devパッケージ) にはなぜか依存していない。
特に問題なければ、 /usr/local/bin/ あたりに手動でインストールする。
$ sudo cp ./eapol_test /usr/local/bin/
$ sudo chmod 755 /usr/local/bin/eapol_test

▼パッケージ(.deb)ないの?

.debの作り方、よくわかってないんですが作ってみました。

他では見当たらないですねぇ。 手動コンパイルして、できたらもういいや、という人の方が多いんでしょう。 Ubuntu はアップデートが激しいので、アップデートを提供し続けるのも面倒だし。 (依存関係とか)


かべ@sra-tohoku.co.jp