f

アーカイブ

2014-07-27

Solve conflict of zsh zaw plugin

前回の記事でzshzawプラグインの問題が解決できたと思っていた。しかしzaw-cdrの問題に遭遇した。試行錯誤の上この問題も解決した。ここでzshzawに関する問題と解決策について整理する。
前回の記事:My Future Sight for Past: Cannot exit zsh zaw filter: search mode http://myfuturesightforpast.blogspot.jp/2014/07/cannot-exit-zsh-zaw-filter-search-mode.html


まずzshzawプラグインはEmacsanythin.elVimunite.vimのようにディレクトリやファイル,プログラムへのアクセスなど普段の作業に必要なものをzsh上でアクセスするための機能を提供するものだと私は認識している。例えばzaw-cdrという機能を使えば,最近アクセスしたディレクトリに瞬時に移動ができ,作業効率の向上が見込まれる。

4.17.1 問題定義

zawプラグインを導入する際に生じた問題について説明する。問題は大きく以下の3種類だ。
  1. zsh起動時にfilter: と表示され絞り込み検索状態になり,C-gで解除してもすぐに同じ状態になり,zshで作業できない。
  2. zsh-cdrの機能を使うために定義したキーを入力すると以下のエラーメッセージが表示され実行できない。
    zaw-src-cdr:2: closing brace expected
  3. auto-fuプラグインをzawより先に読み込むと,zawの絞り込み検索を使うには最初にC-gでキャンセルしてからでないとzawの機能が使えない。
1.の問題の解決策は冒頭に上げたとおり前回の記事で対処した問題である。2.の問題は1.の問題を解決した後に発覚した問題である。3.の問題は他のプラグインとの競合の問題である。


4.17.2 問題の発生条件

1.2.3.の問題が発生する状況について説明する。


4.17.2.1 zshの起動時にfilter: から抜け出せない問題の再現

この問題の発生は以下の二つの条件が重なって生じる。
  1. パッケージマネージャーantigenによりzawを管理している。
    antigen-bundle zsh-users/zaw.git
  2. lsalias-Fオプションをつけて定義している。
    alias ls="ls -F"


antigenによりzawを管理していければこの問題は発生しない。正確にはsource antigen.zshを実行すると問題が発生する。この問題は以下の.zshrcを使うことで再現できる。antigenによりパッケージ管理をする都合上,最初にantigenをインストールしておく。以下の.zshrc2行目から3行目のコメント文で記述したコマンドを入力することでantigenのインストールはされる。zawzshの起動時に自動的にインストールされる。
##~/.zshrc
#mkdir ~/.zsh/
#cd ~/.zsh
#git clone https://github.com/zsh-users/antigen.git
alias ls="ls -F"
if [ -f ~/.zsh/antigen/antigen.zsh ]; then
ADOTDIR=$HOME/.zsh/
source ~/.zsh/antigen/antigen.zsh
antigen-bundle zsh-users/zaw
antigen-apply
fi


4.17.2.2 zaw-cdr実行時のzaw-src-cdr:2: closing brace expected の再現

この問題は以下のコマンドによりオプションをどこかで有効にしていると発生する。
setopt sh_word_split


問題の起こる最小限の.zshrcを以下に示した。
## .zshrc
if [ -f ~/.zsh/antigen/antigen.zsh ]; then
ADOTDIR=$HOME/.zsh/
source ~/.zsh/antigen/antigen.zsh
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook # valid zsh cdr
antigen-bundle zsh-users/zaw.git
bindkey "^m^m" zaw-cdr
antigen-apply
fi
setopt sh_word_split
# source ~/.zsh/repos/https-COLON--SLASH--SLASH-github.com-SLASH-zsh-users-SLASH-zaw.git/zaw.zsh


この問題はzawantigenで管理していようが,上記の.zshrcの最終行にコメントで書いたようにsourceコマンドで直接zawを有効にしても発生する。具体的にはzshを起動後にC-m C-mによりzaw-cdrの絞り込み検索に移行しようとすると以下のエラーが表示される。
zaw-src-cdr:2: closing brace expected


4.17.2.3 auto-fuとの競合の問題の再現

