衝撃のわからなさ

わかってません

2024/01/15日報

コマンドと共有ライブラリを判定する

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ボタンができる。