予想通り、ファームウェアが読み取り専用のルーターで作業しています。彼らが使用するビジボックスは元のツールのシンプルなバージョンなので、必要なすべてのツールにアクセスすることはできません。このルーターにはUSBポートもあるので、USBスティックに/binをバインドすると、私が望む結果を得ることができると思いました。したがって、次のコマンドを使用してバインドします。
cp -r /bin /mnt/<device-id>/
mount --rbind /mnt/<device-id>/bin /bin
その後、busyboxをリポジトリのフルバージョンに置き換えました。私はmispのために事前に作成された最新のバイナリを使用しています。
さて、予想通り、Business Boxはすべてのコンポーネントを備えていますが、他のデバイスでTelnetを実行できず、Telnetが切断された場合は再接続して取得できません。
$ telnet 192.168.1.1
login:
escape char:
Connection closed by foreign host.
これにより、まだbusyboxをバインド解除できない問題があります。削除しようとすると使用中です。基本的にbashとして使用しているので、これは予想されます。
$ umount /bin
umount: /bin: device is busy.
私は手がかりがありません。誰かが私を助けることを願っています。
ベストアンサー1
私が経験している問題を見つけました。まず、前述したように、Telnetを使用して再接続することはできません。これは、busyboxとtelnetコマンドを制御する親プロセスがあるためです。フォアグラウンドで別のtelnetdプロセスを作成しようとすると、次のエラーが発生します。
$ telnetd -F
telnetd: bind: Address already in use
まず、ポート23(telnetdのデフォルトポート)を使用してプロセスを確認しました。
$ netstat -lntup | grep 23
tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 2697/agent
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 362/pc
したがって、/bin
フォルダを別の場所にバインドすると、pc
プロセスが混乱します。したがって、telnetdセッションを作成できず、ポート23を使用します。これは、起動時にほとんどの構成のみを担当するためです。このプロセスIDが終了するのを見る唯一の時間は、ファームウェアアップデートプロセスが開始されたときです。それにもかかわらず、プロセスを終了してtelnetdを再起動しました。
$ kill -9 362
$ telnetd
今はうまくいきますが、見苦しいパッチなので、別のアプローチを使用しました。もちろん、他のポートでtelnetdを実行することも可能ですが、/binフォルダはまったくバインドしないことにしました。
パスの前にインストール場所を追加することにしました。したがって、私が実行しているすべてのbusyboxコマンドはインストール場所にあります。実行するコマンドを最初にPATHで見つけたからです。したがって、パスに複数のbusyboxがあっても何の害もありません。新しいbusyboxがあるとしましょう/mnt/<device-id>/bin
。
$ for i in `./busybox --list`; do ln -s busybox $i; done
$ PATH=/mnt/<device-id>/bin:$PATH
これで、すべての新しいbusyboxコマンドが期待どおりに機能します。バインディングは不要になり、システムプロセスは終了しなくなります。
ちなみに、質問投稿でumount
/bin
フォルダを整理できないと言いました。その理由は、私が思ったものとまったく一致しているようです。別のbusyboxインスタンスを使用すると、実際にフォルダのバインド/bin
が解除されます。