Primeiro, comece lendo a seção Manual: AMD64 / Portage / Files .
Por favor, entenda que adicionar um perfil não é uma tarefa trivial. Os perfis da Portage trabalham em 3 Princípios:
- Expansão de Variável / String - Fornecida pelo seu Shell
- Herança Variável / Hierarquia
- USE Flags
TL; DR: Ir para o encerramento
Como a maioria dos leitores sabe o que é Expansão de String, vamos pular essa e começar no Item 2. A herança cria o modelo de banco de dados hierárquico adequado , armazenado como arquivos de texto no diretório /usr/portage/profiles/
.
Algumas coisas para lembrar:
- Todos os perfis seguem o comportamento padrão do portage.
- Nenhum perfil em
/usr/portage/profiles
deve ser editado manualmente, a menos que você esteja criando um novo. Todas as personalizações para substituir um perfil em uso pertencem a/etc/portage
. Caso contrário, suas personalizações serão apagadas com cada sincronização de árvore. - Todos os arquivos contêm comentários padrão no estilo Linux, indicando para que um arquivo é usado e por que cada entrada existe.
- Todos os perfis herdam itens do perfil base. (Princípio 2)
-
Como o Gentoo é uma distribuição contínua, cada um desses arquivos conterá um cabeçalho de confirmação.
# Copyright 1999-2014 Gentoo Foundation. # Distributed under the terms of the GNU General Public License, v2 # $Header: /var/cvsroot/gentoo-x86/profiles/base/packages,v 1.67 2014/11/02 18:17:04 vapier Exp $ # Gentoo Base Profile # NOTE: THIS IS THE BASE PROFILE FOR *ANY* GENTOO BASED OPERATING SYSTEM. # NO MODIFICATIONS MAY BE MADE TO THIS FILE WITHOUT PRIOR DISCUSSION. IF # YOU ARE CREATING A NEW PROFILE, YOU SIMPLY NEED TO INHERIT THIS BASE # PROFILE IN YOUR PROFILE DIRECTORY'S "parent" FILE. # OK, you're staring at this file and you have no idea what these stars are # for. Here's the scoop. An initial "*" marks a package that is part of # the official BASE system profile. If there is a "*" then 'emerge system' # will use the line in its calculations of what should be installed for the # base profile. Lines without a "*" prefix will be ignored for profile # system calculations. # Please note that this file is rarely used as a package inclusion mask # file, because it affects EVERY SINGLE gentoo profile. As can be seen, # we've limited the inclusion mask to a version of portage which supports # cascaded profiles, but apart from that, there should be no version # specific information in here. This file serves as a high level description # of the minimum set of packages needed for any Gentoo based system. *>=sys-apps/baselayout-2 *app-arch/bzip2 *app-arch/gzip *app-arch/tar *app-arch/xz-utils *app-shells/bash #*dev-lang/perl #*dev-lang/python *net-misc/iputils *net-misc/rsync *net-misc/wget *sys-apps/coreutils #*sys-apps/debianutils *sys-apps/diffutils *sys-apps/file *sys-apps/findutils *sys-apps/gawk *sys-apps/grep *sys-apps/kbd # temporary bugfix for #398295 *sys-apps/less # stopgap solution for functions.sh #373219 and #504116 *sys-apps/openrc #*>=sys-apps/portage-2.0.51.22 *sys-process/procps *sys-process/psmisc *sys-apps/sed *sys-apps/which #*sys-devel/autoconf #*sys-devel/automake *sys-devel/binutils #*sys-devel/bison #*sys-devel/flex *sys-devel/gcc *sys-devel/gnuconfig #*sys-devel/libtool #*sys-devel/m4 *sys-devel/make *>=sys-devel/patch-2.6.1 *sys-fs/e2fsprogs *virtual/dev-manager *virtual/editor *virtual/libc *virtual/man *virtual/modutils *virtual/os-headers *virtual/package-manager *virtual/pager *virtual/service-manager *virtual/shadow *virtual/ssh
Usando o perfil básico como um começo, lemos:
IF YOU ARE CREATING A NEW PROFILE, YOU SIMPLY NEED TO INHERIT THIS BASE PROFILE IN YOUR PROFILE DIRECTORY'S "parent" FILE.
Usando amd64
como exemplo, navego até o arquivo principal e vejo:
../base
../../features/multilib/lib32
Hmmm, parece que um perfil pode herdar de mais de um perfil. Como tal, vamos nos aprofundar em ../../features/multilib/lib32
. De volta a /usr/portage/profiles
, vemos um diretório features
. Isso também acontece de ser dois diretórios do nosso original amd64
pofile. Lembre-se que ..
significa o diretório pai. No diretório lib32
do perfil multilib
, encontramos:
- Outro arquivo principal, com o conteúdo
..
- Um arquivo eapi
- Um arquivo
make.defaults
O arquivo principal nos coloca no diretório multilib
, onde começaremos a herdar USE Flags momentaneamente. O arquivo eapi contém 5, o que significa que precisamos de uma versão do portage que suporte Emerge API 5 , parte do Especificação do Gerenciador de Pacotes . Sabendo que precisamos do EAPI 5, precisamos de uma versão do portage > = 2.1. 11.19 . Olhando para o arquivo make.defaults, vemos:
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/features/multilib/lib32/make.defaults,v 1.2 2011/03/21 04:39:31 vapier Exp $
# Let baselayout create the lib symlink.
SYMLINK_LIB="yes"
# 32-bit LIBDIR
LIBDIR_ppc="lib32"
LIBDIR_x86="lib32"
LIBDIR_x86_fbsd="lib32"
LIBDIR_sparc32="lib32"
LIBDIR_s390="lib32"
Hmmm, parece que o arquivo gerencia a instalação e manutenção das bibliotecas e a diferenciação de /lib32
e /lib64
para cada arco, usando o Princípio 1. Se seguirmos o arquivo parent
de volta para multilib
, vemos:
- No Parent File, devemos estar no lugar certo para herdar USE Flags.
- Outro
eapi
, ainda contendo 5. - Outro
make.defaults
file - Um arquivo
.force
-
2
.mask
files# Copyright 1999-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/profiles/features/multilib/make.defaults,v 1.12 2014/03/27 01:55:29 vapier Exp $ # Jorge Manuel B. S. Vicetto <[email protected]> (16 Nov 2011) # Rename STAGE1_USE to BOOTSTRAP_USE and stack it to the parent value # This is so we build with multilib from the start BOOTSTRAP_USE="${BOOTSTRAP_USE} multilib" # Default USE=multilib to on. This rarely impact packages as they should be # using the multilib eclass anyways. #435094 USE="multilib" # FEATURES="multilib-strict" specific settings. MULTILIB_STRICT_DIRS="/lib32 /lib /usr/lib32 /usr/lib /usr/kde/*/lib32 /usr/kde/*/lib /usr/qt/*/lib32 /usr/qt/*/lib /usr/X11R6/lib32 /usr/X11R6/lib" MULTILIB_STRICT_DENY="64-bit.*shared object" MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage|udev|systemd|clang|python-exec)" # 64-bit LIBDIR LIBDIR_amd64="lib64" LIBDIR_amd64_fbsd="lib64" LIBDIR_arm64="lib64" LIBDIR_n64="lib64" # MIPS n64 LIBDIR_ppc64="lib64" LIBDIR_s390x="lib64" LIBDIR_sparc64="lib64" # 32-bit LIBDIR LIBDIR_arm="lib" LIBDIR_x86="lib" LIBDIR_x86_fbsd="lib" LIBDIR_o32="lib" # MIPS o32 LIBDIR_ppc="lib" LIBDIR_s390="lib" LIBDIR_sparc32="lib" # Somewhere in-between! LIBDIR_x32="libx32" # x86-64 x32 LIBDIR_n32="lib32" # MIPS n32
Mais configuração e expansão de variáveis (Princípio um). No arquivo .force
, encontramos:
# Copyright 2004-2014 Gentoo Foundation.
# Distributed under the terms of the GNU General Public License, v2
# $Header: /var/cvsroot/gentoo-x86/profiles/features/multilib/package.use.force,v 1.1 2014/03/21 18:57:15 vapier Exp $
# These packages must have multilib turned on in order to work sanely.
sys-apps/sandbox multilib
sys-devel/gcc multilib
sys-libs/glibc multilib
Isso faz sentido, o perfil multilib
precisa que esses 3 pacotes contenham símbolos multilib etc para construir todo o resto. Neste caso, multilib
é uma USE USE (Princípio 3). Em resumo, USE Flags e pacotes nesta lista são forçados a usar as configurações neste arquivo. As configurações forçadas são os USE Flags entre parênteses.
Os arquivos .mask
se comportam da mesma maneira. Por uma questão de brevidade, não vou postar aqui. Isso nos leva de volta ao perfil base, onde herdaremos os USE Flags nos arquivos .force
, no arquivo make.defaults
e nos arquivos .use
.
Wrap-Up
Você herda as configurações do Perfil de Arco e o Perfil de Arco herda as Configurações do perfil de Base. Veja a lista abaixo para o pedido.
- Configurações do Make.defaults, USE Flags dos arquivos
.force
e.use
do Arch escolhido. - Configurações do Make.defaults, USE Flags dos arquivos
.force
e.use
do perfil base. - Configurações do Make.defaults, USE Flags dos arquivos
.force
e.use
de qualquer outro perfil listado no arquivoparent
. - Configurações e USE Flags de
/etc/portage/make.conf
Para ver todas essas configurações em ação, emita um:
emerge --info
que expandirá a maioria das variáveis e seus valores em cada um desses arquivos.