开发人员添加自己的配置文件后系统会发生哪些变化?

开发人员添加自己的配置文件后系统会发生哪些变化?

我正在努力构建我自己的 portage 配置文件。

我已成功添加我的个人资料,并在我发出以下命令时显示:

eselect profile list

我在 中添加了一个条目/usr/portage/profiles。配置文件属于目录模式

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

更改此选项后会发生什么变化?其目的是什么?

答案1

首先,首先阅读手册:AMD64/Portage/文件部分。

请理解,添加个人资料并不是一项简单的任务。 Portage 配置文件遵循 3 个原则:

  1. 变量/字符串扩展 - 由您的 Shell 提供
  2. 变量继承/层次结构
  3. 使用标志

TL;DR:跳至总结

由于大多数读者都知道什么是字符串扩展,因此我们将跳过这一点,从第 2 项开始。遗产创造适当的层次数据库模型,作为文本文件存储在/usr/portage/profiles/目录中。

有几点需要记住:

  1. 所有配置文件均遵循标准 portage 行为。
  2. /usr/portage/profiles除非您要创建新的配置文件,否则不应手动编辑任何配置文件。覆盖正在使用的配置文件的所有自定义都属于/etc/portage.如果没有,您的自定义设置将在每次树同步时被删除。
  3. 所有文件都包含标准 Linux 风格的注释,指示文件的用途以及每个条目存在的原因。
  4. 所有配置文件都从基本配置文件继承项目。 (原则2)
  5. 由于 Gentoo 是一个滚动发行版,因此每个文件都将包含一个提交标头。

    # 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
    

使用基本配置文件作为开始,我们读到:

如果您要创建新的配置文件,您只需在配置文件目录的“父”文件中继承此基本配置文件即可。

作为amd64一个例子,我导航到父文件,并看到:

../base
../../features/multilib/lib32

嗯,看起来一个配置文件可以继承多个配置文件。因此,让我们进一步深入研究../../features/multilib/lib32。返回/usr/portage/profiles,我们看到一个features目录。这也恰好是我们原始amd64pofile 中的两个目录。请记住,这..表示父目录。在配置文件lib32的目录中multilib我们找到:

  1. 另一个父文件,其内容..
  2. 一个 eapi 文件
  3. 一份make.defaults文件

父文件将我们置于multilib目录中,我们将立即开始继承 USE Flags。 eapi文件包含5,这意味着我们需要一个支持的portage版本出现 API 5, 的一部分包管理器规范。知道我们需要 EAPI 5 告诉我们我们需要一个portage 版本 >= 2.1.11.19。查看 make.defaults 文件,我们看到:

# 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"

嗯,看起来该文件使用原则 1 来管理库的安装和维护以及每个架构的差异/lib32和差异。如果我们按照该文件返回到,我们会看到:/lib64parentmultilib

  1. 没有Parent File,我们必须在正确的位置继承USE Flags。
  2. 另一个eapi,仍然包含 5 个。
  3. 另一个make.defaults文件
  4. 一份.force文件
  5. 2 个.mask文件

    # 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
    

更多的变量设置和扩展(原则一)。在.force文件中我们发现:

# 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

这是有道理的,multilib配置文件需要这 3 个包来包含 multilib 符号等来构建其他所有内容。在本例中multilib是一个 USE 标志(原则 3)。简而言之,此列表中的 USE Flags 和包被强制使用此文件中的设置。强制设置是括号中的 USE 标志。

强制设置 Multilib 标志


这些.mask文件的行为方式相同。为了简洁起见,我不会将其发布在这里。这引导我们回到基本配置文件,在这里我们将继承文件.forcemake.defaults文件和.use文件中的 USE Flags。

包起来

您从 Arch 配置文件继承设置,Arch 配置文件从基础配置文件继承设置。订购请参阅下面的列表。

  1. 来自 Make.defaults 的设置、来自所选 Arch 的USE 标志.force和文件。.use
  2. 来自 Make.defaults 的设置、来自基本配置文件的USE 标志.force和文件。.use
  3. 来自 Make.defaults 的设置、来自文件中列出的任何其他配置文件的USE 标志.force和文件。.useparent
  4. 设置和使用标志来自/etc/portage/make.conf

要查看所有这些设置的实际效果,请发出:
emerge --info
,这将展开每个文件中的大多数变量及其值。

相关内容