Pacman/Pacnew and Pacsave (Русский)

From ArchWiki
Jump to: navigation, search

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Pacnew and Pacsave files. Дата последней синхронизации: 2014-08-15. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Когда pacman удаляет пакет, у которого имеется файл конфигурации, он обычно создает резервную копию этого файла, добавляя .pacsave к его имени. Таким же образом при обновлении пакета, содержащего новый конфигурационный файл (созданный мейнтейнером), отличающийся от того, который есть в системе на данный момент, pacman создает файл .pacnew. Иногда, при особых обстоятельствах, создается файл .pacorig.

pacman уведомит вас о создании таких файлов.

Почему эти файлы создаются

Файл .pacnew может быть создан во время обновления пакета (pacman -Syu, pacman -Su или pacman -U) во избежание перезаписи файла, который уже существует и был изменен пользователем. Если это произойдет, в выводе pacman появится сообщение наподобие этого:

Предупреждение: /etc/pam.d/usermod установлен как /etc/pam.d/usermod.pacnew

Файл .pacsave может быть создан во время удаления (pacman -R) или обновления (когда необходимо сперва удалить предыдущую версию) пакета. Если в базе данных pacman имеется запись о том, что необходимо создать резервную копию какого-либо файла, принадлежащего пакету, будет создан файл .pacsave. Если это произойдет, в выводе pacman появится сообщение наподобие этого:

Предупреждение: /etc/pam.d/usermod сохранен как /etc/pam.d/usermod.pacsave

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

Файлы резервных копий для пакета

В PKGBUILD пакета описываются файлы, которые должны быть сохранены или для которых должна быть создана резервная копия, если пакет обновляется или удаляется. Например, PKGBUILD для pulseaudio содержит следующую строку:

backup=('etc/pulse/client.conf' 'etc/pulse/daemon.conf' 'etc/pulse/default.pa')

Разъяснение типов

.pacnew

Для каждого файла backup обновляемого пакета pacman сравнивает контрольные суммы MD5, сгенерированные на основе содержимого файла: одна сумма для версии, установленной пакетом, одна - для текущей версии в файловой системе, и одна - для версии из нового пакета. Если текущий файл в файловой системе был изменен и не соответствует версии, установленной пакетом, pacman не знает, как объединить все изменения с новой версией файла. По этой причине он сохраняет новую версию с расширением .pacnew и оставляет измененную версию нетронутой вместо того, чтобы перезаписывать измененный файл при обновлении.

Можно рассмотреть все это подробнее: тройное сравнение сумм MD5 дает один из следующих выводов:

оригинальный = X, текущий = X, новый = X 
Все три версии файла имеют одинаковое содержимое, поэтому можно спокойно производить перезапись. Необходимо перезаписать текущую версию без уведомления пользователя (несмотря на то, что содержимое файлов одинаково, благодаря этому будет обновлена информация в файловой системе, описывающая время установки, изменения и доступа к файлу, а также будет уверенность, что применились какие-либо изменения в правах доступа к файлу)
оригинальный = X, текущий = X, новый = Y 
Содержимое текущей версии не изменялось, но новая версия имеет отличия. Поскольку пользователь не вносил изменений в текущую версию, а новая может содержать улучшения или исправления багов, необходимо перезаписать текущую версию без уведомления пользователя. Это единственная операция объединения файлов, которую способен выполнить pacman
оригинальный = X, текущий = Y, новый = X 
Изначальный и новый пакеты содержат абсолютно одинаковые версии файла, но текущая версия в файловой системе была изменена. Необходимо оставить текущую версию, отклонив новую, без уведомления пользователя
оригинальный = X, текущий = Y, новый = Y 
Новая версия идентична текущей. Необходимо перезаписать текущую версию без уведомления пользователя (несмотря на то, что содержимое файлов одинаково, благодаря этому будет обновлена информация в файловой системе, описывающая время установки, изменения и доступа к файлу, а также будет уверенность, что применились какие-либо изменения в правах доступа к файлу).
оригинальный = X, текущий = Y, новый = Z 
Все три версии различаются, поэтому необходимо оставить текущую версию, установить новую с расширением .pacnew и сообщить об этом пользователю. Предполагается, что в этом случае пользователь вручную объединит эти файлы, внеся все необходимые изменения из новой версии в текущую

