導入
AndroidにHomebridgeを導入するという記事を度々あげましたが、問題点がありました。それは、npmがネットワークエラーになって、プラグインやアドオンがインストールできなくなってしまうといことです。エラーの内容は
[unagidojyou@localhost: $ sudo npm update -g npm
npm ERR! code ECONNRESET
npm ERR! syscall read
npm ERR! errno ECONNRESET
npm ERR! network request to https://registry.npmjs.org/npm failed, reason: read ECONNRESET
npm ERR! network This is a problem related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network ‘proxy' config is set properly. See: 'npm help config’
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/ logs/2022-04-22T02_30_59_375Z-debug-0.log
こんな感じです。apt updateやupgradeは正常にできるのでインターネットには正常につながっているはずです。
原因
結論としては安物のUSB NIC(USB LAN変換アダプタ)が問題でした。自分はこのNIC(RD9700)を4つくらい持っているんですが、なんとMACアドレス(00:E0:4C:53:44:58)が全て同じです。使っていて、これ以外に特に異常がなかったので、同一ネットワーク内になければいいのかなーと思って使用していましたが、もちろんダメでした。初めの方は普通に接続できていて、他サイトでのwgetやcurlは正常にできていたので問題ないと思っていました。
回避方法
まあ、純粋にMACアドレスをIPコマンドで変更するだけです。詳しくはArchWikiに書かれているのでそちらを読んでください。もともとのMACアドレスが00:E0:4C:53:44:58なので、このMACアドレス生成サイトでOUIを00:E0:4Cを指定して、適当に1つ選びます。
sudo ip link set dev interface down
interfaceは刺したUSB NICのinterface名(eth0やeth1)にしてください。
sudo ip link set dev interface address XX:XX:XX:XX:XX:XX
XX:XX:XX:XX:XX:XXは、先程サイトで生成したMACアドレスです。
sudo ip link set dev interface up
これでMACアドレスが変更されたはずです。
おわりに
自分の環境(Android上のUbuntu)では再起動する度にもとのMAXアドレスに戻ってしまうので、上の内容のスクリプトを作って/etc/rc3.d/下に置きました。