Я пытался установить Go (golang) на недавно созданную виртуальную машину Solaris 11.3 (загруженную с Oracle), но получал следующую ошибку:
root@solaris:/export/home/jdeppe# pkg install golang-15
Creating Plan (Running solver): /
pkg install: No matching version of developer/golang-15 can be installed:
Reject: pkg://solaris/developer/golang-15@1.5-5.12.0.0.0.95.0
Reason: No version matching 'require' dependency runtime/perl-520@5.20.1,5.11-5.12.0.0.0.90.0 can be installed
----------------------------------------
Reject: pkg://solaris/runtime/perl-520@5.20.1-5.12.0.0.0.90.0
Reason: No version matching 'optional' dependency runtime/perl-512@5.12.5,5.11-5.12.0.0.0.69.0 can be installed
----------------------------------------
Reject: pkg://solaris/runtime/perl-512@5.12.5-5.12.0.0.0.90.0
pkg://solaris/runtime/perl-512@5.12.5-5.12.0.0.0.95.0
Reason: This version is excluded by installed incorporation consolidation/userland/userland-incorporation@0.5.11-0.175.3.1.0.3.0
----------------------------------------
Reject: pkg://solaris/runtime/perl-520@5.20.1-5.12.0.0.0.95.0
Reason: No version matching 'optional' dependency runtime/perl-512@5.12.5,5.11-5.12.0.0.0.69.0 can be installed
----------------------------------------
После некоторого поиска в Google я наконец запустил: pkg change-facet facet.version-lock.runtime/perl-512=false
, после чего я смог установить голанг-15. Сладкий!!
Может кто-нибудь объяснить, что я только что сделал :). Я знаю, что этот вопрос звучит странно, но мне удалось решить его, когда я его писал (я не понял change-facet
прочее). Я все еще хотел бы понять последствия этого действия.
Мог (должен был) я решить это иначе?
Текущая версия developer/golang-15
пакет зависит от Perl 5.22:
$ pkg contents -r -o fmri,type -t depend developer/golang-15
FMRI TYPE
pkg:/runtime/perl-522@5.22.1-5.12.0.0.0.95.0 require
pkg:/system/library@0.5.11-0.175.3.1.0.3.0 require
release/evaluation require
В вашем случае он, по-видимому, все еще зависел от Perl 5.20. В любом случае проблема в том, что установка Solaris 11.3 по умолчанию идет с Perl 5.12. Поскольку другие пакеты также зависят от среды выполнения Perl, система пытается заблокировать эту версию, чтобы предотвратить повреждение пакетов. Это делается с помощью функции управления пакетами Solaris, которая называется Инкорпорации. Пакет включения служит для предотвращения непреднамеренных обновлений или понижения версий пакетов ОС. Однако для некоторых пакетов это будет лазейкой, чтобы администратор мог установить другую версию. Установив facet.version-lock.runtime/perl-512=false
вы фактически сказали Solaris снять блокировку с Perl 5.12 и разрешить обновление до более поздней версии. После установки Golang ваша версия Perl по умолчанию изменится с 5.12 на 5.22:
$ perl --version
This is perl 5, version 22, subversion 1 (v5.22.1) built for i86pc-solaris-thread-multi-64
Copyright 1987-2015, Larry Wall
Вот ссылка на документацию Oracle, которая более подробно объясняет эту функцию: http://docs.oracle.com/cd/E26502_01/html/E28984/gmias.html