kuroの覚え書き

96の個人的覚え書き

はてなダイアリーが終了するらしいので、はてなブログへ移行することにする

というわけで引っ越してきた。

2018年10月31日19:20現在の訪問者数 1192384

ゼロから再スタート。


はてなダイアリーでできていたことがこっちではできなかったりするのな。
結構リンク元参照とか楽しめたのに。思いがけない出会いがあったり。

カレンダーから記事をたどるのも結構使ってたけどね。

UPSを導入ーterastationとサーバの両方を連動してシャットダウンー

停電や不慮の電源トラブルに備えてオムロンUPSを導入した。

全サーバー群の電源を確保できるような大容量のUPSは高価なため、WEBサービス用データを保持しているヘッドノードとNFSサーバとして使っているTeraStationだけでもつないでおけるようにと、750Wのものを手配した。

うちのTeraStationUPS連動して電源異常を感知すると一定時間後にシャットダウンできる機能がついている。一方、UPSの方にも同様のユーティリティソフトが付いていて、サーバのシャットダウンができるようになっているらしい。

しかし、ここで困ったことが。UPSから異常検知シグナルを送るポートはUSB1ポートしかない。
付属ソフトでは複数台のサーバを連動してシャットダウンできる。
TeraStationは複数台ネットに接続していれば連動してシャットダウンできる。
ところがサーバとTeraStationは連動できないみたい。

こりゃTeraStationの連動機能は使わずに、サーバのシャットダウンシークエンスにTeraStationのシャットダウンも組み込むしかないか?と思ったのだが、どうもTeraStationは普通に簡単なコマンド一発でシャットダウンできるようにはなっていないらしい。

どうすりゃいいのかというとwgetでwebベースのコントロールサイトにアクセスして、webからシャットダウンボタンを押したように見せかけないとならないみたい。
そのためにはBASIC認証でログインして〜と結構面倒そうだな。

http://www.argv.org/~chome/blog/noisefactory/2010/02/tera-stationremoteshutdown.html
古いTeraStationはそもそもUPS連動機能がなかったらしく、先人のスクリプトは発見した。
これをモディファイして、同じようなことができるようにしてやらないと。

RX300S7インストール覚書

RX300S7にCentOS7をインストール。
計算ノードとして。
300GB SASドライブにシステムインストール。


一般ユーザーは作成しない。
NFSでヘッドノードの/home以下、/usr/local以下をマウント
NISでヘッドノードで作成したユーザ情報を共有

NFSのホスト:rx1330m3
NISのホスト:rx1330m3.nis
NASNFS):192.168.1.10

今設定しようとしているドメイン:192.168.1.2 y0-rx200s7

# yum install ypbind rpcbind
# yum install nano
# nano /etc/hosts
# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.1     rx1330m3 rx1330m3.nis
192.168.1.2    y0-rx200s7
192.168.1.3   y1-rx200s6
192.168.1.4   y2-rx200s6
192.168.1.5   y3-rx300s7
192.168.1.6     n1-rx300s7
192.168.1.7     n2-rx300s7

# authconfig --enablenis --nisdomain=nis --nisserver=rx1330m3 --enablemkhomedir --update
# systemctl start rpcbind ypbind
# systemctl enable rpcbind ypbind

NFSのauto mountを導入

# yum -y install nfs-utils
# nano /etc/idmapd.conf 
# cat /etc/idmapd.conf
[General]
#Verbosity = 0
# The following should be set to the local NFSv4 domain name
# The default is the host's DNS domain name.
Domain = y0-rx200s7
.........

# systemctl restart rpcbind
# nano /etc/fstab
# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Aug 13 13:07:11 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults	0 0
UUID=********-****-****-****-************ /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults	0 0
/dev/mapper/centos-swap swap                    swap    defaults	0 0
rx1330m3:/usr/local  /usr/local              nfs     defaults	0 0
192.168.1.10:/mnt/array1/home /mnt/nfs  nfs     defaults  0 0

# yum -y install autofs
# nano /etc/auto.master
# cat /etc/auto.master
.........
/-    /etc/auto.mount

# nano /etc/auto.mount
# cat /etc/auto.mount
/home -fstype=nfs,rw rx1330m3:/home

# systemctl start autofs
# systemctl enable autofs

torque-client設定

# yum install -y epel-release
# yum install -y torque-client torque-mom
# nano /etc/torque/server_name
# cat /etc/torque/server_name
rx1330m3

# nano /var/lib/torque/mom_priv/config

# cat /var/lib/torque/mom_priv/config
# Configuration for pbs_mom.
$pbsserver rx1330m3
$usecp *:/home /home
$usecp *:/mnt/nfs /mnt/nfs
$log_file_suffix %h

