kuroの覚え書き

96の個人的覚え書き

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入れて起動することにする。

DNAのmultiple-FASTAファイルを翻訳してアミノ酸の配列を得る

個々のDNA配列からアミノ酸配列に変換するツールは数あれど、multi-FASTAにまとまっているDNA配列、それもATGーstopじゃなく5UTR-3UTRなどのcDNA配列から、読み枠をすべてサーチして最長のORFだけをリストにしてくれるツールはなかなかない。

http://shigen.nig.ac.jp/tools/translatorV2/

それが実現できるのがこのサイト。素晴らしい。感動した。




追記
2019年5月、久しぶりに使おうと思ったらサイトが閉じられていた・・・
異動されちゃったんかなあ。ほんと勘弁してほしいなあ。

PXEブートのまとめ

PRIMERGY RX200をネットワークブートでディスクレス運用するまとめ。

まず、クライアント側でPXEブートに使うネットワークポートを確認し、BIOSPXE enableに設定する。PRIMERGYの場合デフォルトで1つのポートだけPXE対応に設定されているはず。(2つ両方とも対応はできる)
クライアント側の準備はひとまずこれだけ。

サーバ側ですることは
DHCPサーバとTFTPサーバをインストールして起動する
ポートを開放する
起動イメージとroot領域を用意する
の3点。


PXEサーバのアドレスを192.168.1.1
クライアントのアドレスは192.168.1.100以降をDHCPで取得とする


まずはtftpサーバのインストール、設定、起動
# yum -y install syslinux xinetd sftp-server
# mkdir /var/lib/tftpboot/pxelinux.cfg
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

# nano /etc/xinetd.d/tftp

# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no                                      #yes→noに書き換え
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

# systemctl start xinetd
# systemctl enable xinetd

続きを読む

PRIMERGY RX200S7にCentOS7をインストール

結局RX200S7を追加入手。やすかったものでつい。
PRIMERGY RX200 S7 ラックベースユニット(2.5インチ×4) / PYR207RQN3
基本スペックは
CPU:xeon E5-2520 (2.0GHz 6core 12thread) *2
MEM:16GB UDIMM
HDD:なし
RAID:オンボードSATAソフトウェアRAIDのみ
CD/DVDドライブ:なし
CPUは結構強力(クロックは低いが12コア!)だけど、HDD周りはちょっと弱い。
最初オンボードSASも使えると思っていたが、いろいろ調べた結果SATAしか使えない事が判明。
例によってオンボードソフトウェアRAIDのドライバを用いないとCentOS7は入れられない。
RX1330M3で使ったドライバはmegasr2だったが、これではインストールできず
http://azby.fmworld.net/app/customer/driversearch/ia/drviadownload?driverNumber=F1019699
ここからダウンロードできるmegasrが必要であった。

以下MacRAIDドライバディスクを用意する場合

$ diskutil list

USBメモリのデバイス名を確認し、

$ diskutil unmountDisk /dev/diskxx

というふうにアンマウントする。
そのうえでダウンロードしたドライバをUSBメモリ

$ dd if=megasr-16.01.2014.0318.4fts-16.el7.5-000.x86_64.iso of=/dev/rdiskxx

というふうにddで書き込む


以下インストール手順(結構ハマった)
まずはLCI MegaRAIDの設定を行っておく。
電源スイッチを入れるとしばらくしてMegaRAIDがHDDを認識する画面が出るのでctl+Mで設定に入る。
VirtualDiskの設定をマニュアルに従って実施する。
http://jp.fujitsu.com/platform/server/primergy/manual/peripdf/b7fy-2551-01.pdf



インストールDVDをドライブに入れて起動
インストールを選択する画面ですかさずescキーを押す
プロンプトに
>linux dd modprobe.blacklist=ahci
と入力
USBメディアを読み込むためrを押す
USBメディアの番号を入力
ドライバファイルの番号を入力
読み込むためcを押す
一つ前のメディア選択に戻るのでcを押す
インストーラが起動するので言語選択→諸々選択してインストールを実施する。
ドライバが上手くあたってないとディスクが選択できないのでやり直し。

bwaでtranscript.faにマッピングしたあとcufflinksで解析するには

bwaを使ってRNAseqのリードをtranscript.faをリファレンスとしてマッピング、出来上がったBAMファイルからcufflinksでFPKMを得ようとしたが、gtfファイルが無いので、FPKMを計算すると、マッピング領域のゆらぎを反映して1つのtranscriptの中にいくつかのlocusを勝手に想定してFPKMが計算されてしまうということがおこる。

これを防いでtranscriptごとにFPKMを計算させるにはやはりgtfファイルを用意するしかなさそうだ。
入り口はtranscripts.faファイル。
まずは

$ samtools faidx transcripts.fa

fastaのindexを作成する。
transcriptsのfastaなのでヘッダ行にtranscript名、次の行に配列、となっているのでidxファイルは
transcript名 配列の長さ 配列の改行数
という形になっているので、これをgtfのフォーマットに合わせてawkで整形してやる。

$ awk '{print $1 "\tmarker\tCDS\t1\t" $2 "\t.\t+\t.\ttranscript_id \"" $1 "\"; gene_id \"" $1 "\";"}' transcripts.fa.fai > transcripts.gtf

gene_id, transcript_idをどちらもヘッダ行の内容にしておく。
出来上がったgtfファイルを用いてcufflinksを実行する。

Retro Pieをインストールする

PS2を持っているのだがDVDドライブが認識しなくなって、使えなくなってしまった。いくつかお気に入りだったり、攻略しきれていないものがあったりするのだが、どうにもならんなーと思っていたら、PS2までRaspberry Piでエミュレートできているらしいとの情報を得た。結局ラズパイの使いみちもゲームくらいなんだろうな。
すでに運用しているRaspbian jessieに追加インストールという手もあるが、別のSDを用意して差し替えて使うというのもいいかな。

