O
Portage é escrito, parte em Python, parte em Bash Script. Isto quer dizer que para que o Portage e suas ferramentas possam trabalhar, é necessário termos algum interpretador do Python e do Bash no sistema. Assim como a maioria dos pacotes/softwares, não apenas do Gentoo, mas de todas as distros, o Portage também possui dependências necessárias. São apenas duas, porém, são definidas como Hard Dependency pois são de vital importância para o funcionamento desta ferramenta. Estas duas dependências são o Python e o Bash. As versões estáveis destes já vem no tarball do Portage para facilitar nossa vida.
Assim como todos os outros pacotes do Gentoo, o Portage também possui o seu próprio ebuild. Vamos dar uma olhada no conteúdo:
Fonte: packages.gentoo.org
Aqui podemos verificar a versão do EAPI (explicação nas próximas páginas sobre EAPI), compatibilidade entre as versões do Python, arquiteturas suportadas, USE flags etc.
Vejamos as versões estáveis do Python, no Gentoo:
Fonte: packages.gentoo.org
Das versões do Python listadas acima, temos o seguinte status:
- Current stable - 2.7 e 3.4: ambas as versões do Python, estáveis atualmente, tem suporte para todas as implementações e são liberadas para todos os usuários por default.
- Supported - 3.3: esta versão é suportada atualmente porém não está entre as versões para ser utilizada nas variáveis PYTHON_TARGETS e PYTHON_SINGLE_TARGETS. Além da versão 3.3 do Python, atualmente há suporte (supported) para a versão 3.5 também.
Apenas as versões 2.7 e 3.4 estão habilitadas por default para as variáveis PYTHON_TARGETS e PYTHON_SINGLE_TARGETS. Sendo que a versão 2.7 do Python é a menor requerida.
Além do código fonte e do ebuild, o Portage consiste em um aglomerado de arquivos que formam o todo, que ajudam a gerenciar o sistema, pacotes, compilações, dependências, preferências dos usuários etc. Incluso na configuração de cada arquivo, há variáveis de ambiente, constantes, diversas otimizações, entre tantas outras possibilidades.
A árvore de diretórios do Portage é definida da seguinte forma:
- Categoria, como por exemplo: app-portage, www-client;
- Categoria metadata, por exemplo: app-admin/metadata.xml
- Diretórios de pacotes, por exemplo: sys-apps/busybox
- Pacotes metadata, por exemplo: sys-apps/busybox/metadata.xml
- Pacotes Manifest, por exemplo: sys-apps/busybox/Manifest
- Ebuilds, por exemplo: app-eselect/eselect-ctags/eselect-awk-0.2.ebuild
- Diretórios de arquivos de pacotes, ex: app-editors/vim/files
- Pequenos pactches e outros arquivos, ex: app-editors/vim/files/vim-completion
- Diretórios Eclasses, ex: eclass/
- Diretórios de licensas, ex: licenses/
- Diretórios de perfis, ex: profiles/
- Vários arquivos de configuração e controle, ex: categories, info_pkgs, info_vars, package.mask, use.desc
- Diretório de atualizações, ex: profiles/updates/
- Arquivos de atualizações, ex: profiles/updates/1Q-2016
- Perfil principal em cascata
- Diretório de scripts, ex: scripts/
- Diretório de Distfiles, ex: distfiles/
- Diretório de pacotes, ex: packages/
Cada arquivo que veremos a seguir, constrói um ponto do Portage, mescla configurações etc. Vamos dar uma olhada nestes arquivos e em suas configurações.