読者です 読者をやめる 読者になる 読者になる

山ブログ

山間部

どうしてもPBHoneyをmacOS Sierraで動かしたい時

ゴール: macOS SierraでPBHoneyを動かす。

Softwares

Environment

  • macOS 10.12.3 (Sierra)
  • XCode 8.2.1 & Command Line Tools for XCode
  • homebrew

Install Blasr

blasr 1.3.1をインストールする。ただし、Blasr 1.3.1はclangでビルドできない

macOSgccはclangなので、まずGCC 5を入れる。 5を入れたのは上のリンクで成功したと言っている人がいたから。

brew install gcc@5

次に、HDF5 1.8.14 をビルドして、brewのCellerに突っ込んでlinkしておく。

wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.14/src/hdf5-1.8.14.tar.gz
tar -xvvzf hdf5-1.8.14.tar.gz
cd hdf5-1.8.14
mkdir -p /usr/local/Cellar/hdf5/1.8.14
CC=gcc-5 CXX=g++-5 ./configure --prefix /usr/local/Cellar/hdf5/1.8.14 --enable-cxx
make
make install
brew link hdf5          # hdf5をインストールして**いない**場合
brew switch hdf5 1.8.14 # hdf5をインストールして**いる**場合

Blasrをインストールする

mkdir -p /usr/local/Cellar/blasr/2.2
cd blasr-smrtanalysis-2.2/
make HDF5INCLUDEDIR=/usr/local/opt/hdf5/include \
     HDF5LIBDIR=/usr/local/opt/hdf5/lib \
     CC=gcc-5 CXX=g++-5
# Homebrewはblasrのバージョンをurlから推測するので、
# Homebrew的には2.2
make install PREFIX=/usr/local/Cellar/blasr/2.2
brew link blasr

確認

blasr -version

以下の通り表示されれば成功

blasr   1.3.1

Install Samtools

samtools (0.1.17)をインストールする。

mkdir -p /usr/local/Cellar/samtools/0.1.17/bin/
wget -Osamtools-0.1.17.tar.gz https://github.com/samtools/samtools/archive/0.1.17.tar.gz
tar -xvvzf samtools-0.1.17.tar.gz
cd samtools-0.1.17
make CC=gcc-5
cp samtools /usr/local/Cellar/samtools/0.1.17/bin/
brew link samtools

Install pysam, numpy, h5py

pip install pysam numpy h5py

Install PBSuite

HOMEBREW_CC=gcc-5 HOMEBREW_CXX=g++-5 brew install pbsuite

~/.bash_profile(もしくは使ってるシェルの設定)にPYTHONPATHを書いておく

export PYTHONPATH=/usr/local/opt/pbsuite:$PYTHONPATH

反映する

source ~/.bash_profile

Run Workflow

HoneyReadme.txtを読む。

pyenvのようなものを使っている人は2.7系にスイッチしておくこと。

pyenv shell 2.7.13

試しにワークフローを走らせる。

cd /usr/local/Cellar/pbsuite/14.7.14/docs/honeyExample
./workflow.sh

特にエラーがでなければOK. 以下の通り。

