Linux日記: 2002年


MPlayer恐るべし (2002.12.14)

前回のDVDネタで紹介していたマルチメディアプレイヤー、MPlayerは深く知れば知るほど恐るべきシロモノのようです。

単なるDVD視聴ソフトではなく、Wine技術を利用してWindows用のCodecを利用することができ、おかげでWindows Media Videoの動画等まで見れてしまうというだけでもスゴイんですが、mencoderというソフトも付いていて、こいつは名前のとおりエンコーダなわけです。 で、著名なMP3エンコーダであるLAME、高圧縮率を誇るDivXのLinux版であるdivx4linuxあたりをインストールしてから mplayer を make するとこれらのコーデックを利用してエンコードできたりしちゃいます。

コマンド一発で、DVDがお手軽にDivX化されてリッピングできちゃうという素晴らしさ。 昔、好奇心でWindows上でいろいろ試したときには映像がカクカクしたり、音声と同期がズレてしまったりしたんですが(単に私がタコなだけ?)、こんなにお手軽にできるなんてね〜。

そのほか賞味期限付のWMVファイルを入手しちゃったときも、使用期限が来る前にこいつを使ってDivX化しちゃえば関係ないし。

あ、ウソです。 私はそんなことはしてませんよ〜。 あくまでもこれは実験というか、こういうこともできるかもしれないという実現可能性の問題というか...。 というわけで、この話を読んだ方々には大人の対応をお願いしたいと思います(^^;。


LinuxでもDVDを見よう (2002.9.7)

freshmeatで、DVDプレイヤーのOgleを見つけて試してみました。

コンパイルは上記サイトのDownloadページを見ると、必要なライブラリ等が載っているので、その辺を参考にしてそれぞれ用意しましょう。

Vine-2.5だと、libjpeg以外は全部必要ですかね。 特に、CSSのかかってるソフトを見るためには、リストの一番上にあるライブラリが重要です。 あえて詳しくは申し上げませんが、このあたりっていろいろ話題&問題になってましたよね。 まぁ私は個人でかつ自分が所有しているソフトを見て楽しんでるだけですから大丈夫でしょうが、DeCSSってこんなに大っぴらに公開していて良いんでしたっけ?

リストに並んでいる順にビルドして、特に問題なくインストール作業は完了。 あ、いざソフトを見る前に、DVDドライブのデバイスに /dev/dvd からリンクをはっておくのを忘れないこと。 私の場合は、CD-Rとのコンボドライブですんで、ln -s /dev/cdrom /dev/dvd すればOK。

手持ちのソフトをドライブに入れて、Ogleの再生ボタンを押す。 おぉ!ちゃんと再生してるぞ。 音もちゃんと出てるし、特に問題ないね。 とりあえず、LinuxでもDVDが問題なく見れることを確認したかっただけなので、今回は目的達成。


ちなみにOgleはインターフェースもなかなか秀逸だし良い具合なんですが、基本的にはDVDしか見れません(そりゃDVDプレイヤーなんだからそうですけど)。 ちまたにはMPlayerなるものもあり、こいつは MS Windows用のdllやxanim用モジュールに対応していて、MPEGやAVI、WMV、DiVX、QuickTimeなどまで見られるという、なんか凶悪なソフト(^^;のようです。 さっそく実験してみてますが、こっちも非常にすばらしいソフトですね。

MPlayerの最近のバージョンは自前のDVD読込みエンジンを持っているので、libdvdreadとlibdvdcssは無くても大丈夫です(使うこともできます)。

ソースファイルの mp3lib ディレクトリをみてみると、MP3デコーダはmpg123ベースのもので、SSEや拡張3DNow!への対応も進みつつあるようです。 あぁ、こんなの見つけてしまうと、またまたmpg123やxmmsへブチこんで試してみたくなってしまう...。 まぁそのうちヒマを見つけてテストしてみるとしましょうか(追記: 実験を開始しました)。


CPU判別ライブラリの作成 (2002.8.16)

以前、「Cのお勉強 その4」で作った、cpuidを利用したCPUの判別プログラムをバージョンアップさせてみました。

発端は、sharedライブラリの作り方を勉強したかった(すみません。私のCのスキルはそんな程度なんですよ、実際)ことです。 今までは、一つまたはいくつかのソースから一つの実行バイナリを作る、ということまでしかしてなくて、ライブラリは作ったことがなかったんです。 で、ごくシンプルなライブラリということでlibjconvなんかを見てみると、作ること自体は簡単そうだったので、CPU判別ライブラリを作ってみようと思い立ちました。

前回作ったSIMD命令の対応を調べるルーチンは、mpg123-pre0.59sの、MMX/3DNow!/FPUの3つのデコーダをCPUの対応状況に応じて動的に切り替えるために作ったものでした。 拙作のXMMS MMX対応パッチでも使っています。 そういう意味ではsharedライブラリ化してみる(目標その1)意味が少しはありそうです。mpg123やxmmsのパッチ側もイジる必要がありますが。

また、私はカーネルも自作RPMにして管理してるのですが、その中でCPUを自動認識して最適化オプションを切り替えるようなこともしてます。 どうせならSIMDの有無だけではなく、その辺にも役立ててみたいものです。 つまり、搭載されているCPUを判別して、カーネルmake時のオプションとして何を選ぶべきかを教えてくれる機能です(目標その2)。

で、しこしこ作業してできあがったんですが、以後のバージョンアップの都合もあるので、ソースや簡単な説明については 自作プログラム集: x86cpucaps に移動しました。

サンプルの cpucaps を実行すると、以下のような結果が出力されます。 ちなみに、引数なしだと全結果を出力しますが、-kオプションを付けると CONFIG_MK7 等のカーネルの最適化オプションのみを出力するようになってます(そもそもそれが第二の開発目標だったもので)。

Athlon XP環境での実行結果
$ cpucaps

CPU info : 6 - 6 - 2 (AuthenticAMD)
CPU Model Name : AMD Athlon XP/MP/4 (Palomino)
Recommended Kernel building option : CONFIG_MK7
checking Intel SIMD capability : SSE
checking AMD 3DNow! capability : 3DNow!
Pentium III (Katmai) 環境での実行結果
$ cpucaps

CPU info : 6 - 7 - 2 (GenuineIntel)
CPU Model Name : Pentium III/Pentium III Xeon/Celeron
Recommended Kernel building option : CONFIG_MPENTIUMIII
checking Intel SIMD capability : SSE
checking AMD 3DNow! capability : none

本当はここまでやれば、CPUに合わせたgccの最適化オプションも出させたいな、という第三の目標もあったんですが、gccのバージョン依存もあり、結構複雑になりそうだったので、今回はここまで。

ところで、C言語って低レベル(つまりアセンブラに近いというか、機械に近いというか)なイメージがあるのに、2進数をそのまま扱う方法がないみたいですね。 ということで、Webで検索していてみつけた技を流用させてもらってます(すみません、あちこち検索しているうちに、情報元を忘れてしまいました)
x86cpucaps.cの中で、B8, B16, B32で定義されてるマクロなんですが、こいつを使うと下のように表現できるわけです。 MMXの有無を例にとれば、23bit目が1かどうかで判別するわけで、どちらが直感的に分かりやすいかは言うまでもないと思います。

使用前 #define FLAG_MMX 0x00800000
使用後 #define FLAG_MMX B32(00000000,10000000,00000000,00000000) /* bit 23 */

Vineをカスタマイズ (2002.8.10)

というわけで、早速前回インストールしたVineについてです。 そういえば、Vine謹製カーネルではuniconパッチがあたっていて、コンソールでも日本語が化けずにきちんと表示されるようになっているんですね。 昔、各社のディストリを試したときにはその辺がうまく処理されておらず、自分で .bashrc 内で端末がX上かどうかを判別してLANGを切り替えたりさせたりしてたもんです。 Kondaraが登場したときには言語とXIMの切替をスマートに処理してるなぁ、と感心したんですよね。

そのほか気づいたことといえば、Mozillaを立ち上げるときなどにCPU使用率が100%の状態が続くのは何でしょう? gedit等のソフト自体は軽いはずのものでも発生します。 Vineではfixedフォントも東風フォントを流用してるみたいなので、TrueTypeまわりのせいかな?

余談でした。ということで現在進行中のカスタマイズはこんな状況です。

grub (ブートローダ)

Vineのデフォルトのブートローダはlilo(ブートロゴ付)ですが、高機能ブートローダのgrubに入れ替え(とりあえずVine Plusから入手)。
/boot/grub/menu.lstを適当にいじって、
# grub-install /dev/hda (dev以下は適宜修正)
すればよし。 Vineのインストーラが menu.lst を作ってくれるので楽ですね。

grubの設定ファイルを間違えたとしても簡易シェルを持ってるからどうにかなるし、各種ファイルシステムにも対応という特徴からして、grubのブートFDを作っておくと、他のシステムでも非常時のレスキューに役立ちます(lilo.confを間違えたとか、MBRをトバしてしまったとか)。
# dd if=stage1 of=/dev/fd0
# dd if=stage2 of=/dev/fd0 seek=1

anaconda (インストーラ)

やっぱりFTPサイトにあったanaconda-7.2-2.5は動きませんでした(^^;。 RedHatのanacondaはrpm v4系に移行しているため、そのまま動かすには rpmをメジャーバージョンアップさせないといけません。 ただし、それをやるとパッケージデータベースの再構築が必要になって、rpm v3からv4へは rpm --rebuilddb でいけますが、逆に戻ることは出来なくなってしまいます。

それにrpm v4にすると、Vineのウリであるaptも使えなくなってしまうのが悲しい。 というわけで、RedHatのanaconda-7.2-7をベースに、Kondaraの遺産を参考にしてrpm v3対応のVine用anacondaを作成中。 そもそもVineがきちんと動作するanacondaを出していてくれれば、こんな目にあわずに済んだのですが(ToT)。

gcc-3.1.1 (Cコンパイラ他)

現在の最新版stableリリースのgcc-3.1.1にアップグレードしました。 例によってお手製パッケージはこちら。 なお、gcc-3.xを入れるにはVineのbinutilsでは古過ぎるので、2.12.1にアップグレードしてあります。

cdrecord (ISOイメージの作成、CD-Rへの焼付け)

そもそもmkisofsやcdrecordがなきゃ、自作ディストリなんて作れません。 というわけでVine Plusから入手

Xmms (いわずとしれたマルチメディア・プレイヤー)

いつのまにかVineにも、Kondara由来のlibjconvが含まれるようになってたんですね。 でも、使ってるのはsylpheedぐらいで、xmmsは別の日本語化パッチがあたったものが収録されています。 せっかくなのでlibjconvを使うように改造しました。例によって、拙作のMMXパッチもあててます。

その他:追加&アップグレード
  • gogo-3.10pl3 (MP3エンコーダ)
  • nasm-0.98.33 (アセンブラ。gogoのmakeに必要)
  • kernel-2.4.20-pre1-ac1 (2.3.99あたりから育ててきた自作パッケージ。Vineのマネしてuniconモジュールも組み込みました)
  • lm_sensors-2.6.4 (ハードウェアモニタ)
  • alsa-lib, alsa-utils-0.9.0rc2 (ALSA関係)
  • xawtv-3.74 (TV視聴)
その他:削除

パッケージを追加するだけではCD1枚に収まりきらなくなってしまうので、大胆にemacs関連を削除しました。 私はメーラはsylpheedだし、テキストエディタとしてだけならjedで充分なので。 こんなマネをするディストリビューションは世の中に存在しないでしょうが、私専用なんだからこれでいいのだ。

  • emacs -> (x)
  • emacsen-common -> (x)
  • emacs-dl-canna -> (x)
  • emacs-dl-wnn -> (x)
  • apel -> (x)
  • rail -> (x)
  • semi -> (x)
  • flim -> (x)
  • ruby-mode -> (x)
  • wl -> (x)
  • w3m-el -> (x)
  • mew -> (x)
  • mew-common -> (x)
  • t-gnus -> (x)

Vine Linux 2.5をインストール (2002.8.3)

7/15日付で、Kondara Projectが活動を停止しました。 既に www.kondara.org も消失しています。

この日記を見ていけば分かるんですが、私のディストリ遍歴は、Turboに始まり、その後はずっとKondaraとともにありました。 TurboとKondaraの間にはRedHat 6.1Jが混じってたりしますが、実際にはVineやRedHat等いろんなディストリを試していた時期です(Kondaraは1.0ではGNOME採用を見送ったため)。

KondaraはRawhideに対する追加パッケージをnosrc.rpmで配布していた頃から見ていて、拙作のxmmsの3DNow!パッチを取り込んだパッケージを公開してもらったりして、楽しかったですね。 Turboをやめたのも、RawhideベースのKondara追加パッケージを試すには不適当(ディレクトリ構造等が一部独自化されているため)だったことが主な理由でした。

ディストリ化された後も、Kondara Projectとデジファクの関係がきちんと説明されなかったり(1.2と2000の時とかね)、雑誌等のFTP版収録に絡んだゴタゴタ等もありましたが、私はずっとKondaraをベースにLinuxで遊んできました。

あのバイクに乗ったペンギンが好きでした。 MNU/Linuxのネーミングセンスとかも好きでした(Mount is Not Unmountは後付けで、本当はペンギンって触るとムニュって感じっぽいよね)。 国際化にしっかりと取り組んでいたところも気に入ってました(独自の言語やXIM切替とかね)。 でも、それも終わりですね。 個人的には思うところもいろいろあるのですが、私は全然プロジェクトに貢献してない一ユーザに過ぎませんし、今さらですのでやめときます。


Kondara Projectのメンバーの一部が移った、Momonga Linuxにも期待が集まるところですが、今のところ未知数って感じですね。 Momongaは今のところリリース予定も立っていませんし、これを機に環境を一新して、Vine Linuxをインストールしてみることにしました。 Vineを選択したのは、

あたりが理由ですかね。 特に、私はあまり肥大化したディストリは好きじゃないので、Kondaraをベースに自分の使うパッケージを厳選して自作ディストリを作ってきたのですが、Vineは元々ベースが1枚なのは作業面からいえば大きいです。

/home/hogehoge や一部の設定ファイル等をバックアップした上で、Vine Linux 2.5をインストールしてみました。 実はクリーンインストールは久しぶりです。

CDでブートして、GUIインストーラでインストール。 XFree86は4.2.0を採用しているおかげか、GeForce4 MX440を使っている私の環境でも大きな問題は起きませんでした。 ちょっと画面が汚くて見難かったですが、GeForce2環境でインストールした時は大丈夫だったんで、例によって新しいハードの対応の問題みたいですね。 ビデオカードの選択ではGeForce3までしかなく自動認識できませんでしたが、とりあえずGeForce2 GTSあたりを選んでおけば、インストール後の最初の起動時点から、特にXF86Config-4を修正しなくてもXが立ち上がりました。

あ、とりあえず、
# apt-get update
# apt-get upgrade
として、最新のパッケージに更新しておきました。


気づいた点としては、

特にまともに動くインストーラパッケージがない(?)のは、自作ディストリを作る障害になりますね。 以前Rawhideのanacondaを叩きまくって試行錯誤したこともありますが、あれは実に面倒なのでやりたくない。 anaconda-7.2-2.5.tar.bz2はそのままだとコンパイルすら通らないので、RedHat7.2のanacondaから引っこ抜いた loader/kon2/.config と po/anaconda.pot を突っ込んで誤魔化しました。 まだ試してませんが、まともに動きそうな気がしませんね(^^;。

まぁ、まずは自作のkernelやglibc-2.2.5、gcc-3.1.1、xmmsあたりを入れますかね。 とりあえず今回はここまで。

補足1 :
Dr. Kからまたまたコメントを頂きました。
日本語入力の件ですが、私の環境でもたまに発生する。 で、Ctrl-'\'でOffにできる
だそうです。毎度ありがとうございます(m_m)。

最近の野良ビルド (2002.6.15)

最近、Linux日記は更新がとんとごぶさただったので、最近の野良ビルド(つまりKondara公式パッケージではなく、自分で適当に作ったパッケージってこと)の状況なんかを書いてみました。

gcc-3.1

5月にリリースされたgccの最新版。 最適化が強化されており、x86系CPUについてもPentium 4やAthlon XPなど最新CPUに対する専用最適化オプションが用意されている。

gcc-3.0.xはカーネルのコンパイルがまともにできてなかったけど(コンパイルはできるんだけどブートしてみると途中で死ぬとか)、3.1ならOKですね。 c++関係はずいぶん仕様が変わってるので、コンパイルできないものが結構あるみたい。

私製パッケージでは、Rawhideの3.1-4、Kondara CVSの3.1-8k等のパッチをマージしてます。 後は、specファイルの %define gcc3pkg 0 を1にすると、gcc-2.9xとぶつからないようにしたgcc3パッケージを作れるようにしたりとか。

binutils-2.12.1

gccも最新版にしたことだし、こっちも最新版にしとこうということで。 パッケージ化するにあたっては特に変わったことはしてません。

glibc-2.2.5

gcc-3.1で -march=athlon-xp して作ってみました。 Kondara CVSのパッケージを元にしてますが、-g オプションを外したせいもあって、バイナリの大きさがKondara-2.1のglibc-2.2.4より激しく小さくなってます。 とりあえず今のところ怪しいことにはなってませんが、glibcが腐るとまともに動かなくなりますから、気をつけた方がよいんでしょうね。

kernel-2.4.19-pre10-ac2

プレカーネルの2.4.19-pre10に、定番のacパッチをあてて、後は linux/arch/i386/Makefile を書き換えて -march=athlon-xp で作ってます。 その他にパッケージに突っ込んでるものは、こんな感じ(最新カーネルにうまくパッチがあたらないものは適当にイジってます)。

しっかし、pre9あたりに比べるとやけに unresolved symbolが出るモジュールが多いような。 次のpreパッチが出たら速攻作り直しですね(^^;。

mozilla-1.0, galeon-1.2.5

Mozilla1.0リリース記念ということで、早速パッケージ化。 libart_lgplを用意しとかないといけないらしい。

Mozillaをアップグレードすると、galeonやnautilusも作り直さないといけません。 galeonはついでに最新の1.2.5にしてみた。 galeonはgcc-3.1でコンパイルする時には -Wno-deprecated を追加しとかないと。 とりあえず使ってみて気がついたのは、ダウンロードのダイアログが格好良くなったのと、インポートしたMoziilaのブックマークで '&' の扱いがおかしくなってるあたりかな。

gogo-3.10pl3, nasm

SIMD命令を使いまくって素晴らしい速度を実現している高名なMP3エンコーダ、午後のこ〜だの最新版、3.10pl3 です。 3.x系ではベースとなるLAMEも新しくなり、音質も向上しているらしいです。

ビルドするには、nasmが必要ですが、午後のサイトで配布しているSSE2対応版か、本家の最新版でないといけません。 私は本家の0.98.33をパッケージ化して使いました。

nasmはサイトが移転しまくりでどうなることかと思いましたが、ようやく落ち着いたんでしょうか。

その他

後は、gtk-2.0系を試したくなって手を出したら芋づる式にいろいろと。 まだライブラリしか作ってなくて、対応アプリを試してないので意味なし(^^;。 パッケージはRawhideをベースに少々イジってます。


Return to Previous page一つ前のページに戻る / Return to topこのページのTOPに戻る