Локальный репозиторий в Solaris 11

1) Установка и настройка локального репозитория.

За локальный репозиторий отвечает SMF application/pkg/server. По умолчанию он отключён. Создадим отдельную zfs

# zfs create -o mountpoint=/export/ips rpool/export/ips

Выставим некоторые параметры (порт, корень и возможность заливки новых пакетов)

# svccfg -s application/pkg/server setprop pkg/readonly = false
# svccfg -s pkg/server setprop pkg/inst_root=/export/ips
# svccfg -s pkg/server setprop pkg/port=5555
# pkgrepo set -s /export/ips publisher/prefix=pkg.skeletor

После этого перечитаем конфиг и запустим:

# svcadm refresh application/pkg/server
# svcadm enable application/pkg/server

Вначале у нас он пустой, что и видно:

# pkgrepo info -s http://192.168.10.15:5555
PUBLISHER PACKAGES STATUS UPDATED
pkg.skeletor 0 online 2013-05-06T14:30:10.719584Z

2) Создание и заливка пакета.

Делать пакет будем на примере imagemagick. Он установлен у нас в папку /opt/imagemagick.2

Генерируем манифест (список файлов нашего пакета, контрольные суммы, прочее):

#pkgsend generate /opt/imagemagick.2 | pkgfmt > imagemagick.p5m.1

Создаём файл описания imagemagick.mog такого содержания:

set name=pkg.fmri value=imagemagick@6.8.4,5.11-0.175.0.11.0.4.1
set name=pkg.summary value="ImageMagick"
set name=variant.arch value=$(ARCH)
set name=info.classification value="org.opensolaris.category.2008:System/Multimedia Libraries"
set name=org.opensolaris.consolidation value=userland
set name=org.opensolaris.arc-caseid value=LSARC/2007/316
set name=info.upstream-url value=http://www.imagemagick.org/
set name=pkg.human-version value=6.8.4
set name=pkg.description value="ImageMagick is a software suite to create, edit, compose, or convert images"

Строки 4-7 не менять. В строке 5 можно после 2008 изменить System/Multimedia Libraries на своё, а остальное — не менять.

Но менять можно не на любое, а только на определённые, иначе получите ошибку

ERROR pkglint.manifest008.6 info.classification attribute in pkg:/tmux@1.8,5.11-0.175.0.11.0.4.1 does not contain one of the values defined for the section System: Administration and Configuration,Core,Databases,Enterprise Management,File System,Fonts,Hardware,Internationalization,Libraries,Localizations,Media,Multimedia Libraries,Packaging,Printing,Security,Services,Shells,Software Management,Text Tools,Trusted,Virtualization,X11 from /usr/share/lib/pkg/opensolaris.org.sections

Создаём остальные манифесты

# pkgmogrify -DARCH=`uname -p` imagemagick.p5m.1 imagemagick.mog | pkgfmt > imagemagick.p5m.2

Составляем списки зависимостей

# pkgdepend generate -md /opt/imagemagick.2 imagemagick.p5m.2 | pkgfmt > imagemagick.p5m.3
# pkgdepend resolve -m imagemagick.p5m.3

Перед сборкой пакета, рекомендую пройтись по файлу imagemagick.p5m.3.res и исправить/добавить необходимое. Формат файла состоит из строк вида:

<action_name> <attribute1=value1> <attribute2=value2> ...

action name может принимать значения из таблицы:

Action Name Description
set Specifies some basic metadata for the package such as a name, description, categorization, and so on.
license Specifies what license is associated with the package and whether, for example, the license must be acknowledged prior to package installation.
file Specifies a single file that is installed by the package. Attributes to the file action specify some basic permissions and where the file is installed.
dir Specifies a single directory that is installed by the package. Attributes to the dir action specify some basic permissions and where the directory is installed.
link Specifies a symbolic link. The link action can also manage mediated links when you want a single link to point to a preferred versioned binary, for example, /usr/bin/python linking to /usr/bin/python2.5.
hardlink Specifies a hard link.
depend Specifies any dependencies a package has on other software. Different types of dependencies can be specified, from simple required dependencies on other packages, to those that are optional or those that indicate that a package cannot be installed if other software is already installed. For a full list of dependency types, see the Packaging and Delivering Software with the Image Packaging System guide.
driver Specifies a device driver that should be installed, along with any aliases that should be set up. The actual driver binary should be installed using a file action.
user Specifies that a user account should be created. Attributes to the user action specify the user name, password, home directory, and other information.
group Specifies that a group should be created. Attributes to the group action specify the group name and group ID.
legacy Specifies that information should be installed in the legacy package database for SVR4 compatibility to ensure that older packages can be installed that may have to satisfy particular dependencies.

