Руководства по командной строке

Man » Онлайн-справочник по ucf - подробная онлайн-документация для страницы руководства ucf.

🌍
ucf - Обновление файла конфигурации: сохранение изменений пользователя в файлах конфигурации.

СИНТАКСИС

ucf [параметры] <Новый файл> <Назначение>

ucf [параметры] --purge <Назначение>

ОПИСАНИЕ

Эта утилита предоставляет способ запроса у пользователя, следует ли принимать новые версии файлов конфигурации, предоставляемых сопровождающим пакет, с использованием различных эвристик, предназначенных для минимизации времени взаимодействия. Она использует debconf для взаимодействия с пользователем в соответствии с политикой Debian. В СИНТАКСИСЕ выше, Новый файл — это файл конфигурации, предоставляемый пакетом (либо поставляемый вместе с пакетом, либо создаваемый сопровождающим пакет в процессе установки), а Назначение — это расположение (обычно в /etc), где находится фактический файл конфигурации, и он может быть изменен конечным пользователем. Поскольку редактируются реальные файлы, а не символические ссылки, ucf следует и разрешает символические ссылки перед выполнением каких-либо действий. Насколько это возможно, ucf пытается сохранить владение и разрешения Нового файла при его копировании в новое местоположение.

Этот скрипт пытается обеспечить обработку, аналогичную conffile, для файлов, установленных в /etc, которые не поставляются в пакете Debian, а обрабатываются скриптом postinst. Политика Debian гласит, что файлы в /etc, являющиеся файлами конфигурации, должны сохранять изменения пользователя, и это относится также к файлам, обрабатываемым скриптами сопровождающего. Используя ucf, можно поставлять набор файлов конфигурации по умолчанию в /usr ( /usr/share/<pkg> — хорошее место), и поддерживать файлы в /etc, сохраняя изменения пользователя и, в целом, предлагая те же возможности при обновлении, которые dpkg обычно предоставляет для «conffiles».

Кроме того, этот скрипт предоставляет возможности для перехода файла, который ранее не имел защиты, аналогичной conffile, под эту схему и пытается минимизировать количество вопросов, задаваемых во время установки. Действительно, возможности перехода лучше, чем те, которые предлагает dpkg при переходе файла из состояния non-conffile в состояние conffile. Вторая форма в СИНТАКСИСЕ выше предназначена для очистки информации о файле конфигурации при удалении пакета и имеет решающее значение для обеспечения плавной переустановки.

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


ОПЦИИ

-h, --help

Вывести краткое сообщение об использовании.

-n, --no-action

Режим «сухой пробы». Вывести действия, которые будут выполнены при запуске скрипта, но не выполнять их.

-d[n], --debug=[n]

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

-p, --purge

Удаляет все следы файла из файла хешей состояний. Это необходимо для того, чтобы пакет можно было переустановить после очистки; в противном случае, фактический файл конфигурации удаляется, но он остается в файле хешей; и при переустановке никаких действий не выполняется, поскольку контрольная сумма MD5 нового файла совпадает с контрольной суммой в файле хешей. Короче говоря, не забудьте использовать этот параметр в postrm для каждого файла конфигурации, управляемого ucf, когда пакет очищается (при условии, что ucf существует). Обратите внимание: ucf фактически не изменяет файл на диске в этом процессе, поэтому удаление любых файлов остается ответственностью вызывающего пакета.

-v, --verbose

Сделать скрипт очень подробным при установке внутренних переменных.

-P foo, --package foo

Не следовать перенаправлениям dpkg-divert для пакета foo при обновлении файлов конфигурации.

-s foo, --src-dir foo

Установить каталог-источник (исторические контрольные суммы MD5, как ожидается, будут находиться в файлах и подкаталогах этого каталога) в foo. По умолчанию предполагается, что каталог, в котором находится new_file, является каталогом-источником. Установка этого параметра переопределяет параметры в переменной среды UCF_SOURCE_DIR и в переменной конфигурационного файла conf_source_dir.

--sum-file foo

Принудительно считывать исторические контрольные суммы MD5 из этого файла, а не использовать значение по умолчанию, когда они находятся в каталоге-источнике. Установка этого параметра переопределяет параметры в переменной среды UCF_OLD_MDSUM_FILE и в переменной конфигурационного файла conf_old_mdsum_file.

--three-way

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

--debconf-ok

Указать, что для ucf нормально использовать уже работающий экземпляр debconf для запросов (всегда нормально использовать ucf, когда debconf не работает — он будет вызывать debconf по мере необходимости).


--debconf-template foo

Укажите ucf использовать указанный многовыборочный шаблон debconf вместо стандартного шаблона debconf, предоставляемого ucf. Ответственность за обеспечение существования указанного шаблона и наличия в нем списка опций, соответствующих стандартному шаблону ucf, лежит на вызывающей стороне, и он должен установить Choices-C: ${CHOICES}, чтобы обеспечить соответствие возвращаемых значений значениям стандартного шаблона. Обратите внимание, что опции должны отличаться в зависимости от того, установлен ли также параметр --three-way.

--state-dir /path/to/dir

Установите каталог состояния в /path/to/dir вместо каталога по умолчанию /var/lib/ucf. Используется в основном для тестирования.

-Z     Установите контекст безопасности SELinux для целевого файла на значение по умолчанию.

ИСПОЛЬЗОВАНИЕ

В большинстве случаев использование довольно простое: одна строка в скрипте postinst при настройке и еще одна строка в скрипте postrm для указания ucf удалить конфигурационный файл при удалении (с использованием параметра --purge) — вот все, что обычно требуется (если ucf все еще установлен в системе).