Mapping
[INFO] 2017-03-11T15:06:44 [blasr] started.
[INFO] 2017-03-11T15:07:21 [blasr] ended.
Extracting Tails
2017-03-11 15:07:21,634 [INFO] Running /usr/local/bin/Honey.py pie mapping.sam lambda_modified.fasta
2017-03-11 15:07:21,634 [INFO] Extracting tails
2017-03-11 15:07:21,904 [INFO] Parsed 413 reads
2017-03-11 15:07:21,905 [INFO] Found 250 tails
2017-03-11 15:07:21,905 [INFO] 13 reads had double tails
2017-03-11 15:07:21,905 [INFO] Mapping Tails
2017-03-11 15:07:29,754 [INFO] [0, '[INFO] 2017-03-11T15:07:21 [blasr] started.\n[INFO] 2017-03-11T15:07:29 [blasr] ended.\n', None]
2017-03-11 15:07:29,754 [INFO] Consolidating alignments
2017-03-11 15:07:29,796 [INFO] 170 tails mapped
Sam To Bam
[samopen] SAM header is present: 1 sequences.
Calling MD Tag
[fai_load] build FASTA index.
Calling Tails
2017-03-11 15:07:31,010 [INFO] Running /usr/local/bin/Honey.py tails mappingFinal.bam
2017-03-11 15:07:31,012 [INFO] Parsing Reads
2017-03-11 15:07:31,039 [INFO] Writing Results
2017-03-11 15:07:31,039 [INFO] Chrom lambda_NEB3011_lambda_NEB3011 made 113 pre-filter clusters
2017-03-11 15:07:31,041 [INFO] Chrom lambda_NEB3011_lambda_NEB3011 made 5 post-filter clusters
2017-03-11 15:07:31,041 [INFO] Finished
Calling Spots
2017-03-11 15:07:31,662 [INFO] Running /usr/local/bin/Honey.py spots mappingFinal.bam
2017-03-11 15:07:31,678 [INFO] making container for lambda_NEB3011 (lambda_NEB3011:0-48802 48802 bp)
2017-03-11 15:07:31,681 [INFO] parsing bam
2017-03-11 15:07:31,699 [INFO] 583 reads to parse
2017-03-11 15:07:31,746 [INFO] parsed 18 reads (3 % complete)
2017-03-11 15:07:31,766 [INFO] parsed 24 reads (4 % complete)
2017-03-11 15:07:31,786 [INFO] parsed 30 reads (5 % complete)
...
2017-03-11 15:07:32,970 [INFO] parsed 572 reads (98 % complete)
2017-03-11 15:07:32,976 [INFO] parsed 578 reads (99 % complete)
2017-03-11 15:07:32,982 [INFO] parsed 583 reads (100 % complete)
2017-03-11 15:07:32,982 [INFO] parsed 583 reads
2017-03-11 15:07:32,998 [INFO] calling spots
2017-03-11 15:07:33,034 [INFO] MaxCov:32 MeanCov:16 StdCov:5 MinCov:0
2017-03-11 15:07:33,034 [INFO] MIS processing
2017-03-11 15:07:33,046 [INFO] RateMean 0.042394  -- RateStd  0.010260
2017-03-11 15:07:33,049 [INFO] MaxSig: 0.040435 MeanSig: 0.000013 StdSig 0.005060 MinSig: -0.052323
2017-03-11 15:07:33,049 [INFO] 0 MIS entries
2017-03-11 15:07:33,050 [INFO] INS processing
2017-03-11 15:07:33,063 [INFO] RateMean 0.000718  -- RateStd  0.002610
2017-03-11 15:07:33,067 [INFO] MaxSig: 0.045733 MeanSig: 0.000000 StdSig 0.002097 MinSig: -0.046218
2017-03-11 15:07:33,069 [INFO] 1 INS entries
2017-03-11 15:07:33,070 [INFO] DEL processing
2017-03-11 15:07:33,081 [INFO] RateMean 0.044015  -- RateStd  0.052830
2017-03-11 15:07:33,082 [INFO] MaxSig: 0.396365 MeanSig: 0.000004 StdSig 0.024411 MinSig: -0.428616
2017-03-11 15:07:33,083 [INFO] 1 DEL entries
2017-03-11 15:07:33,083 [INFO] Filtering INS results
2017-03-11 15:07:33,121 [INFO] found 1 spots
2017-03-11 15:07:33,131 [INFO] finished 583 reads
2017-03-11 15:07:33,132 [INFO] finished 1 spots

ViennaRNA Package 1.xをmacOS Sierraでビルドする

用があってViennaRNAの1系を使うことがあって、ビルドしようと思ったら通らなかった。

Undefined symbols for architecture x86_64:
  "_HairpinE", referenced from:
      _subopt in libRNA.a(libRNA_a-subopt.o)
      _repeat in libRNA.a(libRNA_a-subopt.o)
  "_LoopEnergy", referenced from:
      _subopt in libRNA.a(libRNA_a-subopt.o)
      _repeat in libRNA.a(libRNA_a-subopt.o)
ld: symbol(s) not found for architecture x86_64