この問題はzshのインクリメンタル補完を行ってくれる,auto-fuプラグインとの競合により起こる。auto-fuプラグインをzawプラグインより先に読み込むとauto-fuプラグインの機能が優先され,最初にC-gでキャンセルしないと,zawの各種絞り込み機能が使えなくなる。C-m C-mによりzaw-cdrの絞り込みもできないし,C-x;による標準の絞り込み検索もできない。
問題の起こる最小限の.zshrcを以下に示した。
## .zshrc
if [ -f ~/.zsh/antigen/antigen.zsh ]; then
ADOTDIR=$HOME/.zsh/
source ~/.zsh/antigen/antigen.zsh
antigen-bundle hchbaw/auto-fu.zsh # need unsetopt sh_word_split
zle-line-init () {auto-fu-init;}
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook # valid zsh cdr
antigen-bundle zsh-users/zaw.git
bindkey "^m^m" zaw-cdr
antigen-apply
fi


また,auto-fush_word_splitのオプションを有効にしている問題が発生する。以下のエラーが表示される。
afu-register-zle-accept-line:local:3: not valid in this context: $afufun
hi=''
zstyle=''
zle=''


この問題は開発者のhchbawさんも公認している問題で以下で発言がある。
auto-fu.zsh を読み込む際には、unsetopt sh_wordsplit してくださいませ。」


確認はしていないが,おそらくantigenを使っていなくてもauto-fuとの強豪は発生すると思われる。


4.17.3 解決策

上記で示したzawをめぐる三つの問題に対して解決策を示す。問題と対処方法の流れを以下の図に示した。
zawプラグインの問題の対処の流れ

大きく以下の2条件により対処法が異なる。
  1. antigenによるパッケージ管理の有無。
  2. auto-fuの有無。
1. antigenによるパッケージ管理を行っている場合,zawを読み込む前に以下のコマンドを実行してはいけない。zawを読み込む前なので.zshenvにも記載があってはならない
alias ls="ls -F"


2. auto-fuzawを使う場合はzawauto-fuよりも先に読み込む。
auto-fuzawの両方に共通する事項として,sh_word_splitのオプションは有効にしない。zshではデフォルトではsh_word_splitオプションは無効になっているので通常は何も書かなければ問題がない。念の為に以下のコマンドで明示的に解除しておくのもよいだろう。
unsetopt sh_word_split


最後に以下の2条件に当てはまる人(自分)がすべき設定をまとめる。
  1. antigenによりパッケージ管理を行っている
  2. zawauto-fuを読み込んでいる
以下の3条件をこなせば問題なくzawを運用できる。
  1. zawの前にalias ls="-F"は書かない。
  2. zawの設定をauto-fuの前に書く。
  3. setopt sh_word_splitは書かない。
ここまでで説明したzawの問題に対処して動作する最小限の.zshrcを参考までに以下に示す。
## .zshrc
if [ -f ~/.zsh/antigen/antigen.zsh ]; then
ADOTDIR=$HOME/.zsh/
source ~/.zsh/antigen/antigen.zsh
## zaw-cdr
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook # valid zsh cdr
antigen-bundle zsh-users/zaw.git
bindkey "^m^m" zaw-cdr
## auto-fu
antigen-bundle hchbaw/auto-fu.zsh # need unsetopt sh_word_split
zle-line-init () {auto-fu-init;}
antigen-apply
fi


4.17.4 参考

参考として記事中に登場した各パッケージのリポジトリのURLを示しておく。

2014-07-26

Cannot exit zsh zaw filter: search mode

zshのプラグインzawantigenによりインストールしてzshを起動すると以下のようにfilter:の絞り込み検索の状態で起動する。C-gで解除しても即座にfilter: の状態に戻るためzshで操作できない。
filter:


zshでの作業が完全に止まるため,致命的なバグだといわざるを得ない。原因を調べるとこの現象は以下の3条件が重なると発生するようだ。
  1. lsalias-Fオプションをつけている。
    alias ls="ls -F"
  2. antigenでパッケージ管理をしている。
    source antigen.zsh
  3. zawパッケージを読み込んでいる。
    source zaw.zsh


原因が発生する最小構成の.zshenvを以下に掲載した。コメント文で書いている方法で,事前に~/.zshantigen.gitをインストールしておく。zawzshの起動時に自動的にインストールされる。以下の.zshenvファイルを~/に配置してzshを起動するとfilter: の状態で始まり抜け出すことができない。
##~/.zshenv
#mkdir ~/.zsh/
#cd ~/.zsh
#git clone https://github.com/zsh-users/antigen.git
alias ls="ls -F"
if [ -f ~/.zsh/antigen/antigen.zsh ]; then
  ADOTDIR=$HOME/.zsh/
  source ~/.zsh/antigen/antigen.zsh
  antigen-bundle zsh-users/zaw
  antigen-apply
fi


