Как я могу вернуться из обновления в Предлагаемый репозиторий?

Я по ошибке включил репозиторий Pre-release updates (natty-предложил), а затем обновил все пакеты.

Как я могу отменить это?

Вот результаты теста из инструкций @enzotib и результаты теста из моих инструкций.

6 ответов

Решение

Вот более общий способ возврата из локально установленных пакетов, предложенных пакетов и пакетов с обратным портом в канал стабильных обновлений. Хотя остальные ответы верны и работают аналогичным образом, я думаю, что это более элегантный подход.

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

На этой странице предполагается, что закрепление Apt может использоваться для понижения версии всего хранилища, используя тот факт, что приоритеты выводов выше 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 должно быть все, что нужно для выполнения понижения.

Когда понижение версии будет завершено, используйте Software Sources, чтобы отключить хранилище предварительных обновлений (предложено natty), а затем удалите временное увеличение приоритета:

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

Наконец, перезагрузите компьютер, чтобы все запущенные программы были его устаревшими версиями.

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

Следующий скрипт, который может выполнить понижение

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

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

В случае, если у вас есть проблема с одним пакетом, вы можете вернуть этот пакет, используя метод, представленный родителем (после отключения -proposed), или вы можете использовать sudo aptitude install packagename/natty, Но что еще более важно, вы должны сообщить об ошибке в пакете. Мало кто на самом деле проверяет предложенное Natty, и если возникают регрессии (= новые проблемы), о них обязательно нужно сообщить. В противном случае они могут оказаться в обновлениях для всех пользователей Ubuntu. Так что если у вас есть какие-либо проблемы, пожалуйста, сообщите.

В Synaptic вы можете отключить хранилище для предложенных и обновить ваши источники. Затем вы увидите, что все пакеты, которые были обновлены, отображаются как локально установленные (поскольку их больше нет в репозиториях).

Теперь вам придется "понизить" эти пакеты. Выберите один за другим, и в верхнем меню выберите:

package > force version

(или Control+E)

Появится меню с доступными опциями. Я бы выбрал нижний номер версии для каждого пакета. Если вы допустили ошибку и в обычных репозиториях появилась более новая версия, она будет исправлена ​​в более позднем обновлении.

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

Я предложил предоставить функцию для понижения всех proposed пакеты с простой поддерживаемой командой, эквивалентной ppa-purge по адресу https://bugs.launchpad.net/ubuntu/+source/software-properties/+bug/1810499 поскольку сообщения, представленные здесь, все еще представляют состояние системы.

"предложено" - понятно?

Другие вопросы по тегам