.pacsave

Если пользователь когда-либо изменял один из файлов, описанных в секции backup, этот файл будет переименован с добавлением расширения .pacsave и останется в файловой системе после удаления пакета.

Примечание: Использование опции -n в команде pacman -R позволяет полностью удалить все такие файлы, относящиеся к пакету. В этом случае файлов .pacsave создано не будет

.pacorig

Если в процессе установки или обновления пакета встречается файл (обычно это относится к файлам настройки, находящимся в каталоге /etc), не принадлежащий ни одному из установленных пакетов, но описанный в секции backup пакета, который вы вызвали, этот файл будет сохранен с расширением .pacorig и заменен версией файла из пакета. Обычно это случается, когда конфигурационный файл перемещается из одного пакета в другой. Если такой файл не был описан в секции backup, pacman завершит свою работу и выдаст ошибку о наличии конфликтующих файлов.

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

Определение местонахождения файлов .pac*

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

  • Для поиска по каталогам, в которых хранится большинство глобальных конфигурационных файлов:
    $ find /etc -regextype posix-extended -regex ".+\.pac(new|save|orig)" 2> /dev/null
    либо, для поиска по всему диску:
    $ find / -regextype posix-extended -regex ".+\.pac(new|save|orig)" 2> /dev/null
  • Используйте locate, если он у вас установлен. Сперва переиндексируйте базу данных:
    # updatedb
    Затем:
    $ locate -e --regex "\.pac(new|orig|save)$"
  • Используйте лог pacman'а:
    $ egrep "pac(new|orig|save)" /var/log/pacman.log
    Обратите внимание, что в логе не содержится информации о том, какие файлы в настоящий момент есть в системе, а какие уже удалены

Управление файлами .pacnew

Существуют различные инструменты, способные помочь вам в работе с файлами .pacnew и .pacsave. Стандартный (s)diff (из пакета diffutils) предоставляет легкий способ сравнения этих файлов. Для получения информации о других утилитах сравнения смотрите раздел Список приложений/Утилиты#Сравнение, поиск различий, объединение.

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

Доступны следующие инструменты:

  • diffpac — Автономная замена pacdiffviewer
https://github.com/bruenig/diffpac || diffpacAUR[ссылка недействительна: сохранено в aur-mirror]
  • Dotpac — Базовый интерактивный скрипт с текстовым интерфейсом на основе ncurses. Не имеет возможностей ручного или автоматического объединения
|| dotpacAUR
  • etc-update — Порт на Arch утилиты etc-update из Gentoo, предоставляющей простой CLI для интерактивного редактирования, просмотра и объединения изменений, в том числе автоматического (для незначительных изменений, например, комментариев)
http://www.gentoo.org/doc/en/handbook/handbook-amd64.xml?part=3&chap=4#doc_chap2 || etc-updateAUR
  • pacdiff — Простая программа обновления файлов pacnew/pacorig/pacsave из pacman. Будет искать все файлы pacnew и pacsave и спрашивать вас о том, что нужно сделать
https://www.archlinux.org/pacman/ || pacman. По умолчанию использует vimdiff. Если вы хотите использовать графический diff-редактор, используйте DIFFPROG=ваш_редактор pacdiff
  • *pacdiffviewer — Полнофункциональный интерактивный скрипт CLI с возможностью автоматического объединения. Является частью yaourt
http://archlinux.fr/yaourt-en || yaourtAUR
  • pacmerge-git — Интерактивная программа объединения с интерфейсом командной строки
https://gitorious.org/pacmerge || pacmerge-gitAUR[ссылка недействительна: сохранено в aur-mirror]
  • pacnews-git — Простой скрипт, нацеленный на поиск всех файлов .pacnew и их последующее редактирование при помощи vimdiff
https://github.com/pbrisbin/scripts/blob/master/pacnews || pacnews-gitAUR
  • Yaourt — Обертка для pacman с расширенным функционалом и поддержкой AUR. Используйте команду yaourt -C для сравнения, замены и объединения конфигурационных файлов
http://archlinux.fr/yaourt-en || yaourtAUR

Смотрите также