[ << ]
[ < ]
[ ホーム ]
[ > ]
[ >> ]
1. Portageについて
目次:
1.a. Portageへようこそ
PortageはもしかするとGentooのソフトウェア管理における最も革新的な注目すべきものかもしれません。
その高い柔軟性と膨大な量の機能で、たびたびLinuxで利用できる最高のソフトウェア管理ツールと見られています。
Portageは全てPythonとBashによって書かれており、
両方ともスクリプト言語であるため、ユーザーにとって全体的に見通しのよいものになっています。
ほとんどのユーザーが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フラグを確認 |
# 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 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-rebuildはgentoolkitによって提供されます;まず最初にemergeすることを忘れないでください。
コード表示 3.14: gentoolkitパッケージのインストール |
# emerge gentoolkit
|
1.d. Portageが不満を言ったら
SLOT、Virtual、ブランチ、アーキテクチャ、そしてProfilesについて
既に述べたように、Portageはとても強力で他のソフトウェア管理ツールに無い多くの機能をサポートしています。
このことを理解するために、あまり細かくなり過ぎるのを避けて、もう少しPortageの特徴について説明します。
Portageでは、一つのパッケージで複数のバージョンをシステム上に共存させることができます。
他のディストリビューションがそれらの名前にバージョンを付けている(freetypeとfreetype2の様に)のに対し、
PortageはSLOTと呼ばれる技術を使っています。
ebuildはそのバージョンの確かなSLOTを宣言します。異なったSLOTのebuildはシステムに共存できます。
例えば、freetypeパッケージはSLOT="1"とSLOT="2"のebuildを持っています。
同じ機能を提供しますが異なった実装のパッケージもまた存在します。
例えば、metalogd、sysklogd、syslog-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サーバに負荷をかけないようにしてください。
|
[ << ]
[ < ]
[ ホーム ]
[ > ]
[ >> ]
このドキュメントの内容は
Creative Commons -
Attribution / Share Alikeライセンスです。
|