# Downgrading packages (Русский)

Ссылки по теме

- Arch Build System (Русский)
- pacman (Русский)
- LVM (Русский)

В этом руководстве описывается процесс отката установленного пакета к его предыдущей версии. Откат версии пакета не рекомендуется и применяется в том случае, когда в текущем пакете обнаружена ошибка.

Прежде чем откатить пакет, подумайте, нужно ли это делать. Если необходимость отката вызвана ошибками, пожалуйста, помогите сообществу Arch и разработчикам этого ПО, потратьте несколько минут на составление отчета об ошибке и отправке его в трекер ошибок Arch или на сайт самого проекта. В связи с безрелизной моделью развития Arch при продолжительном его использовании, Вы, возможно, периодически будете сталкиваться с ошибками в новых пакетах. Наше сообщество и разработчики ПО будут признательны Вам за приложенные усилия. Дополнительная информация может не только спасти нас от часов тестирования и отладки, но также позволит повысить стабильность программного обеспечения.

## Причины

Процесс отката (понижения) версии пакета заключается в удалении текущей версии пакета и установке вместо нее предыдущей. Откат может выполняться как до предыдущей версии, так и до любой доступной.

Причины понижения версии (среди прочих) могут быть следующие: ошибка в текущей версии, отсутствие требуемой функциональности или установка пакета с целью эксперимента. В любом из этих случаев пользователю, возможно, будет менее проблематично вернуться к старой версии пакета, чем ожидать нового релиза..

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

## Подробности

Тем не менее, пользователю нужно учесть следующие моменты:

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

- Во-вторых, в случае удаления необходимых версий пакетов из системы, необходимо убедиться, в их доступности из другого источника. Это связано с безрелизной моделью развития системы 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 доступен пакет под названием downgrade. Это простой скрипт на Bash, который ищет в кэше старые версии пакета. Если пакет не будет найден, то он может искать в A.R.M.. Затем понадобится выбрать пакет для установки. Здесь описаны основные возможности пакета по автоматизации процесса. Для получения дополнительной информации выполните: `downgrade --help`.

Также для отката пакетов вы можете воспользоваться программой downgrader - это мощная программа, написанная на C++, работает с логами pacman, кэшем пакетов и ARM. Она поможет откатить пакет к предыдущей версии по данным из логов, сама найдет, скачает и установит нужный пакет. Также она умеет работать с несколькими пакетами одновременно, например, если система стала нестабильна после большого обновления. Для получения дополнительной информации обратитесь к этой теме форума.

## Поиск старых версий

Существует три способа поиска.

#### Зеркала Out-Of-Sync

При отсутствии старых версий пакетов, нужно проверить, не синхронизировалось ли одно из зеркал, и получить пакет оттуда. Нажмите здесь, чтобы посмотреть статус зеркал.

Также нужные пакеты можно поискать на этом зеркале:

- http://schlunix.org/?page_id=11

#### 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 (Русский).

#### Q: Я не могу откатить пакет из-за зависимостей.

A: При обновлении или удалении с помощью `pacman -Ud pkgpkgname-olderpkgver.pkg.tar.gz`, можно игнорировать зависимости, но учитывайте, что в дальнейшем это может привести к проблемам в системе.

#### Q: Как я могу запретить pacman обновлять некоторые пакеты?

A: Добавить название пакета в строку "IgnorePkg" файла `/etc/pacman.conf`. `IgnorePkg = package1 package2 ...` в `pacman.conf` запретит pacman, при выполнении `--sysupgrade`, устанавливать обновления для выбранных пакетов.

#### Q: Я хочу вернуться ко вчерашнему состоянию своей системы.

A: Легко осуществимо при использовании механизма периодических снимков (snapshots) LVM.
Categories:

- Русский
- Package management (Русский)