Gentoo Logo

[ << ] [ < ] [ ホーム ] [ > ] [ >> ]


1. Portageについて

目次:

1.a. Portageへようこそ

PortageはもしかするとGentooのソフトウェア管理における最も革新的な注目すべきものかもしれません。 その高い柔軟性と膨大な量の機能で、たびたびLinuxで利用できる最高のソフトウェア管理ツールと見られています。

Portageは全てPythonBashによって書かれており、 両方ともスクリプト言語であるため、ユーザーにとって全体的に見通しのよいものになっています。

ほとんどのユーザーがemergeツールを通してPortageを利用しています。 この章はemergeのmanページから利用可能な情報の複製を作るつもりはありません。 emergeのオプションについての完全な概要を得るために、manページを調べてください。

コード表示 1.1: emergeのmanページを読む

$ man emerge

1.b. Portageツリー

ebuild

パッケージについて話すとき、私たちはたびたびGentooユーザーがPortageツリーを通して利用可能なソフトウェアのタイトルを意味しています。 Portageツリーはebuildという、Portageがソフトウェアを維持する(インストール、検索など)ために必要な全ての情報を含んだファイルのコレクションです。 これらebuildはデフォルトでは/usr/portageに存在します。

Porgageにソフトウェアタイトルに関する行動を行うよう指示するときはいつでも、システムにあるebuildがベースに使われます。 故にPortageが新しいソフトウェアやセキュリティアップデートなどを知るために、定期的にebuildを更新することが重要です。

Portageツリーの更新

Portageツリーは一般にrsyncという高速ファイル転送ユーティリティで更新されます。 更新はrsyncのフロントエンドを提供するemergeコマンドを使うというとても簡単なものです。

コード表示 2.1: Portageツリーの更新

# emerge --sync

もしファイヤーウォールの制限などによりrsyncが実行できないときには、毎日作成されるPortageツリーのスナップショットを利用することによってPortageを更新することができます。 emerge-webrsyncツールは自動的に最新のスナップショットを取得し、システムにインストールしてくれます。

コード表示 2.2: emerge-webrsyncを実行

# emerge-webrsync

1.c. ソフトウェアのメンテナンス

ソフトウェアの検索

Portageツリーからソフトウェアタイトルを検索するには、emergeに内蔵された検索能力を利用することができます。 デフォルトでは、emerge --searchは検索用語に(完全もしくは部分)一致したパッケージ名を返します。

例えば、"pdf"を名前に持つパッケージを検索するにはこうします。

コード表示 3.1: pdfと名付けられたパッケージを検索

$ emerge --search pdf

もし詳細を検索したいのなら--searchdesc(もしくは -S)スイッチを使うことができます。

コード表示 3.2: pdfに関連したパッケージを検索

$ emerge --searchdesc pdf

出力を見ると、それがたくさんの情報を与えてくれることに気付くでしょう。 それらが意味するものと違うように取られないために、各フィールドにははっきりとラベル付けがされています。

コード表示 3.3: 'emerge --search'の結果の例

*  net-print/cups-pdf
      Latest version available: 1.5.2
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 15 kB
      Homepage:    http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/
      Description: Provides a virtual printer for CUPS to produce PDF files.
      License:     GPL-2

ソフトウェアのインストール

一度好みのソフトウェアを見つけたら、emergeで簡単にインストールすることができます。ただパッケージの名前を追加するだけです。 例えば、gnumericをインストールするにはこうします。

コード表示 3.4: gnumericのインストール

# emerge gnumeric

たくさんのアプリケーションがお互いに依存し合っているため、あるソフトウェアを確実にインストールしようとすると、 結果的にいくつかの依存関係もインストールすることになるでしょう。 ご心配なく、Portageは依存関係をうまく扱ってくれます。 もしパッケージをインストールしたいときにPortageが何をインストールしようとしているか確かめたいときには、 --pretendスイッチを追加します。例えばこのようにします。

コード表示 3.5: gnumericをインストールするふりをする

# emerge --pretend gnumeric

Portageにパッケージをインストールするよう要求したときは、必要なソースコードをインターネットからダウンロードし、 デフォルトでは/usr/portage/distfilesに保持します。 この後、解凍し、パッケージをコンパイルしてインストールします。 Portageにソースをダウンロードするだけでインストールは行って欲しくないときには、emergeコマンドに--fetchonlyコマンドを追加します。

