11: Intel Edisonの機体固有IDを使いたい

よく訓練されたアップル信者、都元です。昨日のエントリーはこちらです。今日は軽めのさらっとした話題。

今更ながら、Edisonは超小型の組み込みハードウェアプラットフォームです。で、例えば世界中に配置されたEdisonから、センサーが取得した情報を、AWSクラウドに流し込む、なーんて使い方をしたい場合、各データがどのEdisonから送られてきたものなのか、その識別子が欲しくなります。

/etc/machine-id (NG)

Edisonの中を回遊した際、/etc/machine-idというファイルを見つけました。お、これじゃん、と思って中を見てみると、それっぽい。

# cat /etc/machine-id
1d3d06a1d5464783943fde3af9442797

しかも、みんな別の値が帰ってくるので、コレダと思ったのですが。こいつ、rebootするだけで値が変わってしまいます。なんてこった。どうやらsystemdの機能の一つのようです。

# systemd-machine-id-setup --help
systemd-machine-id-setup [OPTIONS...]

Initialize /etc/machine-id from a random source.

  -h --help             Show this help
     --version          Show package version
     --root=ROOT        Filesystem root

MACアドレス (OK?)

次にぱっと考えつくのはMACアドレス。これを使っても良いでしょう。MACアドレスは、基本的には重複が無いとされていますが、偽装は可能であり少々の不安は残ります。

ただ、もっと、こう、なんというか、スマートなヤツないんですかね、って思って調べてみたらありました。

/factory/serial_number (OK)

# cat /factory/serial_number
FZXXXXXXXXXXXX01

これがハードウェア固有のIDとして使えそうです。もちろんリブートしても変わりませんでしたし、ファームウェアの焼き直し(reboot ota)をしても同じ値が取れました。

もちろんこれも、偽装の可能性はあるのかもしれませんが、「機体固有のID」という、より目的に沿った値であることは確かです。

参考

CPU Serial Number or something unique