TL; DR:
# pkg change-facet \
version-lock.system/library/gcc/gcc-c-runtime=false \
version-lock.system/library/gcc/gcc-c++-runtime=false
e tente novamente.
Portanto, o problema é que gcc-5
é o que é conhecido como um pacote "group". Isto é, consiste (pelo menos primariamente) de um monte de group
de dependências. Uma group
dependency é aquela que será instalada, se possível, mas ignorada, se não for. Neste caso, não foi possível instalar uma ou mais das dependências de gcc-5
, então elas foram ignoradas e você acabou com menos do que o esperado.
Quando isso acontece (seja menos pacotes ou pacotes em uma versão diferente), a primeira coisa que você deve fazer é dizer pkg
o que você realmente espera. (Agora, a desconexão aqui é como saber o que esperar; sem saber como inspecionar gcc-5
para essa informação, ou mesmo sabendo que talvez seja necessário, não sei como responder a isso.) Nesse caso, escolha uma de suas dependências para ver se isso ajuda; digamos, gcc-c-5
(você seguiu este passo para gcc-c++-5
, o que lhe deu o mesmo problema que mostro aqui, mas eu queria juntar tudo em uma resposta). Isso diz ao pkg
para não ignorar sua incapacidade de instalar o gcc-c-5
, mas para reclamar em detalhes sobre o motivo pelo qual ele não pôde ser instalado. Espero que haja algo na saída para nos dar uma pista sobre o que fazer em seguida:
# pkg install -nv gcc-5 gcc-c-5
Creating Plan (Solver setup): |
pkg install: No matching version of developer/gcc-5 can be installed:
Reject: pkg://solaris/developer/[email protected]
Reason: No version matching 'group' dependency developer/gcc/gcc-c++-5 can be installed
----------------------------------------
Reject: pkg://solaris/developer/gcc/[email protected]
Reason: No version matching 'require' dependency developer/gcc/gcc-c-5 can be installed
----------------------------------------
Reject: pkg://solaris/developer/gcc/[email protected]
Reason: No version matching 'require' dependency system/library/gcc/[email protected],5.11-5.12.0.0.0.115.0 can be installed
----------------------------------------
Reject: pkg://solaris/system/library/gcc/[email protected]
Reason: No version matching 'require' dependency system/library/gcc/[email protected],5.11-5.12.0.0.0.115.0 can be installed
----------------------------------------
Reject: pkg://solaris/system/library/gcc/[email protected]
Reason: This version is excluded by installed incorporation consolidation/userland/[email protected]
----------------------------------------
Reason: This version is excluded by installed incorporation consolidation/userland/[email protected]
----------------------------------------
----------------------------------------
----------------------------------------
No matching version of developer/gcc/gcc-c-5 can be installed:
Reject: pkg://solaris/developer/gcc/[email protected]
Reason: [already rejected; see above]
Quando você obtém uma confusão de saída do solucionador como essa, normalmente deseja procurar o problema mais recuado e ver se pode corrigir isso. Nesse caso, você vê que não é possível instalar o [email protected]
porque foi excluído por uma incorporação instalada.
Talvez seja necessária uma digressão: o que é uma incorporação? Como um pacote de grupo, é um pacote que fornece principalmente dependências, neste caso, incorporate
dependencies. Essas dependências nunca realmente fazem com que pacotes sejam instalados; eles simplesmente colocam restrições nos pacotes que podem ser instalados. Especificamente, incorporar [email protected]
significa que, se foo
estiver instalado, ele deve estar no intervalo de versão [1.2, 1.3)
; ou seja, um mínimo de 1.2
(inclusive) e um máximo de 1.3
(exclusivo) ou qualquer coisa que corresponda a 1.2.x.y.z....
.
Nesse caso, a incorporação userland-incorporation
que já está instalada no sistema colocou uma restrição em gcc-c-runtime
que é incompatível com a versão de gcc-c-runtime
que a instalação gcc-c-5
exige.
É aí que nos deparamos com uma das esquisitices do programa de avaliação Solaris FOSS. Os pacotes disponibilizados lá não estão bem integrados com o resto do sistema; Eles foram projetados para serem instalados em uma versão mais recente do Solaris. Mas eles foram construídos de tal forma que o sistema pode ser, pelo menos, massageado para permitir que eles sejam instalados. Nesse caso, você precisa alterar algumas facetas.
A maioria dos pacotes FOSS no Solaris são incorporados de tal forma que a restrição fornecida por essa dependência incorporate
pode ser relaxada. Você pode fazer isso alterando a faceta nomeada por version-lock.<pkg-name>
to false
. Nesse caso, gcc-c-runtime
e gcc-c++-runtime
são os dois pacotes que bloqueiam a instalação desejada, então (como acima):
# pkg change-facet \
version-lock.system/library/gcc/gcc-c-runtime=false \
version-lock.system/library/gcc/gcc-c++-runtime=false
Isso dará um pouco de saída, mas aparentemente não faz muito. Uma vez feito isso, podemos tentar novamente:
# pkg install -nv gcc-5 gcc-c-5
Packages to install: 20
Packages to update: 2
Mediators to change: 1
Services to change: 1
Estimated space available: 8.54 GB
Estimated space to be consumed: 1.49 GB
Create boot environment: No
Create backup boot environment: Yes
Rebuild boot archive: No
Changed mediators:
mediator gcc:
version: None -> 5 (system default)
Changed packages:
solaris
developer/assembler
None -> 0.5.11,5.11-0.175.3.9.0.2.0:20160528T012706Z
developer/gcc-5
None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T170530Z
developer/gcc/gcc-c++-5
None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T164822Z
developer/gcc/gcc-c-5
None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T165027Z
developer/gcc/gcc-common-5
None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T165220Z
developer/gcc/gcc-gfortran-5
None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T165431Z
developer/gcc/gcc-gobjc-5
None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T165624Z
developer/gnu-binutils
None -> 2.23.1,5.11-0.175.3.0.0.30.0:20150821T164528Z
library/gmp
None -> 4.3.2,5.11-0.175.3.0.0.30.0:20150821T165358Z
library/isl
None -> 0.12.2,5.12-5.12.0.0.0.115.0:20170111T171737Z
library/mpc
None -> 0.9,5.11-0.175.3.0.0.30.0:20150821T165558Z
library/mpfr
None -> 2.4.2,5.11-0.175.3.0.0.30.0:20150821T165559Z
release/evaluation
None -> 1.0,5.12-5.12.0.0.0.115.0:20170111T175931Z
system/header
None -> 0.5.11,5.11-0.175.3.19.0.2.0:20170328T014052Z
system/library/gcc/gcc-c++-runtime-5
None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181800Z
system/library/gcc/gcc-c-runtime-5
None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181840Z
system/library/gcc/gcc-gfortran-runtime
None -> 4.8.2,5.11-0.175.3.0.0.30.0:20150821T172507Z
system/library/gcc/gcc-gfortran-runtime-5
None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181902Z
system/library/gcc/gcc-gobjc-runtime
None -> 4.8.2,5.11-0.175.3.0.0.30.0:20150821T172513Z
system/library/gcc/gcc-gobjc-runtime-5
None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181919Z
system/library/gcc/gcc-c++-runtime
4.8.2,5.11-0.175.3.0.0.30.0:20150821T172447Z -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181825Z
system/library/gcc/gcc-c-runtime
4.8.2,5.11-0.175.3.0.0.30.0:20150821T172458Z -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181848Z
E voila, temos vários pacotes instalados, que na verdade contêm coisas. A partir daqui, você deve agora poder digitar gcc --version
e ver que é de fato 5.4.0. Note também que os dois pacotes cujas facetas nós desbloqueamos foram atualizados, uma possibilidade disponível após o desbloqueio.
Você pode perguntar por que não precisamos desbloquear outras facetas. A razão para isso é que o Solaris 11.3 não entregou o GCC 5 e, portanto, não apresentou restrições em suas versões de pacote. Portanto, todos os pacotes gcc-*-5
já não são restritos e não precisam ser desbloqueados para relaxar as restrições.
Você pode notar que os pacotes gcc-gfortran-runtime
e gcc-gobjc-runtime
foram instalados em suas versões 4.8. Isso é porque eles ainda estão constrangidos, mas nada do que fizemos conflitou com essas restrições. Por questões de consistência, você provavelmente deveria desbloqueá-los também, e depois atualizá-los para suas versões 5.x (ou, se você já chegou até aqui antes de tentar qualquer coisa, apenas os desbloqueie desde o início).
Espero que isso ajude. Minhas desculpas por não ter visto essa pergunta antes.