誤って「apt install *」を実行すると、すべてのパッケージが「手動でインストール」としてマークされます

誤って「apt install *」を実行すると、すべてのパッケージが「手動でインストール」としてマークされます

誤って を実行しましたapt install '*'。競合 (エディターの複数のバージョンなど) により何もインストールされませんでしたがvim、インストールされたすべてのパッケージの「自動」プロパティが失われ、APT の自動依存関係チェックを利用できなくなりました。つまり、 を削除するとvim、apt は を削除するように要求しなくなりますvim-runtime。Advanced Packaging Tool の簡易バージョンを使用しているため、 は使用できません。他のパッケージに依存しているパッケージのプロパティ apt-markを復元するにはどうすればよいですか?automatic

注: apt、、、apt-getおよびapt-cacheが利用可能apt-configですapt-key

答え1

Debian および派生版では、手動インストールと自動インストールに関する情報は に保存されます/var/lib/apt/extended_states。自動バックアップやログはありません。そのファイルのバックアップがある場合は、それを復元してください。

バックアップがない場合は、まず作成して、作成し直してください。次に、各パッケージについて、行をAuto-Installed: 0に変更してAuto-Installed: 1、パッケージが手動でインストールされたものとしてマークします。

APT 自体はインストールされたパッケージの依存関係を追跡しません。これは dpkg によって行われます。情報は/var/lib/dpkg/statusDebian にあります。Aptitude には依存関係を操作できる高度な検索機能がありますが、apt にはありません。 のアドホック解析を行うことができます/var/lib/dpkg/status。次のスクリプト (最小限のテスト済み) は、インストールされたパッケージが依存するパッケージのリストを生成します。

</var/lib/dpkg/status awk '
    /^Package:/ {package=$2}
    /^Status:/ && $4 != "installed" {package=""}
    /^(Depends|Pre-Depends|Recommends|Suggests):/ && package != "" {
        sub(/^[^:]*: */, "");
        gsub(/ (\([^()]*\))/, "");
        split($0, dependencies, /[|, ]+/);
        for (d in dependencies) print dependencies[d]}
' | sort -u >dependencies.txt

そのリストを確認し、依存関係にあるが、それでも残しておきたいパッケージの行をいくつか削除します。次に、これを使用して調整します/var/lib/apt/extended_states

</var/lib/apt/extended_states awk '
    BEGIN {
        while (getline <"dependencies.txt") auto[$0]=1;
        RS="";
    }
    $2 in auto {sub(/\nAuto-Installed: 0/, "\nAuto-Installed: 1")}
    {print $0 "\n"}
' >extended_states.new

出力ファイルを確認し、満足できる場合は適切な場所に移動します。

関連情報