メモの日々


2008年06月13日(金) [長年日記]

  • 5月後半から先週まですごく忙しかった。今は一段落して暇。忙しさに波があるのは段取りが悪いからだ。

[unix][howto] Ubuntuのmakedependをソースからビルドした

makedependコマンドが「out of space: increase MAXFILES」というエラーになり使えなくなってしまった。対象ファイルが多すぎるようだ。

そもそもmakedependをあまり使いたくないのでgccの-MMオプションを使うようにMakefileを直そうとしたが、ビルド対象のディレクトリ構成が特殊でMakefileをうまく書けない。挫折。

仕方ないのでエラーメッセージに従いMAXFILESを増やすことにした。MAXFILESというのはmakedependのソースに書いてある定数名のようだ。手元の環境はUbuntu 7.10なので、ソースパッケージを入手して変更・ビルドしたい。

ソースパッケージのダウンロード

Linuxのパッケージシステムは便利だが、ソースを修正しようとすると途端に勝手がわからなくなり困る。

ええと、まずパッケージ名を調べないと。調べ方は3か月前にメモしている。

% type makedepend
makedepend is /usr/bin/makedepend

% dpkg -S /usr/bin/makedepend
xutils-dev: /usr/bin/makedepend

パッケージ名はxutils-dev。X関連のツールなんだな。ソースパッケージのダウンロード方法もメモしてある

% apt-get source xutils-dev

こととき dpkg-source が無い、というエラーになった。このコマンドは dpkg-dev パッケージに含まれていた。このパッケージをインストールすると無事に xutils-dev のソースを入手できた。

ソースパッケージのビルド

ソースの修正箇所は、makedepend/def.h 内の「#define MAXFILES 1024」という行だ。ここを2048にした。このパラメータはコマンドラインオプションで変更できるようにしてほしいなあ。

修正は終わったのでビルド。やり方はメモされていない。Debianのリファレンスを参考にして、

% sudo dpkg-buildpackage -us -uc

とした。sudoは使わずに-rfakerootオプションを付ければよかったみたいだが、何故かsudoを使ってしまった。

で、ビルド失敗。ビルドするにも色々とパッケージが必要なようで、エラーメッセージに出てきた debhelper, x11proto-core-dev, quilt といったパッケージをインストールしたらビルドできた。

パッケージのインストール

ビルドできるとひとつ上のディレクトリに xutils-dev_7.2.ds2-1ubuntu1_i386.deb というファイルができていた。これに対して

% sudo dpkg -i xutils-dev_7.2.ds2-1ubuntu1_i386.deb

を実行すると、/usr/bin/makedepend が新しくなった。

そして、makedependを実行してみる。件のエラーは出なくなった。

パッケージのバージョンアップ

が、xutils-devパッケージを勝手に修正して問題ないのか。試しに「aptitude upgrade」を実行するとxutils-devが更新対象として出てきた。更新を実行すると、当然makedependは古くなり件のエラー再発。

どうやらパッケージのバージョンを上げる作業が必要なようだ。パッケージに自分で修正を加えたい を参考に、

% dch -n

を実行してみた。こうするとchangelogの入力を促され、適当に記入するとパッケージのバージョンが上がるみたい。この後再び dpkg-buildpackage を実行すると、xutils-dev_7.2.ds2-1ubuntu1.1_i386.deb ができた。さっきと微妙にファイル名が違い、バージョンが上がっている。

このパッケージをインストールすると、aptitude upgrade を実行しても xutils-dev が更新対象に出なくなった。

あとは xutils-dev が本当に更新された時にどうなるのかが分からない。ちゃんと更新対象として現れてくれるのだろうか。

[unix][howto] Debianでファイル名からパッケージ名を知るには

パッケージをインストール済みなら上で使った「dpkg -S」が使えるが、インストールしていない場合は困る。そんなときは

にある「パッケージの内容を検索」が便利。インストールしてないコマンドやファイルがどのパッケージに入ってるか探したい に書かれていた。

auto-apt や apt-file というツールもあるようだが、どちらをインストールしたらいいのか決められないでいる。なんで全部をaptitudeでできないんだ。

(追記)

Ubuntuにも同じ検索ができるページがあったのでメモ。