- PR -

RPM perlの最新バージョン

投稿者投稿内容
PCJ
会議室デビュー日: 2005/11/17
投稿数: 4
投稿日時: 2005-11-17 14:01
こちらに投稿するのははじめてになります。よろしくお願いいたします。

Vine 3.1を使用しています。
apt-getでインストールできるperlの最新版は5.8.2ですが
設置しているCGIでバージョン5.8.2では正常に動作しない
(nullの配列が正常に処理できない)問題があり、バージョン
アップを行いたいと思っております。

5.8.2より新しいバージョンをインストールするにはソースから
コンパイルする方法しかないのでしょうか?

またperlの最新バージョンは5.8.7だと思いますがRPMのバージョン
とは大きな開きがありますが、こんなものなのでしょうか?
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-11-17 15:07
引用:

5.8.2より新しいバージョンをインストールするにはソースから
コンパイルする方法しかないのでしょうか?


Vine3.1オフィシャルのパッケージとしては存在しないわけですから、
そうなるんでしょうね。
ただ、VineSeedで5.8.6が公開されているので、それを使うって
選択肢もあったりするんでしょうかね。
VineとVineSeedの関係を良く知らないので憶測でモノ言ってみてます。

引用:

またperlの最新バージョンは5.8.7だと思いますがRPMのバージョン
とは大きな開きがありますが、こんなものなのでしょうか?


そんなもんです。

一般的に、Linuxなんかでの各アプリにはx.y.zみたいなバージョン番号が振られてる
わけですが、バージョンアップによって機能追加や変更が行われることも多々あります。
して、Linuxディストリビューションの特定のバージョンにおいて、
セキュリティ修正などが行われたとしても、収録されているアプリケーションのバージョンは
変更しないのが原則です。そうやってディストリビューション全体の品質を保証するわけです。
なので、x.y.z-Aなんてバージョンのソフトが配布されていることも多いと思いますが、
このベンダ独自で割り振ってる-Aの部分で、x.y.z+1にて行われた修正のうち、
セキュリティに関する部分のみとかのパッチ適用を行ってたりするわけです。

Vine3.1は1年近く前のリリースで、収録するソフトのバージョン選定は
さらに前から行われていたわけですから、現在のPerl自体の最新版とは
バージョンがかけ離れていて当然ではあります。
バージョンを上げるには、自力対処するか、ディストリビューション自体の
バージョンアップを考えるかしましょう。
Perlは他にも依存してるところが多いと思うので、ソースコンパイルでの
導入は慎重にやらないと大変かもしれない。

_________________
Mattun
Microsoft MVP for Directory Services
(Oct 2006-Sep 2007)
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-11-17 15:28
こんにちは。

いや、もうそれなら、
パッケージ版のPerlとは別に、/usr/local にでも、独自ビルドのPerlを入れた方が良いかもしれません。
その CGI専用と割り切って。
※ 昔はPerlって言えば /usr/local/bin/perl でしたからね。

拘りの無いソフト/ライブラリは、完全にパッケージ任せでも良いんですけど、ちょっとでもカスタマイズしようとすると、依存関係の縛りや、適用パッチの把握でムリが出るのが難だと思っています。
※ 私の場合は Apache …

以上、ご参考まで。
Uta
常連さん
会議室デビュー日: 2004/05/17
投稿数: 37
投稿日時: 2005-11-17 15:57
ご質問に対してはMattunさん・angelさんの回答で解決できると思うのですが、その前に前提として

引用:
設置しているCGIでバージョン5.8.2では正常に動作しない
(nullの配列が正常に処理できない)問題



を回避するために本当にPerlのバージョンアップが必要なのでしょうか?運用中のサーバであるならば、ディストリビューションの更新は言うまでも無く、Perlの差替もインパクトが大きいでしょうし、angelさんが提案された専用の独自ビルドのPerlを入れる方法ならば初期のインパクトは小さいですが、Perlのバージョンを2系統で管理する必要が発生するため、管理コストは上がりますよね。

