安易に sudo apt remove --auto-remove python3 してはいけない

ohria
·

はじめに

私はエンジニアである。諸事情があり2023年の6月に mac から Linux へ乗り換えた。Linux を触ってから半年あまり。慣れた頃に悲劇はやってくるものである。

A型の私

良さげな言語マネージャーである mise (旧 rtx) というツールを使おうと思った。以前は anyenv を使用してた。しかし anyenv はインターフェースが直感でなかったり、最新バージョンの反映が遅かったりする。そんな操作性に嫌気が差してしまい、mise への移行を決めたのだ。

python3 パッケージを削除したかった。以前に手動で python3 パッケージをインストールしていた。pyenv の設定が煩わしく、スピード優先でとりあえず 3系 を入れたのだ。普段 python3 を使用することはほぼないものの、この際に python も mise で一括管理したかった。私は生粋の A型 であった。

python3 の削除

「python uninstall linux」で Google 検索し、程なくして以下のページを見つけた。素晴らしい。python パッケージをただ削除するだけでなく、依存関係や config ファイルまで含めて削除するオプションも記述してある。本質的には apt コマンドの扱いと内容が一緒であったが、慣れない私にはありがたかった。

そして、表題のコマンドを実行する。sudo apt remove --auto-remove python3 だ。このコマンドはただパッケージを削除するだけでなく、依存関係まで含めて削除してくれる。--auto-remove のオプションがそれだ。不用意なパッケージが残り続けるのは、むず痒いモヤモヤを覚える。どうせならまとめて削除したい。A型 の私にとってそれは当然の選択だった。

コマンドの実行後に yes/no の確認を求められる。apt コマンドの鉄板だ。当然ながら yes。私には python3 パッケージを削除し、mise による厳格に管理された秩序あるバージョン管理が必要だったのだ。

なんかおかしいぞ?

そして何が起こったか?

その後のアウトプットには 異常な数の Removing... [package-name] というログが表示されていた。合計で 200件 は超える。シェル下部のプログレスバーの進みが目に見えるほど遅い。とっさにこれはおかしいと感じた。異常事態、そして思い当たる。まさかとは思ったが、python3 の依存関係すべてが再帰的に削除されているのだ。実行前に描いた、そこまではしないだろうという私の予想を軽々と超えてきた。

Ctrl-C でプロセスを終了させることはしなかった。途中で止めても、既に削除されたパッケージは復元しないだろうと思ったし、ならば最後まで実行し、データの整合性を保つことの方が優先に思えた。

さて、再帰的にすべてを削除?果たしてこんなことが許されるのか?python3 のみならず、本来は必要な (必要かもれしない) パッケージまで削除されてしまうではないか。

いや、これが Linux である。圧倒的なシンプルさ、自由度の高さ。私はこれまでの経験で Linux を分かっていたつもりだったが、それは本当につもりでしかなかった。なんだってやれるのである。そしてそのインパクトを、この後の私は痛感することになる。

もう遅い

デスクトップが起動しないのだ。Waht's !? いったいどういうことだろう?

コマンドを実行した後、念の為 PC を再起動した。その後、いくら待ってもログイン画面が表示されない。真っ暗な背景に OS 起動時のログが流れるのみ。そして、何も起きない。いったい何がどうなっているのかわからなかった。

答えはスマホから調べた次の記事に書いてあった。Won't book after running sudo apt remove。なんと ubuntu-desktop パッケージまでも削除されてしまっていた。python3 は ubuntu-deskop が依存する、コアなパッケージだったのである。

OS を起動しても画面は真っ暗なまま。表示されるのは文字のみ。マウスカーソルが存在しない世界。もはや私の PC は、Recovery Mode で起動できる root シェルくらいしか機能を持っていなかった。

こんなことが許されるのか?python パッケージを削除したら、デスクトップまで削除される?GUI が使えない?私の PC だけ歴史が前時代まで巻き戻っている。一番重要なブラウザを起動できない。Slack も開けないし IDE も起動できない。あるのは真っ暗な背景にユーザー名などの基本的な情報と、点滅するキャレットのみ。つまり CLI である。

普及できるのだろうか?幸運にも今日は金曜日の終わりで、仕事への支障はない。しかし、新年早々やらかしてしまった...。

ありがとう先人達

以外にも復旧は簡単だった。sudo apt install --reinstall ubuntu-desktop をすれば良い (ログの調べ方など詳細な解決法は Won't book after running sudo apt remove に譲りたい)。

Recevery Mode で root シェルを起動し、上記のコマンドを実行。プロセスが終了した後に resume すると、無事にデスクトップが起動された。

主な影響は ubuntu-desktop の削除だったらしく、残りは一緒に削除された 2,3 のパッケージをインストールするだけで復旧できた。当初は PC が文鎮になったのではないかと焦ったがそんなことはなかった。神に感謝。

まとめ

さて、まとめよう。

  1. Linux で依存関係も含めて python3 を削除するな。(デスクトップが) 飛ぶぞ。

  2. もし飛んでも焦るな。reinstall でなんとかなる。

2024年も素晴らしい年にしていきましょう。

@ohria
フリーランスエンジニア バックエンドが得意、でも基本的に何でもやる #FleetMind という俺が考えた最強のマインドマップを開発中! マインドマップ × アウトライナー × Notion @HitoroOhria