適性は、多くのパッケージを削除する必要があると言います...?

適性は、多くのパッケージを削除する必要があると言います...?

私は次のLinuxディストリビューションを実行しています。

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"

入ってみるaptitudeと、私がインストールした1,425個のパッケージが使用されなくなったため、すべて削除されるというメッセージが表示されます。私が考えることができたのは、私が誤って間違ったキーを押した可能性があるということだけでしたaptitude

この問題を正しく解決するにはどうすればよいですか?

よろしくお願いします。

ポリスチレン:私の/etc/sources.listファイルと/etc/sources.list.dディレクトリは変更されていません。

ポリフェニレンスルフィド:今、私はこれが私のパッケージ全体ではなく、わずか半分であることに気づきました。しかし、通常は標準のLinuxパッケージです。

購買力の評価処置:aptitude keep-all実行時にエラー・メッセージは生成されませんが、問題は解決されません。ただし、GUIに移動してaptitudeパッケージ内のプラス記号()をクリックすると、+[次のパッケージを現在のバージョンに保つ]を選択できる[検査]ダイアログボックスに移動します。そのオプションを選択すると、パッケージは削除対象として表示されなくなります。ただし、パッケージは1,400を超えるため、すべてのパッケージに手動でタグを付けてこのダイアログボックスに移動するには時間がかかります。 1つのコマンドでこれらすべてのパッケージに対してこのようなことが起こるようにする方法はありますか?

ベストアンサー1

dpkgデータベース(in /var/lib/dpkg/status)ストレージ故意にパッケージの状態は同じ行にあります。現在の説明された状態dpkg(1)。したがって、インストールされたパッケージには、次の例のような項目があります。

# dpkg -s hello| egrep '^(Package|Status|Architecture):'
Package: hello
Status: install ok installed
Architecture: amd64

ツールを使用して削除意図を設定すると、次のように表示されます。

# dpkg -s hello| egrep '^(Package|Status|Architecture):'
Package: hello
Status: deinstall ok installed
Architecture: amd64

代わりにパッケージを削除する必要がありますpurgedeinstall

選択した他のパッケージまたはパッケージ全体の変更をトリガーする重要なパッケージを選択(削除)できます。

これを実行できるツールには、古代、dselectaptitudeレベルdpkg --set-selections、またはapt-mark。後者は使いやすいですが、まだ変更されたことを確認するために使用することはできず(上記とdeinstall比較していないためinstalled)、一度に1つの操作しか実行できないため、複数の回復に非常に遅いです。タイムズ。dpkg --set-selections1回の呼び出しでこれを行うことができるので、これは好まれます。

複数のアーキテクチャを使用すると、すべてが少し複雑になり、両方のArchitectureアーキテクチャに2回インストールされたパッケージを区別するために値を取得する必要があります。スキーマは、all実際のスキーマのないパッケージでも機能します。

cancel-changes.awk以下は、現在の状態と互換性のあるインテントを設定するスクリプトです:to fit dpkg --set-selections

#!/usr/bin/awk -f
/^Package:/ { package=$2; newintent="none" }
/^Status: (purge|deinstall) ok installed$/ { newintent="install" }
/^Status: install ok config-files$/ { newintent="deinstall" }
/^Status: install ok not-installed$/ { newintent="purge" }
/^Architecture:/ { package=package ":" $2 }
/^$/ && newintent != "none" { print package, newintent } 

実際にスクリプトを提供する前に、スクリプトの出力を確認する必要がありますdpkg --set-selections。 Debian(およびUbuntu)の将来のバージョンでは、内部フォーマットが変更される可能性があります。


これは被害者パッケージをテストするためのDebian 10の使用例ですhello

# apt-get install hello
[...]
# apt-mark remove hello
Selected hello for removal.

# dpkg -l hello
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-==================================
ri  hello          2.10-2       amd64        example package based on GNU hello

# cancel-changes.awk < /var/lib/dpkg/status
hello:amd64 install

# cancel-changes.awk < /var/lib/dpkg/status | dpkg --set-selections

# dpkg -l hello
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-==================================
ii  hello          2.10-2       amd64        example package based on GNU hello

おすすめ記事