Глава 8. Файлы pkg-*

Есть несколько приёмов работы с файлами pkg-*, которые мы ещё не описали, но они иногда могут быть очень кстати.

8.1. pkg-message

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

Если должны выводиться некоторые строки о knobs времени построения или предупреждения, используйте ECHO_MSG. Файл pkg-message только для послеустановочных шагов. Также следует иметь в виду различие между ECHO_MSG и ECHO_CMD. Первое предназначено для вывода на экран информационного текста, а второе для конвейера команд:

update-etc-shells:
	@${ECHO_MSG} "updating /etc/shells"
	@${CP} /etc/shells /etc/shells.bak
	@( ${GREP} -v ${PREFIX}/bin/bash /etc/shells.bak; \
		${ECHO_CMD} ${PREFIX}/bin/bash) >/etc/shells
	@${RM} /etc/shells.bak

Файл pkg-message не нужно добавлять в pkg-plist.

8.2. pkg-install

Если при установке бинарного пакета по команде pkg add или pkg install вашему порту нужно выполнить какие-то команды, то вы можете это сделать с помощью скрипта pkg-install. Этот скрипт будет автоматически добавлен к пакету и будет дважды запускаться командой pkg: первый раз в виде ${SH} pkg-install ${PKGNAME} PRE-INSTALL, а второй раз как ${SH} {PKGNAME} POST-INSTALL. Для распознавания того, в каком режиме запущен скрипт, можно использовать параметр $2. Переменная окружения PKG_PREFIX будет принимать значение, соответствующее каталогу, в который устанавливается пакет.

Этот скрипт не запускается автоматически, если вы устанавливаете порт командой make install. Если же вам действительно необходимо его запустить, то запустите его явно из файла Makefile порта строкой вида PKG_PREFIX=${PREFIX} ${SH} $ {PKGINSTALL}${PKGNAME} PRE-INSTALL.

8.3. pkg-deinstall

Этот скрипт вызывается при удалении пакета.

Этот скрипт будет дважды запускаться командой pkg delete. Первый раз как ${SH} pkg-deinstall ${PKGNAME} DEINSTALL, а второй раз как ${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL.

8.4. Изменение имён файлов pkg-*

Все имена файлов pkg-* определяются с помощью переменных, так что вы можете изменить их, если это нужно, в вашем файле Makefile. Это особенно полезно, если вы используете одни и те же файлы pkg-* совместно между несколькими портами или пишете в один из вышеперечисленных файлов (в главе о "записи в каталоги, отличные от WRKDIR" объяснено, почему не рекомендуется осуществлять запись непосредственно в файлы pkg-*.

Вот список имён переменных и их значений по умолчанию. (Значение PKGDIR по умолчанию равно ${MASTERDIR}.)

ПеременнаяЗначение по умолчанию

DESCR

${PKGDIR}/pkg-descr

PLIST

${PKGDIR}/pkg-plist

PKGINSTALL

${PKGDIR}/pkg-install

PKGDEINSTALL

${PKGDIR}/pkg-deinstall

PKGMESSAGE

${PKGDIR}/pkg-message

Пожалуйста, изменяйте значения этих переменных, а не переопределяйте PKG_ARGS. Если вы измените значение переменных PKG_ARGS, то эти файлы при установке из порта будут установлены в каталог /var/db/pkg некорректно.

8.5. Использование SUB_FILES и SUB_LIST

Переменные SUB_FILES и SUB_LIST подходят для задания в файлах порта динамических значений, таких как PREFIX установки в pkg-message.

В переменной SUB_FILES указывается перечень файлов для автоматического изменения. Каждый file из перечня SUB_FILES обязан иметь соответствующий file.in, присутствующий в FILESDIR. Измененная версия будет создана в WRKDIR. Файлы, определенные в качестве значения USE_RC_SUBR (или устаревшего USE_RCORDER), автоматически добавляются в SUB_FILES. Для файлов pkg-message, pkg-install и pkg-deinstall устанавливается соответствующая переменная Makefile, указывающая на обработанную версию.

Переменная SUB_LIST содержит перечень пар VAR=VALUE. В каждом файле из SUB_FILES для каждой пары будет произведена замена %%VAR%% на VALUE. Некоторые общие пары определяются автоматически: PREFIX, LOCALBASE, DATADIR, DOCSDIR, EXAMPLESDIR, WWWDIR и ETCDIR. Любая строка, начинающаяся с @comment, будет удалена из конечного файла после подстановки переменной.

В следующем примере в pkg-message будет сделана замена %%ARCH%% на системную архитектуру:

SUB_FILES=	pkg-message
SUB_LIST=	ARCH=${ARCH}

Обратите внимание, что в этом примере в FILESDIR обязательно существование файла pkg-message.in.

Пример хорошего pkg-message.in:

Now it is time to configure this package.
Copy %%PREFIX%%/shared/examples/putsy/%%ARCH%%.conf into your home directory
as .putsy.conf and edit it.

Last modified on: 11 декабря 2021 г. by Sergio Carlavilla Delgado