ebuild リポジトリ

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Ebuild repository and the translation is 100% complete.


Resources

ebuild リポジトリは、Gentoo システムへのインストールのためにパッケージを提供できるファイル構造です。ebuild リポジトリは ebuildeclass のほか、Portage にパッケージ、ニュース項目プロファイルターゲット等を提供する記述的なメタデータファイルを含みます。

Gentoo ebuild リポジトリGentoo Linux の主要な、そして公式の ebuild リポジトリです。Gentoo を構成するあらゆるパッケージをビルドしインストールするために必要な情報をすべて含んでいます。さらに多くのパッケージを提供するために、GURU などの追加の ebuild リポジトリを Portageに設定することもできます。

Portage はデフォルトでは、設定済のあらゆる ebuild リポジトリから、最新の利用可能なバージョンのパッケージをインストールするでしょう。最新の利用可能なバージョンが複数の ebuild リポジトリによって提供されている場合は、設定された優先度に従って選択されます。そのため、日常用語としてはオーバーレイとも呼ばれます。

Gentoo システムの管理者は、以下で説明するさまざまなユーティリティーや方法を使用して、追加のリポジトリを Portage に設定することができます。

Gentoo ebuild リポジトリ

Gentoo ebuild リポジトリは Gentoo Linux システムのメインの ebuild リポジトリで、すべてのパッケージのデフォルトの取得元となる場所です。これは gitweb.gentoo.org サーバ上で保守されていて、Portage から利用できるように、ローカルマシン (/var/db/repos/gentoo) に同期されます。

Gentoo ebuild リポジトリは、各パッケージのビルドおよびインストール方法を Portage に教える ebuild ファイルで構成されています。ebuild はメタデータ、依存関係情報、その他パッケージを動作させるために必要なすべての情報を持っています。

メタデータはパッケージの名前、バージョン、ソースの取得元、設定可能な USE フラグライセンス、ウェブサイトなどの情報を提供します。ebuild に含まれる依存情報によって、Portageは、インストールしようとするパッケージをビルドおよび実行するのに必要な他のパッケージを取って来ることができます。それ以上でも以下でもありません。Gentoo では依存関係は非常に細かく設定でき、究極の選択可能性のために、どの USE フラグが選択されているかによっても変化します。おそらく最重要事項として、ebuild は各パッケージごとの設定ビルド (コンパイル)、インストール、そしてテストするのに必要な情報を含んでいます。これらは通常プロジェクト自身のソースコードに由来します。

ebuild の他に、Gentoo ebuild リポジトリは公式のプロファイルも含んでいて、これは USE フラグのデフォルトの状態、/etc/portage/make.conf で見られるほとんどの変数のデフォルト値、system パッケージ集合などを定義しています。

Gentoo ebuild リポジトリはまた、ニュース項目が投稿される場所でもあります。Gentoo ebuild リポジトリを同期するとニュース項目がハイライト表示されるのはこのためです。

Gentoo ebuild リポジトリとその ebuild は、Gentoo 開発者とその他のコミュニティメンバによって保守されています。

メモ
Gentoo ebuild リポジトリはより短い、あるいは日常用語的な名前として、Gentoo リポジトリGentoo repo::gentoogentoo.git、場合によっては単に "repo" と呼ばれることもあります。歴史的には Gentoo コミュニティ内で Portage ツリーrsync ツリー、あるいは単に"ツリー"としても知られていました。
ヒント
GURU は Gentoo 開発者からの多少のサポートを受けて、Gentoo ユーザによって共同で保守されている、公式の ebuild リポジトリです。Gentoo ebuild リポジトリを補完するもので、メンテナは提供されるパッケージの質を合理的なレベルに維持することに尽力しています。repos.gentoo.org に登録されている公開 ebuild リポジトリの一覧もあります。

ebuild リポジトリはどこからくるの?

