condaによるpostgresqlのインストールと起動

% conda install postgresql
% initdb -D /path/to/postgresql-prefix
% pg_ctl -D /path/to/postgresql-prefix start
% createuser -P username
% createdb -O owner dbname
% psql dbname
dbname=# GRANT ALL PRIVILEGES ON DATABASE dbname to username;
% pg_ctl -D /path/to/postgresql-prefix stop

/path/to/postgresql-prefix以下にたくさんファイルが生成される。自分だけの場合はusernameownerは同じでよいと思われる。

スパコンでconda

こういうスパコンを使っている。Redhatを使っているらしい。ソフトウエアが古い。インターネットは外に繋がっている。そこにcondaをセットアップし、python C-APIを使っているコードのビルド&インストールをした。思ったよりトラブルが少なかったけど、もちろんなかったわけではない。その忘備録。

unset _CONDA_PYTHON_SYSCONFIGDATA_NAME

setuptoolsがCCを見てくれるので.oはcondaのgccコンパイルするが、リンクにはシステムのgccを使うため、そこでコケてしまう。LDSHAREDという環境変数がリンクに使われるらしく、gccを置き換えるだけではフラグがないのでこける。フラグはbuildログ(python setup.py build)のシステムのgccでコケたところからコピーで取ってきて、コンパイラ(つまり$CC)と共に全部LDSHAREDに突っ込むことでビルドが無事通った。もちろん一般的な解ではない。

export LDSHARED="/hoge/togo/miniconda/envs/dev/bin/x86_64-conda_cos6-linux-gnu-cc -pthread -shared -Wl,-rpath,/hoge/togo/miniconda/envs/dev/lib -L/hoge/togo/miniconda/envs/dev/lib -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -Wl,-rpath,/hoge/togo/miniconda/envs/dev/lib -L/hoge/togo/miniconda/envs/dev/lib -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -pipe -DNDEBUG -D_FORTIFY_SOURCE=2 -O2"

condaで環境構築・Linuxの場合

% bash ~/Miniconda2-latest-Linux-x86_64.sh -b -p $HOME/.miniconda2
% ln -s $HOME/.miniconda2 $HOME/.miniconda
% conda create --name myenv
% source activate myenv

環境設定はここに書く:

cd $CONDA_PREFIX
mkdir -p ./etc/conda/activate.d
mkdir -p ./etc/conda/deactivate.d
touch ./etc/conda/activate.d/env_vars.sh
touch ./etc/conda/deactivate.d/env_vars.sh

Bash completionをzshで使いたい場合は、$CONDA_PREFIX/etc/conda/activate.d/env_vars.shに以下の行を加える。

autoload bashcompinit
bashcompinit

コンパイラもcondaで入れたいなら、

% conda install gcc_linux-64 gxx_linux-64 gfortran_linux-64

$CONDA_PREFIX/etc/conda/activate.d以下にactivate-gcc_linux-64.shなどのbashスクリプトが入る。それが環境変数CCなどを設定する。gccといった実行可能バイナリもしくはそのリンクは作られないので、このbashスクリプトが重要。zshではbashスクリプトを適当な場所に移動して、以下のようにエミュレートして読み込むようにする。

emulate sh -c 'source $CONDA_PREFIX/etc/conda/activate.d/bash/activate-binutils_linux-64.sh'
emulate sh -c 'source $CONDA_PREFIX/etc/conda/activate.d/bash/activate-gcc_linux-64.sh'
emulate sh -c 'source $CONDA_PREFIX/etc/conda/activate.d/bash/activate-gxx_linux-64.sh'
emulate sh -c 'source $CONDA_PREFIX/etc/conda/activate.d/bash/activate-gfortran_linux-64.sh'

プロンプトのホスト名がx86_64-conda_cos6-linux-gnuになるので、元に戻すために以下の行を$CONDA_PREFIX/etc/conda/activate.d/env_vars.sh$CONDA_PREFIX/etc/conda/deactivate.d/env_vars.shに追加。