# firewall-cmd --add-port=15001/tcp --zone=public --permanent
# firewall-cmd --add-port=15002/tcp --zone=public --permanent
# firewall-cmd --add-port=15003/tcp --zone=public --permanent
# firewall-cmd --add-port=15003/udp --zone=public --permanent
# firewall-cmd --add-port=15004/tcp --zone=public --permanent
# systemctl start pbs_mom
# systemctl enable pbs_mom

あとはbrewではなくyumでそれぞれのノードにインストールしているものを入れる。

# yum -y install java
# yum -y install perl

bedtoolsでread coverage

bedtoolsでbamファイルのread coverageを求める方法は以前にも書いた。
現在のbedtoolsのバージョン(2.27.1)ではbedファイルではなくbamファイルから直接read coverageを出すことが可能になっている

$ bedtools coverage -a referense.bed -b sample.bam > sample_cov.bed

というフォーマットで問題なく解析できるのだが。
ただしこの操作は非常にメモリを食うらしく、4GB超のbamファイルを解析しようとすると64GBのメモリを使い切ってスワップも15GBくらい使って、どうにもならなくなって落ちる。

ところが、

$ bedtools bamtobed -i sample.bam > sample.bed

と一旦bedに変換してから、先程のコマンドにつなげると、bedへの変換にはほとんどメモリを消費せず、coverageの計算も30GB程度のメモリで十分に収まることがわかった。

というわけで、bam直の解析はやめといたほうが良い。

IGV.jsの使い方は大体つかんだが、時々思うようにいかない

ということでjavascriptベースの他の選択肢もあたってみたい。

pileup.js
http://www.hammerlab.org/pileup/
これはシンプルでいいかもしれないな。
しかしnpmというパッケージシステムでインストールする?Node.jsってなに?また新しいことをいろいろ覚えないとならないのかね。


genomicviz
https://github.com/akmorrow13/genomicviz
pileup.jsをpythonに埋め込んでる?


biodalliance
http://www.biodalliance.org
これいいんじゃない?


そもそもIGV.jsでうまく表示されないのはBAMファイルからbedtools intersectでデータを処理したあとなんだが、bedtoolsの処理に問題があってBAMファイルがおかしくなっているんじゃないかな。

その点を調査してみよう。

Safari12でプラグインが使えなくなったときWEB認証のVPNをどうやって使うか

どうやらSafariがバージョンアップし、adobe flash player以外のプラグインがことごとく使用不能になったらしい。
そこで困ったのが大学のサーバへのVPN接続。
webからVPN接続のための認証を行っていたのに、mac_sslvpnが使えなくなって接続できなくなった。

そういえば接続が成立するとBIG-IPなんちゃら〜という表示が出ていたことを思い出し、WEBを検索。
スタンドアロンVPNクライアントソフトウェア(接続ツール)というものがあるらしく、
一応App storeにも登録されたソフトウェアがあった。
https://itunes.apple.com/us/app/f5access/id1243219105?mt=12
これを起動し、Manage VPN Configurationsを開く。
いつもメールで送られてくる接続情報のリンクをサーバとして登録
ID・パスワードは都度変わるので空欄のままでよい
Connect to [作成した接続名]というところをクリックしてID・パスワードを入力。
無事接続。

reference-guided de novo assembly

ゲノムデータをreferenceにRNA-seqデータをマッピングしているのだが、ゲノムデータで使われているものとはことなる品種のRNA-seqデータをマッピングしてみたところ、かなりたくさんのSNPが含まれていることがわかった。
普通の発現解析なら、SNPがあろうがマッピングさえできれば良いわけだけど、いまやろうとしている仕事では100%マッチでマッピングされていることが重要なので、これではまずい。

ということでreferenceを使用品種のRNAseqデータで再構築してやりたい。本来的にはゲノムseqデータでde novo assemblyすれば良いわけだけど、これは大規模すぎるため、まずはRNA-seqデータでexon領域だけ、それも発現している遺伝子の部分だけ再構築してやることを目指す。

調べてみるとreference-based assemblyを行えば、referenceを再構築できそうなのだが、
https://bi.biopapyrus.jp/rnaseq/assembly/

肝心の方法はなかなか情報が得られない。
上のページでもできる、とは書いておきながら方法は書かれていないわけで。

http://seqanswers.com/forums/showthread.php?t=73620
ここでようやくそれらしい記述が。