ebuild リポジトリは単にファイルとディレクトリの構造なので、新しい ebuild リポジトリを Portage で利用できるようにするには、そのリポジトリのファイルとディレクトリを Portage が認識する場所にコピーするだけで行えます。ebuild リポジトリとそのファイルは通常 /var/db/repos/ 以下にありますが、Portage に設定されたリポジトリの場所は /etc/portage/repos.conf で指定されています。しかしながら ebuild リポジトリはアクセスできるファイルシステムならどんな場所にでも構成でき、nfsSSHFS ファイルシステム上でさえも可能です。こうすることで、ネットワークやインターネット上のサーバにリポジトリを保存することもできます。

前述の通り、Gentoo ebuild リポジトリは gitweb.gentoo.org でホストされています。このサーバはまた、他の ebuild リポジトリもホストしています。

実用上は、追加の ebuild リポジトリを手動でディレクトリにただコピーして、Portage で使えるように構成する (/etc/portage/repos.conf に追加する) ということは普通行いません。通常は、新しいリポジトリがサードパーティによって利用可能な状態になり、そして Portage で使えるように構成されると、Portage によって同期されます。同期とは、すべてのファイルをリモートの場所からローカルで利用可能なファイルシステムに、設定に従ってミラーリングすることです。

ebulid リポジトリは単なるファイル構造ですので、それらを同期するために使える方法はたくさんあり、Portage は複数の可能性を提供しています。Rsync はデフォルトの同期方法で、git もよく使われます。同期方法は、リポジトリを設定するときに、リポジトリを取得するために必要な情報とあわせて /etc/portage/repos.conf 内で指定されます。

リポジトリ管理

Portage に設定された ebuild リポジトリを簡単に追加、無効化、削除するための、eselect repository ツールを使用してください。このツールは、repos.gentoo.org に登録されている利用可能なリポジトリを一覧表示して追加する便利な方法も提供しています。

ebuild リポジトリは /etc/portage/repos.conf を編集することで、いつでも手動で設定することができます。

警告
Gentoo ebuild リポジトリの内容は Gentoo 開発者によって書かたものか、Gentoo 開発者によるレビューを受けたものである一方で、GURU リポジトリは開発者の見落としを含んでいます。他の ebuild リポジトリも必ずしもそうとは限りません。ebuild リポジトリによっては、脆弱なソフトウェアやひどく壊れたソフトウェアを含んでいたり、理論上は、悪意のあるソフトウェアを含んでいるかもしれません。

Portage で使える ebuild リポジトリを新しくユーザが作成することもできます。

有効な ebuild リポジトリのリストは、以下のいずれかのコマンドの出力から得られます:

user $emerge --info
user $portageq repos_config /

他のリポジトリからパッケージをインストールする

Gentoo ebuild リポジトリ以外のリポジトリのパッケージは、いつも通り emerge でインストールすることができます。

例えば、GURU リポジトリが追加されていれば、そのリポジトリの x11-misc/xbanish パッケージをインストールするには:

root #emerge --ask x11-misc/xbanish
These are the packages that would be merged, in order:
 
Calculating dependencies... done!
Dependency resolution took 2.96 s.
 
