Як я можу повернутись із оновлення до сховища, що пропонується?


23

Я помилково ввімкнув сховище попередніх випусків оновлень (запропоновано natty), а потім оновив усі пакети.

Як я можу скасувати це?

Ось результати тестування з інструкцій @ enzotib та результати тестування з моїх інструкцій .


1
Результати випробувань пастебіни мертві.
enzotib

Відповіді:


24

Ось більш загальний спосіб повернення з локально встановлених пакетів, запропонованих та підтримуваних пакетів до стабільного + оновлення каналу. Хоча інші відповіді правильні і працюють аналогічно, я вважаю, що це більш елегантний підхід.

  1. Переконайтеся , що ви видалили входження -proposedабо -backportsв ваших /etc/apt/sources.listі /etc/apt/sources.list.d/*файлах.
  2. Додайте файл налаштувань, наприклад, /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 зробить сприятливим прискорення зниження пакетів із цього каналу, а пріоритет <0 на каналах -proposedта -backportsканали також також видалить додаткові пакети.

  3. Тепер біжи

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

    Ознайомтеся із запропонованим рішенням, яке вам підходить, і якщо ви вважаєте, що це нормально, то прийміть його. Якщо вам потрібно перевірити, чому і до якої версії вона буде знижена, перевірте це, apt-cache policy packagenameщоб побачити, які версії доступні та який apt вирішує, є кандидатом на встановлення.

  4. Видаліть /etc/apt/preferences.d/99-back-to-stable-updatesфайл знову, оскільки він більше не потрібен.

Завдяки mlindфорумам Ubuntu за це натхнення на закріплення в його дописі понад 5 років тому - але це мені сьогодні допомогло досить добре.


Я думаю, він повинен працювати і з debian. На жаль, це нічого не робить для мене: /
Майкл

@Michael 1) Debian не має концепції офіційних сховищ. 2) Цей сайт стосується Ubuntu, а не Debian. Я хотів би запропонувати вам , щоб задати новий питання про Unix.SE .
gertvdijk

Це рішення також працювало з 'xenial' версією! (звичайно після заміни точного на xenial у файлі) Дякую!
morhook

4

Ця сторінка говорить про те, що пришпилення Apt можна використовувати для поновлення з цілого сховища, використовуючи той факт, що пріоритети PIN-кодів вище 1000 можуть спричинити пониження пакету .

Одне рішення може бути тимчасовим збільшенням на 1000 пріоритетів за замовчуванням для всіх файлів пакетів, за винятком файлів із natty-proposedсховища:

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) та видаліть тимчасове збільшення пріоритету:

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

Нарешті, перезавантажте так, щоб усі запущені програми були їх зниженими версіями.


1
Цікаве рішення, мабуть, найкраще та загальне, ніж моє. До речі, кількість знижених пакетів однакова, що підтверджує правильність обох підходів.
enzotib

2

Я не можу знайти більш простого рішення, ніж наступне. Та все ж сподіваючись, що хтось увійде з кращою відповіддю.

Наступний скрипт, який може виконати оновлення

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

awkСценарій, названий get-prev-pkg-versніжеследовал

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

Під час запуску сценарію запропонований репо НЕ повинен був ще бути відключений.

Не забудьте встановити виконуваний біт для обох сценаріїв.

Проблема такого підходу полягає в тому, що всі зменшені пакети будуть встановлені вручну (також ті, які були встановлені автоматично).

Щоб бути безпечним, додайте --simulateопцію до apt-getкінця скрипту bash.


2

Повернення всіх пакетів із запропонованих natty-програм, мабуть, не потрібно: більшість пакетів незабаром буде оновлено до тих же версій через natty-оновлення.

Якщо у вас є проблема з одним пакетом, ви можете повернути цей пакет, використовуючи метод darent, який подається (після відключення - запропоновано), або ви можете використовувати sudo aptitude install packagename/natty. Але що ще важливіше, ви повинні подати помилку на пакет. Мало хто насправді випробовує запропоновану натуральність, і якщо трапляються регресії (= нові проблеми), про них обов'язково потрібно повідомити. Інакше вони можуть опинитися в оновленнях для всіх користувачів ubuntu. Тож якщо у вас є якісь проблеми, повідомте про це.


1

У синаптичному відношенні ви можете відключити сховище для запропонованих і оновити свої джерела. Тоді ви побачите, що всі пакунки, ніж оновлені, відображаються як локально встановлені (оскільки вони вже не є репост).

Тепер вам доведеться "знизити" ці пакунки. Виберіть по черзі, а у верхньому меню вибрали:

package > force version

(або Control + E)

З'явиться меню з доступними параметрами. Я вибрав би нижчий номер версії для кожного пакета. Якщо ви помилитесь і в звичайних репостах є нова версія, вона буде вирішена в подальшому оновлення.

Швидким рішенням буде використання команди purge-ppa, що вказує на перенесений сховище, але не знаю, чи буде це працювати з ними, я використовував його лише для очищення зовнішніх пакетів ppa та поновлення пакетів до офіційних версій ubuntu. Я не рекомендую вам це робити в цьому випадку, можливо, хтось знає, чи це безпечний метод ...


Останній абзац - лише міркування, і тому він повинен бути коментарем до питання або дослідженим належним чином.
Карл Ріхтер

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.