Примечание.

1) Если при подготовке файлов *.p5m.* права файлов и папок собираемого пакета принудительно ставятся в

owner=root group=bin

тогда нужно применять такую конструкцию:

<transform file -> default mode 0555>
<transform file -> default group webservd>
<transform file -> default owner webservd>

Как пример, можно выставлять права на отдельные файлы:

<transform dir path=opt/riak/data.* -> set owner riak>
<transform dir path=opt/riak/data.* -> set group riak>
<transform file path=opt/riak/etc/.*.args -> set mode 0644>
<transform file path=opt/apache22/libexec/amd64/libphp5.so -> edit path libphp5.so libphp5.53.so>
<transform file path=opt/elasticsearch/config/elasticsearch.yml -> set preserve true>
<transform file path=opt/omni/lib/ruby/gems/1.9/cache.* -> drop>
<transform file path=(var|lib)/svc/manifest/.*.xml -> add restart_fmri svc:/system/manifest-import:default>

2) Удаляйте информацию о файлах, папках самой ОС из *.p5m.3.res, иначе, при установке пакета будут принудительно выставлены права на системные папки/файлы (а может пакет вообще откажется ставится)

3) Для добавления в пакет FRMI манифеста нужно перед сборкой пакета выполнить такие действия (на примере nginx’a):

— положить сам манифест, служебный бинарник в пакет согласно иерархии (к примеру в lib/svc/manifest/network/nginx.xml и lib/svc/method/nginx соответственно)
— в конец строки, описывающий манифест добавить следующее:

preserve=renamenew restart_fmri=svc:/system/manifest-import:default

то есть должно получится такое:

file group=bin mode=0644 owner=root path=lib/svc/manifest/network/nginx.xml  preserve=renamenew restart_fmri=svc:/system/manifest-import:default

— обязательно строка

set name=org.opensolaris.smf.fmri value=svc:/application/network/nginx:default value=svc:/application/network/nginx

должна идти после строк с описанием манифеста и служебного бинарника (lib/svc/method/nginx)

4) Для создание mediator соответственно добавляем такую строку (на примере postgresql):

link mediator=postgresql mediator-version=9.4 path=usr/bin/psql pkg.linted.pkglint.dupaction007=true target=../postgres/9.4/bin/amd64/psql

И собственно собираем пакет

# pkglint imagemagick.p5m.3.res
Lint engine setup...
Starting lint run...
WARNING opensolaris.manifest004.2 Description matches summary in pkg:/ImageMagick@6.8.4,5.11-0
WARNING pkglint.action005.1 obsolete dependency check skipped: unable to find dependency pkg:/compress/bzip2@1.0.6-0.175.0.0.0.2.537 for pkg:/ImageMagick@6.8.4,5.11-0
WARNING pkglint.action005.1 obsolete dependency check skipped: unable to find dependency pkg:/image/library/libjpeg@6.0.2-0.175.0.0.0.0.0 for pkg:/ImageMagick@6.8.4,5.11-0
WARNING pkglint.action005.1 obsolete dependency check skipped: unable to find dependency pkg:/image/library/libpng@1.4.8-0.175.0.0.0.0.0 for pkg:/ImageMagick@6.8.4,5.11-0
WARNING pkglint.action005.1 obsolete dependency check skipped: unable to find dependency pkg:/library/libxml2@2.7.6-0.175.0.10.0.4.0 for pkg:/ImageMagick@6.8.4,5.11-0
WARNING pkglint.action005.1 obsolete dependency check skipped: unable to find dependency pkg:/library/zlib@1.2.3-0.175.0.0.0.2.537 for pkg:/ImageMagick@6.8.4,5.11-0
WARNING pkglint.action005.1 obsolete dependency check skipped: unable to find dependency pkg:/shell/ksh@0.5.11-0.175.0.9.0.2.1 for pkg:/ImageMagick@6.8.4,5.11-0
WARNING pkglint.action005.1 obsolete dependency check skipped: unable to find dependency pkg:/system/library/math@0.5.11-0.174.0.0.0.0.0 for pkg:/ImageMagick@6.8.4,5.11-0
WARNING pkglint.action005.1 obsolete dependency check skipped: unable to find dependency pkg:/system/library/openmp@0.5.11-0.174.0.0.0.0.0 for pkg:/ImageMagick@6.8.4,5.11-0
WARNING pkglint.action005.1 obsolete dependency check skipped: unable to find dependency pkg:/system/library@0.5.11-0.175.0.11.0.2.1 for pkg:/ImageMagick@6.8.4,5.11-0

А теперь заливаем наш пакет в репозиторий

