Внезапно (на самом деле нет, oracle предупреждает, что такие библиотеки помечены как legacy и скоро будут obsoleted), с определённого SRU Solaris прекратил поддерживать старые библиотеки, от которых зависит ПО, собранное вручную. Итог – нельзя обновиться до этого и выше SRU без удаления этого ПО. Как же быть? Выход один – перелить пакеты-зависимости из репозитория solaris в свой, предварительно незначительно изменив название пакетов и их зависимостей.
Приступим. Введём обозначение:
ПО – soft1, зависимости – dependence1, dependence2,…
Замечание.
Предполагается, что у вас есть уже свой собственный репозиторий пакетов. Если нету – то эта статья поможет его развернуть
1) Стягиваем пакет в “сыром” виде себе.
pkgrecv -v -d ./ -s http://repo.domain.com/solaris --raw soft1-98@1.1.1-11.4.36.0.1.101.0
pkgrecv -v -d ./ -s http://repo.domain.com/solaris --raw dependence1-76@1.1.1-11.4.36.0.1.101.0
pkgrecv -v -d ./ -s http://repo.domain.com/solaris --raw dependence2-76@1.1.1-11.4.36.0.1.101.0
Зависимости можно посмотреть так:
- от каких пакетов зависит конкретный пакет
pkg contents -o fmri -H -r -t depend <pkg/uri/>
- какие пакеты зависят от конкретного пакета
pkg search -l -o pkg.name 'depend::PKG_NAME'
2) Правим пакет
После стягивания пакета переходим в папку каждого пакета, открываем файл manifest, и меняем название пакетов и зависимостей, так, что бы они не совпадали с теми пакетами, которые уже есть. Например, так:
dependence1 -> dependence_1, dependence2 -> dependence_2, …
Не забываем так же менять строку
set name=pkg.fmri value=pkg://repo.domain.com/soft1-98@1.1.1-11.4.36.0.1.101.0
на такую
set name=pkg.fmri value=pkg://my-repo.domain.com/soft_1-98@1.1.1-11.4.36.0.1.101.0
То есть, изменили имя репозитория и немного название пакета (символ подчёркивания). Если этого не сделать, то при заливке пакета ошибку не выдаст, но и пакет залит не будет.
3) Заливаем пакет
pkgsend publish -s /path/to/my-repo -d /path/to/pkg /path/to/pkg/manifest
Если нужно удалить пакет, то делаем так:
pkgrepo remove -p my-repo -s /path/to/my-repo library/pkg-43
Не забываем в самом конце обновить репозиторий:
pkgrepo refresh -s /path/to/my-repo ; svcadm restart pkg/server:default