
Ubuntu日本語フォーラム

ログインしていません。
インテルのクラスターツールキットver.3.2(環境設定やコンパイラ)をインストールしています。クラスターツールキットという名のとおり並列処理のためのツールです。OSはubuntu9.04です。クラスタ用の環境はまだ構築しておらず、コンパイラだけをインストールしているところです。
ubuntuはサポート対象外なのですが、Fedoraもサポート対象外で動作するもののようなのでubuntuでも動くに違いないという予想しておりました。
(正式にサポートするのはredhat, SUSEのみらしいです。Fedoraもいけるということはredhat系のみの対応かも知れません。そうすると、あてが外れていますが)
行けると仮定して先に進みます。
インストールはライセンスファイルの取得とか並列処理のためのマシン設定など細かいのですが、並列処理の環境設定は無視して進んでいきました。
一応うまくインストールされたようなので、環境変数の設定を行いました。
以下のファイル(ictvars.shを実行可能にして)を実行するだけです(私の場合シェルはbashです)。
#!/bin/sh
# Bourne Shell script for Intel(R) Cluster Toolkit.
if [[ -f "/opt/intel/cc/11.0.074/bin/iccvars.sh" ]]; then
. "/opt/intel/cc/11.0.074/bin/iccvars.sh" "ia32"
export IDB_HOME="/opt/intel/cc/11.0.074/bin/ia32"
fi
if [[ -f "/opt/intel/fc/11.0.074/bin/ifortvars.sh" ]]; then
. "/opt/intel/fc/11.0.074/bin/ifortvars.sh" "ia32"
fi
if [[ -f "/opt/intel/itac/7.2.0.011/bin/itacvars.sh" ]]; then
. "/opt/intel/itac/7.2.0.011/bin/itacvars.sh" $1
fi
if [[ -f "/opt/intel/mkl/10.1.0.015/tools/environment/mklvars32.sh" ]]; then
. "/opt/intel/mkl/10.1.0.015/tools/environment/mklvars32.sh"
fi
if [[ -f "/opt/intel/impi/3.2.0.011/bin/mpivars.sh" ]]; then
. "/opt/intel/impi/3.2.0.011/bin/mpivars.sh"
fi
export PATH="/opt/intel/ictce/3.2.0.020/bin:${PATH}"
# end of file #
この環境変数設定ファイルを実行(sudo ./ictvars.sh)すると、
./ictvars.sh: 7: [[: not found
./ictvars.sh: 10: [[: not found
./ictvars.sh: 13: [[: not found
./ictvars.sh: 16: [[: not found
./ictvars.sh: 19: [[: not found
というエラーが出ました。シェルスクリプトの文法エラーみたいな風に見えますが、どこが悪いのでしょうか。
通常は、.bashrcの中で指定するとか、.bashrcの中からsourceコマンドで設定するなどして運用すると思いますが、ここでは試しにコマンド入力して環境変数を調べてこの問題にぶつかりました。ここまで来ると、Debian, redhatの違いではなく、単なるbashのスクリプトの問題となり、ディストリビューション関係ないと思っていますが。解決策がありましたらよろしくお願いします。
オフライン
> シェルスクリプトの文法エラーみたいな風に見えますが、どこが悪いのでしょうか。
シェルスクリプトのshebangの記述が間違っています。
[[ expression ]] を使っているのに、shebangを「#!/bin/sh」と記述してしまった潜在的な不具合とも言えます。
この場合、正しくは#!/bin/bashです。
何故こんな事になってしまっているのか詳しくは
「/bin/sh /bin/dash シンボリックリンク」
でWeb検索して /bin/shの扱いについて調べてみると分かると思います。
最後の編集者: STGSAGWAN (2009-03-27 20:30:45)
有難うございました。シェルの問題は、リンクによって通過しました。 sudo ln -sf /bin/bash /bin/sh としました。
その先の問題にぶつかりました。 メッセージは以下の通りです。
/opt/intel/fc/11.0.074/bin/ia32/fortcom: error while loading shared
libraries: libstdc++.so.5: cannot open shared object file: No such file or directory
ifort: error #10273: /opt/intel/fc/11.0.074/bin/ia32/fortcom の致命的なエラー、0x7f で終了しました。
これだけでは済みそうにありませんね。次々にshard libraryのバージョン問題に遭遇しそうです。この先厳しい予感です。
オフライン
libstdc++5をインストールしてください。
その他、no such fileとか言われるファイルはpackages.ubuntu.comで検索すればどのパッケージに含まれるか分かるハズです。
オフライン
回答有難うございました。うまく動作しているようです。
次々に難問が押し寄せるかと思いましたが、これだけで動作しました。ただ、並列処理などの微妙な設定がきちんとできているかどうかは、使い込んでみないと分からない面もありますが。
最後にまとめさせて頂きます。
Intel クラスターツールキットをubuntu9.04にインストールしたときのメモ:
1.通常のインストール過程を行う。
2.sudo ln -sf /bin/bash /bin/sh
3.sudo apt-get install libstd++5
4..bashrcをエディットして環境設定ファイルが起動できるようにする。 その後、source .bashrc
2009.3.30
オフライン
2. は、sudo dpkg-reconfigure dashして「いいえ」
の方がいいです。まぁやっていることは同じだったりするのですが。
オフライン
hoso1093 による投稿:
シェルの問題は、リンクによって通過しました。 sudo ln -sf /bin/bash /bin/sh としました。
うーん、うまく伝わっていなかったようですので、補足します。
今回は修正は全く必要ないです。
今回のシェルスクリプト(ictvars.sh)も、/bin/shのシンボリックリンクも何にも変える必要は一切ないです。
今回のシェルスクリプトは、/bin/bashで起動されたシェルスクリプト(つまり、~/.bashrcとか)の中からsourceされるはずですが、その場合、今回のシェルスクリプトも(shebang行は関係なく)/bin/bashで動くので、[[ ではエラーとはならないのです。
ということなので、#2の投稿では、
[[ expression ]] を使っているのに、shebangを「#!/bin/sh」と記述してしまった潜在的な不具合とも言えます。
と敢えて「潜在的な」不具合と書きました。
-----
文章だけだと分かりにくいかもしれないので、以下のテスト用シェルスクリプトを例に色々試してみると理解が深まると思います。
1. 端末から $ /tmp/oya.sh と実行した場合は、ko.shでエラーしないことを確認してください。
[[ expression ]] という文法を使っているのにも関わらずです。
2. 次に、端末から $ /tmp/ko.sh と実行した時は、[[ がないというエラーになることを確認してください。
今回のシェルスクリプトでエラーとなったのは、この状況です。
3. 最後に、oya.shの「source ./ko.sh」の部分を、「./ko.sh」に変えて、端末から $ /tmp/oya.sh を実行してみてください。
エラーしますよね。
以下のコードをコピペすると、/tmpにoya.shとko.shが作成され、実行権が付与されます。
cd /tmp
cat > oya.sh << EOF
#!/bin/bash
if [[ "1" = "1" ]]; then
echo "oya"
fi
source ./ko.sh
EOF
cat > ko.sh << EOF
#!/bin/sh
if [[ "1" = "1" ]]; then
echo "ko"
fi
EOF
chmod +x oya.sh ko.sh1. oya.shを実行
/tmp/oya.sh
実行結果:
oya
ko
2. ko.shを実行
/tmp/ko.sh
実行結果:
./ko.sh: 4: [[: not found
最後の編集者: STGSAGWAN (2009-03-30 19:48:57)