Jak mogę wrócić z aktualizacji do proponowanego repozytorium?

Odpowiedzi:

24

Oto bardziej ogólny sposób na przywrócenie pakietów zainstalowanych lokalnie, proponowanych i pakietów backports do kanału stabilnego + aktualizacje. Podczas gdy pozostałe odpowiedzi są poprawne i działają w podobny sposób, myślę, że jest to bardziej eleganckie podejście.

  1. Upewnij się, że usunięte wpisy -proposedlub -backportsw swoim /etc/apt/sources.listand /etc/apt/sources.list.d/*plików.
  2. Dodaj plik apt-preferencji, np. /etc/apt/preferences.d/99-back-to-stable-updatesZawierający ( precisetutaj - zamień na swoją wersję):

    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
    

    To przypięcie> 1000 spowoduje, że apt wymusi obniżenie poziomu pakietów z tego kanału, a priorytet <0 na kanałach -proposedi -backportsspowoduje usunięcie również wszystkich dodatkowych pakietów.

  3. Teraz biegnij

    sudo apt-get update
    sudo apt-get dist-upgrade
    

    Sprawdź proponowane rozwiązanie, które Ci da, a jeśli uważasz, że jest w porządku, zaakceptuj je. Jeśli chcesz sprawdzić, dlaczego i do jakiej wersji zostanie obniżona, sprawdź to za pomocą, apt-cache policy packagenameaby zobaczyć, jakie wersje są dostępne i co decyduje o tym, czy jest to kandydat do instalacji.

  4. Usuń /etc/apt/preferences.d/99-back-to-stable-updatesplik ponownie, ponieważ nie jest już potrzebny.

Dzięki mlindna forach Ubuntu za tę inspirację dotyczącą przypinania w swoim poście sprzed ponad 5 lat - ale pomogło mi to dzisiaj całkiem dobrze.

gertvdijk
źródło
Przypuszczam, że powinno to również działać z Debianem. Niestety nic mi to nie robi: /
Michael
@Michael 1) Debian nie ma koncepcji proponowanych oficjalnych repozytoriów. 2) Ta strona dotyczy Ubuntu, a nie Debiana. Sugeruję ci zadać nowe pytanie na Unix.SE .
gertvdijk
To rozwiązanie działało również z wersją „xenial”! (po zastąpieniu precyzji xenialem w pliku, oczywiście) Wielkie dzięki!
morhook
4

Ta strona sugeruje, że przypinanie Apt może być użyte do obniżenia wersji z całego repozytorium poprzez wykorzystanie faktu, że priorytety przypinania wyższe niż 1000 mogą spowodować obniżenie pakietu .

Jednym z rozwiązań może być tymczasowe zwiększenie o 1000 domyślnych priorytetów wszystkich plików pakietów oprócz tych z natty-proposedrepozytorium:

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

(Uwaga: ta metoda nie zwiększa priorytetu plików pakietów, których pola wydania zawierają przecinki. Zobacz to pytanie .)

Po wykonaniu tej czynności apt-get --simulate upgrademożna użyć do przetestowania skutecznego wykrywania obniżenia wersji. Po potwierdzeniu, że wykryto prawidłowe obniżki, sudo apt-get upgradepowinno wystarczyć do przeprowadzenia obniżenia.

Po zakończeniu obniżania wersji użyj źródeł oprogramowania, aby wyłączyć repozytorium aktualizacji przedpremierowych (proponowane przez natty) , a następnie usuń tymczasowe zwiększenie priorytetu:

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

Na koniec zrestartuj komputer, aby wszystkie działające programy były ich starszymi wersjami.

ændrük
źródło
1
Ciekawe rozwiązanie, prawdopodobnie najlepsze i bardziej ogólne niż moje. Nawiasem mówiąc, liczba obniżonych pakietów jest taka sama, co potwierdza poprawność obu podejść.
enzotib
2

Nie mogę znaleźć prostszego rozwiązania niż poniższe. Ale mając nadzieję, że ktoś dostanie lepszą odpowiedź.

Poniższy skrypt, który może wykonać obniżenie wersji

#!/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)

awkScenariusz, nazwany get-prev-pkg-versjest następująca

#!/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
}

Podczas uruchamiania skryptu proponowane repozytorium NIE powinno być jeszcze wyłączone.

Pamiętaj, aby ustawić bit wykonywalny na obu skryptach.

Problem z tym podejściem polega na tym, że wszystkie obniżone pakiety zostaną zainstalowane ręcznie (także te, które zostały zainstalowane automatycznie).

Aby być bezpiecznym, dodaj --simulateopcję apt-getna końcu skryptu bash.

enzotib
źródło
2

Cofnięcie wszystkich pakietów z proponowanej przez natty prawdopodobnie nie jest potrzebne: większość pakietów zostanie wkrótce zaktualizowana do tych samych wersji poprzez natty-updates.

Jeśli masz problem z jednym pakietem, możesz przywrócić ten pakiet, korzystając z metody prezentowanej przez rodziców (po wyłączeniu -proposed), lub możesz użyć sudo aptitude install packagename/natty. Co ważniejsze, powinieneś zgłosić błąd w pakiecie. Niewiele osób faktycznie testuje proponowane przez natty, a jeśli wystąpią regresje (= nowe problemy), to z pewnością należy je zgłosić. W przeciwnym razie mogą skończyć w aktualizacjach dla wszystkich użytkowników ubuntu. Więc jeśli masz jakieś problemy, zgłoś się.

johanvdw
źródło
1

W Synaptic możesz wyłączyć repozytorium proponowanych i zaktualizować źródła. Wtedy zobaczysz, że wszystkie pakiety, które zostały zaktualizowane, pojawiają się jako zainstalowane lokalnie (ponieważ nie są już w repozytoriach).

Teraz będziesz musiał „obniżyć” te pakiety. Wybierz jeden po drugim, aw górnym menu wybierz:

package > force version

(lub Control + E)

Pojawi się menu z dostępnymi opcjami. Wybrałbym niższy numer wersji dla każdego pakietu. Jeśli popełnisz błąd i w normalnych repozytoriach pojawi się nowsza wersja, problem zostanie rozwiązany w późniejszej aktualizacji.

Szybkim rozwiązaniem byłoby użycie polecenia purge-ppa wskazującego na poranowane repozytorium, ale nie wiem, czy to by z nimi działało, użyłem go tylko do wyczyszczenia zewnętrznych ppa i obniżenia pakietów do oficjalnych wersji ubuntu. W tym przypadku nie zalecę ci tego, może ktoś wie, czy jest to bezpieczna metoda ...

Animaletdesequia
źródło
Ostatni akapit jest jedynie spekulacją i dlatego powinien być komentarzem do pytania lub odpowiednio zbadany.
Karl Richter