siloを設置するにあたって...

siloは使用するTEM、プログラム、プロジェクト名(GRID名)、スクエア名を定義すると
保存先フォルダが用意されます。そのフォルダに電顕装置からのファイルが送られるように調整して下さい。
siloはその保存先フォルダをずっと監視して、画像ファイルが運び込まれたら、プログラムが
稼働するようになっております。
2018y09m02d_220043661.png

基本webアプリケーションで、結構bash scriptを駆使してます。
またhttpdを稼働しているapacheがログインユーザに「su」して、プログラムを稼働することもしてます。

下準備

phpが必要です。こちらではphp7.2を使ってますが、 CentOS7で提供のphp-5.4.xでも動きます。

[root@silo ~]# yum install httpd php php-json php-gd php-process php-mbstring samba

それと pbspro を使っていますので、別途ジョブ管理システムを構築する必要があります。
*Torqueでも稼働するかと思いますが、確認していないです

siloで実行されるプログラムを用意します

/apps/relion-3.0.8/bin/{relion_run_motioncorr_mpi,relion_run_ctffind_mpi,relion_run_ctffind}
/apps/MotionCor2/MotionCor2_v1.3.1-Cuda102
/apps/Gctf/bin/Gctf-v1.06_sm_30_cu8.0_x86_64
/apps/ctffind-4.1.14/ctffind

ADユーザ認証

webアプリケーションはkrbrosの認証を使ってます。
詳細はsamba/SSO/httpを参照下さい
なので、httpdからkerberosを参照するために「mod_auth_kerb」モジュールのインストールを行います

[root@silo ~]# yum install httpd mod_auth_kerb

「mod_auth_kerb」を利用するために参照する「/etc/krb5.keytab」にはhttpプリンシパルが必要です。
samba-ADにて該当マシンにhttpプリンシパルを追加して、krb5.keytabを作り直します

その後httpのapacheから krb5.keytab へのアクセスを担保するために setfacl で定義を行う

[root@silo ~]# ssh ad
 
[root@ad ~]# samba-tool spn add HTTP/silo.sybyl.local silo$
[root@ad ~]# exit
 
[root@silo ~]# rm -rf /etc/krb5.keytab
[root@silo ~]# net ads keytab create -Uadministrator
 
[root@silo ~]# klist -ke
   2 host/silo.sybyl.local@SYBYL.LOCAL (des-cbc-crc)
   2 host/SILO@SYBYL.LOCAL (des-cbc-crc)
       :
       :
   2 http/silo.sybyl.local@SYBYL.LOCAL (des-cbc-crc)
   2 http/SILO@SYBYL.LOCAL (des-cbc-crc)
       :
   2 SILO$@SYBYL.LOCAL (des-cbc-crc)
 
[root@silo ~]# cd /etc
[root@silo etc]# setfacl -m user:apache:r krb5.keytab

apache 設定

/tmpに一時ファイルを作るので「/lib/systemd/system/httpd.service」を修正します
本来なら「/lib/systemd/system/httpd.service」を「/etc/systemd/system/」へコピーしてから修正すべきみたい

[root@c ~]# vi /lib/systemd/system/httpd.service
 :
 :
PrivateTmp=false        <-- 「true」から「false」へします。
 
[Install]
WantedBy=multi-user.target
 
[root@c ~]# systemctl reload httpd.service

アプリケーションは <host>/auto で展開されるようにするので
「/etc/httpd/conf.d/auto.conf」を下記のように作成します。

Alias /auto /var/www/auto
<Directory /var/www/auto >
    AuthType Kerberos
    AuthName "auto capture system login"
    KrbMethodNegotiate On
    KrbMethodK5Passwd  On
    KrbAuthRealms      SYBYL.LOCAL
    KrbServiceName     http/xxx.xx.local
    Krb5KeyTab         /etc/krb5.keytab
    require            valid-user
 
    DirectoryIndex index.php index.html
    Options -Indexes
    AllowOverride all
    order deny,allow
    deny from all
    allow from all
</Directory>

次に、apache httpdの環境変数に下記を加えます。修正したらhttpdを再起動します。