コード表示 3.6: gnumericのソースコードをダウンロード

# emerge --fetchonly gnumeric

インストール済みパッケージのドキュメントを検索

多くのパッケージはドキュメントと共にインストールされます。 時々、docUSEフラグはパッケージのドキュメントをインストールするかしないかを定義します。 現在のdocUSEフラグを確認するにはemerge -vp <package name>コマンドを使用します。

コード表示 3.7: 現在のdoc USEフラグを確認

(もちろんalsa-libはただの例です)
# emerge -vp alsa-lib
[ebuild  N    ] media-libs/alsa-lib-1.0.14_rc1  -debug +doc 698 kB

docUSEフラグを有効にするのに一番良い方法は、/etc/portage/package.useによってパッケージごとに行うやり方です。 そのため、興味のあるパッケージの分だけドキュメントを取得できるようになります。 このフラグを全体に有効にしてしまうと、循環依存の問題を起こす原因となることが知られています。 詳しくは、USEフラグの章を読んでください。

パッケージがインストールされると、ドキュメントは一般的には/usr/share/docディレクトリの下のパッケージ名のディレクトリの中にあります。 app-portage/gentoolkitパッケージ日本語訳)の一部であるequeryツールを利用すると、全てのインストールされたファイルの一覧を表示できます。

コード表示 3.8: パッケージドキュメントの位置

# ls -l /usr/share/doc/alsa-lib-1.0.14_rc1
total 28
-rw-r--r--  1 root root  669 May 17 21:54 ChangeLog.gz
-rw-r--r--  1 root root 9373 May 17 21:54 COPYING.gz
drwxr-xr-x  2 root root 8560 May 17 21:54 html
-rw-r--r--  1 root root  196 May 17 21:54 TODO.gz

(このほかにも、equeryを使用してファイルの位置を表示する方法もあります)
# equery files alsa-lib | less
media-libs/alsa-lib-1.0.14_rc1
* Contents of media-libs/alsa-lib-1.0.14_rc1:
/usr
/usr/bin
/usr/bin/alsalisp
(省略)

ソフトウェアの削除

システムからパッケージを削除したいときは、emerge --unmergeを利用します。 これはPortageにパッケージによってインストールされた設定ファイルをのぞく全てのファイルを削除するよう命令します。 設定ファイルを残しておくと、もう一度インストールしようと決めたときに作業を続けることが可能です。

しかし、大きな警告があります:Portageは削除したいパッケージが他から必要とされているかを確認しません。 とにかく、unmergeするとシステムを破壊する様な重要なパッケージを削除するときには気をつけろと言うことです。

コード表示 3.9: gnumericをシステムから削除

# emerge --unmerge gnumeric

システムからパッケージを削除するときには、インストール時に依存関係により自動的にインストールされたソフトウェアは残されます。 Portageにある削除可能な依存関係を削除するには、emerge--depclean機能を利用します。 これについては後で話します。

システムの更新

システムを完全な形に保つ(もちろん最新のセキュリティアップデートをインストールすることも)には、システムを定期的に更新する必要があります。 Portageはツリーの中のebuildsのみ確認するので、最初にPortageツリーを更新しなければなりません。 Portageツリーが更新されたら、emerge --update worldでシステムを更新できます。 次の例では--askスイッチを使用しています。 これは、更新するパッケージの一覧をPortageに表示させ、続行するかを尋ねます。

コード表示 3.10: システムを更新する

# emerge --update --ask world

Portageはインストールされているアプリケーションの新しいバージョンを検索します。 しかし、これは明示的にインストールされたものしか確かめません(そうしたアプリケーションは/var/lib/portage/worldにリストされています)。 つまり、それらの依存関係は確認しないということです。 システムの個々のパッケージすべてを更新したいときには--deep引数を与えてやります。

コード表示 3.11: システムの全てを更新する

# emerge --update --deep world

明示的にインストールしていない(だが他のプログラムの依存によりインストールされた)パッケージのセキュリティアップデートがあるかもしれないので、このコマンドを時々実行することが推奨されています。

