В данном практическом примере пакет содержатся три типа объектов. Администратор может выбрать, какой из этих трех типов следует установить и в каком месте эти объекты будут располагаться на целевом компьютере.
В практическом примере применяются следующие методы:
Использование параметрических имен путей (переменные в именах путей объекта), применяемых для создания нескольких базовых каталогов
Для получения информации о параметрических именах пути см. раздел Параметрические имена путей.
Использование сценария request для запроса ввода у администратора
Для получения информации о сценариях request см. раздел Создание сценария request .
Определение условных значений для установочного параметра.
Для настройки выборочной установки в этом практическом примере необходимо выполнить следующие задачи.
Определить класс для каждого типа объекта, который может быть установлен.
В данном практическом примере тремя типами объекта являются исполняемые файлы пакета, справочные страницы и исполняемые файлы 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).
PKG=ncmp NAME=NCMP Utilities CATEGORY=application, tools BASEDIR=/ ARCH=SPARC VERSION=RELEASE 1.0, Issue 1.0 CLASSES="" NCMPBIN=/bin NCMPMAN=/usr/man EMACS=/usr/emacs |
i pkginfo i request x bin $NCMPBIN 0755 root other f bin $NCMPBIN/dired=/usr/ncmp/bin/dired 0755 root other f bin $NCMPBIN/less=/usr/ncmp/bin/less 0755 root other f bin $NCMPBIN/ttype=/usr/ncmp/bin/ttype 0755 root other f emacs $NCMPBIN/emacs=/usr/ncmp/bin/emacs 0755 root other x emacs $EMACS 0755 root other f emacs $EMACS/ansii=/usr/ncmp/lib/emacs/macros/ansii 0644 root other f emacs $EMACS/box=/usr/ncmp/lib/emacs/macros/box 0644 root other f emacs $EMACS/crypt=/usr/ncmp/lib/emacs/macros/crypt 0644 root other f emacs $EMACS/draw=/usr/ncmp/lib/emacs/macros/draw 0644 root other f emacs $EMACS/mail=/usr/ncmp/lib/emacs/macros/mail 0644 root other f emacs $NCMPMAN/man1/emacs.1=/usr/ncmp/man/man1/emacs.1 0644 root other d man $NCMPMAN 0755 root other d man $NCMPMAN/man1 0755 root other f man $NCMPMAN/man1/dired.1=/usr/ncmp/man/man1/dired.1 0644 root other f man $NCMPMAN/man1/ttype.1=/usr/ncmp/man/man1/ttype.1 0644 root other f man $NCMPMAN/man1/less.1=/usr/ncmp/man/man1/less.1 0644 inixmr other |
trap 'exit 3' 15 # determine if and where general executables should be placed ans=`ckyorn -d y \ -p "Should executables included in this package be installed" ` || exit $? if [ "$ans" = y ] then CLASSES="$CLASSES bin" NCMPBIN=`ckpath -d /usr/ncmp/bin -aoy \ -p "Where should executables be installed" ` || exit $? fi # determine if emacs editor should be installed, and if it should # where should the associated macros be placed ans=`ckyorn -d y \ -p "Should emacs editor included in this package be installed" ` || exit $? if [ "$ans" = y ] then CLASSES="$CLASSES emacs" EMACS=`ckpath -d /usr/ncmp/lib/emacs -aoy \ -p "Where should emacs macros be installed" ` || exit $? fi |
Обратите внимание, что выполнение сценария request может завершиться таким образом, что ни один из файлов не останется в файловой системе. Для установки в системе Solaris версий ниже 2.5 и совместимых версий (где нельзя использовать сценарий checkinstall), сценарий request подходит наилучшим образом для тестирования файловой системы с тем, чтобы обеспечить успешную установку. Если выполнение сценария request завершается с кодом 1, произойдет чистый выход из процесса установки.
В данных файлах примеров показано, как использовать параметрические пути для создания нескольких базовых каталогов. Однако предпочтительнее использовать параметр BASEDIR, который управляется и проверяется командой pkgadd. При использовании нескольких базовых каталогов необходимо особо тщательно следить за установкой нескольких версий и архитектур на одну и ту же платформу.