velvetというとさっきのページでも紹介されていたゲノムのde novo assemblyをde Bruijn graph(ド・ブラングラフと読むらしい)で行うソフトウェアらしいのだが、これに付随するColumbus extensionを使うとreference-guided assemblyもできるらしい。

てことで
https://www.ebi.ac.uk/~zerbino/velvet/
からダウンロードして環境構築してみる。

普通に適当なところに解凍し、makeするだけで使えるようになる。
あとはとにかくマニュアルに従うだけなのだが、まずはColumbus extensionのマニュアルを紐解く。

1 For impatient people
> head myRegions.fa
>chr1:123456789-123457789
ATGTGTGTACTAGCTAGCGCGCTAGCTAGTCATGTGTGTACTAGCTAGCGCGCTAGCTAGTC
[etc ...]
> sort myReads.sam > mySortedReads.sam
> velveth my_dir 21 -reference myRegions.fa \
-shortPaired -sam mySortedReads.sam
> velvetg my_dir [etc ...]

せっかち向けって・・・
これだけ見てもまあどうすりゃいいかは案外わかるな。

3世代のサーバの能力を検証してみた

ベンチマークソフトを使ってもいいけど、実際に仕事に使うスクリプトを処理するのにかかる時間を計測したほうが意味があるだろう。
ということで、試しにBAMファイルをcufflinksにかけて遺伝子発現量を算出させてみた。
処理してみたBAMファイルは
1, 4.4GBリード数74139744
2, 416KBリード数8653
3, 11KBリード数116
の3ファイル
サーバのスペックは
A, Intel(R) Xeon(R) CPU E3-1230 v6 @ 3.50GHz 4core 8thread mem:64GB
B, Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz 6core 12thread x 2 mem:16GB
C, Intel(R) Xeon(R) CPU E5630 @ 2.53GHz 4core 8thread x 2 mem:26GB

さて、

$ cat arrayjob180901.sh.o379-15 
18/09/01 21:58:26
[21:58:27] Loading reference annotation.
[21:58:29] Inspecting reads and determining fragment length distribution.
Processed 31122 loci.                       
> Map Properties:
>	Normalized Map Mass: 29205450.00
>	Raw Map Mass: 29205450.00
>	Fragment Length Distribution: Truncated Gaussian (default)
>	              Default Mean: 200
>	           Default Std Dev: 80
[22:00:12] Estimating transcript abundances.
Processed 31122 loci.                       
finish cufflinks
 
[22:02:38] Loading reference annotation.
[22:02:39] Inspecting reads and determining fragment length distribution.
Processed 31122 loci.                       
> Map Properties:
>	Normalized Map Mass: 8924.00
>	Raw Map Mass: 8924.00
>	Fragment Length Distribution: Truncated Gaussian (default)
>	              Default Mean: 200
>	           Default Std Dev: 80
[22:02:44] Estimating transcript abundances.
Processed 31122 loci.                       
finish cufflinks2

[22:03:03] Loading reference annotation.
[22:03:05] Inspecting reads and determining fragment length distribution.
Processed 31122 loci.                       
> Map Properties:
>	Normalized Map Mass: 2074.00
>	Raw Map Mass: 2074.00
>	Fragment Length Distribution: Truncated Gaussian (default)
>	              Default Mean: 200
>	           Default Std Dev: 80
[22:03:08] Estimating transcript abundances.
Processed 31122 loci.                       
finish cufflinks3
18/09/01 22:03:27
finish
18/09/01 22:03:27

こんな感じに処理は行われた。
A,
1, 4min11sec
2, 25sec
3, 24sec
total 5min1sec

B,
1, 5min59sec
2, 36sec
3, 33sec
total 8min10sec

C,
1, 6min41sec
2, 45sec
3, 42sec
total 8min10sec

データを書き込む処理などで実際に計算にかかった時間より余分がついてはいるがざっとこんな感じかな。
Bの24スレッドがあんまり伸びないのはメモリがボトルネックになっているのかもしれない。クロックも控えめだしな。
なんだかんだいって最新CPUが一番速いという当たり前のような結果となった。
まあそうじゃなかったら新しい機種がどんどん開発されている意味がないわな。

NFSとNISがポートを取り合い

あるとき再起動したあと、NISクライアントがuserを受け付けてくれなくなり、ちょっと途方に暮れる。
NISサーバがどういうわけか起動していないので再起動してみたが、エラーが出て起動してくれない。

systemd[1]: Starting NIS/YP (Network Information Service) Server...
ypserv[3798]: ypserv: can not bind UDP: Address already in use
systemd[1]: ypserv.service: main process exited, code=exited, status=1/FAILURE
systemd[1]: Failed to start NIS/YP (Network Information Service) Server.
systemd[1]: Unit ypserv.service entered failed state.
systemd[1]: ypserv.service failed.

