Um olhar sobre o Portage-Tools - Parte III

Nesta terceira parte, pretendo introduzir os conceitos de USE flags e sua utilização. Como podemos construir um sistema moderno e estável definindo as flags necessárias. Vou expor também o arquivo de configurações que, talvez, seja o mais conhecido e utilizado no Gentoo: o make.conf. Vou apresentar também outros arquivos de configuração muito úteis para a dupla dinâmica: Portage/Emerge. Vamos nessa!

[ Hits: 11.258 ]

Por: Luiz Santos em 07/07/2016


USE FLAGS



Como o Gentoo é um sistema todo compilado os usuários possuem um poder maior nas mãos sobre o que eles querem ou não habilitar em seu sistema. Logicamente isto exige um bom conhecimento por parte do usuário. Isto é muito útil e muito versátil para modificarmos nosso sistema. Grande parte desta flexibilidade é fornecida pelas chamadas USE flags.

As USE flags são funcionalidades que ativamos/desativamos globalmente ou em determinados pacotes para nosso sistema operar do modo que precisamos. Por exemplo, para um Desktop que será usado para jogos, é necessário setar algumas funcionalidades para que o software de emulação, ou o jogo em si, rode sem nenhum problema na nossa plataforma. Estas funcionalidades são implementadas através das USE flags. Neste cenário uma USE flag necessária seria a gecko, por exemplo, para que nosso emulador/jogo rode sob as características desta engine. Uma outra flag que poderíamos setar é a ncurses para jogos que utilizam tal biblioteca.

Mas estes são exemplos bem específicos. Geralmente é necessário setar estas flags se quisermos que nossos jogos tenham um bom rendimento. Mas e para softwares corriqueiros que vem, por padrão, inchados com tantas funcionalidades, muitas das quais nem sequer usaremos? Simples. Desabilitamos tais flags desnecessárias e compilamos o software com apenas o que precisamos e iremos utilizar. Logicamente que o usuário precisa saber o que ele quer ou não e que saiba quais flags são necessárias para o fim desejado. É por isto que digo e repito: a dificuldade do Gentoo não está em sua instalação, e sim em sua administração. Mas veremos que isto é um aprendizado muito interessante.
O Gentoo possui centenas de USE flags, distribuídas entre duas categorias: flags globais e flags locais.

FLAGS GLOBAIS

São usadas por inúmeros pacotes e por nós mesmos, os usuários. Na verdade usamos e abusamos de tais flags. Podemos encontrar estas flags no arquivo: /usr/portage/profiles/use.desc. É com elas que trabalhamos diariamente habilitando ou desabilitando nos diversos softwares. Para que uma flag seja categorizada como global é preciso que satisfaça alguns critérios como:
  • ser usada por, ao menos, 5 diferentes tipos de pacotes.
  • possuir um propósito geral não específico.

Estes são pontos importantes pois se uma flag tem um comportamento substancialmente diferente entre dois pacotes, por exemplo, ela não deve ser uma flag global por conter tanta diversidade.

FLAGS LOCAIS

São mais restritas para que determinadas funcionalidades essenciais sejam habilitadas. Podemos encontrar a lista de flags locais no arquivo: /usr/portage/profiles/use.local.desc.

Para deixar mais claro como trabalhamos com as flags USE, vamos analisar o pacote app-admin/conky:
Vamos olhar estas flags mais de perto.

Conky - local USE flags:
  • apcupsd: habilita suporte ao daemon APC UPS, que pode ser usado como gerenciador de energia em um grande número de UPS (aqui no Brasil, NO-BREAK).
  • audacious: habilita suporte ao audacious.
  • cmus: cmus é um plugin de leitor de música escrito em ncurses, que roda diretamente do terminal. É bem interessante este programa.
  • eve: flag que habilita algumas funcionalidades online para o conky
  • ical: implementação básica dos protocolos do iCalendar
  • iostats: habilita suporte de estatísticas de Input/Output por tarefa.
  • irc: habilita suporte ao canal irc, através da biblioteca libircclient.
  • lua-cairo: habilita suporte à LUA-CAIRO
  • lua-imlib: habilita suporte à scripts LUA e à biblioteca de renderização de imagem: imlib.
  • lua-rsvg: habilita suporte à scripts LUA e à biblioteca de renderização SVG.
  • math: habilita suporte à biblioteca math de linguagem C do GNU.
  • moc: outro player ncurses que roda diretamente do console.
  • mpd: daemon de música (Music Player Daemon).
  • nano-syntax: habilita sintaxe destacada do nano.
  • nvidia: habilita suporte à leitura de sensores de temperatura através do pacote media-video/nvidia-settings.
  • portmon: um daemon que monitora portas TCPIP(4).
  • thinkpad: habilita suporte aos mousepads dos notebooks da IBM/Lenovo.
  • weather-metar: ativa suporte à meteorologia.
  • weather-xoap: ativa suporte à meteorologia através do serviço xoap.
  • webserver: habilita suporte à biblioteca C libmicrohttpd, que roda serviços HTTPD como parte de outra aplicação.
  • xmms2: nova geração do player XMMS.