そもそも、そのCGIで実現したい機能をPerlの5.8.2でも動作する方法で実装できないかどうかをまずは模索すべきなのではないかと思うのですが如何でしょうか?
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-11-17 16:33
引用:
Utaさんの書き込み (2005-11-17 15:57) より:
引用:
設置しているCGIでバージョン5.8.2では正常に動作しない
(nullの配列が正常に処理できない)問題


を回避するために本当にPerlのバージョンアップが必要なのでしょうか?


確かにその点がまず重要ですね。

「nullの配列が正常に処理できない」というのがどのような問題で、どのように CGIの動作に影響しているか、というのは、個人的に Perl使いとして興味があります。
※ Perlって単純そうな所で不具合を持っていることがありますからね。先日嵌りました…orz
PCJ
会議室デビュー日: 2005/11/17
投稿数: 4
投稿日時: 2005-11-17 17:54
ご回答&ご意見ありがとうございます。

引用:
パッケージ版のPerlとは別に、/usr/local にでも、独自ビルドのPerlを入れた方が良いかもしれません。


デフォルトとは別のディレクトリにインストールするにはどうすれば
よいのでしょうか?

引用:
そもそも、そのCGIで実現したい機能をPerlの5.8.2でも動作する方法で実装できないかどうかをまずは模索すべきなのではないかと思うのですが如何でしょうか?


引用:
「nullの配列が正常に処理できない」というのがどのような問題で、どのように CGIの動作に影響しているか、というのは、個人的に Perl使いとして興味があります。


問題の起こるCGIというのは実はゲームCGIでして、ゲームの開始時にログファイルを
コード:
foreach (1..$PlayerMax) {print LOG "<>$Name[$_]";}
print LOG "\\n";
foreach (1..$PlayerMax) {print LOG "<>$Password[$_]";}
print LOG "\\n";


として作成しています。
$plaerMaxというのはゲーム最大参加人数で参加者が最大数より
少ない場合は$Name[$_]がnullになる場合があるわけですが
その際に予期しないログ(確か改行が入ったと思います)になります。
ですので別処理でnullの場合は"0"を入れるなどすれば回避はできます。
ただperlの最新バージョンを使用してみたい好奇心もありましたので
このような質問をさせていただきました。

Uta
常連さん
会議室デビュー日: 2004/05/17
投稿数: 37
投稿日時: 2005-11-18 08:21
引用:
デフォルトとは別のディレクトリにインストールするにはどうすればよいのでしょうか?



まずはfindコマンドでperlコマンドがどこにインストールされているかを確認して下さい。おそらくは/usr/bin/perlだと思います。

ソースを展開してコンパイルする場合、デフォルトでは/usr/local以下にインストールされることになります。perlの場合は/usr/local/bin/perlとなります。なので、上述のfindコマンドで/usr/local/bin/perlが存在していなかった場合は、特に何も考えずにソースからコンパイルすれば、パッケージでインストールされたperlとは別のディレクトリにインストールされます。



引用:
$plaerMaxというのはゲーム最大参加人数で参加者が最大数より
少ない場合は$Name[$_]がnullになる場合があるわけですが
その際に予期しないログ(確か改行が入ったと思います)になります。
ですので別処理でnullの場合は"0"を入れるなどすれば回避はできます。



$playerMaxではなく、$#Nameを基準にして繰り返し処理を行えばよろしいのではないでしょうか?$Name <= $playerMaxになっていることが大前提ですが。
PCJ
会議室デビュー日: 2005/11/17
投稿数: 4
投稿日時: 2005-11-18 09:46
ソースからコンパイルし/usr/local/bin/perlができました。
/usr/bin/perl (5.8.2)
/usr/local/bin/perl (5.8.7)
CGIも正常に動作いたしました。

仮に今後、/usr/bin/perlのperlも5.8.7にバージョンアップしたい場合は
/usr/bin/perlをアンインストールしてシンボリックリンクを作成すれば
よいのでしょうか?

引用:
$playerMaxではなく、$#Nameを基準にして繰り返し処理を行えばよろしいのではないでしょうか?


確かにそれで解決しそうですね。
ご教授ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)