Существуют несколько методов, позволяющих указать место, куда будет установлен пакет. Важно иметь возможность изменять базовый каталог динамически во время установки. Если эта операция выполнена верно, администратор сможет без труда устанавливать разные версии и различные архитектуры компьютеров.
В начале этого раздела рассматриваются наиболее общие методы, а затем подходы, улучшающие процесс установки в неоднородных операционных средах.
Администраторы, ответственные за установку пакетов, могут использовать файлы администрирования для контроля над процессом установки пакета. Разработчику пакета следует знать о файлах администрирования и каким образом администратор может изменить предполагаемую установку пакета.
Файл администрирования сообщает команде pkgadd, следует ли осуществлять все проверки или выводить запросы, которые она обычно выводит. Поэтому перед использованием файлов администрирования администраторам необходимо полностью понять процесс установки пакета и работы сценариев.
Базовый файл административных значений по умолчанию поставляется вместе с операционной системой SunOS и находится по следующему пути: /var/sadm/install/admin/default. Этот файл устанавливает самый простой уровень административной политики в отношении установки программных продуктов. Поставляемый файл выглядит следующим образом:
#ident "@(#)default 1.4 92/12/23 SMI" /* SVr4.0 1.5.2.1 */ mail= instance=unique partial=ask runlevel=ask idepend=ask rdepend=ask space=ask setuid=ask conflict=ask action=ask basedir=default |
Администратор может редактировать этот файл и устанавливать новые значения по умолчанию. Он может также создать новый файл администрирования и указать на его наличие с помощью параметра -a команды pkgadd.
В файле администрирования можно при необходимости определить одиннадцать параметров. Для получения дополнительной информации см. страницу admin(4).
Параметр basedir указывает, каким образом будет извлечен базовый каталог при установке пакета. Большинство администраторов оставляют этот параметр со значением по умолчанию (default), однако для параметра basedir можно установить одно из следующих значений:
ask - всегда спрашивать администратора о расположении базового каталога
Абсолютное имя пути
Абсолютное имя пути, содержащее конструкцию $PKGINST, означающую, что следует всегда выполнять установку в базовый каталог, извлеченный из экземпляра пакета
При вызове команды pkgadd с аргументом - a none команда всегда запрашивает администратора о размещении базового каталога. К сожалению, при этом все параметры в файле устанавливаются на значение по умолчанию quit, что может создать дополнительные сложности.
Обычно администратор контролирует все пакеты, устанавливаемые в системе, с помощью файла администрирования. К сожалению, разработчики пакетов часто предоставляют альтернативные файлы административных значений по умолчанию, обходя тем самым пожелания администратора.
Разработчики пакетов иногда включают в поставку свой файл администрирования с тем, чтобы они, а не администраторы, контролировали установку пакета. Поскольку запись basedir в файле административных значений по умолчанию отменяет все другие базовые каталоги, это предоставляет простой способ выбора подходящего базового каталога во время установки. Во всех версиях ОС Solaris до выпуска Solaris 2.5 подобный способ контроля над базовым каталогом считался наиболее простым.
Однако следует принимать во внимание желания администраторов, которые хотят контролировать процесс установки продукта. Предоставление временного файла с административными значениями по умолчанию для контроля над установкой приводит к недоверию со стороны администраторов. Следует использовать сценарии request и checkinstall с тем, чтобы установка происходила под контролем администратора. Если сценарий request вовлекает в процесс установки администратора, организация пакетов System V облегчит работу как разработчиков, так и администраторов.
Файл pkginfo для любого перемещаемого пакета должен включать базовый каталог по умолчанию в форме подобной записи:
BASEDIR=absolute_path |
Это лишь базовый каталог по умолчанию; он может быть изменен администратором в ходе установки.
Хотя для некоторых пакетов требуется несколько базовых каталогов, преимущество использования этого параметра для размещения пакета состоит в том, что к моменту начала установки базовый каталог гарантированно будет на месте и доступным для записи как допустимый каталог. Правильный путь к базовому каталогу сервера и клиента доступен всем процедурным сценариям в форме зарезервированных переменных среды. Текущий базовый каталог установки отображается с помощью команды pkginfo -r SUNWstuf.
В сценарии checkinstall параметр BASEDIR существует точно в том виде, как он был определен в файле pkginfo (условия еще не были определены). Для проверки целевого базового каталога требуется конструкция ${PKG_INSTALL_ROOT}$BASEDIR. Это означает, что сценарии request и checkinstall могут изменять значение параметра BASEDIR в среде установки с предсказуемыми результатами. Ко времени вызова сценария preinstall параметр BASEDIR уже является полностью обусловленным указателем на действительный базовый каталог целевой системы, даже если эта система - клиент.
Сценарий request использует параметр BASEDIR по-разному в разных выпусках операционной системы SunOS. Чтобы осуществить проверку параметра BASEDIR в сценарии request, следует использовать следующий программный код, позволяющий определить фактический используемый базовый каталог.
# request script constructs base directory if [ ${CLIENT_BASEDIR} ]; then LOCAL_BASE=$BASEDIR else LOCAL_BASE=${PKG_INSTALL_ROOT}$BASEDIR fi |
Если для пакета требуется несколько базовых каталогов, их можно создать с помощью параметрических имен путей. Этот способ стал достаточно популярным, несмотря на то, что он имеет следующие ниже недостатки.
Пакет с параметрическими именами пути обычно ведет себя как абсолютный пакет, однако команда pkgadd расценивает его как перемещаемый пакет. Обязательно должен быть определен параметр BASEDIR, даже если он и не используется.
Администратор не может выяснить расположение базового каталога установки пакета с помощью служебных программ System V (команда pkginfo -r выполняться не будет).
Администратор не может использовать стандартный метод перемещения пакета (он называется перемещаемым, но ведет себя как абсолютный).
Установка на различные архитектуры или установка разных версий требует планирования вариантов действий для каждого целевого базового каталога, что часто означает написание большого количества сложных сценариев действий над классами.
После того, как параметры, устанавливающие базовые каталоги, определены в файле pkginfo, их можно изменять с помощью сценария request. Это одна из главных причин популярности данного подхода. Тем не менее, перечисленные выше недостатки являются неисправимыми, и данная структура должна рассматриваться лишь как последнее средство.
# pkginfo file PKG=SUNWstuf NAME=software stuff ARCH=sparc VERSION=1.0.0,REV=1.0.5 CATEGORY=application DESC=a set of utilities that do stuff BASEDIR=/ EZDIR=/usr/stuf/EZstuf HRDDIR=/opt/SUNWstuf/HRDstuf VENDOR=Sun Microsystems, Inc. HOTLINE=Please contact your local service provider EMAIL= MAXINST=1000 CLASSES=none PSTAMP=hubert980707141632 |
: 1 1758 1 d none $EZDIR 0775 root bin 1 f none $EZDIR/dirdel 0555 bin bin 40 773 751310229 1 f none $EZDIR/usrdel 0555 bin bin 40 773 751310229 1 f none $EZDIR/filedel 0555 bin bin 40 773 751310229 1 d none $HRDDIR 0775 root bin 1 f none $HRDDIR/mksmart 0555 bin bin 40 773 751310229 1 f none $HRDDIR/mktall 0555 bin bin 40 773 751310229 1 f none $HRDDIR/mkcute 0555 bin bin 40 773 751310229 1 f none $HRDDIR/mkeasy 0555 bin bin 40 773 751310229 1 d none /etc ? ? ? 1 d none /etc/rc2.d ? ? ? 1 f none /etc/rc2.d/S70dostuf 0744 root sys 450 223443 1 i pkginfo 348 28411 760740163 1 i postinstall 323 26475 751309908 1 i postremove 402 33179 751309945 1 i preinstall 321 26254 751310019 1 i preremove 320 26114 751309865 |
Любой пакет, существующий в нескольких версиях или для нескольких архитектур, должен, при необходимости, иметь возможность увода базового каталога. Увод базового каталога означает, что если в базовом каталоге уже существует предыдущая версия или другая архитектура устанавливаемого пакета, устанавливаемый пакет решает эту проблему, создавая, например, новый базовый каталог со слегка отличающимся именем. Сценарии request и checkinstall в Solaris 2.5 и совместимых выпусках имеют возможность изменять переменную среды BASEDIR. Однако такая возможность отсутствует в более ранних версиях ОС Solaris.
Даже в более старых версиях операционного окружения Solaris сценарию request были доступны полномочия на переопределение каталогов в пределах базового каталога установки. Сценарий request может делать это и сейчас, поддерживая большинство административных предпочтений.