リンカーでエラーが出る。nmlibRNA_a-fold.oを確認すると確かにSymbolがundefinedになっていた。

環境

$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin16.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

方法

lib/fold.cに以下のようにINLINEマクロが定義されているので、変更する。

変更前

    27 #ifdef __GNUC__
    28 #define INLINE inline
    29 #else
    30 #define INLINE
    31 #endif

変更後

    27 #ifdef __GNUC__
    28 #define INLINE
    29 #else
    30 #define INLINE
    31 #endif

原因

https://clang.llvm.org/compatibility.html#inline

GNU C89 mode (used by default in older versions of GCC) is the C89 standard plus a lot of extensions. C89 doesn’t have an inline keyword, but GCC recognizes it as an extension and just treats it as a hint to the optimizer.

GCC C89モードのinlineはおかしいらしい。以下の方法でもビルドできる

$ CFLAGS=" -std=gnu89 " ./configure

2015年

服従

服従

前半はあまりコードを書かない年だった。後半はそれなりに書いた気がする。

2015年の後半からコードレビューをする習慣が少しついた。それまでは一人で書き散らかして一人で昔の自分の書き散らしたコードと対峙し続けていたので、人の目が入ってコードが綺麗になっていくのは面白い体験だったし、なんでもっと早くやらなかったんだろうと思った。 そんなわけで後半はクソコードを書きまくっては怒られ続けるみたいな日々が続いた。年の最後の方でようやく、テストを書いてから実装することを覚えた。面白機能を実装してはあちこちから火を吹いていた頃に比べると安心感があって、これも新鮮だった。人とコードを書くというのはこういうことかと思う。

あまり一つのことについて深く考える時間を取れない一年だった気がする。作業するのをやめてずっと考えていたいと思っていたけれど、そうもいかなかった。深く考える時間がなかったのか、注意が散ってしまって結果的に深く考えることができなかったのかはわからない。

夢日記を書くように気をつけていた時期があった。起きてすぐに書いた文章はあまりよくできていないことが多くて、推敲を重ねて多少満足のできるような文章にするのは、それまであまりやったことのないことだったこともあって面白かった。夢日記をつけていたら、夢の中で夢を見て、さらにその中で夢を見るということが何回か続いて、怖くなってしまった。最近はあまり夢を見ないので書いていない。

文章を書くことに慣れようと思って、短い文章をよく書いていた。iPhoneのメモに思いついた端からくだらないことを書き付けていたら、多少文章を書くハードルは下がった気がする。メモはその時に思ったことが曖昧なまま書き付けられていて、読み返すのは厳しい。

ふとしたきっかけで色々なことがわかって、結果的に毎日薬を飲む生活が始まった。薬を飲む前と飲んだ後で多少感覚に違いがあるのは興味深かった。何かが良くなったかと言われると何とも言えないのがつらいところだけど、今のところは続けていこうと思っている。

ウェルベックの服従を読んでいる。年が明ける前に読み終えるつもりだったけれど、結局半分くらい読んだところで年が明けてしまった。プラットフォームを読んだ時にも思ったけれど、主人公の何かを諦めたような、無気力な感じが良い。今年はあまり本を読まなかった。 http://hondana.org/hrykを見ると、数冊しか新しく追加されていない。

カミュ-サルトル論争をカバンに入れっぱなしにして、何回も読んでいたと思う。何回も読んでいると、サルトルの返事がうまいと思えてきた。特に書き出しの文章がいい。こういう文章を送りつけて絶交したいと思った。

新年の抱負は特にないけれど、もっとロボットのようになりたいと思う。

革命か反抗か―カミュ=サルトル論争 (新潮文庫)

革命か反抗か―カミュ=サルトル論争 (新潮文庫)

高松

高松に行った時の感想が下書きに残っていた。

市内

http://instagram.com/p/ujmWjvCVtl/

  • 街のサイズがちょうど良くて便利
  • 県庁が良い
  • 電車に乗って風景を見ていると、サイズが大きいのか小さいのかわからなくなる
  • 山があって街があって、いきなり海になる
  • とにかくいきなり海になる
  • 狭いのか広いのかよくわからなくなる
  • 箱庭を見ている感じ

