Maxの日記: python2.1 for Mandrake 9
結局Python2.2でもZopeは*割と*動いているのだが、ここにきてpython2.1を
既存のpython2.2とは別なパッケージとして作成すればいいのではないかと
思いついた。現にDebianではそうしているし。
セキュリティ上問題がある(execvpe関係)バージョンだが、使用する局面を
限定してやれば影響のでる範囲は閉じこめられそうだ。
仕掛は簡単で、/usr/bin/python->python2.1とかして、ダブりそうな
バイナリを別にするだけ。あとは依存関係とか使用するコンパイラを
gcc2.96にする事とかその程度。
あとは、python2.1を使うソフトウェアの設定でpythonのパス名を明示的に
指定してやるだけだろうと思う。
あと、問題はその他のpython関係のパッケージだが、たいていspecファイル
での指定は、
Requires: python >=2.1
となっている上に、/usr/lib/python2.1にファイルを置くようになって
いると思われるので、必要があればその都度再作成することでしのげ
そう。
****
なんとかspecファイル書き換え。
本体修正以外に、idleの参照するpythonを修正、manページのpython.1を
python21.1に直したりといったパッチを造って適用。
rpm -bpは通った。次は、rpm -baで・・・
致命的ではないのだが警告がパラパラと出ているのが気になるが・・・
内容からして問題はないと思う。ビルド中。
****
ビルド完了。idleはidle2.1としてメニューにも入っている。起動。
ちゃんと、
python 2.1.1 (#1,Jan 10 2003, ...
とか出ている。いちおうidle配下のファイルのなかで、/usr/bin/python
を参照していたところも直したので問題ないはず。
ソースコードも見える。クラスブラウザも動く。まずはオッケー。
で、次はZopeだな。たぶん問題ないはずだが。
****
結局Python本体だけでなく、
- python-numeric
- python-imaging
も共存環境に併せて再ビルドした。それらの仕込みと動作をざっと確認
して、zopeをこの環境向けに再ビルド。最新の自家パッケージjp5を、
/usr/bin/python2.1を参照して動作するように再作成。
とりあえず起動と管理画面の動作は確認。まだ追試必要だとは思うが、
先日のPython2.2環境の方を突っ込んで調べたいので、こちらは安全
ネット的なものとしてこれでうち切る。
****
しかし、よくよくパッケージを最初に作成するときのポリシーという
のは大切だと思った。debianユーザにこの顛末を話すと、「なぜそんな
簡単な事で手間をかけているのか?」という反応だった。
ごもっとも。Debianでは元々このような複数のリビジョンの共存は念頭
に置かれている。一方rpmパッケージを採用したディストロの大部分は
一部例外はあった(RedHat7.xでのpython1.xと2.xの共存など)ものの
python2以降はマイナー番号のものは同じ系列のバージョンアップ版と
して捉えられており、別にインストールする事は考えられていない。
こういう考え方は先日のgccの話でもあって、gcc3.xとgcc2.xの共存は
明らかに互換性の問題が知られているか、あるいはメジャーバージョン
の変更というほぼ明白な差が予想されたからあのようなパッケージに
なっただけのことであり、互換性の問題が明らかになってなければ
ああはならなかっただろう。しかし、実際はソフトウエアがリリースされ、
実用に供した後で問題は出てくるものだ。そういうときに、単なる
ダウングレードや置換ではなく複数のバージョンを局面で切り替えて
使用できるようになっていた方が明らかに良い。
それと、このような複数の環境で使用される可能性のあるパッケージは
本体のコードになんら変更が無くても格納されるディレクトリなどを
変更してやらなければならない場合もある。そのたびにspecファイルを
書き換えるのは面倒至極。できうることならば将来的な変更をある程度
見越した、賢いspecファイルを予め造っておくことが手間を減らす
ためには重要だろう。今回、現に
Requires: python >1.5
とありながら、%installでは%{_libdir}/python2.1/...等のように記述
したspecファイルがあった。これをspecファイルの先頭でシステムに
存在するpythonのリビジョンを調べ、それに応じて格納ディレクトリ
を変えるように作成することは大した手間ではないはずだ。
少なくともspecファイルの先頭で、%define PYTHONVER 2.1などの
定義をしてやって、以下はマクロ参照としておけばいいんだ。
python2.1 for Mandrake 9 More ログイン