Ubuntuで破損したapt-getを修正する方法は?

Ubuntuで破損したapt-getを修正する方法は?

以前は、python3を特別なコマンドなしで/ usr / bin / python(今は間違ったことに気づきました)に接続して更新しようとしたので、Pythonで何かが破損している可能性があると思います。

システムからapt-getアップデートまたはapt-getコマンドを取得できなくなりました。

これはapt-getアップデートの結果です。

Hit:1 http://archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:3 https://packages.microsoft.com/repos/azure-cli bionic InRelease
Hit:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease
Hit:5 http://security.ubuntu.com/ubuntu bionic-security InRelease
Hit:6 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic InRelease
Hit:7 https://apt.releases.hashicorp.com bionic InRelease
Traceback (most recent call last):
  File "/usr/lib/cnf-update-db", line 8, in <module>
    from CommandNotFound.db.creator import DbCreator
  File "/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py", line 11, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Reading package lists... Done
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
E: Sub-process returned an error code

Pythonpathを変更することもできます。

~$ sudo apt --fix-broken install python
Reading package lists... Done
Building dependency tree
Reading state information... Done
python is already the newest version (2.7.15~rc1-1).
0 upgraded, 0 newly installed, 0 to remove and 182 not upgraded.

今私のPythonリンクは次のようになります。

~$ ls -al /usr/bin/python
lrwxrwxrwx 1 root root 18 Apr  1 10:30 /usr/bin/python -> /usr/bin/python2.7

そして、python3は/usr/bin/pythonに接続されなくなりました。

~$ ls -al /usr/bin/python3
lrwxrwxrwx 1 root root 18 Mar  1 21:22 /usr/bin/python3 -> /usr/bin/python3.8

ここでは、更新の代替案を使用していくつかの進歩が行われました。

update-alternatives --list python
/usr/bin/python2.7
/usr/bin/python3.8


sudo update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /usr/bin/python3.8   2         auto mode
* 1            /usr/bin/python2.7   1         manual mode
  2            /usr/bin/python3.8   2         manual mode

python3.8に保持するか、python2.7に切り替えるか(update-alternatives --config pythonを使用)、apt-getから同じ出力を取得します。

この問題を解決する方法について理論がある人はいますか? Pythonの代替を2.7に設定したにもかかわらず、Python3を指しています。 update-conf-dbに問題があるようです。

ベストアンサー1

発生するエラーはapt直接発生するのではなく、特にcommand-not-foundシステムに存在しないコマンドを実行しようとしたときにインストールするパッケージを知らせるヘルパープログラムの更新によって発生します。apt updateそれ自体が正常に完了しました。

エラーを防ぐには、フックを無効にしてください。

sudo mv /etc/apt/apt.conf.d/50command-not-found{,.disabled}

apt updateこれでエラーなく実行できます。他のフックが失敗した場合は、上記と同じ技術を使用して無効にすることができます(参照Debian Buster arm64 apt はエラーメッセージを返しますが、パッケージのインストールは引き続き機能します。)。

update-cnf-dbPython 3スクリプトなので、Python 3設定も破損する可能性があります。この問題を解決する方法を決定するには、追加情報が必要です。/usr/bin/python3UbuntuのPython 3バージョンを指定する必要があります。

機能したら、update-cnf-db上記のコマンドを逆に実行してフックを再び有効にできます。

sudo mv /etc/apt/apt.conf.d/50command-not-found{.disabled,}

おすすめ記事