高松、サイズがよくわからなくて、小さい頃に自分の体が異常に大きくなって街を見下ろすような感覚がした時の事を思い出した。

うどん

http://instagram.com/p/ukaWWFiVsp/

  • さか枝
  • 竹清
  • しんぺいうどん
  • 鶴丸
  • うどん棒
  • うどん市場

どれも共通してうまい、安いという感じだった。味は店によってかなり違う。竹清の天ぷらが良かった。

猪熊弦一郎美術館

http://instagram.com/p/upARWKiVvo/

平日に行ったこともあってあまり人がいなくて静かだった。建築も展示も良かったしずっとだらだらできて最高だった。

年末年始

山は冬が厳しいので、年末は気候が温暖な実家に行った。

祖父母が住んでいる地域はかなり暖かく、北や東ではその時期に見られないはずのクモが生き残っていて驚いた。目に付いたものを全て回収して持って帰ろうとしていたら、親戚に「それ食うんか?」と言われたので説明したけれど、怪訝な顔をしていた。
確かに実家に戻ってきた親戚がクモ捕まえて喜んでたら不気味だと思う。
 
休みの間に薔薇の名前を読み終えた。中世ヨーロッパの僧院が舞台の小説で、作中に出てくる普通は立ち入ることの出来ない文書館が魅力的だった。
この小説に出てくるような、誰にも読まれないように厳重に保管されて、隠された本があったら読んでみたい。
あと上巻後半と下巻のアドソが良かった。
 

 

 

 

薔薇の名前〈上〉

薔薇の名前〈上〉

 

 

 

 

薔薇の名前〈下〉

薔薇の名前〈下〉

 

 

 

 

 

 

 

 

 
 
 

2015年

去年

2014年最後に見たNephila Clavata

2014年最後に見た夢は後部がガラス張りになった飛行機でロシアに向かう途中、ミサイルに追われる夢だった。後部がガラス張りになっていたせいで飛んでくるミサイルがよく見えて緊張感があった。 飛行機にミサイルが当たって、爆発する瞬間に飛行機は加速、無事墜落すること無く地下の滑走路に辿り着いた。

去年

  • 襲ってくるゾンビを端から撃ちつつショッピングモールの屋上に追いつめられたところで年が終わったイメージ。
  • それなりに本を読んでいたけれど、小説やSFに偏っていた。
  • コードを書く時間が十分に取れていなかった。

今年

体感する1年が短くなってきたので、時間をあらかじめ決めて無理矢理何かを進めないと一歩も進まないまま飛んでくる物を撃ち落としているうちに終わると思う。気をつけたい。読書にしても勉強するにしても計画を立てていきたい。

pkgsrcのメモ

Linuxで使えるhomebrewのようなものが無いか探していて、pkgsrcを見つけた。pkgsrcはNetBSDのパッケージマネージャーとして開発されたツールだが、LinuxMac OS Xでも使う事ができるらしい。NFSでホームディレクトリを共有しているサーバ群で同一の環境を使いたかったので、パッケージを色々と入れてみた。CPUが異なっていたり、GCCのバージョンがそれぞれ違うサーバ上で動作する環境を構築するには若干の設定が必要だったのでメモ。

インストール

インストールにはCVSを使う。homebrewがgitのリポジトリでFormulaを配布しているような感じ。ドキュメント通りにチェックアウトすると、$HOME以下にpkgsrcディレクトリができる。pkgsrcディレクトリ以下にパッケージが入っていて、そこに移動してbmakeするとビルドが実行されるようになっている。

$ cvs -danoncvs@anoncvs.netbsd.org:/cvsroot checkout pkgsrc
$ cd pkgsrc/bootstrap
$ ./bootstrap --unprivileged

bootstrapスクリプトを走らせるとBSD Make等のパッケージをビルドするのに必要なツールがインストールされる。ルートを持っていないので--unprivilegedオプションを加える。

無事インストールができたらまずGCCをビルドする。使っているサーバはものによってGCCのバージョンが違っているし、古いものばっかりなので新しいものを入れた。