もし最近USEフラグを変更したのなら、--newuseを追加したくなるでしょう。 そうするとPortageは新しいパッケージのインストールか既にあるものの再コンパイルが必要かを確認します。

コード表示 3.12: 完全な更新の実行

# emerge --update --deep --newuse world

メタパッケージ

Portageツリーのいくらかのパッケージは実際には何も含まれていませんが、パッケージのコレクションのインストールに利用されるものがあります。 例えば、kdeパッケージは様々なKDE関連のパッケージを依存関係に引き連れて、完全なKDE環境をシステムにインストールします。

このようなパッケージをシステムから削除したいときには、emerge --unmergeをパッケージに対して実行しても依存関係が残ってしまうのでたいした効果は得られないでしょう。

Portageは残された依存関係を削除する機能性を持っていますが、動的に依存関係を変更するソフトウェアが存在するので、 USEフラグに変更を加えたときも含めてまずシステムを完全に更新する必要があります。 その後残された依存関係を削除するためにemerge --depcleanを実行してください。 これが完了したら、今削除されたソフトウェアを動的にリンクしているが、もはやそれを必要としないアプリケーションを再ビルドします。

これら全ては以下の3つのコマンドで処理できます。

コード表示 3.13: 残された依存関係を削除する

# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild

revdep-rebuildgentoolkitによって提供されます;まず最初にemergeすることを忘れないでください。

コード表示 3.14: gentoolkitパッケージのインストール

# emerge gentoolkit

1.d. Portageが不満を言ったら

SLOT、Virtual、ブランチ、アーキテクチャ、そしてProfilesについて

既に述べたように、Portageはとても強力で他のソフトウェア管理ツールに無い多くの機能をサポートしています。 このことを理解するために、あまり細かくなり過ぎるのを避けて、もう少しPortageの特徴について説明します。

Portageでは、一つのパッケージで複数のバージョンをシステム上に共存させることができます。 他のディストリビューションがそれらの名前にバージョンを付けている(freetypefreetype2の様に)のに対し、 PortageはSLOTと呼ばれる技術を使っています。 ebuildはそのバージョンの確かなSLOTを宣言します。異なったSLOTのebuildはシステムに共存できます。 例えば、freetypeパッケージはSLOT="1"SLOT="2"のebuildを持っています。

同じ機能を提供しますが異なった実装のパッケージもまた存在します。 例えば、metalogdsysklogdsyslog-ngは全てシステムロガーです。 「システムロガー」の機能を必要とするアプリケーションは、例えばmetalogdに依存することはできません。他のシステムロガーも同様に問題のない選択だからです。 Portageはvirtualsを考慮に入れます:他のアプリケーションがvirtual/syslogに依存できるように、それぞれのシステムロガーはvirtual/syslogを規定します。

Portageツリーのソフトウェアは異なったブランチに所属することができます。 デフォルトではシステムはGentooがstableだと思うもののみ受け付けます。 ほとんどのコミットされた新しいソフトウェアのタイトルは、stableにされる前にもっとテストが必要だという意味のテストブランチに追加されます。 これらのソフトウェアのebuildをPortageツリーで見かけても、Portageはstableブランチに置かれるまでは更新しようとしないでしょう。

いくらかのソフトウェアは少しのアーキテクチャのみで利用可能です。 すなわちそのソフトウェアは他のアーキテクチャでは動作しないか、もっとテストが必要か、 Portageツリーにソフトウェアをコミットした開発者が異なったアーキテクチャで動作するかどうか確認できないかです。

各々のGentooのインストールはあるプロファイルと一緒になっています。 それには、他の情報と一緒に、システムが正常に動作するために必要なパッケージのリストが含まれています。

ブロックされたパッケージ

コード表示 4.1: ブロックされたパッケージに対するPortageの警告(--pretendを利用)

[blocks B     ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)

コード表示 4.2: ブロックされたパッケージに対するPortageの警告(--pretendを利用しない)

!!! Error: the mail-mta/postfix package conflicts with another package.
!!!        both can't be installed on the same system together.
!!!        Please use 'emerge --pretend' to determine blockers. 

