
Ubuntu日本語フォーラム

ログインしていません。
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.
オフライン
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 (後略)
となりました。
オフライン
>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有効)にする手順を、改めてご助言頂けませんでしょうか。
オフライン
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
などとしないといけないかも。
オフライン
Perlの5.10.1はリリース直前のUbuntu10.04と同じですね。
自身で入れた覚えがないということは、システムがアップグレードされてしまっている可能性も考えられます。
「perl」をremoveするととんでもないことになりますので、まずは端末を起動し、下記コマンドの結果を確認した方が良さそうです。
lsb_release -r apt-cache policy perl
オフライン
ああ、そうか。依存関係でいろいろ一緒に消されてしまうのですね。。
宛 awaseさん
間に合っていますでしょうか。もし、既に大変なことになっていたら、申し訳ありません。。
宛 Templerさん
ご指摘多謝です。
オフライン
情報をありがとうございます。
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になってました。。。
オフライン
よかった。。
さて本題に戻りますが、Ubuntu提供の5.10.0はthreadsが使えるはずだったと記憶しています。
最初の投稿で、perl -vの結果に5.10.1と出たとありますので、なにか違うものを呼び出してしまっているようです。
which perl
してどこのperlを呼び出しているのか確認してみて下さい。
もしこれが/usr/bin/perlであれば、なにかの際に上書きしてしまったのかも知れません。
もし違うところのものであれば、/usr/bin/perlで実行してthreadsが使えないか確認してみて下さい。
オフライン
ご連絡をありがとうございます!
ご明察でした(><)/
$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"'
ご教示を誠にありがとうございました!!!
オフライン
「/usr/local/bin/perl」ということはコンパイルしてインストールしたのではないかと思えますので、思い出せましたら正規の方法でuninstallしてください。
それまでは、端末で「sudo mv /usr/local/bin/perl /usr/local/bin/perl.orig」としてリネームしておいた方が良いと思います。システムに不具合を引き起こす可能性もありえますので(今だけでなく将来的にも)。
オフライン