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 create /export/ips
# 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
Генерируем манифест (список файлов нашего пакета, контрольные суммы, прочее):
#pkgsend generate /opt/imagemagick | pkgfmt > manifest.p5m.1
Создаём файл описания manifest.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` manifest.p5m.1 manifest.mog | pkgfmt > manifest.p5m.2
Составляем списки зависимостей
# pkgdepend generate -md /opt/imagemagick manifest.p5m.2 | pkgfmt > manifest.p5m.3
# pkgdepend resolve -m manifest.p5m.3
Перед сборкой пакета, рекомендую пройтись по файлу manifest.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
5) Если нужно, что бы при обновлении или установке пакет не перезатирал конфигурационный файл, то добавляем такое после описания файла в манифесте
preserve=renamenew
то есть, должно получится так:
file group=bin mode=0644 owner=root path=etc/nginx/nginx.conf preserve=renamenew
И собственно собираем пакет
# pkglint manifest.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 manifest.p5m.3.res
А можно всё одним скриптом сделать:
#!/bin/sh
PKGPATH=/opt/superpkg
pkgsend generate $PKGPATH | pkgfmt > manifest.p5m.1
pkgmogrify -DARCH=`uname -p` manifest.p5m.1 manifest.mog | pkgfmt > manifest.p5m.2
pkgdepend generate -md $PKGPATH manifest.p5m.2 | pkgfmt > manifest.p5m.3
pkgdepend resolve -m manifest.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 ---
Либо можно посмотреть все доступные пакеты так:
# pkgrepo list -s /export/ips
После этого можно подключать данные репозиторий через 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
Если нужно что-то поменять/убрать в пакете, без полной пересборки, то можно воспользоваться вот этим мануалом
2 коментарі “Локальный репозиторий в Solaris 11”
Есть несколько стандартных правил, но, что самое важное, новые правила можно задавать через пункт “Customize Rules” (или Fiddler Script Editor).
не понял, о чём вы?