開発者が独自の設定ファイルを追加した場合、システムはどうなりますか?

開発者が独自の設定ファイルを追加した場合、システムはどうなりますか?

私は独自のPortageプロファイルを作成しています。

私のプロファイルを正常に追加しました。次のコマンドを実行すると、プロファイルが表示されます。

eselect profile list

にアイテムを追加しました/usr/portage/profiles。設定ファイルはディレクトリモードに属します。

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

このオプションを変更するとどうなりますか?これの目的は何ですか?

答え1

まず最初に読んでくださいマニュアル:AMD64/Portage/Document部分。

プロフィールを追加するのは簡単な作業ではないことを理解してください。 Portage設定ファイルは3つの原則に従います。

  1. 変数/文字列拡張 - シェルから提供
  2. 変数の継承/階層
  3. ロゴの使用

要約:要約にスキップ

ほとんどの読者は文字列拡張が何であるかを知っているので、これをスキップして項目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

さて、1つのプロファイルが複数のプロファイルから継承される可能性があります。それではもう少し詳しく見てみましょう../../features/multilib/lib32。後ろに/usr/portage/profiles、私たちはディレクトリを見ますfeatures。これはamd64元のプロファイルの2つのディレクトリでもあります。これは..親ディレクトリを表すことを忘れないでください。構成ファイルlib32ディレクトリで、次をmultilib探します。

  1. コンテンツを含む他の親ファイル..
  2. eapiファイル
  3. 1つのmake.defaults文書

親ファイルは、multilibUSEフラグの継承をすぐに開始するディレクトリに私たちを置きます。 eapiファイルには5が含まれており、これはサポートされているPortageバージョンが必要であることを意味します。API 5が表示されます、~の一部パッケージマネージャの仕様。 EAPI 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. 親ファイルがない場合は、正しい場所にUSEフラグを継承する必要があります。
  2. もう一方にはeapiまだ5が含まれています。
  3. その他のmake.defaultsファイル
  4. 1つの.force文書
  5. .mask2ファイル

    # 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
    

その他の変数の設定と拡張(原則1).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構成ファイルには、他のすべてを構築するためにmultilibシンボルなどを含む3つのパッケージが必要です。この場合はmultilibUSEフラグです(原則3)。つまり、このリストのUSEフラグとパッケージは強制的にこのファイルの設定を使用します。必須設定は括弧内のUSEフラグです。

Multilib フラグを強制的に設定します。


これらの.maskファイルは同じ方法で動作します。簡潔さのためにここに投稿しません。その後、デフォルトの設定ファイルに戻り、files .forcemake.defaultsfiles、および.useファイルのUSEフラグを継承します。

仕上げる

Arch 構成ファイルから設定を継承し、Arch 構成ファイルはデフォルト構成ファイルから設定を継承します。注文するには、以下のリストをご覧ください。

  1. Make.defaultsの設定、.force選択されたArchのUSEフラグとファイル。.use
  2. Make.defaults の設定、.force基本設定ファイルの USE フラグ、ファイル。.use
  3. .forceMake.defaultsの設定、USEフラグ、およびファイルにリストされている他の設定ファイルのファイル。.useparent
  4. フラグの設定と使用/etc/portage/make.conf

これらすべての設定が実際に機能していることを確認するには、次の手順を実行します。
emerge --info
これにより、各ファイルのほとんどの変数とその値が拡張されます。

関連情報