壊れたアップデートとパッケージの混乱: 古いパッケージを手動で削除するにはどうすればよいですか?

壊れたアップデートとパッケージの混乱: 古いパッケージを手動で削除するにはどうすればよいですか?

16.04 から 18.04 に切り替えた後do-release-upgrade、何かが失敗し、マシンは「中間」状態のままになり、依存関係の問題が多数発生しました。パッケージ ツリーが混乱し、絶望しています... ;-)

いろいろ試してみましたが(dpkg --configure -a、 を使ってパッケージをランダムに削除するdpkg --force depends -P <pkg-name>、その他いろいろ)、今のところ行き詰まっています。

そこで、私が試してみると:

$ sudo apt --fix-broken install
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
   (here 20 lines)
The following additional packages will be installed:
... (here 5 lines)
 Suggested packages:
 ... more
Recommended packages:
 ... more
The following packages will be REMOVED:
 ... more
The following NEW packages will be installed:
 ... more (10 lines)
28 upgraded, 6 newly installed, 1 to remove and 327 not upgraded.
228 not fully installed or removed.
Need to get 0 B/13,3 MB of archives.
After this operation, 2 771 kB of additional disk space will be used.
Do you want to continue? [Y/n] 

ここまでは、何も怖いことはありません。しかし、これからはY

Extracting templates from packages: 100%
(Reading database ... 977800 files and directories currently installed.)
Removing ubuntu-advantage-tools (27.0.2~18.04.1) ...
Traceback (most recent call last):
  File "<string>", line 2, in <module>
  File "/usr/lib/python3/dist-packages/uaclient/apt.py", line 9, in <module>
    from uaclient import gpg
  File "/usr/lib/python3/dist-packages/uaclient/gpg.py", line 3, in <module>
    import shutil
ModuleNotFoundError: No module named 'shutil'
dpkg: error processing package ubuntu-advantage-tools (--remove):
 installed ubuntu-advantage-tools package pre-removal script subprocess returned error exit status 1
Errors were encountered while processing:
 ubuntu-advantage-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)

これは Python エラーのようです。私の理解では、 が見つからないようですshutil。そこで、問題と思われるものを手動でダウンロードしました。 https://packages.ubuntu.com/bionic/python-backports-shutil-get-terminal-size 手動でインストールするには、次の操作を実行します。

sudo dpkg -i python-backports-shutil-get-terminal-size_1.0.0-5_all.deb

しかし、apt --fix-broken installもう一度やっても同じ結果になってしまいます。

私は Python に関する知識が限られているため、これが本当の問題であるかどうかはわかりませんが、どんな助けでも歓迎します。そうでなければ、次のステップはおそらく最初から再インストールすることになるでしょうが、私はそれを避けたいと思っています。

現時点では、パッケージを手動でインストールすることができます(ダウンロードからUbuntu 16.04 の最新版その後dpkg -i) ですが、それだけで、他のすべては失敗します。

たとえば、以下をインストールしようとするとlibpython3.6-stdlib:

$ sudo apt-get install libpython3.6-stdlib

次のような結果になります:

libpython3.6-stdlib : Depends: libpython3.6-minimal (= 3.6.9-1~18.04ubuntu1.4) but 3.6.13-1+xenial2 is to be installed

つまり私はまだ16.04 (Xenial) からのパッケージがあります。

手動で取り除く16.04 パッケージすべてですか?

追加情報 (マシンは現在コンソールでのみ起動します):

  • $ python --version=> Python 3.6.13
  • $ lsb_release -a利用できません
  • $ uname -aカーネルは4.15だそうです(18.04と一致しているようです)

答え1

FWIW: 重要なポイントは実はここにありました:

dpkg: error processing package ubuntu-advantage-tools (--remove):
 installed ubuntu-advantage-tools package pre-removal script subprocess returned error exit status 1

パッケージの「事前削除」スクリプトの失敗により、プロセス全体が失敗しましたubuntu-advantage-tools(それが何なのかはわかりません)。

そこで私はこうしました:

$ sudo mv /var/lib/dpkg/info/ubuntu-advantage-tools.prerm /var/lib/dpkg/info/ubuntu-advantage-tools.prerm_OLD

そしてコマンドを完了することができましたsudo apt --fix-broken install

再起動すると、別の問題(キーボードが認識されない)が発生しましたが、別の質問リカバリモードで起動した後:

$ sudo apt-get install xserver-xorg-input-all

ようやくグラフィカルに起動できるようになりましたが、パッケージ マネージャーがまだ xenial (16.04) を参照しているため、まだ問題が残っています。別の質問を投稿します。

答え2

これは非常に病んだシステムのようです。この状態から抜け出す、つまり再インストールしたほうがよいかもしれません。/homeまだ別のファイルシステムがない場合は、ホーム ディレクトリと作業に使用したすべてのものをコピーし、最初からやり直して、クリーンなシステムを再び取得してください。

また、重要な構成ファイルを救出する必要がある場合に備えて、コピーしておきます/etc(ただし、絶対に必要な場合を除いて、新しいシステムへのコピーは控えます)。

このように考えてください。このシステムは長年にわたって (16.04 なので 2016 年直後から) よく機能してきました。安らかに眠らせましょう。 ;-) 今度は、新しくてクリーンなものを導入する時です。

私は以前、新しくインストールした Ubuntu を最も使いやすい状態にするために何をするかを自分用にチェックリストにまとめました。そこから何かヒントが得られるかもしれません。https://github.com/shundhammer/huha-linux-tips/blob/master/doc/ubuntu-tips.md(一部少し古い部分があるかもしれませんが、気にしないでください)

関連情報