この問題の解決策としては以下の3種類が考えられる。
  1. lsaliasから-Fオプションを外す。
  2. antigenによるパッケージ管理をやめ,preztoに乗り換える。
  3. zawをやめる。
現実的な対処法としては,1.lsaliasから-Fオプションを外すことだろう。これが一番変更が少なくて済む。
antigenzawの複数パッケージの競合による問題のため,どちらに知らせればよいかわからない。よろしければどなたかこの問題を開発者に伝えていただければ幸いである。
以下にリポジトリへのリンクを記載しておく。

2014-07-27追記
.zshenvに上記で記載したlsのaliasを設定していたのが原因だった。.zshrcにaliasを移せば動作した。

2014-07-24

WindowsでのPythonデスクトップアプリ開発環境構築

Windows環境でもPythonのちょっとしたプログラムを汎用化して他の人に渡せるようにしたい。しかし,これにはいくつか問題がある。ここではそれらの問題の自分なりの解決策を示していきたい。大きく以下の構成で記述していく。

  1. Python環境の整備
  2. GUI
  3. exe化
  4. サンプルアプリ
    1. PyQt4
    2. Tkinter
  5. まとめ

Python環境の構築

Pythonプログ ラムはPythonがインストールされていないと動かないので,動作確認もできない。Python環境を構築するために,いろいろなPythonのディストリビューションがある。例えばAnacondaやEnsightなどだ。 WindowsでのおすすめはPython(x, y)を使うことだ。

2016-08-10追記:この記事はもともと2014-07-24に書かれ,内容が古くなったので少し修正。

今はもうPython(x, y)はお勧めでない。なぜなら,Python(x, y)はPython2系しか使えないからだ。現在では,Python2系と3系の両方を提供しているWinPythonAnacondaがお勧めだ。WinPythonはWindows専用で,ポータビリティに重点が置かれたディストリビューションで,USBなどにインストールしてそのまま使えるようになっている。Anacondaはクロスプラットフォームで独自のcondaというパッケージ管理システムを持っている。デスクトップでメインの開発環境として使うなら,Anacondaがよいだろう。

このインストーラーを使うことで,QtやwxPythonやpipなどたいていのPython関係のモジュールやプログラムインストールできる。おそらくこれひとつでPython環境の構築は事足りる。不足しているもの(例えばBasemap)などは追加でインストーラーからインストールするか,一緒についてきたpipでインストールすればよい。

GUI

Pythonで作ったプログラムを他の人にも使ってもらえるようにするには,GUIを搭載したものがやはりよいだろう。PythonでGUIを実現するためのライブラリはいくつかある。主要なものは以下4種類だろう。

  • PyQt(PySide)
  • wxPython
  • Tkinter
  • PyGTK

これら4種を主観で比較すると以下となる。

機能
PyQt>wxPython=PyGTK>Tkinter
ライセンス
Tkinter=wxPython>PyGTK=PySide>PyQt
手軽さ
Tkinter>wxPython=PyGTK>PyQt

機能やコミュニティーとしては,PyQtが一番安定している。ライセンスとしては,TkinterとwxPythonがゆるく(BSD系),商用利用も問題ない。PyQtはQtをベースにしたウィジェットである。こちらはオープンソースプロジェクトならフリーに使えるが,商用だと有料となる。

どのライブラリを採用するかは用途によって変わってくる。

PyQt
パフォーマンスや品質,大規模プロジェクト
Tkinter
手軽さ

パフォーマンスや品質,大規模プロジェクトを念頭に置くなら,PyQt一択となるだろう。しかし,個人で既存のPythonプログラムにGUIをちょっと付け足したいくらいなら,Tkinterがよいだろう。Tkinterはtcl/tkというライブラリがベースとなっている。Python標準のライブラリとなっており,Pythonさえインストールされていれば,パッケージングしなくてもそのまま配布可能だ。PyQtやwxPythonはPython非標準ライブラリなので,配布時にはパッケージングが必須となる。また,ライブラリ自体もこれら3種の中では最も小さいので,全体的に手軽で個人でGUIを作るのに向いている。

wxPythonは,手軽さや機能がPyQtとTkinterのちょうど間の位置づけとなっている。個人的には,wxPythonやPyGTKを使うくらいならPyQtかTkinterでよいと思う。おそらく,機能性が要求されるが,ライセンス的に商用利用を視野に入れる場合や,GTK+やwxWidgetsの開発経験を活かす場合にwxPythonやPyGTKを使うことになるのだろうと思う。

