お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-04-26 23:43:07

awase
新しいメンバ
登録日: 2010-04-26

threadsを使うために、perlを再ビルドしたい

Linux初心者な者で、お知恵をお貸し下さい。

WindowsのActivePerlで動作させていたスクリプトを、Ubuntu 8.04 hardyで動作させたいを考えてます。
同スクリプトを素のままUbuntuのperlで動作させたところ、
「This Perl not built to support threads」となりエラー終了してしまいました。
(perlスクリプト側は、 use threads; print "hello, world";しかありません。)

threadを有効にしてPerlを再ビルドする必要があると理解しているのですが、
その方法がぜんぜんわかりません…。

perlのソースを取得してコンパイルスイッチ指定でmake?と思っているのですが、
既存のパッケージからの安全な移行方法等、合わせてご教示頂ければ幸いです。

<環境>
Ubuntu 8.04 hardy

<perl -vの結果>
This is perl, v5.10.1 (*) built for i686-linux

Copyright 1987-2009, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

オフライン

 

#2 2010-04-27 07:12:40

hmatsue
アドバイザ
登録日: 2009-03-10

Re: threadsを使うために、perlを再ビルドしたい

Ubuntu Package Searchで見たところでは、Hardyのperlは5.8.8のようです。
http://packages.ubuntu.com/hardy/perl/perl
そちらのperlはどのようにして導入したものでしょうか。自前ビルドならReadme.txt的なものが付属していたはずなので、それらのドキュメント類をあたれば、なにか判るのではないかと思います。
また、5.10に拘りが無いのであれば、5.8.8用のlibthreadsはあるようです。
http://packages.ubuntu.com/ja/hardy/libthreads-shared-perl

5.10系でなければならない理由がある場合で、かつ、Hardyである必要が無い場合はもうすぐリリースされる予定のLucidに移行するのが簡単かと思います。
perl関連は特に自分で追加したものは無いと思いますが、Lucid beta(RC?)環境で、

コード:

$ perl -e 'use threads; print "hello, world\n";'
hello, world
$ perl -v

This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi
(後略)

となりました。

オフライン

 

#3 2010-04-27 10:25:04

awase
新しいメンバ
登録日: 2010-04-26

Re: threadsを使うために、perlを再ビルドしたい

>Ubuntu Package Searchで見たところでは、Hardyのperlは5.8.8のようです。
>http://packages.ubuntu.com/hardy/perl/perl
>そちらのperlはどのようにして導入したものでしょうか。自前ビルドならReadme.txt的なものが付属していたはずなので、それらのドキュメント類をあたれば、なにか判るのではないかと思いま
す。

大変申し訳ないです。
自分では5.10系を意図して入れた認識はなかったのですが、5.8.8→5.10.1(しかもthreadsサポートなし)になっていたようです。
自前でビルドした覚えもないのです。
記憶になかったとか、本当にどーしようもない言い訳にしかならないですが。。。すみません。

大変申し訳ないのですが、5.8系へダウングレード(threads有効)にする手順を、改めてご助言頂けませんでしょうか。

オフライン

 

#4 2010-04-27 11:57:11

hmatsue
アドバイザ
登録日: 2009-03-10

Re: threadsを使うために、perlを再ビルドしたい

Hardyな環境がすぐには作れないので、取り急ぎ。
端末を開いて、
$ apt-cache search perl
$ apt-cache policy perl
あたりの結果を見て、backportsなどからインストールされたものであることが確認されれば、
$ sudo apt-get remove perl
などしてから、backportsを外して、
$ sudo apt-get update
$ sudo apt-get install perl
などとなるかと思います。
もしかしたら別途、
$ sudo apt-get install libthreads-shared-perl
などとしないといけないかも。

オフライン

 

#5 2010-04-27 17:28:16

Templer
メンバ
登録日: 2009-07-08

Re: threadsを使うために、perlを再ビルドしたい

Perlの5.10.1はリリース直前のUbuntu10.04と同じですね。
自身で入れた覚えがないということは、システムがアップグレードされてしまっている可能性も考えられます。
「perl」をremoveするととんでもないことになりますので、まずは端末を起動し、下記コマンドの結果を確認した方が良さそうです。

コード:

lsb_release -r
apt-cache policy perl

オフライン

 

#6 2010-04-27 17:43:58

hmatsue
アドバイザ
登録日: 2009-03-10

Re: threadsを使うために、perlを再ビルドしたい

ああ、そうか。依存関係でいろいろ一緒に消されてしまうのですね。。

宛 awaseさん
間に合っていますでしょうか。もし、既に大変なことになっていたら、申し訳ありません。。

宛 Templerさん
ご指摘多謝です。

オフライン

 

#7 2010-04-27 23:59:04

awase
新しいメンバ
登録日: 2010-04-26

Re: threadsを使うために、perlを再ビルドしたい

情報をありがとうございます。
perlをremoveするところまでは、まだやっておりませんでしたので、大丈夫(?)です。

lsb_release/apt-cacheをやってみました。

コード:

$ lsb_release -r
Release:    9.10
$ apt-cache policy perl
perl:
  インストールされているバージョン: 5.10.0-24ubuntu4
  候補: 5.10.0-24ubuntu4
  バージョンテーブル:
 *** 5.10.0-24ubuntu4 0
        500 http://jp.archive.ubuntu.com karmic/main Packages
        100 /var/lib/dpkg/status

気がついていませんでしたが、Ubuntu 9.10になってました。。。

オフライン

 

#8 2010-04-28 08:53:16

hmatsue
アドバイザ
登録日: 2009-03-10

Re: threadsを使うために、perlを再ビルドしたい

よかった。。

さて本題に戻りますが、Ubuntu提供の5.10.0はthreadsが使えるはずだったと記憶しています。
最初の投稿で、perl -vの結果に5.10.1と出たとありますので、なにか違うものを呼び出してしまっているようです。
which perl
してどこのperlを呼び出しているのか確認してみて下さい。
もしこれが/usr/bin/perlであれば、なにかの際に上書きしてしまったのかも知れません。
もし違うところのものであれば、/usr/bin/perlで実行してthreadsが使えないか確認してみて下さい。

オフライン

 

#9 2010-04-28 10:06:58

awase
新しいメンバ
登録日: 2010-04-26

Re: threadsを使うために、perlを再ビルドしたい

ご連絡をありがとうございます!
ご明察でした(><)/

コード:

$which perl
/usr/local/bin/perl

ご懸念どおり、別のperlを見てしまっていたようです。初歩的なミスで申し訳ございません。。。
確認したところ、下記2つのperlが存在しており、上記のほうを参照していることがわかりました。

・/usr/local/bin/perl
・/usr/bin/perl

どうして別のperlを入れてしまったのか、すみません、記憶にないのですが、
下記のperlを用いることで、threadsが使えることも確認できました。

コード:

/usr/bin/perl -e 'usr threads; print "hello, threads!\n"'

ご教示を誠にありがとうございました!!!

オフライン

 

#10 2010-04-28 19:25:39

Templer
メンバ
登録日: 2009-07-08

Re: threadsを使うために、perlを再ビルドしたい

「/usr/local/bin/perl」ということはコンパイルしてインストールしたのではないかと思えますので、思い出せましたら正規の方法でuninstallしてください。
それまでは、端末で「sudo mv /usr/local/bin/perl /usr/local/bin/perl.orig」としてリネームしておいた方が良いと思います。システムに不具合を引き起こす可能性もありえますので(今だけでなく将来的にも)。

オフライン

 

Board footer

Powered by FluxBB