ebuildはPortageの依存関係に関する特別なフィールドを含んでいます。 依存関係には2つの種類があります: DEPENDによって宣言されたビルド依存と、RDEPENDよって宣言された実行時依存です。 これらの依存関係が明確に互換性のないパッケージまたはvirtualを指している場合、ブロックを引き起します。

ブロックを解決するには、パッケージのインストールを行わないか、衝突しているパッケージを先にunmergeするかのどちらかを選べます。 上記の例では、postfixのインストールを諦めるか、先にssmtpを削除するかのどちらかです。

<media-video/mplayer-bin-1.0_rc1-r2のように特定のパッケージ識別子(atom)を伴いブロックしていることがあるかもしれません。 この場合、ブロックしているパッケージをより新しいバージョンに更新すれば、ブロックを取り除くことができかもしれません。

既にインストールされた2つのパッケージがお互いをブロックし合っていることもあります。 このまれな場合は、何故それらをインストールする必要があるのかを知るべきです。 ほとんどの場合、1つのパッケージのみで事足ります。 そうでなければ、Gentooのバグトラックシステムにバグを報告してください。

マスクされたパッケージ

コード表示 4.3: マスクされたパッケージに対するPortageの警告

!!! all ebuilds that could satisfy "bootsplash" have been masked. 

コード表示 4.4: マスクされたパッケージに対するPortageの警告に関する理由

!!! possible candidates are:

- gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
- lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
- sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
- dev-util/cvsd-1.0.2 (masked by: missing keyword)
- games-fps/unreal-tournament-451 (masked by: package.mask)
- sys-libs/glibc-2.3.2-r11 (masked by: profile)

システムで利用できないパッケージをインストールしようとしたときに、このマスクエラーを受け取るでしょう。 あなたはシステムで利用できる他のアプリケーションのインストールを試みるか、パッケージが利用可能になるまで待つかをするべきです。 パッケージがマスクされているのにはいつも理由があります。

  • ~arch keyword はstableブランチに置くには十分なテストが行われていないことを意味します。 何日か何週間か待ってもう一度試してみてください。
  • -arch keyword-* keywordはあなたのアーキテクチャでは動作しないことを意味します。 もしパッケージが動作すると信じているならbugzillaにバグを提出してください。
  • missing keywordはあなたのアーキテクチャでは未だテストされていないことを意味します。 アーキテクチャのポーティングチームにテストするよう頼むか、彼らのために自分でテストして気付いたことをbugzillaまで報告してください。
  • package.maskはパッケージが壊れている、unstableもしくは非推奨であるということが判明していて、故意に利用禁止とマークされていることを意味します。
  • profileはあなたのプロファイルには適当ではないことを意味します。 インストールするとシステムを破壊するおそれがあるか、もしくは単にあなたのprogileと互換性がないかのどちらかです。

依存関係の喪失

コード表示 4.5: 依存関係の喪失に対するPortageの警告

emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4".

