メインコンテンツへスキップ
見出し画像

107秒で再起動するルーターを、どうにか元に戻した話

    SoftBank Air ターミナル6を、かなり前からいじっています。中でLinuxが動いていることが分かり、SSHで入れるようにしたり、USBを触ったり、ネットワーク設定を変えたりしていました。中古で買ったルーターなのに、気がつけばずいぶん深いところまで潜っていました。

    ある日、T6をWi-Fiの子機として使えることが分かりました。手動で設定すると家庭内Wi-Fiにつながり、IPアドレスも取れて、SSHも普通に使えます。それなら起動時に自動でつながるようにすれば便利じゃないか、と思ったのです。

    これが失敗でした。再起動すると、しばらく動いたあとにまた再起動します。時間を測ってみると、だいたい107秒でした。

    また起動する。しばらくすると落ちる。そしてまた起動する。

    107秒ループの完成です。

    起動するけど、すぐ死ぬ

    完全に起動しないなら、まだ諦めもつきます。でも今回は途中まではちゃんと動いているらしく、ネットワークが見える時間もあります。ただし、こちらが何かしようとしている間に再起動してしまいます。

    最初に思ったのは、「あ、やったなこれ」でした。自分で仕込んだ自動起動処理が、自分で機械を壊しているわけです。しかも、その処理を止めるためには中に入らないといけません。

    でも中に入れる時間は、せいぜい107秒。正確には起動時間もあるので、実際に作業できる時間はもっと短いです。ここから、ちょっと変な復旧作業が始まりました。

    107秒で一つだけやる

    一度の起動で全部直そうとすると、たいてい途中で落ちます。そこで、一回につき一つだけ確認することにしました。今回はネットワークがどのタイミングで上がるのか、次はどの瞬間なら中に入れるのか、という具合です。

    入れたら、次の107秒では別のことをします。設定を一つ確認する、ファイルを一つ保存する、次に入るための経路を一つ増やす。ゲームで、セーブポイントを少しずつ前に進めているような感じでした。

    当然、失敗もします。コマンドを打っている途中で接続が切れたり、あと10秒あれば終わったのに、ということも何度もありました。それでも、一回ごとに何か一つ残せれば、次はそこから始められます。

    少しずつ自由を取り戻す

    最初は外から眺めているだけでした。そこから短時間だけ中に入れるようになり、次はrootで操作できるようになりました。さらに、再起動してもまた戻ってこられる経路を作っていきました。

    技術的には、起動領域やA/B構成など、かなり細かいところまで触っています。そのあたりを書き始めると、それだけで長い技術記事になってしまいます。詳しい手順や調査結果は、GitHub側に残すことにしました。

    noteで書きたいのは、むしろその時の感覚です。壊れた機械を一気に直したのではなく、一回の起動につき、一つずつ制御を取り戻していった。今回の復旧は、ずっとそんな感じでした。

    決定打は、壊れた側を直すのをやめたこと

    最後に効いたのは、T6がA/Bという二つの起動領域を持っていたことでした。107秒ループしている側をその場で完全に直そうとするのではなく、もう一方の起動領域を復元して、そちらから立ち上げる方針に切り替えました。

    これが決定打でした。必要な領域をバックアップから戻し、B側を起動するように変更すると、T6はようやく107秒を超えて動き続けました。ずっと目の前の壊れた環境だけを直そうとしていたので、「別の正常な足場を作って、そこへ逃げる」という発想に切り替わった瞬間でした。

    細かいパーティション番号や復元手順はGitHubに書きます。noteで重要なのは、壊れた場所で戦い続ける必要はなかったということだと思います。逃げ道が残っていたので、そこへ逃げました。

    107秒を超えた

    何度も見ていると、107秒という時間を体が覚えます。そろそろ落ちるな、と思うころに接続が切れ、また最初から起動します。それを何度繰り返したか、もうよく覚えていません。

    そしてある時、107秒を過ぎても落ちませんでした。2分、3分、5分と経っても、そのまま動いています。SSHにも普通に入れます。

    派手な成功画面が出るわけではありません。ただ再起動しない。それだけでした。「あ、戻った」と思いました。

    一番役に立ったもの

    今回、一番役に立ったのは特別なツールではなかったと思います。それまでに調べたことや、実行したコマンド、正常だった状態を記録していたことでした。壊れたあとも、完全なブラックボックスには戻らなかったのです。

    どうやって中に入ったか。どこを変更したか。どこまで正常だったか。

    それが残っていたので、107秒しかなくても次にやることを決められました。途中経過を残すのは地味ですが、壊れた時にはものすごく効きます。たぶん、今回の最大の教訓はそこでした。

    壊す前に、戻る道を作る

    改造するときは、成功する方法ばかり考えます。でも本当に必要なのは、「失敗したらどう戻るか」なのかもしれません。SSHを切ったらどうする、ネットワークを壊したらどうする、起動処理を壊したらどうする。

    今回は、その戻り道を後から必死に作ることになりました。結果的には戻ってこられたので、結果オーライだった(今回は)。でも、次からはもう少し先に逃げ道を作ろうと思います。

    技術的な復旧手順はGitHubにまとめます。誰かが同じようなことをして、同じように107秒ループへ落ちた時、何か一つでも役に立てば十分です。noteには、とりあえずこれだけ残しておきます。

    107秒ループから、どうにか帰ってきました。

    そしてたぶん、またいじります。

    こちらの記事もおすすめ


     
     

    Karin

     
     
    自家用ソフト(非売品)開発者。AIと古い機械をつないで遊んでいます。ChatGPTやCodexを工具に、電子工作、自宅サーバー、Androidアプリ、OpenWrt移植などに挑戦中。自分や家族が使いたいものを、日曜大工のように作っています。ノウハウはできるだけ無料で共有します。

    あなたへのおすすめ