É notável que tudo está ligado pelas flags USE. Lembram-se dos inúmeros arquivos que listei na parte 2 desta série? Pois bem, eles também influenciam aqui. Por este motivo é preciso saber o que fazemos no sistema, ou iremos compilar um software todo quebrado. Logicamente o Portage irá nos avisar de dependências quebradas e tudo o mais, porém, para que ter dor de cabeça à toa se podemos evitar? Basta ler um pouquinho mais e procurar entender como o sistema funciona. Acredite: tudo ficará mais fácil.
Todos estes pontos conectados estão sob a supervisão do Portage que fará a verificação conforme definido em cada ebuild de cada software. Continuando com o exemplo do conky, vamos dar uma olhada em seu ebuild e as instruções do IUSE para o Portage:
Na linha 16 temos a variável IUSE, que serve para declarar as flags para compilação do pacote. Dentre elas estão flags globais e locais. Não entrarei em detalhes sobre a construção do ebuild, isto é tema para outro artigo.
As flags globais estão descritas nos arquivos, já citados, use.desc, ou em um arquivo chamado de Metadata.xml, disponível no diretório de cada ebuild. Tudo isto também estará nos nossos diretórios locais, que serve como snapshot da árvore do Portage. Caso queira uma visão mais abrangente de todas as flags disponíveis, vá direto à fonte: https://www.gentoo.org/support/use-flags/.
O arquivo use.desc contém todas as flags globais com informações sobre as mesmas e/ou o que elas fazem. Quem altera estes arquivos são os mantenedores do Gentoo, após uma votação para introdução de novas flags globais. As flags locais, como já informado, estão listadas no arquivo use.local.desc e também em um arquivo Metadata.xml.
O arquivo use.local.desc não é editado diretamente pelos desenvolvedores, pois ele é gerado a partir do Metadata.xml. Isto está documentado na GLEP56, que propõem a adição de flags e sua descrição, pacote a pacote, para cada Metadata de pacote. Isto tudo é informação para os desenvolvedores, aos usuários, cabe decidir quais flags usar. Em casos mais extremos, reportamos bugs sobre elas. Em outros casos, ajudamos na construção de novas flags globais. Eis aqui o arquivo Metadata do conky:
Como um ponto está ligado à outro no Gentoo, é possível (e bem provável), que tenhamos conflitos entre as USE flags. Na verdade isto é até mais comum do que se parece. Isto acontece pois nos ebuilds os desenvolvedores podem especificar uma ou mais dependências para compilar um pacote.
Estas dependências se traduzem em características ou recursos. Algumas flags podem ter funcionalidades similares, o que difere é que a flag Y pode conter melhores características do que a flag X. O Portage pode decidir utilizar a flag Y ao invés da flag X, por possuir mais recursos. Porém, você setou no make.conf que quer habilitado globalmente a flag X, porém tem instalado o pacote.foo que necessita da flag Y.
Ao tentar instalar o pacote.foo_bar o Portage deverá decidir qual utilizar com base no ebuild deste pacote, entretanto, ambas as flags não podem ser instaladas ao mesmo tempo no mesmo sistema. Aí pode acontecer um conflito, pois o pacote selecionado para instalar, não pode ser instalado/compilado com ambas as flags ativas.
É preciso escolher uma e apenas uma delas. Para evitar este problema ao máximo (acredite, é um problema bem chato), os desenvolvedores, ao construir o ebuild, podem especificar a variável REQUIRED_USE para permitir combinações entre as flags. Esta variável contém uma lista de afirmações que devem ser cumpridas pelas configurações definidas nas USE flags. Por exemplo, a construção fictícia do ebuild abaixo terá conflitos:
É aqui que entra a variável REQUIRED_USE, definida no EAPI4. Vejamos:
Mas este é apenas um exemplo superficial. Com o tanto de possibilidades que o sistema nos oferece, ele é uma caixinha de boas surpresas, mas mal configurado pode tornar-se um pesadelo. Lembre-se: a dificuldade é na administração do sistema. Vou lembrá-los disto até o último artigo da série.
Para além das flags globais e locais, há mais algumas que foram convencionadas como USE flags, também. São elas: VIDEO_CARDS, INPUT_DEVICES e LINGUAS. Esta última é assim mesmo, chama-se LINGUAS. Seu propósito é autoexplicativo, não? Pois bem, estas flags são comumente chamadas de USE_EXPAND e ARCH USE. Isto está definido no arquivo padrão do Portage: make.defaults. Assim como as flags globais, estas também são setadas no arquivo make.conf. A sintaxe que devemos utilizar neste arquivo é o seguinte:
#setando algumas flags globais
USE="X bindist alsa ..."
#placa de vídeo
VIDEO_CARDS="intel"
#dispositivos de entrada: mouse(usb etc), dispositivos bluetooth etc.
INPUT_DEVICES="evdev keyboard"
#setando a linguagem que os pacotes devem ser instalados
LINGUAS="pt_BR"
É bem simples não é? O Portage buscará todas estas informações antes de compilar qualquer pacote. Ah, e se tiver qualquer coisa errada, logicamente ele informará e não continuará o processo.
Veremos agora como funciona o make.conf do Gentoo. Vamos nessa!