ということで、インストールをこころみる。
https://retropie.org.uk
ここからイメージをダウンロードする。現時点でv4.4らしい。
.gzで圧縮されているので解凍し、ddコマンドでSDカードに焼き込む。

$ diskutil list

でSDカードが

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *31.7 GB    disk2
   1:                  Apple_HFS NO NAME                 31.7 GB    disk2s1

このように認識されていたので

$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful
$ sudo dd bs=1m if=/Users/kuro/Desktop/retropie-4.4-rpi2_rpi3.img of=/dev/disk2
2305+0 records in
2305+0 records out
2416967680 bytes transferred in 1398.879308 secs (1727789 bytes/sec)

インストールはこれでいい。
次はゲームパッドの設定

クラスタサーバ拡張計画

ここまでで
ヘッドノード(兼計算ノード0):PRIMERGY RX1330 M3 (Xeon E3-1220v6/64GB/2TB*2)
計算ノード1:PRIMERGY RX200 S6 (Xeon E5630*2/26GB/146GB*2)
計算ノード2:PRIMERGY RX200 S6 (Xeon E5630*2/26GB/146GB*3)
Network HDD:Terastation (3TB*4)
という構成でクラスタサーバを構築できた。
計算ノード0は最新CPUだが、構成的にはエントリーサーバ、計算ノード1,2は4世代前のCPUだが構成的にはミドルクラスサーバという感じで、実際に8スレッドでRNAseqのデータをトリミングーマッピングー発現解析まで実施してみると、どちらのノードでもだいたい同じくらいの時間で処理が完了しているっぽい。(処理内容にもよるかもしれないが、若干ノード0が速いか)

案外うまく構築できたので、気を良くして更に拡張してやろうかという気になってきた。
実際のところ、現在ハンドリングしているデータ量なら、今回構築したサーバでも1実験あたりのデータ処理が1日に収まるレベルであるため、此処から先は趣味の範疇になりそうだが。

その上で、拡張するならどういう構成がいいだろうか。

案1 計算ノード1,2と同等のサーバをガツンと増やす。
概要:CPUの世代がちょっと古く、クロックスピードがあまり高くないが、とにかく安い。
費用:サーバ本体1ノード2,500円(安!)ただし、大抵の場合1CPU構成でE5503(2core/2thread)なので、CPUをE5630あたり*2で1,000円位+追加ヒートシンク1,000円位+メモリCPUあたり12GBで2,000円位=合計6,500円位+送料合計3,500円位なので総計1万円/ノード
という感じ。

案2 RX100S7世代のサーバをぼちぼち増やす。
概要:CPUが1世代新しくなるが、エントリークラスになる。
費用:サーバ本体1ノード1,000円(安!)ただしPentium G620クラスCPU搭載なのでX3440あたりが1,000円程度+メモリ2G*4 1,000円位で総計3,000円+送料合計3,000円なので総計6,000円

CPUあたりの費用としてはあまり変わらないわけだが。

クラスタ内においたTerastationにクラスタ外のMacからAFPで接続する

まずはTerastationの設定。
これまでのところNFS以外はすべて切っていたが、Macから接続するならAFPが便利なのでAFPをオンにする。
WEBブラウザterastationに接続し、ファイル共有設定画面でAFPのスライドスイッチを1にしておく。

次にヘッドノードのポート開放とポートフォワーディング
AFPはport548を使用するようなので

# firewall-cmd --add-port=548/tcp --zone=internal --permanent
SUCCESS
# firewall-cmd --add-port=548/tcp --zone=external --permanent
SUCCESS
# firewall-cmd --reload
SUCCESS

とポートを貫通させておく。
次にヘッドノードに届いたAFPリクエストをクラスタ側のterastation(192.168.1.10)にフォワーディング

# firewall-cmd --zone=external --add-forward-port=port=548:proto=tcp:toport=548:toaddr=192.168.1.10 --permanent
SUCCESS
# firewall-cmd --reload
SUCCESS

これでOK
サーバもルータ配下にあるためセキュリティは甘め。

# firewall-cmd --list-all --zone=external
external (active)
  target: default
  icmp-block-inversion: no
  interfaces: eno1
  sources: 
  services: ssh dhcpv6-client http vnc-server
  ports: 5000/tcp 548/tcp
  protocols: 
  masquerade: yes
  forward-ports: port=548:proto=tcp:toport=548:toaddr=192.168.1.10
  source-ports: 
  icmp-blocks: 
  rich rules: 

Macからは
Finder>移動>サーバへ接続...

afp://(ヘッドノードのIPアドレス

とするとユーザ/パスワードの画面が開くのでterastationに設定したユーザを入れて接続

ただし、ルータの外からはフォワーディングを設定していないので接続不可。
ルータ外からはVNCでヘッドノードに接続しての作業に限定しておく。

いっそのこと普段作業しているMacに常時terastationおよびヘッドノードの/homeをマウントしておいて、データは常にそこにおいておくというのも手ではあるが、Macーサーバ間のネットワークが貧弱すぎてちょっと躊躇するのね。やっぱりサーバ〜ルータ間に光ケーブル敷設するかなあ。

XEON覚書

富士通 PRIMERGY RX200S6 xeon E56xx (Nehalem もしくはWestmere)
同世代のNEC→Expres5800/R120a-1 xeon E55xx, Expres5800/R120b-1 xeon E55xx, E56xx

富士通 PRIMERGY RX200S7 xeon E5-26xx (Sandy Bridge)
同世代のNEC→Expres5800/R120d-1 xeon E5-24xx, Expres5800/R120e-1 xeon E5-24xx,Expres5800/R120f-1 xeon E5-26xx