概要
私はCentOSの方が使い慣れているという理由でRaspberry PiにCentOS7をインストールして使ています。
ある日、pigpioというライブラリを用いてGPIO制御をしてみようと思ったのですが、環境構築の手順がRaspbianを前提にしたものがほとんどであり(みんなapt installしてる)、CentOS向けの解説を見つけられなかったので、ハマったポイントなどを紹介しながらまとめました。
環境
使用機器はRaspberry Pi 3b+で、OSおよびPythonのバージョンは以下の通りです。
$ cat /etc/redhat-release
CentOS Linux release 7.8.2003 (AltArch)
$ python3 -V
Python 3.6.8
ダウンロードおよびインストール
公式ページの手順を参考に、インストールを行いました。
wget https://github.com/joan2937/pigpio/archive/master.zip
unzip master.zip
cd pigpio-master
make
sudo make install
この時点で、本来であればpigpiodコマンドが利用できるはずが、Not found。パスの読込先と、pigpiodコマンドの場所を確認するとpigpiodコマンドが**/usr/local/bin/**に格納されているのに対し、自分のパスが通っていなかった。なんて初歩的なミスと嘆きながらパスを修正し実行すると以下のエラー。
error while loading shared libraries: libpigpio.so.1: cannot open shared object file: No such file or directory
これは、「ダイナミックリンクされたファイルが見つからないという意味」(引用:https://jsapachehtml.hatenablog.com/entry/2015/01/09/210255) らしく、ldconfigコマンドを実行する際のエラーのよう。そこでMakefileを確認してみると、インストール工程の最後にldconfigを実行している。
結果、こちらやこちらのサイトを参考に、以下の設定を追加したら正常に動きました。
/etc/ld.so.confの修正
/etc/ld.so.confにpigpiodコマンドが格納されているパスを記入する
$ sudo vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib #新しく追加
pigpioをデーモンとして動作させる
その後の工程として、こちらのサイトを参考にしながら、pigpioをデーモンとして動作させる設定を追加しました。
$ sudo vi /lib/systemd/system/pigpiod.service
[Unit]
Description=Daemon required to control GPIO pins via pigpio
[Service]
ExecStart=/usr/local/bin/pigpiod
ExecStop=/bin/systemctl kill pigpiod
Type=forking
[Install]
WantedBy=multi-user.target
その後デーモンの自動起動を設定し、起動すれば、、
$ sudo systemctl status pigpiod
● pigpiod.service - Daemon required to control GPIO pins via pigpio
Loaded: loaded (/usr/lib/systemd/system/pigpiod.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 1970-01-01 09:00:07 JST; 50 years 4 months ago
Process: 255 ExecStart=/usr/local/bin/pigpiod (code=exited, status=0/SUCCESS)
Main PID: 257 (pigpiod)
CGroup: /system.slice/pigpiod.service
mq257 /usr/local/bin/pigpiod
Jan 01 09:00:07 localhost systemd[1]: Starting Daemon required to control GPIO pins via pigpio...
Jan 01 09:00:07 localhost systemd[1]: Started Daemon required to control GPIO pins via pigpio.
問題なく起動しました。