Ubuntuでdo-releaseupdateに失敗したら

寝落ち、鯖落ちssh落ちで偶によくこうなる。窓から投げ捨ててはいけない。

次の手順でやると復活する。

  • 起動しない場合

    • まずは落ち着いて起動時にESCキーを押してGrabのMenuからリカバリーモードで起動しよう
    • それでも起動しない場合は1歩1歩カーネルをバージョンを遡れば大丈夫
    • それでもダメな場合は、USBメモリから起動して、chrootでrootパーテーションに入ろう
  • 起動したら

    • 次のコマンドを実行だ

      sudo apt-get install -f

    • 多分「無理だよ!このコマンド流せよ!」と怒られるので流す

      sudo dpkg --configure -a

    • すると次は「なんかサブプロセスがエラーで落ちる」と言われて失敗するのでパッケージを確認する
    • エラーで落ちるパッケージAを発見したら次のコマンドでアンインストールする

      sudo dpkg -P <パッケージA>

    • すると「おれコレ使ってるんだけど・・」と依存関係パッケージBがコンニチワするので、こいつもアンインストールする

      sudo dpkg -P <パッケージA> <パッケージB>

    • 結果依存関係が玉ねぎの皮のように何処までもつながっている悪夢に気がつく
    • そこで、どうせ全部依存関係は後で治るねん!と強気の依存関係無視で消す

      sudo dpkg -P --force-remove-reinstreq <パッケージA>

    • これで消えないときも有る。なぜならパッケージBが依存してるからだ。じゃあ、

      sudo dpkg -P --force-remove-reinstreq <パッケージB>

    • これで消えないときも有る。なぜならパッケージAが依存してるからだ。「なん・・・だと・・・」
    • ついにこの時が来た!dpkgの依存関係を書き換えちゃえ!Ctrl+Wでパッケージを検索、Depensを全部消して保存する。

      sudo nano /var/lib/dpkg/status

    • そして、ターゲット消す!

      sudo dpkg -P --force-remove-reinstreq <パッケージB>

      sudo dpkg -P --force-remove-reinstreq <パッケージA>

    • それから、逆にたどって

      sudo dpkg --configure -a

    • aptの整合性を設定だ!

      sudo apt-get install -f

    • 保留組が0でない場合は次も流す

      sudo apt-get dist-upgrade -y

    • これでほぼ終わりだが、忘れずに不要パッケージは消す

      sudo apt-get autoremove -y

    • そして、再起動

      sudo reboot

    • パッケージを最新化する

      sudo apt-get update

      sudo apt-get dist-upgrade -y

      sudo apt-get autoremove -y

      sudo apt-get autoremove -y

以上! apt-get派なので、これ。

そして14.04LTS→16.04LTSに上げたその日9/29に18.04LTS→20.04LTSが解禁されましたとさ。チャンチャン。