개발자가 자신의 구성 파일을 추가하면 시스템은 어떻게 되나요?

개발자가 자신의 구성 파일을 추가하면 시스템은 어떻게 되나요?

나는 나만의 포티지 프로필을 만드는 중입니다.

내 프로필을 성공적으로 추가했으며 다음 명령을 실행하면 프로필이 표시됩니다.

eselect profile list

에 항목을 추가했습니다 /usr/portage/profiles. 구성 파일은 디렉터리 모드에 속합니다.

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

이 옵션을 변경하면 어떻게 되나요? 이것의 목적은 무엇입니까?

답변1

먼저 먼저 읽어보세요매뉴얼: AMD64/포티지/문서부분.

프로필을 추가하는 것은 간단한 작업이 아니라는 점을 이해하시기 바랍니다. 포티지 구성 파일은 3가지 원칙을 따릅니다:

  1. 변수/문자열 확장 - 쉘에서 제공
  2. 변수 상속/계층
  3. 로고 사용

요약: 요약으로 건너뛰기

대부분의 독자는 문자열 확장이 무엇인지 알고 있으므로 이를 건너뛰고 항목 2부터 시작하겠습니다.유산적절한 생성계층적 데이터베이스 모델, 디렉토리에 텍스트 파일로 저장됩니다 /usr/portage/profiles/.

기억해야 할 몇 가지 사항이 있습니다.

  1. 모든 구성 파일은 표준 포티지 동작을 따릅니다.
  2. /usr/portage/profiles새 구성 파일을 생성하는 경우가 아니면 구성 파일을 수동으로 편집해서는 안 됩니다. 사용 중인 프로필을 재정의하는 모든 사용자 /etc/portage정의는 트리가 동기화될 때마다 삭제됩니다.
  3. 모든 파일에는 파일의 목적과 각 항목의 존재 이유를 나타내는 표준 Linux 스타일 주석이 포함되어 있습니다.
  4. 모든 프로필은 기본 프로필에서 프로젝트를 상속합니다. (원칙 2)
  5. 젠투는 롤링 배포이므로 각 파일에는 커밋 헤더가 포함됩니다.

    # 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원래 프로필의 두 디렉터리 이기도 합니다 . 이는 ..상위 디렉토리를 나타냄을 기억하세요. 구성 파일 lib32디렉터리에서 다음을 multilib찾습니다.

  1. 내용이 있는 다른 상위 파일..
  2. eapi 파일
  3. 하나의 make.defaults문서

상위 파일은 multilibUSE 플래그 상속을 즉시 시작할 디렉터리에 우리를 넣습니다. eapi 파일에는 5가 포함되어 있으며 이는 지원되는 포티지 버전이 필요하다는 의미입니다.API 5가 나타납니다, ~의 일부패키지 관리자 사양. EAPI 5가 필요하다는 사실을 알아두세요. EAPI 5가 필요하다고 알려주세요.포티지 버전 >= 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. 하나의 .force문서
  5. .mask파일 2개

    # 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 .force, make.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
그러면 각 파일의 대부분의 변수와 해당 값이 확장됩니다.

관련 정보