✦ For everyone, free.

Practical knowledge for real and everyday life

Home

Portage Profiles

Portage Profiles are configurations in Gentoo Linux that define package selection, settings, and system behavior for consistent and reproducible software management.

Portage Profiles define the configuration and metadata that shape the behavior and characteristics of a Gentoo Linux system or environment managed by Portage. They determine default settings, package selection, compiler options, USE flags, and other system-wide parameters, enabling consistent, reproducible, and customizable system builds tailored to specific architectures, use cases, or user preferences.


Purpose and Role of Portage Profiles

Portage Profiles act as a blueprint for the Portage package manager, guiding how software is built and configured during the installation or upgrade processes. They provide a structured way to apply default configurations, ensuring that the system adheres to specific policies or standards without requiring manual per-package customization by the user.

Profiles help in:

  • Defining the system architecture and sub-architecture.
  • Specifying default USE flags that enable or disable optional package features.
  • Setting compiler flags and optimization options.
  • Selecting default package sets or masks.
  • Establishing system-wide environment settings.
  • Configuring package keywords and stability levels.
  • Managing package masking and unmasking rules.

By selecting a profile, administrators and users can quickly configure their Gentoo system to match predefined environments such as desktop, server, hardened, embedded, or minimal installations.


Structure and Location of Portage Profiles

Portage Profiles are organized as directories containing a hierarchy of configuration files, typically stored under the /usr/portage/profiles/ directory or its equivalent in the local Portage tree. Profiles are named and arranged to reflect their scope and purpose, often including subdirectories that represent architecture, flavor, or specific variants.

Profile Directory Contents

Each profile directory contains a set of files and symlinks that define various parameters:

  • make.defaults
    Defines default make.conf variables such as CFLAGS, USE, and CHOST.

  • package.use
    Specifies default USE flags for specific packages.

  • package.mask
    Lists package versions masked by default.

  • package.accept_keywords
    Controls keyword acceptance for unstable or testing packages.

  • package.provided
    Lists packages assumed to be already installed or provided by the system.

  • package.unmask
    Overrides masks to make certain packages available.

  • package.license
    Specifies default license acceptances.

  • package.env
    Defines environment variables for building specific packages.

  • accept_keywords
    Defines default keyword acceptance globally.

  • desc
    A text file describing the profile's purpose.

  • parent
    A file that links to the parent profile directory, enabling profile inheritance and layering.

Profile Inheritance

Profiles support hierarchical inheritance by referencing one or more parent profiles through the parent file. This allows a profile to extend or override settings from a base profile, promoting reuse and modularity. For example, a desktop profile might inherit from a generic architecture profile and add desktop-specific USE flags and packages.


Types of Portage Profiles

Gentoo provides multiple categories of profiles tailored for various architectures and use cases:

Architecture Profiles

These define the base system architecture and ABI, such as amd64, x86, arm, or ppc. They set compiler options, target CPU features, and relevant system defaults.

Flavor Profiles

Flavors represent variants of a base profile to customize the environment further, such as hardened profiles with enhanced security options, desktop profiles with GUI-focused USE flags, or minimal profiles with reduced package selections.

Vendor and Overlay Profiles

Profiles can be customized or extended by vendors or third-party overlays to provide specialized or proprietary configurations, often including custom package sets or patches.


How Portage Uses Profiles

When Portage is run, it reads the active profile directory pointed to by /etc/portage/make.profile, which is usually a symlink to one of the profiles in the Portage tree. It then loads and merges all the configuration files present, applying defaults and overrides as specified.

The profile settings influence:

  • The default USE flags that enable or disable optional software features.
  • The set of allowed or masked packages and versions.
  • Compiler flags and optimization options passed during builds.
  • Environment variables and build-time settings.
  • The package keywords that determine stability and acceptance of testing or unstable versions.

This layered configuration ensures a consistent and manageable system build process aligned with the profile's intended purpose.


Customizing and Creating Profiles

Users and administrators can create custom profiles by:

  • Copying an existing profile directory and modifying its contents.
  • Creating new parent links to inherit from one or more existing profiles.
  • Adjusting default USE flags, compiler options, and package masks.
  • Adding or overriding package-specific settings.

Custom profiles enable tailored environments for specialized hardware, security requirements, or organizational policies while leveraging the Portage profile system's flexibility.


Practical Example of a Profile Structure

profiles/
├── amd64/
│   ├── make.defaults
│   ├── package.use
│   ├── package.mask
│   ├── accept_keywords
│   ├── desc
│   └── parent
├── amd64/hardened/
│   ├── make.defaults
│   ├── package.use
│   ├── package.mask
│   ├── desc
│   └── parent
└── i686/
    ├── make.defaults
    ├── package.use
    ├── package.mask
    ├── desc
    └── parent

In this example, the amd64/hardened profile inherits from amd64 via the parent file and adds hardened security options and flags.


Summary of Key Configuration Files in Profiles

FilePurpose
make.defaultsDefault build and compiler settings
package.useDefault USE flags per package
package.maskPackages or versions masked by default
package.unmaskPackages or versions unmasked from masks
package.accept_keywordsDefault keywords for package stability levels
package.providedPackages considered pre-installed
package.envEnvironment variables for specific packages
accept_keywordsGlobal accepted keywords
descHuman-readable description of the profile
parentReferences to parent profiles for inheritance

Interaction with Other Portage Components

Portage Profiles integrate tightly with Gentoo's package management workflow. They influence:

  • Ebuild parsing and dependency resolution.
  • USE flag evaluation and merging with user-defined flags.
  • Package masking and keyword filtering during package selection.
  • Build environment setup and compiler flag application.

Profiles are foundational to Gentoo’s flexibility, enabling users to tailor the entire system build process while maintaining consistency and ease of management.


Summary

Portage Profiles are essential configuration sets within Gentoo's Portage system that define system-wide defaults, package behaviors, compiler options, and environment settings. Organized hierarchically and supporting inheritance, they enable users to customize and standardize their Gentoo installations for specific architectures, security requirements, or usage scenarios. By managing default USE flags, package masks, compiler flags, and other settings, profiles provide a powerful mechanism to control how software is built and installed in a reproducible, maintainable manner.