このように言われる。ypserv: can not bind UDP: Address already in useここが怪しいよな。
で、

# lsof -i
COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind    775     rpc    6u  IPv4   9606      0t0  UDP *:sunrpc 
rpcbind    775     rpc    7u  IPv4   9607      0t0  UDP *:944 
rpcbind    775     rpc    8u  IPv4   9608      0t0  TCP *:sunrpc (LISTEN)
rpcbind    775     rpc    9u  IPv6   9609      0t0  UDP *:sunrpc 
rpcbind    775     rpc   10u  IPv6   9610      0t0  UDP *:944 
rpcbind    775     rpc   11u  IPv6   9611      0t0  TCP *:sunrpc (LISTEN)
avahi-dae  796   avahi   12u  IPv4   8051      0t0  UDP *:mdns 
avahi-dae  796   avahi   13u  IPv4   8052      0t0  UDP *:40829 
chronyd    915  chrony    1u  IPv4  18064      0t0  UDP localhost:323 
chronyd    915  chrony    2u  IPv6  18065      0t0  UDP localhost:323 
flask     1286  rnaseq    3u  IPv4  37148      0t0  TCP mn-rx1330m3:commplex-main (LISTEN)
rpc.ypxfr 1288    root    4u  IPv4  25503      0t0  UDP *:945 
rpc.ypxfr 1288    root    5u  IPv4  25506      0t0  TCP *:945 (LISTEN)
sshd      1292    root    3u  IPv4  26903      0t0  TCP *:ssh (LISTEN)
sshd      1292    root    4u  IPv6  26905      0t0  TCP *:ssh (LISTEN)
cupsd     1297    root    9u  IPv6  21293      0t0  TCP localhost:ipp (LISTEN)
cupsd     1297    root   12u  IPv4  21294      0t0  TCP localhost:ipp (LISTEN)
(以下略)

なんかポート944と945がrpcbindで使われている。どうしてまたわざわざ競合するのだ。
NISはポートを変動させると聞いていたので
/etc/sysconfig/network

# Created by anaconda
NISDOMAIN=nis

YPSERV_ARGS="-p 944"
YPXFRD_ARGS="-p 945"

という感じに固定していたのだ。これをしないとfirewallを抜けれないので。
nfsの方はserviceとしてfirewallに設定しておけるので、変動しても構わないのに。
というわけで、一旦rpcbindをstopしてからypservをstartし、rpcbindをもう一度startしてやることで回避できた。
しかし、これはまた起こる可能性がある事象だし、どうにかならんのかな。

PXE bootでTeraStationが繋がらない

CentOS7でPXEサーバを立ててディスクレスブートを試しているのだが、どうにもNASTeraStationがマウントできない。
マシンスペックが異なるがHDDでブートしているノードからはNFSで普通にマウントできているのだが。
どうしても

mount.nfs: timeout set for Wed Aug 29 13:10:35 2018
mount.nfs: trying text-based options 'vers=4.1,addr=192.168.0.100,clientaddr=192.168.0.10'
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'vers=4.0,addr=192.168.0.100,clientaddr=192.168.0.10'
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'addr=192.168.0.100'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 192.168.0.100 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 192.168.0.100 prog 100005 vers 3 prot UDP port 36182
mount.nfs: mount(2): Protocol not supported
mount.nfs: Protocol not supported

こんな感じにエラーが出る。
といってNFSが全く使えていないわけでもなく、/homeや /usr/localはヘッドノードのディレクトリをマウントできている。
何が違うかというと、ヘッドノードの方はvers=4.1ですんなりマウントできているところがTeraStationはどうやらversion3しか搭載していないようで、他のノードからもvers=3でマウントが成立している。
NFS ver3がPXEブートではだめなのかなということでSMB(CIFS)でのマウントを試すべく、

# yum install -y cifs-utils samba-client

と必要なものをインストールしてみるも

# mount -t cifs //192.168.0.100/home /mnt/nfs
Password for root@//192.168.0.100/home:  (no echo) 
mount error: cifs filesystem not supported by the system
mount error(19): No such device
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

と、こちらもcifsがサポートされていないとすげなくエラー。
cifsを別のノードにインストールして同じようにマウントをしてみるとちゃんとマウントされるので、やはりPXEブートだけの問題のようだ。カーネルのバージョンも同じなんだけど、普通にインストーラでインストールしたわけではないのでモジュール等がちゃんと入っていないんだろうかね。
なんか面倒くさくなってきたので、HDD入れて起動することにする。