Portage Profile Logic

Revision as of 03:56, July 4, 2014 by Drobbins (Talk | contribs) (Drobbins moved page Portage Profiles to Portage Profile Logic)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Gentoo Initialization

Gentoo profile initialization has been documented in this GitHub commit, and describes how Gentoo's Portage finds and processes profiles. Basically, Gentoo's Portage looks for profiles using this algorithm:

  1. Does /etc/make.profile exist? If so, it defines the primary profile.
  2. If not, does /etc/portage/make.profile exist? If so, it defines the primary profile.
  3. Recursively process the parent file found in the primary profile to build a list of all cascading profiles
  4. if /etc/portage/profile exists, it is a user-defined profile - tack it to the end of our profile list so it can modify anything in the cascading profiles.

Here is a more detailed description of the steps:

  1. Look for a profile directory/symlink at /etc/make.profile, if one exists, use this as the main profile directory.
  2. If /etc/make.profile doesn't exist, use /etc/portage/make.profile as a back-up location if it exists.
  3. If neither location exists, then a main profile directory doesn't exist and is undefined (None)

Using the main profile directory/symlink found above, the LocationsManager._addProfile() recursive function will be called that will create a list of all cascading profiles. This works by looking for a parent file in the profile directory. If this file exists, then each line is treated as a relative path and used to modify the path to the current profile, pointing to a "parent" profile that this particular profile modifies. There can be more than one parent, one per line. The first line in the parent file is the highest-priority parent.

Once this list is created, the code checks to see if /etc/portage/profile directory exists. If it does, it is tacked at the end of the cascading profile list, meaning that it is evaluated last and this user-defined profile has the ability to modify any of the cascading profile settings. It provides an ideal hook point for a user-defined profile that can tweak anything the user wants to modify in the profile.