2018年7月29日日曜日

ubuntu18.04にlibnfc-1.7.1とnfcpy0.11インストール

環境を再度構築するのが面倒だったので放置していただ
suicaの残高を確認するために一々windowsを起動するのも面倒だったので
久しぶりにNFC環境を作ってみた。

■libnfcのインストール
Libnfc > Debian / Ubuntu

sudo apt-get install libusb-dev dh-autoreconf
git clone https://github.com/nfc-tools/libnfc.git
cd libnfc
git checkout master
sudo ./make_release.sh
sudo ./configure
sudo make
sudo cp /usr/local/lib/libnfc.so.5 /usr/lib/libnfc.so.5
sudo cp contrib/linux/blacklist-libnfc.conf /etc/modprobe.d/


 何とかインストールは成功したけど、NFCが認識されない。

[nfc]RC-S380はチップが違うのでlibnfcは動かないと思う
無駄足だった・・・


なるべくpythonには手を出したくなかったけどnfcpyを入れることに。

Raspberry Pi と Sony RC-S380/P、nfcpy で NFC カードの IDm を読み取る (2)

sudo apt install python-pip
pip install -U nfcpy


sudo python -m nfc
をすると以下のメッセージが表示される

** found usb:054c:06c3 at usb:006:002 but it's already used
-- scan sysfs entry at '/sys/bus/usb/devices/6-1:1.0/'
-- the device is used by the 'port100' kernel driver
-- this kernel driver belongs to the linux nfc subsystem
-- you can remove it to free the device for this session
   sudo modprobe -r port100
-- and blacklist the driver to prevent loading next time
   sudo sh -c 'echo blacklist port100 >> /etc/modprobe.d/blacklist-nfc.conf'
I'm not trying serial devices because you haven't told me
-- add the option '--search-tty' to have me looking
-- but beware that this may break other serial devs

 
言われたとおり
sudo modprobe -r port100
をしたあとに
sudo python -m nfc
をしたらメッセージが変わっていた。
** found SONY RC-S380/P NFC Port-100 v1.11 at usb:006:002

ということでブラックリストに追加した
sudo sh -c 'echo blacklist port100 >> /etc/modprobe.d/blacklist-nfc.conf'

でも
sudo python2.7 examples/tagtool.py
するとエラーになる


AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol
色々調べたところ、依存しているライブラリが廃止されて
libcrypto.so.1.1をlibcrypto.so.1.0.0に変えないと動かないぽいけど、今更過去のモジュールに変えたくないし、SSL関連なのでローカルPCで動かしている私とは関係ないだろうなーと思い、排除することに。

vim /home/park/work/nfcpy/nfcpy/nfc/llcp/sec.py
開いて191、192、201行をコメント
# self.crypto.ECDH_OpenSSL.restype = c_void_p
# self.crypto.ECDH_set_method.restype = c_int
# self.crypto.EVP_CIPHER_CTX_init.restype = None


あとは定番(?)のコードをcloneして動かしたら、読み取れるようになった。
Raspberry Pi 入門 4日目 – Suicaの履歴を読み取る

でも、やっぱりnodejsでやりたいと思い、しらべて見たらnode-nfcpy-idで
できそうな気がする。

Raspberry PiとPaSoRiでICカードのIDを取得するnpmパッケージを作ってみた

頑張ってpythonのコードを読んでみようか・・・