Downgrading packages (Русский)
Ссылки по теме
В этом руководстве описывается процесс отката установленного пакета к его предыдущей версии. Откат версии пакета не рекомендуется и применяется в том случае, когда в текущем пакете обнаружена ошибка.
Прежде чем откатить пакет, подумайте, нужно ли это делать. Если необходимость отката вызвана ошибками, пожалуйста, помогите сообществу Arch и разработчикам этого ПО, потратьте несколько минут на составление отчета об ошибке и отправке его в трекер ошибок Arch или на сайт самого проекта. В связи с безрелизной моделью развития Arch при продолжительном его использовании, Вы, возможно, периодически будете сталкиваться с ошибками в новых пакетах. Наше сообщество и разработчики ПО будут признательны Вам за приложенные усилия. Дополнительная информация может не только спасти нас от часов тестирования и отладки, но также позволит повысить стабильность программного обеспечения.
Contents
Причины
Процесс отката (понижения) версии пакета заключается в удалении текущей версии пакета и установке вместо нее предыдущей. Откат может выполняться как до предыдущей версии, так и до любой доступной.
Причины понижения версии (среди прочих) могут быть следующие: ошибка в текущей версии, отсутствие требуемой функциональности или установка пакета с целью эксперимента. В любом из этих случаев пользователю, возможно, будет менее проблематично вернуться к старой версии пакета, чем ожидать нового релиза..
Откат версии одного пакета может повлечь за собой необходимость понижения версий других пакетов. При наличии большого количества экспериментальных и тестовых пакетов, а также отредактированных конфигурационных файлов полная переустановка системы может оказаться предпочтительнее откату версий.
Подробности
Тем не менее, пользователю нужно учесть следующие моменты:
- Во-первых, понадобится решить вопрос с зависимостями каждой из программ. Необходимые библиотеки могут изменяться с каждой новой версией, функционально связанные с ними файлы, также могут полностью отличаться от предыдущих. Поэтому, возможно, потребуется их замена на более ранние версии.
- Во-вторых, в случае удаления необходимых версий пакетов из системы, необходимо убедиться, в их доступности из другого источника. Это связано с безрелизной моделью развития системы Arch Linux, репозитории автоматически обновляются без сохранения старых версий пакетов. Подробнее об этой проблеме ниже.
- В-третьих, следует соблюдать осторожность при внесении изменений в конфигурационные файлы и сценарии. На данный момент, во избежание возможных проблем, лучше использовать pacman, хотя и он имеет некоторые ограничения.
Сейчас находится в разработке концепция Машины Отката Arch (Arch Rollback Machine) и при готовности она будет включена в стандартные средства pacman. Как только это произойдет, процесс станет автоматизированным.
А пока следуйте данным инструкциям.
Инструкция по откату пакетов
- В: Я только что выполнил
pacman -Syu
и пакет XYZ с версии М был обновлен до версии N. Обновление пакета вызывает проблемы на моем компьютере, как я могу откатить версию N к старой версии M? - О: Версию пакета можно понизить элементарно, для этого найдите старую версию нужного пакета в директории
/var/cache/pacman/pkg
(если ранее не запускалиpacman -Scc
, то нужный пакет будет там). Если пакет есть, то его можно установить, выполнивpacman -U /var/cache/pacman/pkg/pkgname-olderpkgver.pkg.tar.gz
. Если нужный пакет был скачан вручную, то понадобится указать полный путь к пакету.
Эта команда удалит существующий пакет, проверив при этом все изменяющиеся зависимости, и установит более старую версию пакета.
В AUR доступен пакет под названием downgradeAUR. Это простой скрипт на Bash, который ищет в кэше старые версии пакета. Если пакет не будет найден, то он может искать в A.R.M.. Затем понадобится выбрать пакет для установки. Здесь описаны основные возможности пакета по автоматизации процесса. Для получения дополнительной информации выполните: downgrade --help
.
Также для отката пакетов вы можете воспользоваться программой downgraderAUR - это мощная программа, написанная на C++, работает с логами pacman, кэшем пакетов и ARM. Она поможет откатить пакет к предыдущей версии по данным из логов, сама найдет, скачает и установит нужный пакет. Также она умеет работать с несколькими пакетами одновременно, например, если система стала нестабильна после большого обновления. Для получения дополнительной информации обратитесь к этой теме форума.
Поиск старых версий
Существует три способа поиска.
Зеркала Out-Of-Sync
При отсутствии старых версий пакетов, нужно проверить, не синхронизировалось ли одно из зеркал, и получить пакет оттуда. Нажмите здесь, чтобы посмотреть статус зеркал.
Также нужные пакеты можно поискать на этом зеркале:
ARM
Arch Rollback Machine (ARM) содержит архив снимков (snapshots) всех репозиториев, начиная с 1 ноября 2009. Содержимое сайта постоянно изменяется, поэтому если вы заинтересованы в ARM, то лучше регулярно просмотривать объявления и обсуждения на форуме, чтобы быть в курсе текущего состояния проекта. Последние обсуждения на форуме можно почитать здесь.
URL-адреса задуманы таким образом, чтоб при помощи скриптов wget+pacman было максимально просто "откатить" систему до определенной даты. Автоматизация процесса пока не объяснена. Для упрощения ручного поиска отдельного пакета можно использовать страницу поиска, расположенную в ARM Search.
Re-компиляция пакетов
В худшем случае, если пакет не найден в другом месте, вам придется самостоятельно собирать себе старую версию. Для этого нужен файл PKGBUILD, можно для изменения взять существующий PKGBUILD из ABS или найти нужный пакет на https://www.archlinux.org/packages/. После того, как вы его нашли, нажмите кнопку "Открыть логи SVN" и выберите "Просмотр журнала". Найдите нужный вариант и нажмите на ссылку. Далее просто скачайте файлы, расположенные в этом каталоге, и создайте пакет с помощью с makepkg.
Дополнительная информация
Изменение основных настроек менеджера пакетов pacman осуществляется с помощью редактирования файла pacman.conf
, для редактироваия файла понадобятся права root. Для правки файла следует набрать в командной строке
nano /etc/pacman.conf
(Конечно можно редактировать файл и с помощью графических утилит, например Shaman, но чаще намного быстрее и безопаснее выполнять такие действия из командной строки.)
Достаточно просто изменить адреса репозиториев, в которых pacman осуществляет поиск программ. Для скрытия от pacman и системы управления пакетами определенного репозитория нужно в начало строки репозитория, добавить знак фунта (#).
Например, для добавления репозитория с ARM, нужно закомментировать старую строку, и добавить новую с соответствующими путями, формат:
[core] #Server=http://mirrors.gigenet.com/archlinux/core/os/i686 Server=http://arm.konnichi.com/2009/11/01/core/os/i686
В этом примере, дата в имени раздела указывает на то, что в нем расположены все пакеты, которые были доступны на 1 ноября 2009 года. Обратите внимание, что все репозитории являются снимками (snapshots) официального репозитория. Далее нужно разместить зеркало ARM в самом верху /etc/pacman.d/mirrorlist
. Так для синхронизации всех официальных репозиториев ARM, перечисленных в /etc/pacman.conf
, нужно выбрать на зеркале http://arm.konnichi.com/2009/11/01/, например, $repo/os/i686, и выполнить:
pacman -Syy # получить список пакетов pacman -Suu # откатить все пакеты до версии в репозитории
Но все это не гарантирует полностью автоматического отката, так как иногда имеющаяся версия пакета не совпадает с требующейся. В таком случае можно поискать нужную версию пакета на глобальном зеркале, например http://arm.konnichi.com/core/os/i686, обратите внимание на отсутствие даты в пути.
Для получения дополнительной информации изучите pacman (Русский).
Я не могу откатить пакет из-за зависимостей.
При обновлении или удалении с помощью pacman -Ud pkgpkgname-olderpkgver.pkg.tar.gz
, можно игнорировать зависимости, но учитывайте, что в дальнейшем это может привести к проблемам в системе.
Как я могу запретить pacman обновлять некоторые пакеты?
Добавить название пакета в строку "IgnorePkg" файла /etc/pacman.conf
.
IgnorePkg = package1 package2 ...
в pacman.conf
запретит pacman, при выполнении --sysupgrade
, устанавливать обновления для выбранных пакетов.
Я хочу вернуться ко вчерашнему состоянию своей системы.
Легко осуществимо при использовании механизма периодических снимков (snapshots) LVM.