[ebuild   R   #] x11-misc/xbanish-1.7::guru  0 KiB
 
Total: 1 package (1 reinstall), Size of downloads: 0 KiB

コマンド内で特にリポジトリを指定していないことに注意してください。出力の中のパッケージアトムの後ろに "::guru" が付いていますが、これはパッケージがどのリポジトリからインストールされるかを示しています。x11-misc/xbanish パッケージは GURU リポジトリにあるが、Gentoo リポジトリにはないので、これでうまくいっています。

同じパッケージの複数のバージョンが 2 個以上の異なる ebuild リポジトリから利用できる場合、Portage は最も新しいバージョンをインストールしようとします。

ヒント
システム全体の更新を行う際には、すでにインストールされているパッケージのより新しいバージョンを新しく追加された ebuild リポジトリが提供している場合、これらのパッケージをオーバーレイからのより新しいバージョンで置き換えようとすることに注意してください。すべての更新が望み通りのものであるか確認してください。

ebuild リポジトリからのパッケージで無条件アップグレードされるのを防ぐためには、有効化された ebuild リポジトリのマスキングを確認してください。GURU ebuild リポジトリは Gentoo ebuild リポジトリのパッケージを置き換えることになるバージョンの提供を意図的に避けていることにも注意してください。

パッケージの最新バージョンが複数の ebuild リポジトリから利用可能な場合、最も高い優先度を持つリポジトリが使用されます。ebuild リポジトリの優先度は /etc/portage/repos.conf で設定することができます。Gentoo ebuild リポジトリはデフォルトの優先度が -1000 に設定されていて、他のリポジトリは優先度が設定されていない場合のデフォルトは 0 です。複数の ebuild リポジトリが同じ優先度を持っている場合 (例えば 2 個以上のリポジトリに優先度が設定されていないため、0 になっている場合)、順序は不定です。インストールするパッケージは任意に選択されるでしょう。

パッケージを特定の ebuild リポジトリからインストールすることを Portage に指示するには、:: バージョン指定子を使うことで行なえます (--depclean を使ったパッケージのアンインストールなど、インストール以外の emerge 操作にも使えます):

root #emerge --ask category/atom::repository-name

portage から利用できるように設定されたリポジトリと、それらの優先度を一覧表示する方法については、リポジトリ管理の節を参照してください。

リポジトリの同期

ebuild リポジトリは同期して、ローカルのミラーがリポジトリの最新の状態を反映するようにするべきです。これはシステムを最新の状態に保ち、現行版のソフトウェアをインストールすることができるようにするために必要です。

メモ
定期的にGentoo リポジトリと同期して、この方法でシステムを更新することは、すべての最新のセキュリティ更新を確実にインストールするために、そしてローカルシステムが Gentoo リポジトリとかけ離れすぎてしまわないようにするために、重要です。リポジトリの内容があまりにもかけ離れてしまうと、アップグレードが複雑になることがあります。
ヒント
Gentoo Linux がインストールされたシステムを最新のセキュリティ更新を適用しつつ順調に動作させるには、毎日または毎週程度の周期で同期と更新を行ってください。更新に数週間以上の間隔が空いてしまうと、更新作業が多少複雑になることがあります。サーバの負荷を避けるため、1 日 1 回より頻繁には同期しないでください。
重要
ローカルのリポジトリがあまり最新に追いついていない場合は、パッケージをインストールするより先に、リポジトリを同期してシステムを更新してください

リポジトリの同期は emaint sync コマンドで実行され、/etc/portage/repos.conf 内のファイルを通じて設定されます:

user $emaint --help
usage: usage: emaint [options] COMMAND
<nowiki/>
The emaint program provides an interface to system health checks
and maintenance. See the emaint(1) man page for additional
information about the following commands:
<nowiki/>
Commands:
  all            Perform all supported commands
  binhost        Scan and generate metadata indexes for binary packages.
  cleanconfmem   Check and clean the config tracker list for uninstalled packages.
  cleanresume    Discard emerge --resume merge lists
  logs           Check and clean old logs in the PORTAGE_LOGDIR.
  merges         Scan for failed merges and fix them.
  movebin        Perform package move updates for binary packages
  moveinst       Perform package move updates for installed and binary packages.
  sync           Check repos.conf settings and sync repositories.
  world          Check and fix problems in the world file.
<nowiki/>
optional arguments:
  -h, --help            show this help message and exit
  -c, --check           Check for problems (a default option for most modules)
  -f, --fix             Attempt to fix problems (a default option for most modules)
  --version             show program's version number and exit
  -C, --clean           Cleans out logs more than 7 days old (cleanlogs only) module-options: -t, -p
  -t NUM, --time NUM    (cleanlogs only): -t, --time Delete logs older than NUM of days
  -p, --pretend         (cleanlogs only): -p, --pretend Output logs that would be deleted
  -P, --purge           Removes the list of previously failed merges. WARNING: Only use this option if you plan on manually fixing them or do not want them re-installed.
  -y, --yes             (merges submodule only): Do not prompt for emerge invocations
  -r REPO, --repo REPO  (sync module only): -r, --repo Sync the specified repo
  -A, --allrepos        (sync module only): -A, --allrepos Sync all repos that have a sync-url defined
  -a, --auto            (sync module only): -a, --auto Sync auto-sync enabled repos only
  --sync-submodule {glsa,news,profiles}
                        (sync module only): Restrict sync to the specified submodule(s)

auto-sync=true が設定されたすべてのリポジトリを同期するには、--auto スイッチ (短縮形は -a) をつけて emaint sync を実行してください。これは通常、システム更新やパッケージインストールの前に、定期的に実行するべきコマンドです (古い emerge --sync コマンドを使うのと等価です):

root #emaint sync --auto

foo リポジトリを (foo の auto-sync 設定とは無関係に) 同期するには :

root #emaint sync --repo foo

有効な sync-type と sync-url が定義されたすべてのリポジトリを (auto-sync 設定を無視して) 同期するには:

root #emaint sync --allrepos
警告
emaint sync --auto を実行したときに同期するべきでないすべてのリポジトリには、/etc/portage/repos.conf 内の適切なファイルで auto-sync = no を設定しなくてはなりません。デフォルトは auto-sync = true であるからです。
メモ
emerge --sync コマンドは今や互換性のためだけに存在しています。すべての同期操作の主要な制御は emerge から emaint に移され、今は emerge --sync は emaint sync モジュールを --auto オプション付きで呼び出すだけになっています。これは auto-sync 設定が yes または true に設定されているリポジトリに対してのみ同期を行います。構成済みリポジトリに auto-sync オプションが設定されていないか、設定が存在しない場合、emerge --sync はリポジトリをまったく同期しないこともあります。
ヒント
例えば日次 Gentoo リポジトリ rsync スナップショットをダウンロードしてインストールするため、ファイアウォールの制約に対処するため、または初回の同期を高速に行うためには、emerge-webrsync ツールを利用できます。

portage 同期コマンドの使い方についての情報は、man emaint を参照してください。Portage バージョン 2.2.16 からのモジュール化された同期システムへの移行については、Portage project sync の記事を参照してください。eix-syncesync -l、そして emerge --sync のユーザにとっては特に、重要な情報を含んでいます。

ベストプラクティス

キャッシュの生成について

portage は、ebuildリポジトリが多量にインストールされている場合には、パッケージの前提関係を解決するような処理に長い時間を要するかもしれません。これは、ebuildリポジトリには一般的に、メタデータキャッシュが含まれていないためです。

ローカルのメタデータキャッシュを生成するには、ebuildリポジトリとの同期後に emerge --regen を実行してください:

root #layman -S
root #( ulimit -n 4096 && emerge --regen )

注意が必要なことがあります。emerge --regen には多くの時間がかかります。また、rsync はサーバー側のキャッシュを使ってキャッシュを更新するため、rsync を使っている場合にはこれは推奨されません(portage ユーザーのほとんどは rsync を使用しています)。rsync のユーザーは、キャッシュを再生成したい場合は単に emaint (または eix-sync) を使用してください。おそらく、emerge --regen を試す必要があるのは非常に巨大な ebuild リポジトリのユーザーだけです。

有効化された ebuild リポジトリのマスキング

巨大な ebuild リポジトリや、よく知らない・低品質なコードの ebuild リポジトリを利用するなら、その ebuild リポジトリ全体に対してハードマスクをかけ、ケースバイケースの原則で特定の ebuild のみを許可するのが最善でしょう。例えば、"repository-foobar" という名前のオーバーレイに対しては:

ファイル /etc/portage/package.maskebuildリポジトリ内の全てのパッケージをマスクする
*/*::repository-foobar

次に、repository-foobar オーバーレイからの特定のパッケージを追加し、インストールするために Portage に見えるように、利用可能になるようにしてください:

ファイル /etc/portage/package.unmaskebuildリポジトリ内の特定パッケージのマスクを外す
foo-category/bar::repository-foobar

その後に、"foo-category/bar" という名前のパッケージのマスクを外すことでこれが利用可能になり、他の repository-foobar オーバーレイのパッケージはどれも、利用可能にはなりません。

関連項目

外部資料