Conky - global USE flags:
  • X: adiciona suporte gráfico para o X.
  • curl: adiciona suporte cliend-side para a biblioteca de transferência de URL.
  • debug: habilita informações extras de debug.
  • hddtemp: habilita suporte à leitura de temperatura do HD, através do pacote app-admin/hddtemp.
  • iconv: habilita suporte à biblioteca de conversão de caracteres - libconv.
  • imlib: adiciona suporte à biblioteca imlib, que carrega e renderiza imagens.
  • ipv6: adiciona suporte à IPV6.
  • mysql: adiciona suporte ao banco de dados mysql.
  • ncurses: habilita suporte e uso da biblioteca ncurses.
  • rss: habilita suporte à Feeds RSS.
  • trutype: habilita suporte às fontes FreeType e FreeType2.
  • vim-syntax: habilita suporte à sintaxe do vim.
  • wifi: habilita funções do wireless.

Mas como estas flags se relacionam com o programa em si? Voltando aos artigos anteriores, expliquei brevemente sobre os ebuils, que nada mais são do que scripts shell que tem a função de preparar cada pacote para instalação no sistema. Estes são mantidos pelos desenvolvedores do Gentoo para manter a compatibilidade no sistema entre arquiteturas, demais programas, versões etc.

Falando especificamente das flags, cada ebuild possui uma instrução que indica quais flags estão habilitadas e quais não estão. Dependendo da flag, esta, por sua vez, pode puxar outras flags como dependência. A grosso modo há três variáveis que gerenciam dependências para os pacotes, incluindo as flags. Estas variáveis são a DEPEND, RDEPEND e PDEPEND. A variável DEPEND (build dependencies) especifica qualquer dependência que seja necessária para extrair, compilar, aplicar patches e instalar o pacote. E todos os pacotes possuem declarações implícitas sobre tempo de compilação e dependências sobre todo o sistema. Uma declaração básica desta variável pode ser o seguinte:

DEPEND="dev-lang/ruby
    dev-ruby/ruby-gtk2
    dev-ruby/mysql-ruby"

É possível declarar as versões das dependências:

DEPEND=">=sys-libs/ncurses-5.2-r2:0=
   readline? ( >=sys-libs/readline-${READLINE_VER}:0= )

Ou declarar as dependências dentro de um range:

DEPEND="gtk? ( =x11-libs/gtk+-1.2* )"

Ou ainda por SLOTS:

DEPEND="qt3? ( x11-libs/qt:3 )
    gtk? ( x11-libs/gtk+:2 )

Ou então para verificar se algumas das flags estão habilitadas ou desabilitadas:

#código para flags habilitadas DEPEND="perl? ( dev-lang/perl )
    ruby? ( >=dev-lang/ruby-1.8 )
    python? ( dev-lang/python )"

#código para verificar flags desabilitadas
RDEPEND="!crypt? ( net-misc/netkit-rsh )"

A variável RDEPEND (runtime dependencies) especifica qualquer dependência que seja necessária em tempo de compilação. Isto inclui bibliotecas (linkadas dinamicamente) e quaisquer pacotes de dados e interpretadores (para linguagens interpretadas). Nos EAPI's anteriores ao 4, caso esta variável não estivesse definida, a ela seria atribuída, automaticamente, os valores da variável DEPEND. Porém o uso implícito era desaprovado. Com a chegada do EAPI4 isto foi abolido e a atribuição à variável DEPEND deve ser sempre feita de forma explícita. Portanto sempre encontraremos informações como estas nos ebuilds:

RDEPEND="${DEPEND}
   !<sys-apps/portage-2.1.6.7_p1
   !<sys-apps/paludis-0.26.0_alpha5"

Ou apenas:

RDEPEND="${DEPEND}"

Entretanto há ebuilds que não especificam quaisquer dependências, pois não são necessárias. Neste caso também não será necessário declarar tais variáveis.

A variável PDEPEND especifica as dependências que devem ser instaladas após a instalação do pacote solicitado, mas esta dependência poderá ser instalada a qualquer momento. No geral o uso desta variável é evitada em favor da variável RDEPEND, exceto caso esta última cause dependências circulares¹.

Voltando às flags do conky, em seu ebuild tem declarado o seguinte:

DEPEND_COMMON="
   X? (
      imlib? ( media-libs/imlib2[X] )
      lua-cairo? (
         >=dev-lua/toluapp-1.0.93
         x11-libs/cairo[X] )
      lua-imlib? (
         >=dev-lua/toluapp-1.0.93
         media-libs/imlib2[X] )
      lua-rsvg? (
         >=dev-lua/toluapp-1.0.93
         gnome-base/librsvg )
      nvidia? ( || ( x11-drivers/nvidia-drivers[tools,static-libs] media-video/nvidia-settings ) )
      truetype? ( x11-libs/libXft >=media-libs/freetype-2 )
      x11-libs/libX11
      x11-libs/libXdamage
      x11-libs/libXfixes
      x11-libs/libXext
      audacious? ( >=media-sound/audacious-1.5 dev-libs/glib:2 )
      xmms2? ( media-sound/xmms2 )
   )
   cmus? ( media-sound/cmus )
   curl? ( net-misc/curl )
   eve? ( net-misc/curl dev-libs/libxml2 )
   ical? ( dev-libs/libical )
   iconv? ( virtual/libiconv )
   irc? ( net-libs/libircclient )
   mysql? ( >=virtual/mysql-5.0 )
   ncurses? ( sys-libs/ncurses:= )
   rss? ( dev-libs/libxml2 net-misc/curl dev-libs/glib:2 )
   wifi? ( net-wireless/wireless-tools )
   weather-metar? ( net-misc/curl )
   weather-xoap? ( dev-libs/libxml2 net-misc/curl )
   webserver? ( net-libs/libmicrohttpd )
   >=dev-lang/lua-5.1.4-r8:0
   "

Certo, todas as flags vistas no conky, estão ali, declaradas. Isto irá verificar se, por exemplo, o usuário habilitou a flag wifi. Caso positivo, haverá um trecho de código para esta situação. Não vou entrar nos detalhes dos ebuilds pois não é o caso no momento. Ficará para um futuro artigo.

Algumas flags podem vir ativadas por padrão por conta das flags que temos setadas no make.conf e/ou até mesmo pelo profile escolhido com o eselect. Entretanto, podemos escolher compilar sem as flags desejadas. Na próxima página veremos as formas para escolhermos as flags.

NOTA: [1] Dependência circular: dependência circular é quando um pacote A depende de um pacote B, que por sua vez depende do pacote A. Sendo assim ambos não podem ser instalados um antes do outro. A primeira vista parece um tanto quanto bizarro, mas é um problema relativamente fácil de resolver bastando desabilitar algumas ou apenas uma USE flag. O Portage informará o melhor caminho a tomar neste caso.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. USE FLAGS
   3. USE FLAGS - PARTE II
   4. USE FLAGS - PARTE III
   5. O arquivo make.conf
   6. O arquivo make.conf - PARTE II
   7. O arquivo make.conf - PARTE II - variáveis cflags / cxxflags e otimização do sistema
   8. O arquivo make.conf - PARTE III
   9. O arquivo make.conf - PARTE IV
   10. O arquivo make.conf - PARTE V
   11. Finalizando
Outros artigos deste autor

Um olhar sobre o Portage Tools - Parte II

Um olhar sobre o Portage-tools - Parte I

Leitura recomendada

Utilizando GNU/Autotools em Projetos

Linux Mint sugere substituição da versão 19.3 Tricia

Metisse + Gnome + Slackware (3D Desktop)

Cafe Con Leche (Gerenciador de Lan House e Cyber Café)

