web-dev-qa-db-ja.com

提案されたリポジトリへのアップグレードから元に戻すにはどうすればよいですか?

誤ってプレリリースアップデート(natty-proposed)リポジトリを有効にしてから、すべてのパッケージをアップグレードしました。

どうすれば元に戻すことができますか?

テスト結果 from @ enzotib's instructionsテスト結果 from my instructions です。

24
ændrük

ローカルにインストールされたパッケージ、提案されたパッケージ、およびバックポートされたパッケージからstable + updatesチャネルに戻すより一般的な方法を次に示します。他の答えは正しく、同様の方法で機能しますが、これはよりエレガントなアプローチだと思います。

  1. -proposedおよび-backportsファイルの/etc/apt/sources.listまたは/etc/apt/sources.list.d/*のエントリを削除したことを確認してください。
  2. Apt-preferencesファイルを追加します。 /etc/apt/preferences.d/99-back-to-stable-updatesを含む(preciseの場合-ここでバージョンに置き換えてください):

    Package: *
    Pin: release a=precise
    Pin-Priority: 1001
    
    Package: *
    Pin: release a=precise-updates
    Pin-Priority: 1001
    
    Package: *
    Pin: release a=precise-security
    Pin-Priority: 1001
    
    Package: *
    Pin: release a=precise-proposed
    Pin-Priority: -10
    
    Package: *
    Pin: release a=precise-backports
    Pin-Priority: -10
    

    この1000以上の固定により、aptはそのチャネルからのパッケージを強制的にダウングレードし、-proposedおよび-backportsチャネルの優先度<0により、追加のパッケージも削除されます。

  3. 今すぐ実行

    Sudo apt-get update
    Sudo apt-get dist-upgrade
    

    Aptが提案するソリューションを調べて、問題ないと思われる場合は受け入れてください。ダウングレードの理由とバージョンを確認する必要がある場合は、apt-cache policy packagenameを使用してこれを確認し、使用可能なバージョンと、aptがインストールの候補と決定したものを確認してください。

  4. 不要になったため、/etc/apt/preferences.d/99-back-to-stable-updatesファイルを再度削除します。

彼の投稿 5年以上前からのピン留めに関するこの告発について、Ubuntuフォーラムのmlindに感謝します-それでも、今日はかなり助けになりました。

24
gertvdijk

このページ は、 ピンの優先順位が1000を超えるとパッケージのダウングレードが発生する可能性がある という事実を活用して、Aptピンニングを使用してリポジトリ全体からダウングレードできることを示唆しています。

1つの解決策は、natty-proposedリポジトリからのものを除くすべてのパッケージファイルのデフォルトの優先順位を一時的に1000ずつ増やすことです。

apt-cache policy | awk '
    /^ [0-9]+ / {
        p = $1;
        getline;
        r = $0;
        if (r !~ /a=natty-proposed/) p += 1000;
        print "Package: *\nPin: " r "\nPin-priority: " p "\n"
    }
' | Sudo tee /etc/apt/preferences.d/downgrade-from-natty-proposed

(注:このメソッド 優先度を上げることができません リリースフィールドにコンマが含まれるパッケージファイル。= この質問 を参照してください。)

これを行った後、apt-get --simulate upgradeを使用して、正常なダウングレード検出をテストできます。正しいダウングレードが検出されたことを確認したら、ダウングレードの実行に必要なのはSudo apt-get upgradeだけです。

ダウングレードが完了したら、ソフトウェアソースを使用してプレリリースアップデート(natty-proposed)リポジトリを無効にし、一時的な優先度の増加を削除します。

Sudo rm /etc/apt/preferences.d/downgrade-from-natty-proposed

最後に、実行中のすべてのプログラムがダウングレードバージョンになるように再起動します。

4
ændrük

以下よりも簡単な解決策は見つかりません。しかし、誰かがより良い答えを得るのを望んでいます。

ダウングレードを実行できる次のスクリプト

#!/bin/bash

# get a list of installed packages
dpkg --get-selections | awk '{ print $1 }' > all-packages

# run apt-cache policy on each of them, then elaborate with the awk script 
apt-cache policy $(<all-packages) |
  ./get-prev-pkg-vers >old-versions

# install previous version of packages
Sudo apt-get --simulate install $(< old-versions)

get-prev-pkg-versという名前のawkスクリプトは次のとおりです。

#!/usr/bin/awk -f

/^[^ ]/ {
    package = $1
    gsub(":", "", package)
    search_next = 0
}
/^     [^ ]/ {
    installed = 0
    version = $1
    if (search_next == 1) {
        print package "=" version
        search_next = 0
    }
}
/^ \*\*\* [^ ]/ {
    installed = 1
}
/^        [^ ]/ {
    branch = $3
    if (installed == 1 && branch ~ /proposed/) {
        search_next = 1
    }
    installed = 0
}

スクリプトを実行するとき、proposedリポジトリはまだ無効になっていないはずです。

両方のスクリプトで実行可能ビットを設定することを忘れないでください。

このアプローチの問題は、すべてのダウングレードされたパッケージが手動でインストールされたものになることです(また、自動インストールされたパッケージも)。

安全のために、bashスクリプトの最後で--simulateオプションをapt-getに追加します。

2
enzotib

Natty-proposedからすべてのパッケージを元に戻す必要はおそらくありません。ほとんどのパッケージは、いずれにしてもnatty-updatesを介してすぐに同じバージョンに更新されます。

1つのパッケージに問題がある場合は、(-proposedを無効にした後)darent presentsメソッドを使用してその1つのパッケージを元に戻すか、Sudo aptitude install packagename/nattyを使用できます。しかし、もっと重要なのは、パッケージに対してバグを報告することです。実際に素朴な提案をテストする人はほとんどいないため、リグレッション(新しい問題)が発生した場合は必ず報告する必要があります。そうしないと、すべてのubuntuユーザーの更新で終わる可能性があります。そのため、問題がある場合は報告してください。

2
johanvdw

Synapticでは、提案されたソースのリポジトリを無効にして、ソースを更新できます。次に、更新されたすべてのパッケージがローカルにインストールされているように表示されます(これらのパッケージはリポジトリにないため)。

次に、これらのパッケージを「ダウングレード」する必要があります。 1つずつ選択し、上部のメニューで次を選択します。

package > force version

(またはControl + E)

使用可能なオプションを含むメニューが表示されます。各パッケージに低いバージョン番号を選択します。間違いを犯し、通常のレポジトリに新しいバージョンがある場合は、後のアップデートで解決されます。

簡単な解決策は、popositedリポジトリを指すpurge-ppaコマンドを使用することですが、それが動作するかどうかはわかりません。外部ppaのパージとパッケージの公式ubuntuバージョンへのダウングレードにのみ使用しました。この場合、これを行うことはお勧めしません。誰かがそれが安全な方法かどうかを知っているかもしれません...

1
0
Karl Richter