私はLinuxと同じ環境で開発できることから,Windowsでは基本的にCygwinやMSYS2を使っている。CygwinだけでPythonのGUIを開発するのは非常に困難だ。CygwinでインストールするPyQtやwxPythonなどの各種のPython GUIモジュールはインストール自体が困難であり,しかもX Windows上でしか動作しない。つまり一旦Cygwinで以下のようにstartxコマンドを実行してXを起動してX Windows上でしか動作しない。

startx

ここは妥協してGUIの 動作確認はPythonxyでインストールしたWindowsのPythonを実行することで確認することがベストだ。ソースの記述だけはCygwinか ら行い動作の確認のみ以下のようにしてWidowsのPythonで起動して確認する。

C:/Python27/python.exe GUIプログラム.py

なお,単にファイルをダブルクリックしたり,以下のコマンドでデフォルトのプログラムで起動しても問題ない。 おそらくこちらの方が確認は楽だろう。

cygstart GUIプログラム.py

exe化

PythonでGUIやその他の便利なプログラムを作ったとしても他の人が使えるとは限らない。独自のモジュールを使っていたり,利用者にPython環境がないことも ありえるからだ。この解決策は,Pythonプログラムをバイナリ化(exe)にすることだ。こうすることでWindows環境でPythonのない環境でもPythonのデスクトップアプリを実行できる。

Pythonプログラムのexe化にはいくつか方法がある。例えば以下のプログラムを使ってパッケージ化するのが一つの方法だろう。

  • py2exe
  • cx_Freeze

しかし,上記のプログラムを利用した場合,作成されたexeファイルとともに共有ライブラリ(.dll)ファイルが必要となる。つまり,exeファイルとdllファイルを同じディレクトリに配置しないといけない。またはPATHを通しておかないといけない。他人に渡すことを考えるとはっきりいって邪魔くさい。単一のexeファイルだけでスタンドアローンで実行するようにするのが親切だろう。多少ファイルサイズがでかくなったとしてもだ。

これを実行するよい方法がある。それはpyinstallerを使うことだ。これを使うことで驚くほど簡単に単独で動作するexeファイルを作れる。py2exeやcx_Freezeを試すのがバカらしくなってしまった。

参考

まず,前提としてWinPythonやAnacondaでPython環境をインストールしておく。

  1. コマンドプロンプトを開く。
  2. 以下のコマンドを実行してPyInstallerをインストール
pip install pyinstaller

これで準備は完了。例えばhoge.pyファイルをバイナリにするときは以下のコマンドを実行する。

pyinstaller -F --noconsole hoge.py

なおWindowsで動作するようにしたければWindowsのPyInstallerでexe化しないといけない。Cygwinからやる場合は,例えば以下のようにしてこのときだけ先ほどインストールしたWindowsのPyInstallerを使う。

C:/Python27/Scripts/pyinstaller -F --noconsole hoge.py

また,デメリットとしてバイナリサイズが肥大化する。例えば以下で掲載した簡単なアプリでもPyQtで16 MB,Tkinterで9 MBほどになる。これは必要なDLLやモジュールを一つのファイルにまとめたことによる弊害である。ただ,サイズの大きさよりも単独で動くものを作れるメリットのほうが大きいので,この問題には目をつぶることにする。

サンプルアプリ

以上の手順によりWindowsにおけるPythonデスクトップアプリ開発環境が整った。試しにPyQtとTkinterのサンプルアプリを起動させてみよう。

以下のコードを適当な名前で保存してバイナリ化してみよう。

PyQt4

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# hello-qt4.py
#
# Here we provide the necessary imports. # The basic GUI widgets are located in QtGui module. import sys from PyQt4.QtGui import * # Every PyQt4 application must create an application object. # The application object is located in the QtGui module. a = QApplication(sys.argv) # The QWidget widget is the base class of all user interface objects in PyQt4. # We provide the default constructor for QWidget. The default constructor has no parent. # A widget with no parent is called a window. w = QWidget() w.resize(320, 240) # The resize() method resizes the widget. w.setWindowTitle("Hello, World!") # Here we set the title for our window. w.show() # The show() method displays the widget on the screen. sys.exit(a.exec_()) # Finally, we enter the mainloop of the application.

引用元:PyQt - Wikipedia

PyQt4での表示例

Tkinter

#!/usr/bin/env python3
# hello-tkinter.py