!!! Problem with ebuild sys-devel/gcc-3.4.2-r2
!!! Possibly a DEPEND/*DEPEND problem. 

インストールしようとしているアプリケーションはシステムで利用できない他のパッケージに依存しています。 bugzillaに既に報告されているか確認して、まだであれば報告してください。 ブランチを混ぜていない限りこれが起こることはありませんので、それはバグであると言えます。

曖昧なebuild名

コード表示 4.6: 曖昧なebuild名に対するPortageの警告

!!! The short ebuild name "aterm" is ambiguous.  Please specify
!!! one of the following fully-qualified ebuild names instead:

    dev-libs/aterm
    x11-terms/aterm

インストールしようとしているアプリケーション名が2つ以上と一致しています。 正しいカテゴリー名を追加する必要があります。 Portageは可能性のある一致した選択肢を知らせるでしょう。

循環依存

コード表示 4.7: 循環依存に対するPortageの警告

!!! Error: circular dependencies: 

ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1
ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2 

2つ(もしくはそれ以上)のインストールしたいパッケージがお互いに依存し合っているためにインストールすることができません。 これはほとんどはPortageツリーのバグです。 bugzillaに既に報告されているか確認して、まだであれば報告してください。

取得失敗

コード表示 4.8: 取得失敗に対するPortageのエラー

!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
(...)
!!! Some fetch errors were encountered.  Please see above for details.

Portageがアプリケーションのソースのダウンロードに失敗し、他のアプリケーションのインストールを続けようとしています。 この失敗はミラーが正しく同期されていないか、ebuildが正しくない場所を示しているからかもしれません。 ソースを置いているサーバーが何らかの理由でダウンしているのかもしれません。

この問題がいつまでも続くようであれば1時間後にもう一度試してください。

システムプロファイルの保護

コード表示 4.9: プロファイルによって保護されたパッケージに対するPortageの警告

!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.

あなたはシステムのコアの一部であるパッケージを削除しようとしました。 それはプロファイルに必要であると載っているのでシステムから削除できません。

ダイジェスト検証の失敗

ときどき、あるパッケージをemergeしようとして、次のようなメッセージと共に失敗することがあるかもしれません。

コード表示 4.10: ダイジェスト検証の失敗

>>> checking ebuild checksums
!!! Digest verification failed:

これはPortageツリーにどこかおかしい所がある兆候です。 よく、開発者がパッケージをツリーにコミットするとき失敗したことが原因で起こります。

Digestの検証に失敗するとき、そのパッケージをあなた自身で再度ダイジェスト作成しようとしてはいけません。 この問題はebuild foo manifestでは修正されない上に、ほぼ間違いなく悪化します。

かわりに、1時間か2時間ツリーが安定するのを待っていてください。 おそらくエラーはすぐに検知されると思いますが、修正がPortageツリーに流れるのに少し時間がかかります。 待っている間、Bugzillaをチェックし、誰かがこの問題をすでに報告しているか調べてください。 もし報告している人がいなければ、すぐ壊れているパッケージのバグ報告をしてください。

いったんバグが修正されたことを確認したら、再び同期し修正されたダイジェストを取得する必要があるでしょう。

重要: これは何度もツリーの同期をしてもよいという意味ではありません! rsycnポリシーの中で述べられているように(emerge --syncを走らせたとき)、 あまり頻繁に同期するユーザは接続を禁止されることになります! 実際には次の定期的な同期まで待ち、そしてrsyncサーバに負荷をかけないようにしてください。


[ << ] [ < ] [ ホーム ] [ > ] [ >> ]


印刷

全てを見る

更新日 2008年 12月 23日

このドキュメントのオリジナルバージョン の更新日は2009年 10月 4日

要約: この章では、システムにおけるソフトウェアの管理をしていくのに、 ユーザーが知っておくべき「簡単な」手順を説明します。

Sven Vermeulen
Author

Roy Marples
Author

Daniel Robbins
Author

Chris Houser
Author

Jerry Alexandratos
Author

Seemant Kulleen
Gentoo x86 Developer

Tavis Ormandy
Gentoo Alpha Developer

Jason Huebel
Gentoo AMD64 Developer

Guy Martin
Gentoo HPPA developer

Pieter Van den Abeele
Gentoo PPC developer

Joe Kallar
Gentoo SPARC developer

John P. Davis
Editor

Pierre-Henri Jondot
Editor

Eric Stockbridge
Editor

Rajiv Manglani
Editor

Jungmin Seo
Editor

Stoyan Zhekov
Editor

Jared Hudson
Editor

Colin Morey
Editor

Jorge Paulo
Editor

Carl Anderson
Editor

Jon Portnoy
Editor

Zack Gilburd
Editor

Jack Morgan
Editor

Benny Chuang
Editor

Erwin
Editor

Joshua Kinard
Editor

Tobias Scherbaum
Editor

Xavier Neys
Editor

Grant Goodyear
Reviewer

Gerald J. Normandin Jr.
Reviewer

Donnie Berkholz
Reviewer

Ken Nowack
Reviewer

Lars Weiler
Contributor

おぎうち やすお
翻訳

わただ ゆうすけ
翻訳

せーいち
翻訳

五十嵐 正尚
翻訳

武田 洋之
翻訳

村上 誠
翻訳

小林 弘樹
翻訳

真藤 直観
翻訳

萩原 佳明
翻訳

松葉
翻訳

中野 正智
翻訳

飴谷 茂寛
翻訳

村上 卓
翻訳

田中 裕也
翻訳

増田 昌也
翻訳

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Online Kredit Index
Copyright 2001-2009 Gentoo Foundation, Inc. Questions, Comments? Contact us.