我正在努力构建我自己的 portage 配置文件。
我已成功添加我的个人资料,并在我发出以下命令时显示:
eselect profile list
我在 中添加了一个条目/usr/portage/profiles
。配置文件属于目录模式
architecture/profile_name/version/{stable, dev}/
更改此选项后会发生什么变化?其目的是什么?
答案1
首先,首先阅读手册:AMD64/Portage/文件部分。
请理解,添加个人资料并不是一项简单的任务。 Portage 配置文件遵循 3 个原则:
- 变量/字符串扩展 - 由您的 Shell 提供
- 变量继承/层次结构
- 使用标志
TL;DR:跳至总结
由于大多数读者都知道什么是字符串扩展,因此我们将跳过这一点,从第 2 项开始。遗产创造适当的层次数据库模型,作为文本文件存储在/usr/portage/profiles/
目录中。
有几点需要记住:
- 所有配置文件均遵循标准 portage 行为。
/usr/portage/profiles
除非您要创建新的配置文件,否则不应手动编辑任何配置文件。覆盖正在使用的配置文件的所有自定义都属于/etc/portage
.如果没有,您的自定义设置将在每次树同步时被删除。- 所有文件都包含标准 Linux 风格的注释,指示文件的用途以及每个条目存在的原因。
- 所有配置文件都从基本配置文件继承项目。 (原则2)
由于 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
目录。这也恰好是我们原始amd64
pofile 中的两个目录。请记住,这..
表示父目录。在配置文件lib32
的目录中multilib
我们找到:
- 另一个父文件,其内容
..
- 一个 eapi 文件
- 一份
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
和差异。如果我们按照该文件返回到,我们会看到:/lib64
parent
multilib
- 没有Parent File,我们必须在正确的位置继承USE Flags。
- 另一个
eapi
,仍然包含 5 个。 - 另一个
make.defaults
文件 - 一份
.force
文件 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 标志。
这些.mask
文件的行为方式相同。为了简洁起见,我不会将其发布在这里。这引导我们回到基本配置文件,在这里我们将继承文件.force
、make.defaults
文件和.use
文件中的 USE Flags。
包起来
您从 Arch 配置文件继承设置,Arch 配置文件从基础配置文件继承设置。订购请参阅下面的列表。
- 来自 Make.defaults 的设置、来自所选 Arch 的USE 标志
.force
和文件。.use
- 来自 Make.defaults 的设置、来自基本配置文件的USE 标志
.force
和文件。.use
- 来自 Make.defaults 的设置、来自文件中列出的任何其他配置文件的USE 标志
.force
和文件。.use
parent
- 设置和使用标志来自
/etc/portage/make.conf
要查看所有这些设置的实际效果,请发出:
emerge --info
,这将展开每个文件中的大多数变量及其值。