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

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

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

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

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

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

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

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

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

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

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

### ARM

Arch Rollback Machine (ARM) содержит архив снимков (snapshots) всех репозиториев, начиная с 31 августа 2013. Она может быть использована для установки предыдущей версии пакета или даже отката версий пакетов системы по состоянию на определенную дату. Для получения дополнительной информации смотрите раздел Arch Rollback Machine#Time travel[broken link: invalid section].

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

Categories:

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

Hidden category:

- Pages with broken section links