import tkinter as tk class Application(tk.Frame): def __init__(self, master=None): tk.Frame.__init__(self, master) self.pack() self.createWidgets() def createWidgets(self): self.hi_there = tk.Button(self) self.hi_there["text"] = "Hello World\n(click me)" self.hi_there["command"] = self.say_hi self.hi_there.pack(side="top") self.QUIT = tk.Button(self, text="QUIT", fg="red", command=root.destroy) self.QUIT.pack(side="bottom") def say_hi(self): print("hi there, everyone!") root = tk.Tk() app = Application(master=root) app.mainloop()

引用元:25.1. tkinter — Tcl/Tk の Python インタフェース — Python 3.5.1 ドキュメント

Tkinterでの表示例

まとめ

WindowsでのPython開発環境の構築方法と,GUIライブラリの選定,パッケージング方法について説明し,最後にサンプルアプリのパッケージングまで紹介した。

今後はTkinterを使ったGUIアプリの開発方法を勉強していこうと思う。やはりGUIがあったほうがユーザー(未来の自分)に優しい。そして実益的だと思う。


PythonのCAD(.dxf)ファイル読み書きモジュールまとめ

PythonCADDXFファイルのデータの読み書きしたい。調べても日本語の情報は皆無。あまり使われていないみたい。DXFはテキストなので、自分で作ることも可能だ。しかし、面倒なのでモジュールに頼りたい。既存のPythonDXFファイルを読み書きできるモジュールを調べたので以下の表にまとめた。

4.1: Python DXF module list
名前
バージョン
更新日付
説明
URL
SDXF
1.1.1
201207
Python library to generate DXF drawing files (CAD)。書き出し専用。pipからインストールできない。
pyFormex
0.9.1
20131015
program to create 3D geometry from Python scripts. DXFの読み書き可能。開発も盛んで高機能。
dxfgrabber
0.7.4
20140523
DXFから情報を取得。全DXFバージョンに対応。読み込みのみ対応。
ezdxf
0.6.2
20140508
読み書き可能。DXFから他形式への変換は不可。
dxfwrite
1.2.0
201208
A Python library to create DXF R12 drawings.書き込み専用。


特に有用なのは以下の2モジュール。
  • pyFormex
  • ezdxf
pyFormexOpenFOAMの講習会資料でで名前を見かけたことがある。3次元のCADデータを作成することができる。ホームページを見る限りかなり強力なモジュールだと感じた。しかし、pipのインストールがうまくできないことと、今は2DDXFデータを編集したいので見送り。ただ,いずれ使うことになると思う。
ezdxfPyFormex以外で読み書き両方に対応した唯一のモジュールだった。DXFのバージョン指定もでき高機能だと思った。

当分はezdxfDXFファイルを操作できるようにする。機会をみてpyFormexにも挑戦したい。

2014-07-22

Install OpenFOAM on Ubuntu14.04 by APT

フリーのCFDソフトOpenFOAMは近年いろいろな分野で活用され業績がめざましい。今後のために使えるようになりたい。手始めにOpenFOAM 2.3.0Ubuntu14.04上にインストールする。
OpenFOAMはパッケージマネージャーであるAPTのパッケージが用意されておりそれを利用することでかなり簡単にインストールできる。しかし,Ubuntu14.04はまだ新しく出たばかりなので公式には未対応である。そのため,当初はソースコードからのインストールを試みていた。連休を利用して2日かけて挑戦したが,結局エラーによりうまくいかなかった。ソースコードからのインストールを諦め,どうにかAPTでインストールできないか調査していた。その結果APTを使ってUbuntu14.04OpenFOAM 2.3.0Paraview 4.1.0をインストールできた。この手順について掲載していく。
まず,公式のAPTによるインストール方法は以下のサイトで説明されている。
Ubuntu Deb Pack Installation http://www.openfoam.org/download/ubuntu.php


以下の記載の通りUbuntu 14.04は未対応となっている。


Ubuntu Versions
OpenFOAM and Paraview are currently available for the following versions of Ubuntu:


12.04 LTS, codename precise
12.10, codename quantal
13.04, codename raring
13.10, codename saucy

しかし,以下のサイトでwouterが解決方法を示している。
Installing 2.3.0 on Ubuntu 14.04 LTS -- CFD Online Discussion Forums http://www.cfd-online.com/Forums/openfoam-installation/138097-installing-2-3-0-ubuntu-14-04-lts.html


これによると,以下のように変数にUbuntu13.10のコードネームsaucyを入れてやればよいとのこと。
VERS=saucy