ALSA

  
Comentários
[1] Comentário enviado por luiztux em 07/07/2016 - 08:41h

Galera, uma atualização:

Sobre a variável do USE_EXPAND, a L10N, esta irá substituir a variável LINGUAS em um futuro próximo. Então, obrigatoriamente, devemos ter ambas informadas no nosso make.conf respeitando as diferenças de padrões entre elas.

É isso aí.

-----------------------------------''----------------------------------

"If it moves, compile it."


[2] Comentário enviado por albfneto em 07/07/2016 - 12:06h

muito bom isso! parabéns.
favoritado , como as outras partes.
é legal a galera conhecer Portage. Portage é uma obra prima de programação
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].

[3] Comentário enviado por luiztux em 07/07/2016 - 12:20h


[2] Comentário enviado por albfneto em 07/07/2016 - 12:06h

muito bom isso! parabéns.
favoritado , como as outras partes.
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].


Obrigado Alberto. Sua opinião vale muito pois, como escrevi, parte deste conhecimento obtive através de você. Então eu sinto uma relação de supervisão da sua parte, por assim dizer..rsrsr

[4] Comentário enviado por albfneto em 09/07/2016 - 19:53h

quando terminar tudo, vou fazer uma sugestão.
você junta todas as partes, com copiar e colar, e faz uma apostila ou pequeno livro, e posta no Site "Domínio Público". Cite sua autoria, lógicamente.

tem muita coisa de linux lá, de Química, de Artes, de tudo. Pa vc ver, vai no site

http://www.dominiopublico.gov.br/pesquisa/PesquisaObraForm.do

e no formulário de busca use Palavras-Chave "Ciências da Computação", "Linux".

o legal do site Domínio Público é que ele é desenvolvido usando Software Livre

No que se refere a seu Artigo, sugerí porque Portage tem pouca literatura em Português.

Eu gostaria que muita gente conhecesse Portage, porque é fenomenal, muito bem programado. Ele acha as dependências, gerencia tudo, faz o que vc quer... um GCC, mas um GCC todo automático. Portage é genial

Não sei Porque, mas alguns Gentoístas, no Mundo todo, não eu, você ou o próprio Daniel Robbins (ele é muito acessível, sempre respondeu meus emails), não gostam de ensinar a usar Gentoo ou Portage, não sei ao certo o por que.
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].

[5] Comentário enviado por luiztux em 09/07/2016 - 20:20h

Gostei da ideia e agradeço. Farei isto quando terminar.

Em relação ao Daniel, realmente, o cara é muito acessível e solícito. Também tive a oportunidade de falar com ele e com outros desenvolvedores do Gentoo como: Nathan Zachary, Michal Gorny e Zack Medico e os caras sempre muito solícitos, sem problema nenhum. Mas infelizmente tem aqueles que se acham superiores aos outros e não gostam de ajudar. É uma lástima...


-----------------------------------''----------------------------------

"If it moves, compile it."


[6] Comentário enviado por Pygoscelis em 13/07/2016 - 13:51h

.

[7] Comentário enviado por Pygoscelis em 13/07/2016 - 13:52h

Muito bom e útil! Se tivesse lido esses artigos um tempo atrás, quando migrei para Gentoo, diminuiria bastante minhas leituras e buscas. Legal também reunir links do Alberto que tanto já me foram úteis. Valeu!

[8] Comentário enviado por luiztux em 14/07/2016 - 08:48h


[7] Comentário enviado por Pygoscelis em 13/07/2016 - 13:52h

Muito bom e útil! Se tivesse lido esses artigos um tempo atrás, quando migrei para Gentoo, diminuiria bastante minhas leituras e buscas. Legal também reunir links do Alberto que tanto já me foram úteis. Valeu!


Obrigado pelo comentário. Realmente precisamos de extensiva leitura para usar o Gentoo. Nestes artigos tentei passar um pouco do que aprendi, depois de muita busca e leitura, como você disse. Claro que isto não irá tornar nada mais fácil para quem chega ao sistema, mas espero que dê um "Norte" para quem precisar.
O Alberto é um cara excepcional que manja demais. Os artigos e dicas dele são referência e por este motivo eu reuni estas informações.

Um abraço.

[9] Comentário enviado por removido em 30/07/2016 - 19:16h

Ainda vou instalar o Gentoo, basta eu conseguir algum tempo livre.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts