Armadilloフォーラム

起動時にプログラムが化ける時がある

chosan

2016年7月8日 11時38分

こんにちは

Armadillo IoT G2を10数台運用しているのですが、夜中に1回再起動かけた後に通信ができなくなる現象が時々出てます。
3Gの問題かと考え、色々対応したのですが、それでも発生してしまい困っています。

再起動実験をしていると、下記のようにプログラムの一部が化けている場合があるようです。
ファイル名:/usr/lib/ruby/2.2.0/openssl/digest.rb

通常: superのあたり
      klass = Class.new(self) {
        define_method(:initialize, ->(data = nil) {super(name, data)})
      }
 
NGケースその1
      klass = Class.new(self) {
        define_method(:initialize, ->(data = nil) {sHp?^@(name, data)})
      }
 
NGケースその2
      klass = Class.new(self) {
        define_method(:initialize, ->(data = nil) {s^L^@^@^@(name, data)})
      }

再起動後におかしくなった後に、デバッグケーブルを繋いで発生箇所をコピーしました。

プログラムはRubyのOpenSSLの中のファイルでして、そこが壊れると通信がまともに動かないので話になりません。
他にも化けているかもしれませんが、特定てきていません。
不思議なのがいつも化けるのが同じファイルのsuperの部分なのですが・・・

ユーザーランドは開発ドキュメント通りにコンパイルし、下記のように書き込んでいます。
netflash -b -k -n -u -s -r /dev/flash/userland http://弊社のサーバー/romfs.img.gz

再現性:
調子がいい時は20回再起動しても発生しませんが、悪い時は5回、8回で発生しています。
特定1台だけで発生するわけではなく、複数台で発生します。

質問:
・こういったプログラムの化けは発生するのが普通ですか?
・文字化けしないようにするには、どう対処するのがよいのでしょうか?
・再起動するしかありませんかね?

以上

コメント

make romfs imageするときにmd5でサムを取り値を保存し、起動時にあっているか確認し異なっていたら再起動するしかけにしました。
時々再起動のため起動時間が遅くなりますが、とりあえず様子見します。

at_takashi.sasayama

2016年7月8日 17時41分

笹山です。

> 質問:
> ・こういったプログラムの化けは発生するのが普通ですか?

普通ではないですね。プログラム(ファイル)に化けが発生するのは異常な状態です。

> 調子がいい時は20回再起動しても発生しませんが、悪い時は5回、8回で発生しています。
> 特定1台だけで発生するわけではなく、複数台で発生します。

複数台で同問題が再現するとのことですが、化けるファイルはどの個体も同じファイルでしょうか?
それとも個体ごとに大きく差があるのでしょうか?

どうぞよろしくお願いいたします。

そうですか、普通ではないですか。

問題が発生するArmadillo IoTは遠方に設置しているのと、発生時には3G経由でログインできない状態になってしまうので、状態の確認ができないのですよ。
今回、プログラム化けが発見できたのは、手元にある1台だけです。
複数台で発生していると記載したのは、3Gが通信できなくなってしまう症状が似ているので、推測です。

3Gが通信できなくなってしまう現象は、PINGしてダメだったらifdown,ifupしてみて、どうにもダメだったら再起動する処理を入れて、解決できたかなと思っていたのです。それでも発生するので、調査してみたら、プログラム化けだったというわけです。

手元にIoTが複数台手に入ったら再調査してみます。