export HOST=`hostname`

まとめると(zsh)

autoload bashcompinit
bashcompinit

if (( ${+LD_LIBRARY_PATH} )); then
  export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
else
  export LD_LIBRARY_PATH=$CONDA_PREFIX/lib
fi
if (( ${+C_INCLUDE_PATH} )); then
  export C_INCLUDE_PATH=$CONDA_PREFIX/include:$C_INCLUDE_PATH
else
  export C_INCLUDE_PATH=$CONDA_PREFIX/include
fi
if (( ${+LIBRARY_PATH} )); then
  export LIBRARY_PATH=$CONDA_PREFIX/lib:$LIBRARY_PATH
else
  export LIBRARY_PATH=$CONDA_PREFIX/lib
fi

emulate sh -c 'source $CONDA_PREFIX/etc/conda/activate.d/bash/activate-binutils_linux-64.sh'
emulate sh -c 'source $CONDA_PREFIX/etc/conda/activate.d/bash/activate-gcc_linux-64.sh'
emulate sh -c 'source $CONDA_PREFIX/etc/conda/activate.d/bash/activate-gxx_linux-64.sh'

export HOST=`hostname`

他に、cmake, eigen, boost, openblasもcondaで入る。openblasはconda-forgeから入れると良い。

condaで環境構築・Macの場合

gcc, gxxの代わりにそれぞれclang, clang++を使うことになる。fortranは共にgfortran。以下参照。

% conda install clang_osx-64 clangxx_osx-64 gfortran_osx-64 llvm-openmp

OpenMPを使う場合はllvm-openmpが必要。

$CONDA_PREFIX/etc/conda/activate.d/env_vars.shの設定をまとめると、

autoload bashcompinit
bashcompinit

export PATH=$CONDA_PREFIX/bin:/Users/togo/code/rtags/bin:$PATH
if [[ -v LD_LIBRARY_PATH ]]; then
  export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
else
  export LD_LIBRARY_PATH=$CONDA_PREFIX/lib
fi
if [[ -v C_INCLUDE_PATH ]]; then
  export C_INCLUDE_PATH=$CONDA_PREFIX/include:$C_INCLUDE_PATH
else
  export C_INCLUDE_PATH=$CONDA_PREFIX/include
fi
if [[ -v LIBRARY_PATH ]]; then
  export LIBRARY_PATH=$CONDA_PREFIX/lib:$LIBRARY_PATH
else
  export LIBRARY_PATH=$CONDA_PREFIX/lib
fi

emulate sh -c 'source $CONDA_PREFIX/etc/conda/activate.d/bash/activate-gfortran_osx-64.sh'
emulate sh -c 'source $CONDA_PREFIX/etc/conda/activate.d/bash/activate_clangxx_osx-64.sh'
emulate sh -c 'source $CONDA_PREFIX/etc/conda/activate.d/bash/activate_clang_osx-64.sh'
export HOST=`hostname`

macOS(High Sierra, Mohave)でcondaとhomebrewのlibgompが衝突

condaで主な環境を構築しているものの、gccはhomebrewを使っている。最近のアップデートのせいか、このgccとcondaのlibgompが非互換なため、実行時にコケてしまうようになった。つまり-lgompでリンクすると、どうしてもcondaのlibgompを読んでしまう。/usr/local/opt/gcc@6/lib/gcc/6/libgomp.aといった静的ライブラリをリンクすることで問題を回避した。

macOS Mojaveでフォントがぼんやりする

MacOS Mojaveにアップデートしたところ、外部ディスプレイで画面がぼんやりするので仕事にならない。以下のリンクの「呪文を唱えて、ログアウト、ログインせよ」に従い前の感じに戻った。ありがとう。

このページの筆者は「アップルによるアップデートでこれは修正されるだろう」と書いている。

macOS Mojaveでgitが使えない

xcode-select --installせよとのこと。