以下のコマンドを実行するとうまくAPTのリポジトリにOpenFOAMのパッケージが登録される。
VERS=saucy
sudo sh -c "echo deb http://www.openfoam.org/download/ubuntu $VERS main > /etc/apt/sources.list.d/openfoam.list"
sudo apt-get update


ここまではOK。しかし次が厄介だ。公式のガイドに従うと,後は以下のようにapt-get installするだけとなっている。
sudo apt-get install openfoam230
sudo apt-get install paraviewopenfoam410


paraviewのインストールはうまくいく。しかし,openfoamの方はうまくいかない。実行すると以下のように古いバージョンのlibboost-threadlibopenmpiに依存している注意が表示される。
openfoam230 : Depends: libboost-thread1.53.0 which is a virtual package.
Depends: libopenmpi1.3 which is a virtual package.


これらのパッケージはUbuntu 14.04ではサポートされていない。そのため,過去のリポジトリをAPTに登録してインストール可能にする。
例えば,以下のサイトでUbuntuの過去のバージョンのパッケージのリポジトリのURLが掲載されている。
Ubuntu – パッケージのダウンロードに関する選択 -- libopenmpi1.3_1.4.3-2.1ubuntu3_amd64.deb http://packages.ubuntu.com/ja/precise/amd64/libopenmpi1.3/download


このサイトからlibopenmpi1.3libboost-thread1.53.0の存在するリポジトリを探す。そして,以下のコマンドにより /etc/apt/sources.listの末尾リポジトリを追加して有効にする。
sudo sh -c "echo '
# old repository for OpenFOAM
deb http://cz.archive.ubuntu.com/ubuntu precise main universe
deb http://cz.archive.ubuntu.com/ubuntu saucy main universe
' >> /etc/apt/sources.list"
sudo apt-get update

これで準備が完了した。以下のコマンドでインストールを始める。
sudo aptitude install openfoam230 paraviewopenfoam410

apt-getではなくaptitudeを使うことに注意する。aptitudeだと自動的に依存関係をうまく解消するようにインストールプランを立ててくれる。apt-getだとうまくいかない。

openfoam230のインストール時に依存関係を確認してくるのでnを何回か押して以下のような依存関係が表示されたらyを入力してインストールした。ここの選択はいまいちよくわかっていない。
Install the following packages:
1) blcr-util [0.8.2-15ubuntu2 (precise)]
2) libopenmpi-dev [1.4.3-2.1ubuntu3 (precise)]
3) libopenmpi1.3 [1.4.3-2.1ubuntu3 (precise)]
4) libptscotch-5.1 [5.1.12b.dfsg-2 (saucy)]
5) libptscotch-dev [5.1.12b.dfsg-2 (saucy)]
6) libscotch-5.1 [5.1.12b.dfsg-2 (saucy)]
7) libscotch-dev [5.1.12b.dfsg-2 (saucy)]
8) openmpi-bin [1.4.3-2.1ubuntu3 (precise)]
9) openmpi-checkpoint [1.4.3-2.1ubuntu3 (precise)]
10) openmpi-common [1.4.3-2.1ubuntu3 (precise)]

Keep the following packages at their current version:
11) libopenmpi1.6 [Not Installed]

Leave the following dependencies unresolved:
  1. blcr-util recommends blcr-dkms


これで以下のように/optディレクトリにOpenFOAM2.3.0Paraview 4.1.0がインストールされた。
ls /opt
openfoam230/ paraviewopenfoam410/


後は公式のガイドにあるように以下を.bashrc記入にしてOpenFOAMの変数設定を行っておく。
## OpenFOAM
export FOAM_INST_DIR=/opt/
source $FOAM_INST_DIR/openfoam230/etc/bashrc


なお私の環境ではターミナルを再起動すると以下のエラーが表示された。
gcc: error: unrecognized command line option ‘--showme:link’


これはmpiccが原因。ローカル環境にMPICHmpiccが入っていたのが原因の模様。OpenMPIMPICHmpiccという名前が競合していたようだ。MPICHmpiccをパスから除外したら解決した。
参考:--showme errors -- CFD Online Discussion Forums http://www.cfd-online.com/Forums/openfoam-installation/97581-showme-errors.html


最後に以下のようにしてチュートリアルを実行して動作を確認する。
mkdir -p ~/run/OpenFOAM/
cp -r $FOAM_TUTORIALS !$
cd ~/run/OpenFOAM/tutorials/incompressible/icoFoam/cavity
blockMesh
icoFoam
paraFoam


これでOpenFOAM2.3.0Paraview4.1.0がインストールできた。ここからOpenFOAMの入出力などを勉強していこう。