Portage は、元々はGentoo Linux用に作成され、使用されているパッケージ管理システムで、 ChromeOSやCalculateなどでも使用されています。Portage はポート コレクションの概念に基づいています。Portage の極めて高い柔軟性によりオペレーティングシステムに依存しないため、 Gentoo はメタ ディストリビューションと呼ばれることがあります。[ 3 ] [ 4 ] [ 5 ] [ 6 ] Gentoo /Altプロジェクトは、Portage を使用してBSD、macOS、Solarisなどの他のオペレーティングシステムを管理することに関心がありました。これらの実装の中で最も注目すべきはGentoo/FreeBSDプロジェクトです。
パッケージマネージャ仕様プロジェクト(PMS) [ 7 ]と呼ばれる継続的な取り組みがあり、Portage の動作を標準化および文書化することで、ebuildツリーと Gentoo システムパッケージを Paludis や pkgcore などの代替パッケージマネージャで使用できるようにすることを目的としています。その目標は、パッケージマネージャと ebuild の正確な機能と動作のセットを規定し、Portage の権威あるリファレンスとして機能することです。

Portage は、BSDスタイルのパッケージ管理ツールであるportsに似ており、元々はFreeBSDの ports を念頭に置いて設計されました。[ 8 ] Portage はPython プログラミング言語で記述されており、Gentoo を定義する主要なユーティリティです。システム自体は Portage と呼ばれていますが、ebuildシステムとemerge の2 つの主要部分で構成されています。ebuild システムはパッケージのビルドとインストールの実際の作業を担当し、emerge は ebuild へのインターフェースを提供します。ebuild リポジトリの管理、依存関係の解決、および同様の問題の処理を行います。(したがって、この 2 つの関係は、rpmとyum、またはdpkgとAPTの関係とほぼ同じです。)
Portageを操作するためのGTKベースのGUIであるPortholeが利用可能です。また、「Haskell Interface for eMerge」の略であるHimerge GUIもあります。
Portage の主な機能は、ユーザーがインストールしたいパッケージをソースコードからコンパイルすることです。これにより、システムの仕様やユーザーの希望に合わせて、コンパイラとターゲットアプリケーションのオプションをカスタマイズできます。システム管理に関連する機能には、パッケージバージョンの並列インストール、パッケージ間の依存関係の追跡、インストール済みパッケージのデータベース管理、ローカル ebuild リポジトリの提供、ローカル Portage ツリーとリモートリポジトリの同期などがあります。個々のパッケージのインストールに関連する機能には、ターゲットマシンのコンパイル設定の指定、パッケージコンポーネントの選択などがあります。
Portage では、ebuild の安定性を 3 つのレベルに分けます。安定(リリース時点で既知のセキュリティ上の問題がなく、ソフトウェアが意図どおりに動作する)、キーワード マスク(主に、ターゲット システム アーキテクチャで十分にテストされておらず、安定しているとみなされないパッケージ)、ハード マスク(破損しているか、非常に安全でない) パッケージです。

emergeコマンドラインツールはPortageの中核を成すものです。このコマンドは多くのオプションと修飾子でカスタマイズ可能です。emergeツールは、コマンドラインからPortageの機能にアクセスするための最も重要なユーティリティです。
このプログラムは、依存関係の計算と管理、ebuildの実行、ローカルのPortageツリーとインストール済みパッケージのデータベースの維持を行います。ebuildで使用されるコンパイル設定は、個々のコンピュータの仕様とユーザーの最適化の要望に基づいて、CFLAGS環境変数を通じて変更できます。emergeユーティリティは、サンドボックス環境でebuildを実行します。これにより、システムはebuildによって実行されるソフトウェアから保護され、生成されたバイナリは、ビルドとサンドボックス環境でのインストールが正常に完了した後にのみマージされます。
emergeコマンドが依存関係としてインストールする内容は、USEフラグの設定によって左右されます。これらのフラグは、アプリケーションのインストールまたはアップグレード時に含めるオプション機能を決定します。また、emergeコマンドは、コンパイル済みのバイナリファイルをダウンロードしてインストールするためにも使用できます。