# pkgsend publish -s http://192.168.10.15:5555 -d /opt/imagemagick.2 imagemagick.p5m.3.res

А можно всё одним скриптом сделать:

#!/bin/sh
PKGPATH=/opt/superpkg
PKGNAME=superpkg
pkgsend generate $PKGPATH | pkgfmt > ${PKGNAME}.p5m.1
pkgmogrify -DARCH=`uname -p` ${PKGNAME}.p5m.1 ${PKGNAME}.mog | pkgfmt > ${PKGNAME}.p5m.2
pkgdepend generate -md $PKGPATH ${PKGNAME}.p5m.2 | pkgfmt > ${PKGNAME}.p5m.3
pkgdepend resolve -m ${PKGNAME}.p5m.3

Обновим наш репозиторий:

# pkgrepo refresh -s /export/ips/ && svcadm restart pkg/server:default

Проверяем наш репозиторий:

# pkgrepo info -s http://192.168.10.15:5555
PUBLISHER PACKAGES STATUS UPDATED
pkg.skeletor 1 online 2013-05-06T15:32:02.638162Z

Как видим, появился 1 пакет. Посмотрим какие именно пакеты есть в нашем репозитории:

pkg list -g http://192.168.10.15:5555/
NAME (PUBLISHER) VERSION IFO
imagemagick (pkg.skeletor) 6.8.4-0.175.0.11.0.4.1 ---

После этого можно подключать данные репозиторий через pkg set-publisher и ставить с него пакеты.

А удалять пакет из репозитория нужно так:

# pkgrepo remove -s /export/ips imagemagick

3) Добавление SRU в репозиторий.

Вариант 1 (by Oracle)

a) Скачиваем ORACLE SOLARIS 11.2.2.8.0 IPS REPOSITORY (SPARC/X86 (64-BIT)) (там может быть несколько zip-архивов), ORACLE SOLARIS 11.2.2.8.0 IPS REPOSITORY INSTALLATION GUIDE (SPARC, X86) (оттуда нам нужен install-repo.ksh)
b) Заливаем на сервер с репозиторием всё скачанное из пункта 1 в любую папку.
c) Выполняем добавление в репозиторий и рестарт репозитория:

# install-repo.ksh -c -v -d /export/ips && svcadm restart pkg/server:default

Вариант 2 (by skeletor)

a) Скачиваем ORACLE SOLARIS 11.2.2.8.0 IPS REPOSITORY (SPARC/X86 (64-BIT))
b) тоже и что и в предыдущем варианте + распаковываем архивы (в нашем случае в папку /export/home/skeletor/patches/new4)
c) Выполняем добавление в репозиторий и рестарт репозитория:

# pkgrecv -s /export/home/skeletor/patches/new4 -d /export/ips '*' && pkgrepo refresh -s /export/ips && svcadm restart svc:/application/pkg/server:default

4) Добавление p5p (idr) пакета в репозиторий.

# pkgrecv -s idr1401.3.p5p -d /export/ips '*' && svcadm restart pkg/server:default

Разное.

Проверить, что нужно обновить на текущей версии ОС:

# pkg update -nv

Проверить зависимости пакетов:

# pkg contents -o fmri -H -r -t depend <pkg/uri/>

Неплохой мануал по работе с pkg

В случае проблем с апргрейдом с ошибкой:

Package solver is unable to compute solution.

рекомендую использовать этот мануал (доступен только платным подписчикам)

facet

Иногда бывают моменты, когда нужно поставить пакет, но оказывается, что он собран с другой версией SRU. Стандартная рекомендация в этой ситуации такая: обновите ОС до нужного SRU и затем ставьте пакет. Но это не всегда подходит. И тогда на помощь приходит facet. В общем случае этот параметр позволяет изменять настройки, которые влияют на процесс установки. Для нас же, достаточно использовать такую конструкцию:

# pkg change-facet -v version-lock.PACKAGE_NAME

это означает снять блокировку с указанного пакета. Пример:

# pkg change-facet -v version-lock.diagnostic/mrtg=False && pkg install pkg.depositphotos/diagnostic/mrtg

Посмотреть текущие facet’ы:

# pkg facet

Вернуть facet в первоначальное значение:

# pkg change-facet -v version-lock.diagnostic/mrtg=none

Metadata

Если нужно что-то поменять/убрать в пакете, без полной пересборки, то можно воспользоваться вот этим мануалом

Локальный репозиторий в Solaris 11: 2 комментария

  1. Dino T. Pittman

    Есть несколько стандартных правил, но, что самое важное, новые правила можно задавать через пункт «Customize Rules» (или Fiddler Script Editor).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *