aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc
blob: c168ae34581d1727227b954d78d38a28c04aec89 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
---
title: Глава 8. Файлы pkg-*
prev: books/porters-handbook/plist
next: books/porters-handbook/testing
showBookMenu: true
weight: 8
path: "/books/porters-handbook/pkg-files/"
---

[[pkg-files]]
= Файлы pkg-*
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 8
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/porters-handbook/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

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

[[porting-message]]
== [.filename]#pkg-message#

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

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

[.programlisting]
....
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
....

[NOTE]
====
Файл [.filename]#pkg-message# не нужно добавлять в [.filename]#pkg-plist#.
====

[[pkg-install]]
== [.filename]#pkg-install#

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

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

[[pkg-deinstall]]
== [.filename]#pkg-deinstall#

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

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

[[pkg-names]]
== Изменение имён файлов [.filename]#pkg-*#

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

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

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Переменная
| Значение по умолчанию

|`DESCR`
|`${PKGDIR}/pkg-descr`

|`PLIST`
|`${PKGDIR}/pkg-plist`

|`PKGINSTALL`
|`${PKGDIR}/pkg-install`

|`PKGDEINSTALL`
|`${PKGDIR}/pkg-deinstall`

|`PKGMESSAGE`
|`${PKGDIR}/pkg-message`
|===

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

[[using-sub-files]]
== Использование `SUB_FILES` и `SUB_LIST`

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

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

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

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

[.programlisting]
....
SUB_FILES=	pkg-message
SUB_LIST=	ARCH=${ARCH}
....

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

Пример хорошего [.filename]#pkg-message.in#:

[.programlisting]
....
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.
....