Рекомендуется также зарегистрировать любой файл, управляемый ucf, в реестре ucf; это связывает конфигурационный файл с пакетом, которому он принадлежит. Это делается с помощью простого вызова ucfr. Пользователи могут затем запросить связь между конфигурационным файлом и пакетом с помощью инструмента ucfq. Обратитесь к соответствующим страницам руководства для получения подробной информации.

Пакеты, использующие debhelper, могут упростить создание необходимых фрагментов скриптов обслуживания с помощью вспомогательной программы dh_ucf.

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

Чтобы сделать это, либо создайте файл с именем <Новый файл>.md5sum, с одним MD5-хешем на каждой строке (имена файлов, которые вы используете, игнорируются, за исключением записи с именем default), либо создайте каталог с именем <Новый файл>.md5sum.d, который должен содержать любое количество файлов, каждый из которых содержит одну строку, а именно MD5-хеш предыдущей версии <Новый файл>. Имена этих файлов не имеют значения, за исключением одного: файл с именем default обрабатывается особым образом. Например, автор лично использует либо номера версий пакетов, либо кодовые имена релизов, такие как 7.6.3 или potato. Если ни один из исторических MD5-хешей не совпадает, мы почти уверены, что либо историческая запись MD5-хешей неполна, либо пользователь изменил файл конфигурации.

MD5-хеш по умолчанию

Исключение из правила об именах, упомянутое выше, заключается в том, что если ни один из MD5-хешей не совпадает и если файл <Новый файл>.md5sum.d/default существует или если в <Новый файл>.md5sum есть строка, соответствующая файлу default, он будет использоваться в качестве MD5-хеша предыдущей версии пакета, который, как предполагается, был установлен на этом компьютере. Как вы можете видеть, если количество ранее выпущенных пакетов ограничено (например, всего один), разработчик также делает обоснованное предположение, но эта возможность предоставляется разработчику.


Если файл <New file>.md5sum или каталог <New file>.md5sum.d не существуют, или ни одна из контрольных сумм не совпадает, мы проверяем установленный файл <Destination>, чтобы узнать, идентичен ли он <New file>. Если нет, мы спрашиваем у пользователя, хочет ли он, чтобы мы заменили файл.

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

ПЕРЕМЕННЫЕ ОКРУЖАЮЩЕЙ СРЕДЫ

Переменная UCF_FORCE_CONFFNEW, если установлена, заставляет новый файл всегда перезаписывать установленный файл назначения, в то время как переменная UCF_FORCE_CONFFOLD, если установлена, безмолвно сохраняет установленный файл. UCF_FORCE_CONFFMISS применима только в том случае, если установленный файл назначения не существует (возможно, из-за удаления пользователем), и заставляет ucf воссоздать отсутствующий файл (по умолчанию ucf уважает желание пользователя и не воссоздает локально удаленный файл). Кроме того, когда ucf создает дочернюю оболочку, она заполняет переменные UCF_CONFFILE_NEW и UCF_CONFFILE_OLD, которые полезны для проверки изменений.

Также поддерживаются флаги confmiss, confnew, confold, confdef и confask переменной DPKG_FORCE. См. dpkg(1) для получения дополнительной информации.

ФАЙЛЫ

Этот скрипт создает файл new_file.md5sum и может скопировать файл (предположительно, поставляемый с пакетом) <New file> в место назначения, <Destination>.

/var/lib/ucf/hashfile и /var/lib/ucf/hashfile.X, где X — небольшое целое число, где хранятся предыдущие версии файла hashfile.

/etc/ucf.conf

ПРИМЕРЫ

Если пакет foo хочет использовать ucf для обработки взаимодействия с пользователем для файла конфигурации foo.conf, версия которого предоставлена в пакете как /usr/share/foo/configuration, достаточно простого вызова ucf в файле post inst:

ucf /usr/share/foo/configuration /etc/foo.conf

При удалении пакета следует указать ucf забыть об этом файле (см. подробные примеры в /usr/share/doc/ucf/examples):

ucf --purge /etc/foo.conf Обратите внимание, что purge также можно использовать, чтобы ucf забыла предыдущее состояние файлов, и при следующей установке или обновлении пакета ucf запросит у пользователя заменить текущий файл конфигурации. Используйте это, если хотите изменить свое решение не обновлять файл до версии, предоставленной разработчиком.

Цель данного скрипта — обеспечить функциональность, аналогичную обработке файлов конфигурации, для файлов инициализации пакетов Emacs Lisp (например, /etc/emacs21/site-start.d/50psgml-init.el). Эти файлы инициализации не поставляются вместе с пакетом, а устанавливаются во время фазы постобработки установки скриптом /usr/lib/emacsen-common/emacs-package-install $package_name.

Этот скрипт предназначен для вызова скриптом установки пакетов, расположенным в `/usr/lib/emacsen-common/packages/install/$package_name`, для каждой установленной версии Emacs, путем вызова с соответствующими значениями для нового файла (`/usr/share/emacs/site-lisp/<pkg>/<pkg-init.el`) и целевого файла (`/etc/emacs21/site-start.d/50<pkg-init.el`), после чего он должен выполнить все остальное.

ССЫЛКИ

[ucf.conf(5)](ucf.conf(5)), [ucfr(1)](ucfr(1)), [ucfq(1)](ucfq(1)), [dpkg]({filename}../../dpkg)(1), [dh_ucf(1)](dh_ucf(1)), [diff3(1)](diff3(1)).

Политика Debian Emacs, поставляемая вместе с пакетом emacsen-common.

АВТОР

Эта страница руководства была написана Маноджем Шриваставой <__>, для системы Debian GNU/Linux.