目次
- Gentoo 管理コマンド(portage system)など,詳しく
- Portage システム – emerge
- 残された依存関係を削除する.
- emerge -p で表示される記号の意味.
- Portage のディレクトリ.
- make.conf
- mirrorselect
- emerge –sync が動作しない時の為の代替手段.
- パッケージのマスクとアンマスク,開発ブランチ.
- パッケージ限定 USE フラッグ.
- rc-update デーモンなどの起動設定.
- etc-update
- env-update
- modules-update
- equery
- qpkg の使い方.
- ebuild
- ディレクトリ関係の変数
- その他の変数
- 補助関数
- eclean
- logrotate
- chkrootkit
- portagejp(Gentoo JP)
- layman で portagejp
- 自分の portage ツリーを作る
- virtual
Gentoo 管理コマンド(portage system)など,詳しく
ってゆうか,これでも触りだけなんだけどorz
これから Gentoo 始める人の踏台になればと.
Debian 系に慣れちゃうと,まあ確かに,インストールが面倒という以前に,ただ普通に使うだけでも覚える事が多すぎる様な気もする(–;
Portage システム – emerge
一言で説明するならばビルドスクリプト集.
統一された操作感で色々なプログラムを一発でインストールしたり削除したり出来る.
bash スクリプトでありながら依存関係を解決する事が出来る.
ビルド時の操作を記述した .ebuild ファイルを直接扱う為の ebuild と,上層インターフェイスである emerge に分かれている.
通常のインストール作業等はこの emerge で行う.
- –pretend | -p: 何が起こるかを表示する.
- –verbose | -v: 冗長メッセージ.-p と組み合わせて使用.USE フラッグの確認等に使う.
- –ask | -a: -p の後インストールするか聞いてくる.
-p と違い,依存関係を二度チェックする必要がない. - –unmerge | -C: アンインストール.
- –clean | -c: 古いバージョンをアンインストール.
- –update | -u: 新しいバージョンに更新.
- –search | -s: 与えたキーワードを含むパッケージを検索.
- –searchdesc | -S: DESCRIPTION も検索対象にする.
- –buildpkg | -b: コンパイル済のパッケージも作成する.
- –usepkg | -k: –getbinpkg と組み合わせて使う.バイナリパッケージをダウンロードする.PKGDIR にパッケージがあれば -k だけで動く.
- –getbinpkg | -g: –usepkg と組み合わせて使う.バイナリパッケージからのインストールを試みる.
- –oneshot: world ツリーへの登録を行なわない.すなわち,他のパッケージから依存関係を要求されてインストールされた事にする.
- –sync: Portage ツリーを最新に更新する.
バイナリパッケージを利用する場合,make.conf にパッケージがある URI を以下の様に記述しておく.
PORTAGE_BINHOST="ftp://buildhost/gentoo"
emerge -b もしくは quickpkg コマンドですでにシステムにインストールされているファイルからパッケージを作成する事が出来る.
これらのパッケージの出力先は make.conf 内の PKGDIR= で変更する事が出来る.
残された依存関係を削除する.
# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild
emerge -p で表示される記号の意味.
- N: New, 新規インストール.
- U: Update, 更新する.
- R: Replace, 置き換える.
- B: Block, パッケージによってブロックされている.
- F: Fetch, ダウンロードしてくる必要がある.
- S: Slot, スロットで別バージョンを共存させる.
稀に開発中なパッケージなんかは,キーワードによってブロックされてます,みたいなメッセージが出る.
そういう時は後述の方法でマスクを解除してやってから入れる.
Portage のディレクトリ.
知っておいた方が良い Portage に関係のあるディレクトリとファイル.
- /usr/portage
デフォルトの Portage ツリーの在処.
何かディレクトリを作っても –sync の度に消される. - /usr/portage/distfile
fetch で取得されたファイルの置き場所. - /usr/portage/profiles
Gentoo のそれぞれのバージョンでの Portage 初期状態(マスクや USE の状態とか)
の設定が入ったファイルやディレクトリが含まれる. - /usr/portage/licenses
ライセンスのリスト.各 ebuild の LICENSE= はこの中のどれかと一致する必要が ある. - /usr/portage/skel.ebuild
ebuild の雛型. - /var/tmp/portage
Portage のワークディレクトリ./tmp は noexec でマウントされている可能性がある為にここになっているのだろう.
作業の進行に合わせてこの下に色々作られる. - /usr/lib/portage/bin
ebuild から呼び出される各種補助関数. - /etc/make.globals
デフォルトの make.conf だが,直接編集してはいけない.make.conf に書く様にす る. - /etc/make.profiles/make.defaults
デフォルトの USE 変数等が入っているが,直接編集せず,make.conf で USE="{-|+}xxx" を指定する. - /etc/make.profile
幾つか用意されているシステム全体の雛型へのシンボリックリンク.
例えば /usr/portage/profiles/default-linux/x86/no-nptl/2.4 など. - /etc/make.conf
ユーザー定義可能な Portage 設定ファイル. - /etc/portage
package.{keywords|mask|unmask} 等が含まれる.インストールの可否を制御するファイル達.
アンマスクする時は /usr/portage/profile/package.mask に書かれている行と正確に同じにする必要がある.
make.conf
Portage システムのユーザー定義ファイル.
- CFLAGS,CHOST,CXXFLAGS
gcc に渡す最適化オプション. - MAKEOPTS
make に渡すオプション.通常は -j2 等の様に CPU+1 の数字. - LINGUAS
ja を設定しておけば kde-i18n とかで日本語のみがインストールされる. - USE
システムで使用する機能を指定.各 ebuild で対応した USE が定義されていればそれに合わせて挙動が変化する.
デフォルトで有効になっている機能を disable したい場合は -kde 等の様に – を付けて指定する. - PORTDIR_OVERLAY_JP
Portage.jp を保存するディレクトリの設定.必ず PORTDIR_OVERRAY の前に記述. - PORTDIR_OVERLAY
Portage ツリーの追加レイヤー."/usr/portagejp /root/portage" の様に複数設定可能. - PORTAGE_BINHOST
バイナリパッケージがある場所を記述しておく. - FEATURES
自動で実行される ebuild の関数(だと思う)."digest" としておけば,野良ビルドでダイジェストを作成する手間が省ける. - PKGDIR
emerge -b もしくは quickpkg コマンドで作成されるバイナリパッケージ置き場.
emerge -k もこのディレクトリをまず参照する.
/usr/portage/pkg などとすると,emergte –sync の度に消されてしまうので別ディレクトリにする事.
mirrorselect
ミラーの選択.
# emerge mirrorselect
# mirrorselect -i
日本のミラーを選択する.
emerge –sync が動作しない時の為の代替手段.
# emerge-websync
パッケージのマスクとアンマスク,開発ブランチ.
emerge -u などで上書きされては困るものを書いておくファイルを作る.
# touch /etc/portage/package.mask
# touch /etc/portage/package.unmask
アンマスクの注意点として,/usr/portage/profile/package.mask に書かれている行と正確に同じにする必要がある.
また,開発版などで unstable なものは merge 出来ない.
最新のツリーを追いかけたいパッケージを指定しておくファイルを作る.
# touch /etc/portage/package.keywords
ここに,カテゴリー/名前キーワードで指定する.例えば
sys-fs/encfs ~x86
dev-libs/rlog ~x86
x86 の様なキーワードの前に ~ を付けると unstable を意味する.
portagejp の ebuild は基本的に ~x86 されている.
あと自分で作ったやつも ~x86 と書くのが普通だったりするので,このファイルに対応する ebuild を書いておく必要がある.
パッケージ限定 USE フラッグ.
/etc/portage/package.use を作って,例えば以下の様な書式で書いておけば,そのパッケージ限定で USE フラッグが適用される.
app-i18n/azik doc emacs
rc-update デーモンなどの起動設定.
/etc/init.d 以下の起動スクリプト等を /etc/runlevels/xxx にシンボリックリンクを作成してくれる.
rc-update add canna default の様に使う.
- add | -a: 追加.
- del | -d: 削除.
- show | -s: 一覧表示.引数なしならどのスクリプトがどの runlevel に登録されているかが解る.
etc-update
未稿.
env-update
/etc/env.d 以下にある各種環境変数を記述したファイルを読み,一つにまとめて /etc/profile.env を作成してくれる.
/etc/hosts 等を変更しても反映される.
modules-update
未稿.
equery
未稿.list| files | depends | belongs などを知っておくと幸せになれる.
(以下はその前身である qpkg のもの)
インストールされているパッケージを調べたり出来るツール.
# emerge gentoolkit
qpkg の使い方.
- –installed | -I: インストールされているパッケージを表示する.
- –list | -l: パッケージに含まれるリストを表示する.
- –info | -i: Version と Description も表示する.
- –find-file | -f: あるファイルがどのパッケージに含まれるか調べる.ファイルはフルパスでないと検索に掛からない.
- –find-pattern | -fp: 上記と同じ事をパターンマッチで調べる.
- –query-deps | -q: -l と組み合わせて依存関係も調べる.
- –no-color | -nc: 色を付けない.
ebuild
Portage システムの下層インターフェイス.
自分で書いた ebuild なんかはこれでテストし,MD5 ダイジェストも作成する必要があ
る.
# ebuild file command
- setup: パッケージ固有のセットアップと様々なチェックを行う.
- clean: 一時ディレクトリとインストールイメージ,作成した場合はバイナリパッケージも削除する.
- fetch: ローカルにソースパッケージが存在しない場合,ネットワークから取得.
- digest: SRC\_URI に列挙されている全てのソースファイルの MD5 ダイジェストを記録する.
- unpack: ebuild 内に定義されている srcunpack 関数を実行する.存在しない場合,標準的な展開手続きが実行される.
- compile: src\_compile 関数を実行する.デフォルトでは autoconf で作成された標準的なプログラムと同等のコンパイルプロセスを辿る.
- preinst: インストールイメージをマージする前に必要な操作が定義されていればそれを実行する.
- install: src\_install 関数を実行し,一時インストールイメージを保存すべきディレクトリに全てをインストールする.
- postinst: インストールイメージをマージした後に必要な操作が定義されていればそれを実行する.
- qmerge: pkg\_preinst, install, pkg\_postinst が実行される.その際,インストールされるファイルは全て MD5 ダイジェストが記録される.
- merge: fetch, unpack, compile, install, qmerge が実行される.
ディレクトリ関係の変数
- P: リビジョンを除いたパッケージ名が入っている.変更してはならない.
例(太字で示した所): xfree-4.2.1-r2.ebuild - PN: バージョンを除いたパッケージ名が入っている.
例: xfree-4.2.1-r2.ebuild - PV: リビジョンを除いたバージョン番号が入っている.
例: xfree-4.2.1-r2.ebuild - PR: リビジョン番号が入っている.存在しない場合は r0 になる.
例: xfree-4.2.1-r2.ebuild - PVR: リビジョン付きのバージョン番号が入っている.
例: xfree-4.2.1-r2.ebuild - PF: 完全なパッケージ名が入っている.
例: xfree-4.2.1-r2.ebuild - A: 必要なソースファイル全てが入っているが,自分で定義してはならない.
SRC\_URI 変数から自動で生成される. - WORKDIR: パッケージビルドルートのパスが入っている.変更してはならない.
({PORTAGE_TMPDIR}/portage/){PF}/work - FILESDIR: Portage ツリー内の ebuild が保存されているディレクトリにある files ディレクトリへのパスが入っている.
({PORTDIR}/){CATEGORY}/${PN}/files} - DISTDIR: man 5 ebuild にはないが,ダウンロードディレクトリ(と思われる).
- S: 一時ビルドディレクトリのパスが入っている.src_compile と src_install のカレントディレクトリ.パッケージを展開した時に生成されるディレクトリと辻褄が合う様に変更しても良い.
({WORKDIR}/){P} - T: テンポラリディレクトリ.自由に使って良い.
({PORTAGE_TMPDIR/portage/){PF}/temp} - D: 一時インストールディレクトリのパスが入っている.補助ツールと補助関数を使わない場合,install xxx ${D}/usr/bin/ の様に使わなければならない.
({PORTAGE_TMPDIR}/portage/){PF}}/image
その他の変数
- DESCRIPTION: パッケージの簡単な説明.必須.
- SRC_URI: 必要なソースファイルのリスト.一つのソースファイルに対して複数の URI があっても良いし,幾つかのソースに分かれている場合はそれらを書いてもよい.必須.
- HOMEPAGE: ソースのメインサイトとより詳しい説明がある URI など.リストになっていても良いらしい.必須.
- KEYWORDS: アーキテクチャのリスト.開発版を示す ~ をつけて(~x86 などの様に)書く事になるだろう.必須.
- SLOT: 複数のバージョンを共有させる為の機能.必要ない場合でも SLOT="0" を入れておく必要がある.
- LICENSE: パッケージのライセンス./usr/portage/licenses にある行とマッチする必要がある.必須.
- IUSE: その ebuild が使用出来る USE フラッグを全て入れておく.必須.
- DEPEND: コンパイルする為に必要なパッケージのリスト.USE フラッグによる三項演算子みたいな事も出来る.詳しくは man 5 ebuild を見よ.
- RDEPEND: そのパッケージが走る為に必要な他のパッケージ.書式は DEPEND に準ずる.
- PDEPEND: そのパッケージがマージされた後に,インストールされなければならないパッケージのリスト.
- RESTRICT: FEATURE 機能(fetch 等の ebuild の引数を指定すると,emerge が自動的にそれを実行する)のうち,制限するものをスペースで区切って指定する.fetch を指定すると,そのパッケージに限って SRC_URI からダウンロードしてこない事になる.有料ソフトなどに使えば良いだろう.
- PROVIDE: バーチャルターゲットを提供する.詳しくはよく解らない….
補助関数
/usr/lib/portage/bin にあるサポートスクリプト.
ebuild から実行出来る便利な機能が色々と用意されている.
未稿.
eclean
ディスク整理ユーティリティ(こんなツールが欲しかった).
たぶん gentoolkit の一部.
-p で確認してから実行.-d でさらなる整理.
# eclean -p distfiles ; eclean distfiles
# eclean -pd distfiles ; eclean -d distfiles
# eclean -p packages ; eclean packages
# eclean -pd packages ; eclean -d packages
logrotate
ログ管理.
/etc/logrotate.d とかって,設定ファイルを配置する為のディレクトリが用意されているだけで,標準では本体が入っていなかった(–;;
# emerge -av logrotate
crontab に追加
0 7 * * * /usr/sbin/logrotate /etc/logrotate.conf
実行結果の確認とか.
# tail /var/lib/logrotate.status
chkrootkit
入れるだけで動く.
# emerge chkrootkit
cron で動かす場合は /etc/cron.d/weekly/chkrootkit を編集.
以下のコメントを外す.
exec /usr/sbin/chkrootkit -q
portagejp(Gentoo JP)
日本語のアプリケーション等が多数含まれる.
ローカルシステムに置く場所として,ここでは /usr/portagejp として話を進める.
まず,make.conf に追加する.先に PORTDIR_OVERLAY_JP を宣言する事.
PORTDIR_OVERLAY_JP="/usr/portagejp"
PORTDIR_OVERLAY="/usr/portagejp"
元となるアーカイブをダウンロードし,展開する.
# cd /usr
# wget http://ebuild.gentoo.gr.jp/distfiles/portagejp.tbz2
# tar jxvf portagejp.tbz2
digest は付属しないので,emerge する前にそれぞれ ebuild xxx digest を実行しなければならない.
が,以下の行を make.conf に追加する事で,digest の生成を自動化出来る.
ファイルの正当性は自己責任になるが.
FEATURES="digest"
また,portagejp は本家のアプリケーションを上書きしない様,全てが開発版としてマークされている.
従って,何かをインストールする時は /etc/portage/package.keywords に追加しなければならない.
例えば,
app-i18n/azik ~x86
ツリーの更新は以下のコマンドで行う.
# emerge portagejp
layman で portagejp
KDE3.5 が kde-sunset オーバーレイに移った.
これを同期するにはオーバーレイ管理ツールである layman が必要なのだが,どうせなら portagejp も layman にしてしまおうと.
上記の portagejp を手動で追加する方法を全て解除し,emerge –unmerge portagejp してから行う.
USE フラッグ.
app-portage/layman git
dev-util/git -emacs -gtk -iconv -perm -xinetd
入れる.
# emerge layman
layman -s xxx でオーバーレイを追加したりすると,PORTDIR_OVERLAY が増えていく.
これは /usr/local/portage/layman/make.conf に自動的に追加される.
従って /etc/make.conf には以下を追加する.
source /usr/local/layman/make.conf
同期.オーバーレイを追加.
# layman -f ## 利用可能なオーバーレイリストを更新.
# layman -a gentoojp ## オーバーレイを追加.
# layman -s gentoojp ## オーバーレイを更新.
自分の portage ツリーを作る
まず自分の portage ツリー置場を作る.ここでは /root/portage としておきます.
うちでは nfs マウントにして RAID 化されたファイルシステムに置いている.
そして /etc/make.conf で
PORTDIR_OVERLAY="/root/portage"
とか設定します.
portage-jp とか複数ある場合は空白で区切りましょう.
例えば media-tv/saa713x-driver-0.2.12.ebuild とか作った(または貰ってきた)場合,
/etc/portage/package.keyword で
media-tv/saa713x-driver ~x86
みたいに category/package ~x86 と書く,
ebuild 本体の置場は上記の PORTAGE_OVERLAY/category/package/ebuild となるから,
上記の例では
/root/portage/media-tv/saa713x-driver/saa713x-driver-0.2.12.ebuild となる.
ここまで出来たら digest を作成する
# ebuild /root/portage/media-tv/saa713x-driver/saa713x-driver-0.2.12.ebuild digest
あとはいつものやつ.
# emerge saa713x-driver
しかし,この様にして入れたパッケージは,依存関係で問題を起こす事がある.
例えば,自前のカーネルをインストールしていたとして,lm_sensors を追加したい場合には,適切なカーネルパッケージがインストールされていないと言われるかも知れない.
もし,その代替パッケージが Portage でサポートされている何かと同じ機能を提供する事が確実なら,injecting 機能によって,手動でインストールされた事を Portage に知らせる事が出来る.
この機能を使う場合,/etc/portage/profile/package.provided に追加する.
sys-kernel/vanilla-sources-2.4.32
うちで配布しているやつは, 使えそうなものは出来るだけ Portagejp に流しています.
なので,portagejp をオーバーレイしている人はファイルを持っていく前にチェックしてみて下さい.
もしかするとすでに自分のハードディスクにあるかも?
virtual
emerge で virtual/x11 がないよ,とか言われる場合がある.
勿論,xorg が入っていても,xorg が xfree を置き換えるパッケージである事をemerge が知らなければどうしようもない.
# echo 'virtual/x11 x11-base/xorg-x11'>> /etc/porage/profile/virtuals