Debian はパッケージを現在ダウンロード可能なバージョンに一括ダウングレードします。

Debian はパッケージを現在ダウンロード可能なバージョンに一括ダウングレードします。

一部の Debian リポジトリでは、「改良された」パッケージがたくさんあります。これでリポジトリを無効にしたので、/etc/apt/sources.list.d利用可能なすべてのパッケージに「改善された」すべてのパッケージを再インストールしたいと思います。 grepではパッケージのリストをうまく得ることができますが、

apt-get install --reinstall \
  $(dpkg-query -Wf '${Version}\t${Package}\n' | grep SOMEREPO | awk '{print $2}' )

そのパッケージをダウンロードできないことを報告します。もちろん、現在のバージョンでは不可能です。--reinstall --downgrade拒絶されるapt。ダウングレードする唯一の方法は、特定のバージョンの名前を指定することです(作成するにははるかに面倒なスクリプトが必要です)。一括バッグ)。

私が見落としたことはありますか?たぶん資格はそれを行うことができますか?

修正する:通過できることを知っています決定した(本当にありがとう、モード!)しかし、実際には解決策ではありません。とても大変で、私は気にしません。ダウングレードの具体的な情報源について。現在アクティブなソースから利用可能なバージョンにダウングレードしたいです。

アップデート2:Debian派生製品(MX Linux)を使用しているので、ダウングレードは以下から可能です。

  • Debian スポイラー
  • buster-backports
  • ディストリビューションhttps://mirrors.*/mx/MX-Packages/mx/repo/

答え1

ピンの優先順位は、/etc/apt/preferencesまたは以下の新しいファイルに追加することです/etc/apt/preferences.d

Package: *
Pin: release a=*
Pin-Priority: 1001

apt upgradeダウングレードを意味しても、既知のインストール済みパッケージの最新バージョンをインストールします。aptその後、現在設定されているリポジトリのパッケージのみが知られているので、目的のapt update効果を得ることができます。

答え2

これが私が思いついたものです:

apt install $(apt-show-versions | grep newer | awk '{print $1}' | while read pkg; do ver="$(apt-cache madison "$pkg" | head -n1 | awk -F'|' '{gsub("\\s", "", $2); print $2}')"; printf "%s=%s\n" "$pkg" "$ver"; done)

仕組みは次のとおりです。

  1. apt-show-versions | grep newer | awk '{print $1}'ダウングレードする必要があるパッケージのリストを決定するために使用されます。

    host ~ # apt-show-versions|grep newer
    libapache2-mod-php:all 2:8.3+94+0~20240205.51+debian11~1.gbp6faa2e newer than version in archive
    libapache2-mod-php8.2:amd64 8.2.18-1+0~20240411.52+debian11~1.gbp91aa2d newer than version in archive
    [...]
    
  2. 各パッケージの最新バージョンを確認するにはapt-cache madison(解析が簡単な選択肢のようです)を使用してください。apt-cache policy

    host ~ # apt-cache madison libapache2-mod-php    
    libapache2-mod-php | 2:8.2+93~iservbpo11+1 | https://update.iserv.eu/debian bullseye-stable/main amd64 Packages
    libapache2-mod-php |   2:7.4+76 | http://deb.debian.org/debian bullseye/main amd64 Packages
    
  3. pkg=verAPTにこの特定のバージョンのパッケージをインストールするように指示する各パッケージの文字列を構成し、これらのすべての文字列libapache2-mod-php=2:8.2+93~iservbpo11+1apt install

答え3

後で参照できるようにあなたの言う通りに、Debian部門...強烈なスクリプトの後:

ps=$(for p in $(dpkg-query -Wf '${Version}\t${Package}\n' | grep REPO | awk '{print $2}'); do
  apt --quiet list $p | grep -v /now | grep / | awk '{print $1}' | head -1
done)
# this still leaves some /oldstable,oldstable broken versions
apt install --reinstall $(echo "$ps" | cut -f1 -d,)

お勧めしません。システムが簡単な作業を妨げると迷惑です。

関連情報