[root@c auto]# vi /etc/sysconfig/httpd
LANG=C
PYTHONPATH=/Appl/eman2.12/lib:/Appl/eman2.12/bin
EMAN2DIR=/Appl/eman2.12
 
[root@c auto]# systemctl restart httpd.service

*apacheユーザでプログラムを起動しますが、/etc/passwdのシェル指定はそのまま「/sbin/nologin」で構いません

[root@c ~]# grep apache /etc/passwd
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@c ~]#

sudoers

apacheユーザが「su」を駆使して、ログインユーザに成り代わりファイルを作成、実行を行います。
なので「/etc/sudoers」を調整します。

[root@c ~]# visudo
 :
Defaults:apache  !requiretty
 :
Defaults:apache env_keep += "EMAN2DIR PYTHONPATH"
 :
apache  ALL=(%em)  NOPASSWD:/usr/bin/mkdir,/bin/touch,/bin/chmod,/var/www/auto/inotify,/bin/rm,/bin/kill,
/usr/bin/rsh,/opt/pbs/bin/qsub,/Appl/eman2.12/bin/e2proc2d.py   (改行してますが、本来は1行です)

visudoでの変更箇所で、ALL=(%em)としているが、silo利用ユーザがグループ名「em」に所属していることが必要です。
ただしプライマリグループである必要はありません。idコマンドで表示されるgroupsに含まれていればOKです。

[root@c ~]# id saber
uid=1003(saber) gid=2000(fate) groups=2000(fate),3000(domain users),3001(em)
[root@c ~]#

samba

データ保存場所を共有フォルダとして公開します.
ここでは /data を公開しています。加えて、書き込まれたファイルはすべて nobody:em な所有になります。
*セキュアを考慮すれば、force user/groupを撤廃して /data/<ユーザ> を事前に作って「chmod 700」が好ましいのかもしれないけど、、

[root@c ~]# less /etc/samba/smb.conf
 :
[data]
  comment = data
  path = /data
  writable = yes
  create mask = 0664
  directory mask = 0775
  force user = nobody
  force group = em
 :
[root@c ~]#

*他、ad接続とかもありますが、それはsambaらを参照してください

ACL

データ保存場所/dataにACLを付与します。

[root@c ~]# mkdir /data
[root@c ~]# setfacl -Rdm user:apache:rwx /data

各ユーザのフォルダを用意します

[root@c ~]# mkdir /data/illya
[root@c ~]# chown illya:em /data/illya

データ保存場所の仕様

webアプリを設定して、逐次処理を開始するわけですが、電顕から送られてくるファイルの場所は
下記のようにして下さい。

movieファイルは下記場所に配置する
/data?/<ユーザ名>/<TEM>/<software>/data/<YYMMDD>/<grid name>/movie_frames/<square name>/
 
 data?:  /data1とか/data2とか
 <ユーザ名>    : webアクセスの際、認証できたユーザ名
 <TEM>         : 電顕装置の名称
 <software>    : 使ったソフトウエア名
 <YYMMDD>      : 日付
 <grid name>   : サンプル名とか試料Grid名
 <square name> : square name

上記の変数はwebアプリケーションで定義します。

プログラム稼働場所

基本ACLが聞いた場所に置いてください。大抵は「/data?/<ユーザ名>/Progress/<grid name>/」とかでも可能で
webアプリでユーザ側で決めることが出来ます。

パーミッション

下記ファイルのパーミッションには実行権を設ける

/var/www/auto/inotify
/var/www/auto/inotify.sh

cifs mount

カメラ制御PCに保存される電顕イメージデータにアクセスするために cifs でマウントします
その際にカメラ制御PC側にアクセス可能なアカウント「k2」を用意してそのパスワードを cifscredentials ファイルに記載する

[root@c ~]# cat /var/www/auto/cifscredentials
username=k2
password=xxxxxxxxxxxxxxxxxxxxxxxxx
domain=sybyl
 
[root@c ~]# chmod 600 /var/www/auto/cifscredentials
[root@c ~]# setfacl -m user:apache:r /var/www/auto/cifscredentials     <-- apacheのみアクセス可能にする

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2020-06-23 (火) 09:04:16 (13d)