$ cd pkgsrc/lang/gcc48
$ bmake install
$ bmake clean

GCC4.8は$HOME/pkg/gcc48にインストールされる。

設定

pkgsrcの設定は$HOME/pkg/etc/mk.confに置いてある。

# Example /home/foo/pkg/etc/mk.conf file produced by bootstrap-pkgsrc
# 2013年 11月 02日 土曜日 00:00:00 JST

.ifdef BSD_PKG_MK       # begin pkgsrc settings

UNPRIVILEGED=           yes
PKG_DBDIR=              /home/foo/pkg/var/db/pkg
LOCALBASE=              /home/foo/pkg
VARBASE=                /home/foo/pkg/var
PKG_TOOLS_BIN=          /home/foo/pkg/sbin
PKGINFODIR=             info
PKGMANDIR=              man
ALLOW_VULNERABLE_PACKAGES= yes
# USE_LIBTOOL= yes # 不要
PREFER_PKGSRC=yes

CC= /home/foo/pkg/gcc48/bin/cc
CXX= /home/foo/pkg/gcc48/bin/g++

# LDFLAGS += -L/home/foo/pkg/lib # 不要
CFLAGS += -mtune=generic -mfpmath=sse
MAKE_JOBS = 4

.endif                  # end pkgsrc settings

PREFER_PKGSRCをyesにしておくとpkgsrcで入っているライブラリが優先的に使われる。USE_LIBTOOLをyesにするとpkgsrcのlibtoolが使われる。この2つは設定しておくと事故が減る。その他、CFLAGSとかLDFLAGSを適当に追加した。

bmake, bootstrap-mk-filesを入れ直す

bmakeはシステムのGCCでビルドされたものなので、入れ直す。

$ cd pkgsrc/devel/bmake
$ bmake reinstall
$ bmake clean
$ cd pkgsrc/pkgtools/bootstrap-mk-files/
$ bmake reinstall
$ bmake clean

pkgfindを入れる

パッケージを探すコマンドは標準でついていないので、pkgfindを入れる。

$ cd pkgsrc/pkgtools/pkgfind
$ bmake install
$ bmake clean

操作

パッケージを探す
$ pkgfind foovar
インストールされているパッケージの一覧を表示する
$ pkg_info
libelf-0.8.13       ELF object file access library
gmp-5.1.2           Library for arbitrary precision arithmetic
mpfr-3.1.2          GMP-based library for multiple-precision floating-point computations
mpcomplex-1.0.1     Multiprecision complex arithmetic library
gcc48-4.8.1         The GNU Compiler Collection (GCC) - 4.8 Release Series
pkgfind-20111022    Find packages by package name in pkgsrc
zlib-1.2.8          General purpose data compression library
digest-20121220     Message digest wrapper utility
tnftp-20070806      The enhanced FTP client in NetBSD
nbpatch-20100124    Patch files using diff output
openssl-1.0.1enb2   Secure Socket Layer and cryptographic library
pax-20080110nb2     POSIX standard archiver with many extensions
gcc48-libs-4.8.1nb3 The GNU Compiler Collection (GCC) support shared libraries.
pcre-8.33           Perl Compatible Regular Expressions library
libffi-3.0.13       Foreign function interface
bootstrap-mk-files-20130912 *.mk files for the bootstrap bmake utility
bmake-20110606nb1   Portable (autoconf) version of NetBSD 'make' utility
libtool-base-2.4.2nb5 Generic shared library support script (the script itself)
libiconv-1.14nb2    Character set conversion library
tcp_wrappers-7.6.4  Monitor and filter incoming requests for network services
pkg-config-0.28     System for managing library compile/link flags
perl-5.18.1nb1      Practical Extraction and Report Language
パッケージをインストールする
$ cd pkgsrc/${category}/${package_name}
$ bmake install
$ bmake clean
# 依存しているパッケージもcleanする
$ bmake clean-depends
パッケージを入れ直す
$ cd pkgsrc/${category}/${package_name}
$ bmake reinstall
パッケージを削除する
$ pkg_delete package_name
依存パッケージを表示する
$ cd pkgsrc/${category}/${package_name}
$ bmake show-depends