Portage システムでは、「USE フラグ」を使用できます。これにより、パッケージを作成する際に、どのソフトウェア機能を含めるか (および除外するか) を指定できます。たとえば、利用可能な場合はDVDサポートを、フラグを有効にしてコンパイルされたパッケージに含める USE フラグがあります。USE フラグは、どの依存関係が必要かに影響し、一般的には、コンパイル時に特定のプログラムに組み込まれるオプション機能に影響します。たとえば、configure スクリプトを使用するパッケージでは、USE フラグはfeatureに変換されます./configure --with-feature。
Gentooでは、USEフラグを指定することでプログラムを設定できます。USEフラグは手動で設定することも、'ufed'(USEフラグエディタ)などの使いやすいツールを使って設定することもできます。ufedは、フラグとその説明を一覧表示します。利用可能なUSEフラグの一覧は、GentooウェブサイトのUSEフラグインデックスで確認できます。
Gentoo は、デフォルトでは他のパッケージ管理システム( pacmanや apt など) のようにバイナリ パッケージを使用せず、代わりに ebuild と呼ばれる形式を採用しています。RPM バイナリはプリコンパイルされたバイナリですが、ebuild は、ソフトウェアの説明、およびソフトウェアの取得、構成、コンパイル、インストール方法に関する指示を含む変数と関数を持つシェル スクリプトであり、 SRPMで配布される.spec ファイルに非常によく似ています (ただし、より強力です) 。[ 9 ]公式リポジトリには 19,600 を超える ebuild があり、その大部分は Gentooミラーによって配布されています。新しい ebuild や更新された ebuild は、ローカルの ebuild リポジトリをミラーと同期することで取得できます。これは、コマンドを実行することで行います。歴史的に、Gentoo は、多くの一般的なプログラム、特にMozilla FirefoxやOpenOffice.orgのようにコンパイルに時間がかかるプログラム向けに、プリコンパイルされたバイナリ パッケージを提供してきました。これらは引き続きemergeでインストールできますが、パッケージ名に「-bin」を追加するだけでバイナリバージョンをインストールできます。emaint sync -a
GNOME Terminator用の ebuild の例:
# Copyright 1999-2020 Gentoo Authors # GNU General Public License v2 の条項に基づいて配布されていますEAPI = 7PYTHON_COMPAT =( python3_ { 6 ,7,8 } ) DISTUTILS_USE_SETUPTOOLS = "no" inherit distutils-r1 virtualx xdg-utilsDESCRIPTION = "1つのウィンドウに複数のGNOMEターミナルを表示" HOMEPAGE = "https://github.com/gnome-terminator/terminator" SRC_URI = "https://github.com/gnome-terminator/terminator/releases/download/v ${ PV } / ${ P } .tar.gz"ライセンス= "GPL-2"スロット= "0"キーワード= "amd64 ~ppc x86"使用方法= "dbus +libnotify"RDEPEND = " >=dev-libs/glib-2.32:2 dev-libs/keybinder:3[introspection] dev-python/configobj[ ${ PYTHON_USEDEP } ] dev-python/psutil[ ${ PYTHON_USEDEP } ] dev-python/pycairo[ ${ PYTHON_USEDEP } ] dev-python/pygobject:3[ ${ PYTHON_USEDEP } ] >=x11-libs/gtk+-3.16:3 x11-libs/vte:2.91[introspection] dbus? ( dev-python/dbus-python[ ${ PYTHON_USEDEP } ] ) libnotify? ( x11-libs/libnotify[introspection] ) " BDEPEND = " dev-util/intltool " distutils_enable_tests setup.py パッチ=( " ${ FILESDIR } " /terminator-1.91-without-icon-cache.patch " ${ FILESDIR } " /terminator-1.91-desktop.patch " ${ FILESDIR } " /terminator-1.92-make-tests-fail.patch " ${ FILESDIR } " /terminator-1.92-metainfo.patch ) src_prepare () { xdg_environment_reset distutils-r1_src_prepare } src_test () { virtx distutils-r1_src_test } pkg_postinst () { xdg_desktop_database_update xdg_icon_cache_update } pkg_postrm () { xdg_desktop_database_update xdg_icon_cache_update }Gentooにはバイナリパッケージング形式があり、これは追加のメタデータを含む.tbz2ファイル(bzip2で圧縮されたtarファイル)です。この機能により、1つのシステムでバイナリパッケージをビルドし(Portageのまたはを使用)、互換性のあるシステムに迅速にインストールできます(Portageのまたはを使用)。詳細については、Gentoo LinuxハンドブックのPortageの機能を参照してください。buildpkgquickpkggetbinpkgemerge -K
Portage には、さまざまなユースケースやホストターゲットに対応するプロファイルのセットがあり、これらはアップストリームの開発者によってバージョン管理される傾向があり、Portage の動作やファイルシステム階層、ツールチェーンのアップグレード、libc および init システムへの対応方法を変更することができます。プロファイルは、ebuild 構成、コンパイラフラグ、ワールドセットのマスキングも適用できます。[ 10 ]
マスキングとは、Gentooがシステムに適したパッケージを判断する方法です。異なるアーキテクチャ向けに設計されたEbuildや実験的なソフトウェアは通常、安定したシステムがユーザーの操作なしにインストールできないようにマスキングされます。
一般的にテストが必要なだけで、多くの場合問題なく動作するパッケージは、キーワードマスクされていると言われます(つまり、文字で始まる ACCEPT_KEYWORDS make.conf エントリを持つシステムで使用できます。~たとえば~x86、、、~amd64など~ppc)。個々のキーワードマスクされたパッケージは、ディレクトリ内のファイルにパッケージ名とキーワードの完全な行を追加することでマスクを解除できます /etc/portage/package.accept_keywords/。ユーザーはここでサブディレクトリを作成することもできます。これにより、カスタム構成が可能になります。たとえば、マスクされたパッケージに複数のマスクされた依存関係がある場合、ユーザーは元のマスクされたパッケージの名前のディレクトリを作成し、パッケージとその依存関係のすべてのマスクファイルをそのディレクトリに置くことができます。このスキームは、/etc/portage/package.accept_keywords1 つのテキスト ファイルとして扱う古いスキームに取って代わるものです。
既知の問題があるパッケージや、安定版の候補となるほど成熟していないとみなされるパッケージは、 /usr/portage/profiles にあるさまざまな package.mask ファイルのいずれかによってハードマスクされます。そして、そのようなエントリには通常、開発者によるマスクの理由を説明するコメントが添えられています。
Gentoo/Altは、Portageフレームワークやその他の機能をMac OS XやフリーBSDなどの他のオペレーティングシステムに移植するためのプロジェクトです。Gentoo/Altは、 Pieter Van den AbeeleがMac OS X向けにGentooを創設した後、Pieter Van den AbeeleとDaniel Robbinsによって設立されました。
Gentoo for Mac OS Xは Gentoo 初の Linux 以外のプロジェクトであり、Portage システムを独立したエンティティとして導入することでAppleのオペレーティングシステム上で Gentoo エクスペリエンスを利用できるようにすることに重点を置いていました。これはFinkとMacPortsにほぼ似ていましたが、Debian や Ports のようなシステムではなく Portage を使用しました。その後、Gentoo for Mac OS X は Gentoo/Alt のサブプロジェクトになりました。ホスト OS を使用し変更しないという主要な前提が現実的ではないように見え、最終的にほとんどのパッケージが壊れたり、保守が困難になったりしたため、このプロジェクトはもはやアクティブではありません。Gentoo for Mac OS X はGentoo Prefixに置き換えられ、現在 Gentoo が Mac OS X ユーザーに提供しているのは Gentoo です。[ 11 ]
Mac OS X の Prefix プロジェクトは、PowerPC、IA-32、およびx86-64アーキテクチャ上の Mac OS X Tiger、Leopard、および Snow Leopard でテストされ、サポートされています。[ 12 ]
Gentoo/FreeBSDは、Gentoo Linuxの設計、構造、Portageなどのツール、そしてGentoo Linuxの基本レイアウトをFreeBSDオペレーティングシステムに導入するものです。オリジナルのFreeBSDツールチェーンの代わりに、GentooのGNUツールチェーンが使用されます。
このプロジェクトはもはやアクティブな Gentoo 開発者によってメンテナンスされていませんが、完全な Gentoo/FreeBSD システムをインストールできる手順があります。[ 13 ] FreeBSD システムの ebuild はメインの portage ツリーに統合されていますが、移植する必要のあるパッケージの量と適切な Live CD がないため、この移植は完了には程遠い状態です (インストール中はFreeSBIEの Live CD または FreeBSD セットアップ CD が使用されます)。
Gentoo/FreeBSD の現在の(準)公式ロゴは、オリジナルのGentoo Linuxロゴから派生し、BSD デーモンに触発されたデーモン化された「g」です。これは、Diego Elio Pettenò が自身のブログで開始した非公式コンテストに応募した Marius Morawski によってデザインされました。[ 14 ]
Gentoo/NetBSDは、 Portageによって管理されるGNUユーザーランドにNetBSDカーネルを提供するプロジェクトです。このプロジェクトはDamian Florczykによって開始されました。x86アーキテクチャのみを対象としており、システム全体としてはまだ未完成の状態です。
Gentoo/OpenBSD は、Portage などの Gentoo の機能をOpenBSDオペレーティングシステムに移植するための Gentoo/*BSD サブプロジェクトでした。元々は Grant Goodyear によって開始されましたが、現在は非推奨となっています。[ 16 ]インストールガイドはプロジェクトページに掲載されていますが、これも非推奨としてマークされています。
Gentoo/DragonFlyBSD は、現在非公式なDragonFlyBSDカーネルの移植版です。このプロジェクトは Robert Sebastian Gerus によって開発されています。[ 17 ]
Benda Xu が主導する「Gentoo RAP for Android Devices」は、Android と同じディレクトリのプレフィックスに Gentoo RAP と呼ばれる Gentoo の派生版をインストールします。[ 19 ] Android と Gentoo RAP の両方で Linux カーネルが使用されます。[ 19 ]
Gentoo/Interix(eprefix)は、Interix Subsystem for Windows(Microsoft Windows Services for UNIX(SFU)またはSubsystem for Unix-based Applications(SUA)とも呼ばれる)上で動作するGentooの移植版です。Gentoo/Interixプロジェクトの成果の一つとして、Portageシステムをインストールして使用し、ネイティブWindowsアプリケーションをemergeできる機能があります(Visual Studioが必要ですが、2008 Express Editionでも動作します)。ただし、この機能は、他のプラットフォーム(Interixを含む)でサポートされている多種多様なパッケージには対応していません。
Solarisオペレーティングシステムへの非公式移植版である「Portaris」は2006年頃に発表されたが、一般公開されることはなかった。その後、Gentoo Prefixプロジェクトに取って代わられた。
2011年にGoogle Summer of Codeプロジェクトとして始まったPlan 9 For Gentooは、GentooをベースにPlan 9に触発されたユーザースペースを重ねたものです。[ 20 ]このプロジェクトの目標は、ハードウェアサポートとソフトウェアサポートを向上させ、これまでLinuxシステムを使用していた人々に「カルチャーショック」を与えることです。[ 20 ]このプロジェクトはRobert Seatonによってメンテナンスされています。[ 20 ]