Для настройки выборочной установки в этом практическом примере необходимо выполнить следующие задачи.
Определить класс для каждого типа объекта, который может быть установлен.
В данном практическом примере тремя типами объекта являются исполняемые файлы пакета, справочные страницы и исполняемые файлы emacs. Каждому типу присвоен собственный класс: bin, man и emacs соответственно. Обратите внимание, что в файле prototype все файлы объектов принадлежат к одному из этих трех классов.
Инициализируйте параметр CLASSES в файле pkginfo, установив для него пустое значение.
Обычно при определении класса следует внести этот класс в параметр CLASSES файла pkginfo. В противном случае ни один объект этого класса установлен не будет. В нашем практическом примере параметру первоначально присвоено пустое значение, что означает, что никаких объектов установлено не будет. Параметр CLASSES будет изменен сценарием request в соответствии с выбором, сделанным администратором. Таким образом параметр CLASSES принимает только те типы объектов, которые хочет установить администратор.
Обычно рекомендуется устанавливать для параметров значение по умолчанию. Если в пакете содержатся компоненты, общие для всех трех типов объектов, можно назначить их классу none и затем установить параметр CLASSES равным none.
Вставьте параметрические имена путей в файл prototype.
Сценарий request устанавливает для этих переменных среды значение, предоставленное администратором. После этого в ходе установки команда pkgadd вычисляет эти переменные среды и определяет, куда установить пакет.
Три переменные среды, используемые в данном примере, установлены на соответствующие значения по умолчанию в файле pkginfo и служат следующим целям:
$NCMPBIN определяет местоположение исполняемых файлов объекта
$NCMPMAN определяет местоположение справочных страниц
$EMACS определяет местоположение исполняемых файлов emacs
В примере файла prototype показано, как определить имена пути объекта при помощи переменных.
Создайте сценарий request, который будет запрашивать администратора, какие части пакета следует установить и где они должны быть размещены.
Сценарий request в данном пакете задает администратору два вопроса:
Следует ли установить эту часть пакета?
Если администратор отвечает "да", то к параметру CLASSES добавляется соответствующее имя класса. Например, если администратор решает установить справочные страницы этого пакета, то класс man добавляется к параметру CLASSES.
Если да, где следует разместить эту часть пакета?
Ответ на этот вопрос присваивается соответствующей переменной среды. В примере со справочной страницей ответ на запрос присваивается переменной $NCMPMAN.
Эти два вопроса повторяются для каждого из трех типов объекта.
В конце сценария request эти параметры становятся доступны установочной среде для выполнения команды pkgadd и других сценариев пакета. Сценарий request записывает эти определения в файл, предоставленный вызывающей служебной программой. В нашем практическом примере другие сценарии отсутствуют.
При рассмотрении сценария request для данного практического примера обратите внимание, что вопросы создаются средствами проверки данных ckyorn и ckpath. Для получения дополнительной информации об этих средствах см. ckyorn(1) и ckpath(1).