Quais mudanças ocorrem no sistema depois que um desenvolvedor adiciona seu próprio perfil?

0

Estou trabalhando na criação de meu próprio perfil para o portage.

Eu consegui adicionar meu perfil e ele aparece quando eu emito:

eselect profile list

Eu adicionei uma entrada em /usr/portage/profiles . Os perfis são do padrão de diretório

architecture/profile_name/version/{stable, dev}/

Quais mudanças posso esperar quando eu mudar essa opção e qual é o seu propósito?

    
por DarkSheep 25.05.2014 / 16:21

1 resposta

1

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:

  1. Expansão de Variável / String - Fornecida pelo seu Shell
  2. Herança Variável / Hierarquia
  3. 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:

  1. Todos os perfis seguem o comportamento padrão do portage.
  2. 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.
  3. Todos os arquivos contêm comentários padrão no estilo Linux, indicando para que um arquivo é usado e por que cada entrada existe.
  4. Todos os perfis herdam itens do perfil base. (Princípio 2)
  5. 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:

  1. Outro arquivo principal, com o conteúdo ..
  2. Um arquivo eapi
  3. 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:

  1. No Parent File, devemos estar no lugar certo para herdar USE Flags.
  2. Outro eapi , ainda contendo 5.
  3. Outro make.defaults file
  4. Um arquivo .force
  5. 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.

  1. Configurações do Make.defaults, USE Flags dos arquivos .force e .use do Arch escolhido.
  2. Configurações do Make.defaults, USE Flags dos arquivos .force e .use do perfil base.
  3. Configurações do Make.defaults, USE Flags dos arquivos .force e .use de qualquer outro perfil listado no arquivo parent .
  4. 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.

    
por 05.01.2015 / 22:48