[Solaris] Хитрость с obsoleted пакетами

Внезапно (на самом деле нет, 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

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

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