null

Развертывание локального IPS-сервера. Часть 1.

В OpenSolaris и Solaris Nevada на смену традиционной для Unix пакетной системе System V пришла IPS - Image Packaging System. Более подробно о ней рассказано здесь: http://dlc.sun.com/osol/docs/content/dev/IMGPACKAGESYS/index.html Многие черты IPS взяла у Apt - пакетной системы Debian Linux, перекочевавшей оттуда в Ubuntu и ставшей де-факто одним из стандартов Linux.


Получила IPS от Apt и один из недостатков - сильная зависимость от Интернет-репозиториев, являющихся источниками пакетов, что вызывает трудности в случае если систем много или они находятся в DMZ. Для Apt разработано такое решение, как apt-proxy, мы же поговорим как обойти такое ограничение в OpenSolaris, создав собственный локальный репозиторий.

Для переноса нужно использовать утилиты pkgrecv, скачивающий пакет из Интернет-репозитория и pkgsend, помещающий его в репозиторий. В моем примере используются два хоста: cheetah - локальный IPS-сервер и tiger - где мы будем опробовать репозиторий.

Для начала создадим репозиторий, включим pkg-server:

myaut@cheetah:~$ pfexec pkgsend -s file:///var/pkg/repo create-repository

Примечание: в последних Development Release следует указывать еще и префикс репозитория:
myaut@cheetah:~$ pfexec pkgsend -s file:///var/pkg/repo  \
     create-repository \  --set-property \ 
     publisher.prefix=cheetah

myaut@cheetah:~$ pfexec svcadm enable pkg/server


Подробную информацию по переменным SMF можно найти в man pkg.depotd. Ключевые из них:

  • pkg/content_root - Директория, содержащая веб-контент сервера
  • pkg/inst_root - Директория репозитория для хранения пакетов (по-умолчанию - /var/pkg/repo)
  • pkg/log_access и pkg/log_errors - Логи для доступа и ошибок соответственно. Возможные значения: stderr, stdout, none, или абсолютный путь.
  • pkg/port - Номер порта репозитория.
  • pkg/readonly - Запрет на создание новых пакетов в репозитории (используя команду pkgsend).

Метаданные репозитория хранятся в файле /var/pkg/repo/cfg_cache

Теперь перешлем пакет SUNWipc в репозиторий. Выясним URI текущего репозитория:

myaut@cheetah:~$ pkg publisher
PUBLISHER                             TYPE     STATUS   URI
opensolaris.org          (preferred)  origin   online   http://pkg.opensolaris.org/dev/

Для того, чтобы узнать содержимое репозитория нужно вызвать pkgrecv с опцией -n
myaut@cheetah:~$ pkgrecv -s http://pkg.opensolaris.org/dev/ -n | grep SUNWipc
pkg:/SUNWipc@0.5.11,5.11-0.133:20100216T075928Z


Скачиваем пакет:
myaut@cheetah:~$ pkgrecv -s http://pkg.opensolaris.org/dev/ -d . 'pkg:/SUNWipc@0.5.11,5.11-0.133:20100216T075928Z'
Retrieving manifests for package evaluation ...
Retrieving package content ...
myaut@cheetah:~$

Если посмотреть в манифест пакета, то видим, что SUNWipc - виртуальный пакет для system/ipc
myaut@cheetah:~$ grep depend SUNWipc/0.5.11%2C5.11-0.133%3A20100216T075928Z/manifest
depend fmri=consolidation/osnet/osnet-incorporation type=require
depend fmri=system/ipc@0.5.11-0.133 type=require
Аналогичным образом скачиваем и пакет system/ipc.

Добавим пакет в репозиторий. Так как pkgsend не имеет интерактивной среды все команды выполняются по очереди через bash.
Для того, чтобы команда pkgsend распознала, какой пакет сейчас обрабатывается, используется переменная PKG_TRANS_ID. Получить ее значение и открыть транзакцию можно командой pkgsend open.
myaut@cheetah:~$ pkgsend -s http://localhost:80/ open system/ipc@0.5.11-0.134
export PKG_TRANS_ID=1268740176_pkg%3A%2F%2Fcheetah%2Fsystem%2Fipc%400.5.11%2C5.11-0.134%3A20100316T114936Z
myaut@cheetah:~$ export PKG_TRANS_ID=1268740176_pkg%3A%2F%2Fcheetah%2Fsystem%2Fipc%400.5.11%2C5.11-0.134%3A20100316T114936Z


Затем отправляем манифест на сервер и закрываем сессию. Здесь опция -d используется для указания базовой директории пакета, содержащей скачанные pkgrecv файлы, а в качестве аргумента используется путь до манифеста.
myaut@cheetah:~$ pkgsend -s http://localhost:80/ include -d \ 
 system%2Fipc/0.5.11%2C5.11-0.134%3A20100302T054428Z/ \
 system%2Fipc/0.5.11%2C5.11-0.134%3A20100302T054428Z/manifest
myaut@cheetah:~$ pkgsend -s http://localhost:80/ close
    PUBLISHED
    pkg://cheetah/system/ipc@0.5.11,5.11-0.134:20100316T114936Z

В свежих development release (проверено на snv_127 и snv_134) непосредственно добавление в репозиторий можно делать утилитой pkgrecv, поэтому все вышесказанное упрощается до одной команды:
myaut@cheetah:~$ pkgrecv -s http://pkg.opensolaris.org/dev/  \
 -d http://localhost:80/ pkg:/system/ipc@0.5.11,5.11-0.134:20100302T054428Z


Пакет опубликован. Теперь добавим в tiger новый репозиторий и сделаем его репозиторием по-умолчанию, удалим старый и обновим кеш.

myaut@tiger:~$ pfexec pkg set-publisher -P -g http://cheetah:80/ cheetah
myaut@tiger:~$ pfexec pkg unset-publisher opensolaris.org myaut@tiger:~$ pkg publisher PUBLISHER TYPE STATUS URI cheetah (preferred) origin online http://cheetah:80/ myaut@tiger:~$ pfexec pkg refresh

Устанавливаем:
myaut@tiger:~$ pfexec pkg install SUNWipc
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                  1/1         3/3      0.0/0.0

PHASE                                        ACTIONS
Install Phase                                  16/16


P.S. В следующей части мы автоматизуем этот процесс, создадим собственный пакет и поговорим о других возможностях локального репозитория.

Назад

К списку статей

 

Интересуюсь по большей части системным анализом программного обеспечения: поиском багов и анализом неисправностей, а также системным программированием (и не оставляю надежд запилить свою операционку, хотя нехватка времени сказывается :) ). Программированием увлекаюсь с 12 лет, но так уж получилось, что стал я инженером.

Основная сфера моей деятельности связана с поддержкой Solaris и оборудования Sun/Oracle, хотя в последнее время к ним прибавились технологии виртуализации (линейка Citrix Xen) и всякое разное от IBM - от xSeries до Power. Учусь на кафедре Вычислительной Техники НИУ ИТМО.

See you...out there!

http://www.facebook.com/profile.php?id=100001947776045
https://twitter.com/AnnoyingBugs