Gentoo 勉強会資料
はじめに
あの時は資料もなく、かなり行きあたりばったりに話してさらに時間が経って忘れかけているのもありますが思い出しつつこの前のGentoo勉強会の資料を書いてみましょう。
想定層は Gentoo いれてみて、ちょっと上を目指したいあたりでしょうか?
/etc/make.conf
とりあえず、 /etc/make.conf をながめました。/etc/make.conf は Gentoo の設定の中核をなすと言っても過言ではないでしょう。
コンパイラ設定
CFLAGS="-march=k8-sse3 -mcx16 -msahf --param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512 -mtune=k8 -O2 -fomit-frame-pointer -pipe" CXXFLAGS="${CFLAGS}" CHOST="x86_64-pc-linux-gnu"
CFLAGS 長いですね。しかし、これは CFLAGS="-mach=native -O2 -fomit-frame-pointer -pipe" を展開したものです。"-march=native" は gcc-4.2 から導入された gcc がCPUを自動判定して、CPU用の最適化オプションをつけてくれものです。 (http://en.gentoo-wiki.com/wiki/Safe_Cflags#-march.3Dnative)
しかし、これには一つ問題があります。distcc や icecc といった分散コンパイル環境ではこのオプションはうまく動作しない可能性があるのです。この "-march=native" が分散された先の CPU の設定を行なってしまうためです。
これを回避すべく、 "-march=native" を展開して CFLAGS に設定しておきます。展開するスクリプトは id:tmatsuu さんの記事(gcc -march=nativeが生成する最適化オプション - Dマイナー志向)を見てください。このスクリプトの動きを簡単に解説すると、 gcc に "-v" をつけることで実際にコンパイラをどう起動しているかが表示されます。それを "-march=native" 付きと付いていないものとで比較し差分を見ているわけです。
残り CXXFLAGS は CFLAGS と同じはまぁ定石でしょうか。 CHOST は Linux ではほとんど変えることがないでしょう。 Gentoo/{FreeBSD,DragonFly} では "i686-gentoo-freebsd8.0", "i686-gentoo-dragonfly2.6" のように、元にしているBSDのバージョンをつけることになっています。(変えなくてもだいた動作していますが…) 変えた場合は、 emerge -e system で変更を binutils や libc あたりに適用しましょう。
コンパイル性能系
#MAKEOPTS="-j -l3" #FEATURES="ccache distcc parallel-fetch metadata-transfer" FEATURES="ccache parallel-fetch metadata-transfer" CCACHE_DIR="/var/tmp/ccache" CCACHE_SIZE=2G #PORTAGE_NICENESS=19 #PORTAGE_TMPDIR="/dev/shm" #EMERGE_DEFAULT_OPTS="-j --load-average 6 -avt"
Gentoo は、とにかくコンパイルをするディストリビューションなのでコンパイル速度を向上したり、また負荷を下げたりする設定がいろいろとあります。
まず MAKEOPTS。 make に渡される引数ですね。 "-j" は普通は "-j3" のように数字をつけて使い、並列ビルドのジョブ数を指定します。IO待ちの間に走らせることを考えて「(CPU数)x2+1」など指定するようです。ぼくは数字をつけていませんが、この場合無数にジョブ数を増やします。それだと際限がないので、 "-l3" で(他にジョブが走っていて) load average が 3.0 以上であればそれ以上ジョブを起動しないようにします。今はOFFになっていますが、これは結構多くのパッケージで依存関係がおかしくなっていて並列にするとうまく動かないことがあるためです…。
次に FEATURES。 ccache はコンパイルの結果をキャッシュしておいて、再度コンパイルする際にそのキャッシュから結果を取ってくることでコンパイルを速くします。CCACHE_DIR でキャッシュの保管ディレクトリ、 CCACHE_SIZE でキャッシュサイズを指定しています。 FEATURESに戻って、今は OFF にされてますが distcc は distcc による分割コンパイル機能をONにするものです。(http://www.gentoo.org/doc/ja/distcc.xml) parallel-fetch ではコンパイルしている最中に裏で次以降のコンパイルで使うソースコードを取得しにいくようにするもの。 metadata-transfer は依存解決を速くするために portage cache を SQLite で管理する時に必要になります。これはあまり気にしなくていいです。
PORTAGE_NICENESS は見たまんまに emerge の nice値を決めます。昔はemerge がCPU食ってレスポンスが悪くなるのだと思って 19 にしていましたが、最近どうも tar による展開などのIOを食うシーンでレスポンスが悪くなっているのに気がつき emerge を "ionice -c 3 emerge ..." と起動するほうに切り替えました。"ionice -c 3" は Linux kernel 2.6.25 以降で使えます。他のプログラムがIOをしばらくの間使っていない時にこのプログラムが走るようにしてくれます。
PORTAGE_TMPDIR は、ようするに portage がコンパイルするディレクトリを指定しています。 "/dev/shm" に指定することで、/dev/shm に多分 mount されてあるであろう tmpfs 上でコンパイルを行ないます。 mount されてなかったら /etc/fstab を見てみてください。多分エントリあるので。さて、 tmpfs は動的に容量を変化できる ramdisk でして、ようするにメモリ上のファイルシステムでコンパイルが動く、ということです。これによりIOがかなり低減されます。ただ、メモリをたくさんつんでいないと容量不足で止まってしまったりもします。一応使ってない部分を swap out してくれるので、 swap を 5Gほど取って on にして /etc/fstab で tmpfs の容量を5,6Gに設定しておけばいいかと思います。できるだけ、メモリで作業して足りない分は swap に流してくれます(多分)
EMERGE_DEFAULT_OPTS は emerge のデフォルトの引数を指定するものです。 "-j --load-average 6" の部分はさきほどの make の並列ビルドをパッケージ単位で行なうものです。注意する点としては… "--load-average 6" としていてもなぜかついうっかり load average を超えてしまうことがよくあります…。まぁ多分ジョブを起動するかの判定を unpack 前後、コンパイル前後、インストール前後などでやってるからでしょう…。 "-a" は emerge 前の確認。 "-v" で USE flag なんかを表示するようになります。"-t" はインストールされるパッケージ依存関係を "-a" による確認の際にツリーで表示します。インストールしたくないもの、ブロックしているものがどこからの依存かを見るなどに使います。
パッケージ設定
USE="zeroconf bonjour avahi acpi alsa apache2 bdf bl bzip2 cddb cdparanoia cdr cjk cvs \ dga directfb divx dvd dvdr dvdread dynamicplugin emacs \ encode fbcon firefox gcj gd gif gnus gtk gzip-el hddtemp \ immqt-bc java jpeg lm_sensors maildir matrox mbrola mikmod \ mozilla mp3 mplayer msn mule mysql nsplugin nss ogg openal \ opengl php png qt3 qt3support qt4 quicktime ruby sdl \ sensord sound spell sqlite subtitles svg sysfs tetex threads \ toolkit-scroll-bars truetype tse3 usb vorbis wmp X xface xft \ xine xinetd xml xscreensaver xvid zip zsh-completion kde \ -gnome -eds esd -berkdb -ldap -kerberos 3dnow 3dext 3dnowext \ -gstreamer fortran mmxext ithreads amr -bluetooth xulrunner gmp -dts -x264 ssse3 joystick offensive xcb xinerama" LINGUAS="ja" INPUT_DEVICES="evdev mouse keyboard joystick" VIDEO_CARDS="vesa vga fbdev amd matrox mga nvidia" SANE_BACKENDS="pixma" ACCEPT_KEYWORDS="~amd64" ACCEPT_LICENSE="skype-eula DOOM3 dlj-1.1 googleearth AdobeFlash-10.1"
USE大増殖してますね…。確かなにかの USE flag manager 使ったせい…。本来は profile がある程度やってくれてるのでそこから必要な分だけ足したり引いたりしましょう。今は、 portage-utils に入っている quse を使い、 "quse -D toolkit-scroll-bars" などとして USE flag が global かどうか、と flag の説明とを見ます。 global ならば /etc/make.conf に書いて、 local ならば /etc/portage/package.use に個別に書いてます。global と local の違い? よく使われているかどうかですかね…。
LINUGUAS, INPUT_DEVICES, VIDEO_CARDS, SANE_BACKENDS。それぞれ多言語対応、X入力デバイス、X出力デバイス、スキャナデバイスでなにを使うかを設定しています。
ACCEPT_KEYWORDSは普通に使っている人は設定するものではないでしょう…。 "~amd64" とすることで amd64用テスト中パッケージをインストールするようになります。バグ出しどんどんやってやる、という人向け。
ACCEPT_LICENSE は最近追加されたものですかね。この変数に LICENSE名を書いてどの LICENSE のものをインストールするかを決めます。man に載っている例とデフォルトの "* -@EULA" を解説しておきます。
# どんなライセンスでもOK ACCEPT_LICENSE="*" # "public-domain" というライセンス以外はOK ACCEPT_LICENSE="* -public-domain" # FSF-APPROVED というライセンスグループのものだけがOK ACCEPT_LICENSE="-* @FSF-APPROVED" # エンドユーザ用ライセンスは確認 ACCEPT_LICENSE="* -@EULA"
といったところです。
portage-utils
portage-utils は Gentoo を使う上でかかせない便利なパッケージです。 http://www.gentoo.org/doc/ja/portage-utils.xml も参考にどうぞ。
qgrep
ebuild の中を grep します。一般ユーザで使う前に "q -r" を root で動かすことが必要です。
$ qgrep foo # --with-foo are broken, any use of --with/--without disable the # --with-foo are broken, any use of --with/--without disable the # --with-foo are broken, any use of --with/--without disable the # --with-foo are broken, any use of --with/--without disable the #epatch "${FILESDIR}"/${PV}/${PV}-foo.patch #epatch "${FILESDIR}"/${PV}/${PV}-foo.patch # $Header: /var/cvsroot/gentoo-x86/app-dicts/sword-lightfoot/sword-lightfoot-1.0.ebuild,v 1.1 2009/01/10 23:46:39 beandog Exp $ SWORD_MODULE="Lightfoot" DESCRIPTION="John Lightfoot Commentary" HOMEPAGE="http://crosswire.org/sword/modules/ModInfo.jsp?modName=Lightfoot" <snip>
qlist
"qlist portage" などのようにすることで、パッケージ名に "portage" を含むパッケージのファイルリストが出力されます。
$ qlist portage /usr/share/doc/autounmask-0.27/Changelog.bz2 /usr/bin/autounmask /etc/eixrc /usr/share/man/man1/eix.1.bz2 /usr/share/doc/eix-0.20.6/eix-db.txt.bz2 /usr/share/doc/eix-0.20.6/eix-xml.txt.bz2 /usr/share/doc/eix-0.20.6/html/eix-xml.xsd /usr/share/doc/eix-0.20.6/ChangeLog.bz2 /usr/share/doc/eix-0.20.6/AUTHORS.bz2 /usr/bin/eix <snip> /usr/sbin/fixpackages /usr/sbin/archive-conf /usr/sbin/dispatch-conf /usr/sbin/update-etc /usr/sbin/env-update /usr/sbin/update-env /usr/sbin/emerge-webrsync /usr/sbin/regenworld /usr/sbin/emaint /usr/sbin/etc-update
"qlist -I portage" で、パッケージ名に "portage" を含むパッケージのリストが出力されます。
$ qlist -I portage app-portage/autounmask app-portage/eix app-portage/g-cpan app-portage/gentoolkit app-portage/layman app-portage/overlay-utils app-portage/pfl app-portage/portage-utils app-portage/profuse app-portage/ufed sys-apps/portage
"qlist -Iv portage" で、さきほどのものにバージョン名がつきます。
$ qlist -Iv portage app-portage/autounmask-0.27 app-portage/eix-0.20.6 app-portage/g-cpan-0.16.2 app-portage/gentoolkit-0.3.0_rc10-r1 app-portage/layman-1.4.1 app-portage/overlay-utils-0.2.1 app-portage/pfl-2.0 app-portage/portage-utils-0.4 app-portage/profuse-0.25.4 app-portage/ufed-0.40.1 sys-apps/portage-2.1.8.3
qsize
"qsize portage" などのようにすることで、パッケージ名に "portage" を含むパッケージの使っているファイル容量を表示します。
$ qsize portage sys-apps/portage-2.1.8.3: 364 files, 46 non-files, 2032.553 KB app-portage/autounmask-0.27: 2 files, 5 non-files, 11.701 KB app-portage/pfl-2.0: 2 files, 9 non-files, 14.242 KB app-portage/g-cpan-0.16.2: 10 files, 18 non-files, 90.747 KB app-portage/portage-utils-0.4: 37 files, 11 non-files, 228.432 KB app-portage/gentoolkit-0.3.0_rc10-r1: 147 files, 35 non-files, 846.37 KB app-portage/layman-1.4.1: 30 files, 18 non-files, 168.195 KB app-portage/overlay-utils-0.2.1: 3 files, 5 non-files, 24.119 KB app-portage/eix-0.20.6: 16 files, 9 non-files, 1139.212 KB app-portage/ufed-0.40.1: 4 files, 8 non-files, 48.992 KB app-portage/profuse-0.25.4: 2 files, 5 non-files, 57.950 KB
qsearch
パッケージ名とその説明を検索します。 正直なところ eix でいいと思いますね。
$ qsearch foo app-dicts/sword-lightfoot John Lightfoot Commentary app-misc/unfoo A simple bash driven frontend to simplify decompression of files app-xemacs/footnote Footnoting in mail message editing modes. dev-python/foolscap The next-generation RPC protocol, intended to replace Perspective Broker. dev-python/snakefood Generate dependency graphs from Python code games-sports/bygfoot GTK+2 Soccer Management Game games-sports/foobillard 8ball, 9ball, snooker and carambol game games-sports/foosball foosball game that uses SDL net-print/foo2zjs Support for printing to ZjStream-based printers net-print/foomatic-db Printer information files for foomatic-db-engine to generate ppds net-print/foomatic-db-engine Generates ppds out of xml foomatic printer description files net-print/foomatic-db-ppds linuxprinting.org PPD files for postscript printers net-print/foomatic-filters Foomatic wrapper scripts net-print/foomatic-filters-ppds linuxprinting.org PPD files for non-postscript printers net-print/foomatic-gui GNOME interface for configuring the Foomatic printer filter system net-zope/cmfoodocument Zope/CMF for handling OpenOffice documents
quse
"quse emacs" で USE に emacs を含むパッケージをリストアップします。
$ quse emacs app-admin/puppet/puppet-0.25.4-r1.ebuild augeas emacs ldap rrdtool shadow vim-syntax app-admin/puppet/puppet-0.25.5.ebuild augeas emacs ldap rrdtool shadow vim-syntax app-admin/puppet/puppet-2.6.0-r1.ebuild augeas emacs ldap rrdtool shadow vim-syntax app-admin/puppet/puppet-2.6.0.ebuild augeas emacs ldap rrdtool shadow vim-syntax app-editors/jasspa-microemacs/jasspa-microemacs-20091011-r1.ebuild nanoemacs X xpm app-editors/leafpad/leafpad-0.8.17.ebuild emacs app-emacs/company-mode/company-mode-0.4.3.ebuild ropemacs semantic app-emacs/company-mode/company-mode-0.5.ebuild ropemacs +semantic app-emacs/emacs-common-gentoo/emacs-common-gentoo-1.2-r1.ebuild X emacs22icons app-emacs/emacs-common-gentoo/emacs-common-gentoo-1.2.ebuild X emacs22icons <snip>
"quse -D esd" で USE flag の説明が表示されます。 これを見ながら、ON/OFF選ぶとよいでしょう。
$ quse -D esd global:esd: Adds support for media-sound/esound (Enlightened Sound Daemon) local:esd:app-emulation/qemu: Enable esound output for sound emulation local:esd:app-emulation/qemu-kvm: Enable esound output for sound emulation local:esd:app-emulation/qemu-kvm-spice: Enable esound output for sound emulation local:esd:app-emulation/qemu-softmmu: Enable esound output for sound emulation
qdepends
"qdepends emacs-vcs" で "emacs-vcs" をパッケージ名にふくむパッケージの依存情報を表示します。
$ qdepends emacs-vcs app-editors/emacs-vcs-23.2.9999: sys-libs/ncurses >=app-admin/eselect-emacs-1.2 net-libs/liblockfile media-libs/alsa-lib sys-libs/gpm sys-apps/dbus x11-libs/libXmu x11-libs/libXt x11-misc/xbitmaps media-libs/giflib media-libs/jpeg:0 media-libs/libpng >=gnome-base/librsvg-2.0 media-libs/tiff x11-libs/libXpm media-libs/fontconfig media-libs/freetype x11-libs/libXft x11-libs/gtk+:2 dev-util/pkgconfig app-arch/gzip =sys-devel/automake-1.11* >=sys-devel/autoconf-2.61 >=sys-devel/libtool-2.2.6b >=dev-vcs/bzr-1.5 app-editors/emacs-vcs-24.0.9999: sys-libs/ncurses >=app-admin/eselect-emacs-1.2 net-libs/liblockfile media-libs/alsa-lib sys-libs/gpm sys-apps/dbus x11-libs/libXmu x11-libs/libXt x11-misc/xbitmaps media-libs/giflib media-libs/jpeg:0 media-libs/libpng >=gnome-base/librsvg-2.0 media-libs/tiff x11-libs/libXpm media-libs/fontconfig media-libs/freetype x11-libs/libXft x11-libs/gtk+:2 dev-util/pkgconfig app-arch/gzip =sys-devel/automake-1.11* >=sys-devel/autoconf-2.61 >=sys-devel/libtool-2.2.6b >=dev-vcs/bzr-1.5
"qdepends -Q vim" で依存に vim を持つパッケージをリストします。
$ qdepends -Q vim app-vim/gentoo-syntax-20100215
qpkg
"qpkg sl" で app-misc/sl のバイナリパッケージを作ります。やばめの作業をする時に作っておくと安心ですね。 glibc をダウングレードしたり、 python の実験的なものを試してみたり…。
qfile
"qfile sl" で sl をファイル名に含むをファイルをインストールしたパッケージを表示します。 *これはインストールしてあるパッケージにしか使えません*
$ qfile sl sys-apps/man (/usr/share/man/sl) sys-apps/man (/usr/share/locale/sl) app-misc/sl (/usr/bin/sl) app-admin/gkrellm (/usr/share/locale/sl) x11-libs/wxGTK (/usr/share/locale/sl) games-arcade/frozen-bubble (/usr/share/locale/sl) dev-libs/newt (/usr/share/locale/sl) app-emulation/qemu-kvm (/usr/share/qemu/keymaps/sl) kde-base/kdelibs (/usr/share/apps/ksgmltools2/customization/sl) kde-base/kdebase-data (/usr/share/locale/l10n/sl) file: opendir(/var/db/pkg/world) failed: Not a directory net-print/libgnomecups (/usr/share/locale/sl) sci-misc/boinc (/usr/share/locale/sl) games-strategy/wesnoth (/usr/share/man/sl) games-strategy/wesnoth (/usr/share/games/wesnoth/translations/sl) app-office/openoffice (/usr/lib64/openoffice/basis3.2/share/template/wizard/letter/sl)
ちなみに、こいつ BSD では動いてません。CVS HEAD には patch 送ってるのでそのうち直るでしょうが…。待てなければ、うちの overlay 使ってください。
qlop
emerge のログを解析して、 emerge 時刻やかかった時間などを表示します。
リストアップ
# qlop -l <snip> Sat Aug 7 14:34:58 2010 >>> app-text/pandoc-1.6 Sat Aug 7 14:37:09 2010 >>> dev-vcs/darcs-2.4.4-r1 Sat Aug 7 14:37:16 2010 >>> media-video/nvidia-settings-195.36.24 Sat Aug 7 14:38:10 2010 >>> media-video/dvdrip-0.98.11 Sat Aug 7 14:40:36 2010 >>> x11-themes/fvwm-crystal-3.0.6-r1 Sat Aug 7 14:40:50 2010 >>> x11-wm/awesome-3.4.6 Sat Aug 7 14:44:56 2010 >>> dev-python/pythonmagick-0.9.2 Sat Aug 7 14:46:29 2010 >>> sci-misc/boinc-6.10.58 Sat Aug 7 14:55:01 2010 >>> app-portage/pfl-2.0 Tue Aug 10 22:31:52 2010 >>> sys-apps/groff-1.20.1-r3
経過時間(-t) を人間に読みやすい形で(-H) -H がない場合、秒単位で表示されます。
# qlop -tH openoffice openoffice: 9 hours, 38 minutes, 53 seconds for 3 merges
overlay
そろそろ overlay について話しましょう。 Gentoo のパッケージ管理システム portage は ebuild というファイルを読んで、それに書いてある「コンパイルの仕方」を読んでソースを持ってきてはコンパイルをして…ということを行ないます。その ebuild ファイルが置いてあるディレクトリを portage tree などと呼びます。普通は /usr/portage ですね。 emerge --sync で更新される場所です。
portage tree は膨大なパッケージ数をほこりますが、時々ここにも入っていなかったりバグっているものも中にはあります。そういう時に、 portage tree のパッケージを上書きするものとして overlay が使われます。たとえば sunrise という overlay (http://www.gentoo.org/proj/en/sunrise/) は、まだ portage tree に登録されていない、ユーザ(Gentoo developer ではない)から投稿された ebuild を保管する overlay です。
Gentoo にはいくつもの公式の?overlayがあります。その1つ1つを手で登録して更新して…というのは大変ですから overlay を管理する "layman" というパッケージがあります。 "emerge layman" しましょう。
"layman -l" で自分が使っている(layman 管理下の) overlay の一覧が、 "layman -L" で(layman 管理下の) 全てのoverlayの一覧が表示されます。
$ layman -l * arcon [Mercurial ] (https://arcon.googlecode.com/hg/ ) * d [Subversion] (http://subversion.assembla.com/svn/d-overlay ) * emacs [Subversion] (svn://overlays.gentoo.org/proj/emacs/emacs-overlay ) * gamerlay [Git ] (git://git.overlays.gentoo.org/proj/gamerlay.git ) * games [Subversion] (svn://overlays.gentoo.org/proj/games ) * gentoo-bsd [Git ] (git://git.overlays.gentoo.org/proj/gentoo-bsd.git ) * haskell [Darcs ] (http://code.haskell.org/gentoo/gentoo-haskell/ ) * java-overlay [Subversion] (svn://overlays.gentoo.org/proj/java/java-overlay/ ) * kvm [Git ] (git://github.com/dang/kvm.git ) * php-testing [Subversion] (svn://overlays.gentoo.org/proj/php/testing ) * pythonhead [Subversion] (svn://overlays.gentoo.org/dev/pythonhead ) * ruby [Git ] (git://git.overlays.gentoo.org/proj/ruby-overlay.git ) * soor-overlay [Git ] (git://repo.or.cz/gentoo-soor-overlay.git ) * sunrise [Subversion] (svn://overlays.gentoo.org/proj/sunrise/reviewed/ ) * tomoyo [Subversion] (http://svn.sourceforge.jp/svnroot/tomoyo/tags/htdocs/repos/gentoo-overlay/ ) * voip [Subversion] (svn://overlays.gentoo.org/proj/voip/trunk ) * vps [Subversion] (svn://overlays.gentoo.org/proj/vps ) * xemacs [Subversion] (svn://overlays.gentoo.org/proj/emacs/xemacs-overlay ) * xen [Subversion] (svn://overlays.gentoo.org/proj/xen/overlay ) * zugaina [Rsync ] (rsync://gentoo.zugaina.org/zugaina-portage $ layman -L * DuPol [Git ] (git://git.o.g.o/user/DuPol.git, ht...) * THE [Git ] (git://zen-sources.org/zen/THE.git ) * akoya [Mercurial ] (https://hg.poildetroll.net/hg/gent...) * alexcepoi [Git ] (git://git.o.g.o/user/alexcepoi.git...) <snip> * sunrise [Subversion] (svn://o.g.o/proj/sunrise/reviewed/ ) <snip> * x11 [Git ] (git://git.o.g.o/proj/x11, http://g...) * xemacs [Subversion] (svn://o.g.o/proj/emacs/xemacs-overlay) * xen [Subversion] (svn://o.g.o/proj/xen/overlay ) * xfce-dev [Git ] (git://git.o.g.o/proj/xfce.git, htt...) * xgr [Git ] (git://github.com/dgoncharov/xgr.git ) * xhub [Git ] (git://git.o.g.o/user/xhub.git, htt...) * xmms-zombie [Git ] (git://git.goodpoint.de/overlay-xmm...) * xwing [Rsync ] (rsync://gentoo.xwing.info/xwing-ov...) * yporti [Git ] (git://gitorious.org/yporti/overlay...) * zugaina [Rsync ] (rsync://gentoo.zugaina.org/zugaina...)
"layman -a sunrise" で、"sunrise" overlay が追加され、 "layman -s sunrise" で sunrise overlay の更新、 "layman -S"で登録してある全ての overlay が更新されます。
これだけでは portage は overlay を使ってはくれません。 /etc/make.conf の最後に "source /var/lib/layman/make.conf" と書いて layman の設定ファイルを読みこませましょう。 /var/lib/layman/make.conf を見るとわかりますが、 これは PORTDIR_OVERLAY に overlay のディレクトリを設定しているだけのファイルです。 これで emerge ccs-sources とすると TOMOYO Linux のパッチがあたったカーネルソースパッケージがインストールされたりします。
最後に、自分でも overlay を作った場合 /etc/make.conf に PORTDIR_OVERLAY="/home/naota/src/gentoo/portage-overlay/ $PORTDIR_OVERLAY" のように追加すればよいでしょう。
eix
Gentoo には膨大なパッケージがあってそこを探せばだいたいのものが見つかります…しかしそれを探すのが大変ですね…。そんなあなたに eix です。さっそく emerge eix しましょう。
"eix chromium" とすると chromium をパッケージ名に含むパッケージをリストします。
$ eix chromium * games-action/chromium Available versions: 0.9.14 (~)0.9.14.1 {+mixer nls +sdl} Homepage: http://chromium-bsu.sourceforge.net/ Description: Chromium B.S.U. - an arcade game [I] www-client/chromium Available versions: 5.0.375.125 (~)6.0.472.33-r1 [M](~)6.0.490.1 **9999 {cups gnome +plugins-symlink sse2} Installed versions: 6.0.472.33-r1(18時02分08秒 2010年08月20日)(cups sse2 -gnome) Homepage: http://chromium.org/ Description: Open-source version of Google Chrome web browser * www-client/chromium-bin Available versions: (~)6.0.451.0_p51005 (~)6.0.470.0_p52843 **9999 {+plugins-symlink} Homepage: http://code.google.com/chromium/ Description: Open-source version of Google Chrome web browser (binary version) Found 3 matches.
"eix -S civ" とすると、パッケージの説明文に "civ" を含むパッケージをリストします。
$ eix -S civ [I] games-strategy/freeciv Available versions: 2.2.1 (~)2.2.2 {auth dedicated ggz gtk ipv6 nls readline sdl +sound} Installed versions: 2.2.2(05時54分01秒 2010年08月06日)(gtk ipv6 nls readline sdl sound -auth -dedicated -ggz) Homepage: http://www.freeciv.org/ Description: multiplayer strategy game (Civilization Clone)
eix のパッケージ情報データベースは eix-update を使って更新します。 emerge --sync で portage tree を更新、 layman -S で overlay を更新、 eix-update でパッケージ情報データベースを更新とするのは面倒ですね。"/etc/eix-sync.conf" に "*" (アスタリスク一つだけ) 書いておきましょう。 あとは eix-sync 1つで、 上記3つの作業を行なってくれます。
さて、 overlay と eix を見て「取得してない overlay も検索できたらいいのに」と思った方もいるかもしれません。 できます。"eix-remote update" でネット経由で全ての公式 overlay を網羅したキャッシュを取得してきて補完してくれます。 ただし、このキャッシュは「仮想キャッシュ」として扱われますので、そのままでは eix-update (eix-sync) 時に消えてしまいます。 "EEP_VIRTUALS=true" と /etc/eixrc に書いておきましょう。
e-file
あのコマンドが使いたい!でも、どこにあるかわからない!
そんな時には e-file です。 emerge pfl しましょう。 ここで USE=network-cron しておくと、自分がインストールしているパッケージの情報を、ネット経由でこいつが使っているデータベースに週一でレポートするようになります。ぜひ協力を。
"e-file lspci" で lspci をファイル名に持つファイルをインストールするパッケージがリストされます。
$ e-file lspci * net-misc/pxes Available Versions: 1.0 0.9-r1 0.9 0.8 Matched Files: /opt/pxes-1.0/stock/dist/bin/lspci; /opt/pxes-0.9/stock/dist/bin/lspci; /opt/pxes-0.8/stock/dist/bin/lspci; [I] sys-apps/pciutils Available Versions: 2.2.4-r3 2.2.4-r2 2.2.4-r1 2.2.4-r0 3.1.7 2.2.3-r2 3.1.4 2.2.3-r1 3.1.7-r0 2.2.10-r0 3.1.4-r0 2.2.0-r1 3.1.2-r0 3.0.2-r0 3.0.0-r0 2.2.9-r0 2.2.8-r0 2.2.7-r1 2.2.7-r0 2.1.11-r5 2.1.11-r4 2.1.11-r3 Last Installed Ver: 3.1.7(2010年08月05日 13時18分56秒) Homepage: http://atrey.karlin.mff.cuni.cz/~mj/pciutils.html Description: Various utilities dealing with the PCI bus Matched Files: /usr/sbin/lspci; /sbin/lspci;
/etc/portage
/etc/make.conf が portage の大枠の設定だとすると、 /etc/portage にはこまごまとした調整の設定を書きます。
/etc/portage/package.mask
バグってるなどでうまく動かないパッケージをマスクします。
# xemacs-21.4.22 はいれない =app-editors/xemacs-21.4.22 # emacs-vcs (bzr 先端からコードを取得してビルド)の 23-lexbind branch のものはいれない app-editors/emacs-vcs:23-lexbind # glibc-2.3.6 より新しいものはいれない >cross-i686-pc-linux-gnu/glibc-2.3.6
"app-editors/emacs-vcs:23-lexbind" について。 ":" 以降は "SLOT" の名前です。 SLOT とは、「同じ名前のパッケージの中でのさらに下の階層の名前」…でしょうか。 たとえば gcc を見てみましょう。
[I] sys-devel/gcc Available versions: (2.95) *2.95.3-r9 ~*2.95.3-r10!s (3.1) *3.1.1-r2 (3.2) **3.2.2!s *3.2.3-r4 (3.3) (~)3.3.6-r1!s (3.4) 3.4.6-r2!s (4.0) ~*4.0.4!s (4.1) 4.1.2!s (4.2) (~)4.2.4-r1!s (4.3) 4.3.2-r3!s (~)4.3.2-r4!s (~)4.3.3-r2!s 4.3.4!s (~)4.3.5!s (4.4) (~)4.4.1!s (~)4.4.2!s 4.4.3-r2!s (~)4.4.3-r3!s (~)4.4.4!s (~)4.4.4-r1!s (4.5) [M]**4.5.0!s [M]**4.5.1!s {altivec bootstrap boundschecking build d doc fixed-point fortran gcj graphite gtk hardened ip28 ip32r10k java libffi lto mudflap multilib multislot n32 n64 nls nocxx nopie nossp nptl objc objc+ + objc-gc openmp static test vanilla} Installed versions: 4.4.4-r1(4.4)!s(19時28分54秒 2010年08月06日)(fortran gcj gtk mudflap multilib nls nptl openmp -altivec -bootstrap -build -doc -fixed-point -graphite -hardened -libffi -multislo t -n32 -n64 -nocxx -nopie -nossp -objc -objc++ -objc-gc -test -vanilla) Homepage: http://gcc.gnu.org/ Description: The GNU Compiler Collection.
"Available versions"の場所に "(2.95)" "(3.1)" などと書いていますね。これが SLOT名です。 gcc など一部のパッケージでは複数のバージョンを一度にいれておきたいことがあります。SLOT名がなければ、gcc-4.1.2 -> gcc-4.2.4-r1 のように前者が削除され後者に更新されてしまいますが、 SLOT名をそれぞれ "4.1", "4.2" とすることでこういった状況をふせげます。
/etc/portage/package.unmask
さきほどとは逆に maks されているものを解除します。
app-emulation/ies4linux app-editors/xemacs games-roguelike/slashem app-editors/emacs-vcs
パッケージ名だけ書いて全てのバージョンで mask を解除していますね。
/etc/portage/package.use
/etc/make.conf の USE flag はシステム全体の USE flag を設定しますが、このファイルはパッケージごとの USE の ON/OFF を制御します。
app-admin/conky -ipv6 app-editors/emacs source app-editors/emacs-vcs source app-emulation/qemu-kvm -modules app-i18n/uim -gtk prime app-office/gnucash quotes hbci webkit app-office/ledger gnuplot app-text/lcdf-typetools kpathsea
autounmask
マイナーなアーキテクチャ(x86-fbsd, x86-dfbsd, x86-macos あと amd64 も時々)のユーザには*必須アイテム*。 emerge autounamsk しましょう。
まず、目的のパッケージのカテゴリ、パッケージ名、バージョンを確認。
$ eix jailkit * app-admin/jailkit Available versions: ~*2.10 Homepage: http://olivier.sessink.nl/jailkit/ Description: Allows you to easily put programs and users in a chrooted environment
ということで目的は "app-admin/jailkit-2.10" です。マスクされてますので、このままでは emerge できません。 手で解除していこうとすると大変です。これを解除しても、もしかするとこれが依存しているパッケージがまたマスクされているかも…? そこで autounmask の出番。
# autounmask app-admin/jailkit-2.10 autounmask version 0.27 (using PortageXS-0.02.09 and portage-2.1.8.3) * Using repositories: /usr/portage /usr/portage/local/pc_local/ /home/naota/src/gentoo/portage-overlay/ * Using package.keywords file: /etc/portage/package.keywords/autounmask-jailkit * Using package.unmask file: /etc/portage/package.unmask * Using package.use file: /etc/portage/package.use * Unmasking app-admin/jailkit-2.10 and its dependencies.. this might take a while.. * Added '=app-admin/jailkit-2.10 **' to /etc/portage/package.keywords/autounmask-jailkit * done!
これ一つで依存なども含めて、 /etc/portage 以下のファイルに追記し emerge できるようにしてくれます。今回は特定のバージョンだけにしましたが、 "-n" をつけることでそのパッケージの全てのバージョンを unmask することが可能です。しかし、この時もバージョン名を指定することは必須です…。