コマンドと共有ライブラリを判定する
mimic-crossの自動インストールでコマンドだけ入れるようにしたい。
が、以外に見分けられなくて困った。
ELFのヘッダ的には差がわからない
readelf -h
のtypeは両方ともDYN (Shared object file)
fileコマンドがなんか判定してないかと思ったけれどそんなことなかった
$ file /bin/cat /bin/cat: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b357ed53c8c9cb1a312f83b28982304effae0135, for GNU/Linux 3.2.0, stripped $ file /lib/x86_64-linux-gnu/libc-2.31.so /lib/x86_64-linux-gnu/libc-2.31.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=eebe5d5f4b608b8a53ec446b63981bba373ca0ca, for GNU/Linux 3.2.0, stripped
そもそも両立できる
単体でも実行可能で動的リンクも可能な共有ライブラリを作成する #Linux - Qiita
pathから判定する
packageから入るものは普通探索対象にいるか?
ライブラリはとりあえず、RUNPATH設定されてたりすると駄目。
/usr/lib/sudo/libsudo_util.so.0
とか。
PATHにしか実行ファイルはいない?
具体的な反例抑えてないけれどシンボリックリンクしたりするよなと思ってる。
結論: 無理じゃないか
基本的にはpathと拡張子で自動判定するルール作って、 それ以外のパスにELFが存在したら自動判定できないから手動で書いてということにする。
ダイソーのリモートシャッター+Android端末(+Macrodroid)でIoTボタン
できそうなのでやってみた。
家にいらないスマホがあったら220円でIoTボタンができる。
ダイソーのbluetoothリモートシャッター(220円)と使わなくなったAndroidスマホでIoTボタンできるじゃんというやつ。macrodroidでボリュームキートリガでwebhook投げてる。ボタン一個につきAndroid1台必要だけど。
— taki4416 (@taki_4416) January 15, 2024
カチャカをダイソーのボタンで動かしてみる pic.twitter.com/9RWmoJDD9l