2015年12月19日土曜日

いよいよ卒論発表会がやってきました

今日の卒論発表会はこれまでの練習のどれよりも素晴らしい出来でした.今日のこの日のために発表者は1週間にわたって50回は練習してきました.それが功を奏して,とても素晴らしいプレゼンテーションになりました.この日,卒論を発表した16グループ(個人)の中で唯一原稿を読むことなく発表しました.大したものです.






ただし,発表が終わってからの質問には答えられませんでした.質問内容は「実証実験する際に患者にどのようにインフォームドコンセントをして,どのようにして同意を得るか」という質問です.実証実験は今回の研究の範囲外なのでそこを質問されても答えようがないのですが・・・.しかし,想定していなかったのはまずかったかな.
卒論発表会の動画はここをクリックすれば見ることができます.

2015年12月18日金曜日

卒論発表会・最後の練習

いよいよ明日は卒論発表会.今日は最後の練習です.本番の発表会が行われる教室を借りて練習を行いました.バッチリです.明日はきっとうまくいくでしょう.


リハーサルの動画はここをクリックしてください.

2015年12月17日木曜日

いよいよ卒論の発表会が目前に迫りました

しばらくブログが更新されていませんでした.卒論に追われ,発表会の準備で今日まで慌ただしく過ぎてしまったからです.しかし,いよいよ明後日は卒論発表会です.先週の金曜日から始まった練習は,ほぼ毎日のようにやっています.発表者も次第に慣れてきて,この分だといい発表ができるのではと期待しています.
さて,このあたりでこの卒業研究の成果をまとめておかねばなりません.まず,卒論は,全員が一致協力して研究を行ったので,一つにまとめました.そして,担当執筆者は目次と各見出しに記載しました.また,卒論以外に dcm4chee のインストールマニュアルを日本語で作成しました.これは,今後 dcm4chee を使いたいと考えている人々のお役に立てばと公開したものです.
卒論及び発表用スライドについては右のメニューから「卒業研究」を,インストールマニュアルについては「dcm4chee」を選んでください.

2015年10月29日木曜日

画像転送速度の測定

今日は,以下の作業を行う.
  1. スマホにPACSビューアをインストールしてPACSサーバに接続して画像を検索&DLする.
  2. 画像転送速度を計測する
Android用のPACSビューア(ネットワーク対応)が見つからなかったのでiOviyam2で対応することとした.スマホのブラウザから http://192.168.11.251:8080/iOviyam2/ でログインする.まあまあ使える.遅いけど.

2015年10月22日木曜日

スマホで撮影した画像をPACSサーバへ格納する処理を完成させる

スマホで撮影した画像をPACSサーバへ格納する処理を下記の図で示す。
スマホで撮影した画像ファイルはスマホのファイラーを使って診療所に設置したファイルサーバの所定のディレクトリ内(下図)に保存する(今回のプロトタイプシステムではファイルサーバはPACSサーバと同じマシンで稼働している)。

ファイルサーバの/shareディレクトリ内にはbin/ディレクトリconfig/ディレクトリ、そしてpatients/ディレクトリがある。bin/ディレクトリ内には各種スクリプトファイルが入っている。スマホで撮影した画像をPACSサーバへ格納する処理をスクリプトにしたものもここに入れてある。config/ディレクトリには、JPG形式ファイルをDICOM形式ファイルに変換するコマンドjpg2dcmで指定する設定ファイルのひな形(jpg2dcm.cfg)が入っている。これを元にして各患者ごとの設定ファイルを作成してpatients/ディレクトリ内にある患者ディレクトリに入れておく。なお、この設定ファイルには、患者の番号、氏名、生年月日、性別などの情報が入っている(下図)。




図下の設定ファイルの編集スクリプトは、設定ファイルに検査日時などの検査情報を追加するスクリプトである。転送の都度、このスクリプトを実行して検査情報を付加することにより、PACSビューアから参照可能となる。

patients/ディレクトリは患者の情報を保存するディレクトリで、この中に患者番号をディレクトリ名とするディレクトリを作成し、その中にJPGファイル、設定ファイル(ファイル名は"患者番号.cfg"とする)、そしてDICOMファイルが保存される。そして、JPG画像をPACSサーバへ転送するシェルスクリプトが1分おきに実行され、患者ディレクトリに蓄積されたJPGファイルがDICOMファイルに変換されPACSサーバへ転送される。その処理の流れを下図に示す。
 この処理をシェルスクリプトにしたものを下記に示す。
この例は、患者番号がw3412019の場合の例である。実際は、/share/patients/ディレクトリをスキャンして患者ディレクトリを求め、その各々に対して上記のスクリプトを実行することになる。

2015年10月15日木曜日

スマホで撮影した画像をPACSサーバへ転送する

次に,スマホで撮影した画像をPACSに取り込む機能を作る.手順は以下の通りである.
  • スマホにネットワーク(SMB)対応のファイラーをインストールする
    • スマホでVPN(L2TP)経由でファイルサーバに接続して,サーバ上の共有フォルダにアクセスする
  • スマホで撮影した画像ファイルをファイルサーバに共有フォルダ(/share)に保存
    • このとき患者・日付単位にフォルダを作って画像を整理する
  • 画像をPACSサーバへ転送
    • 画像の転送にはdcmsndを使用.dcmsndは/usr/local/dcm4che/binの中にある.使用方法はdcm4cheeのマニュアルの「16. Test DICOM storage:」を参照
  • 画像転送スクリプトをスケジュール 
    • 上記画像転送をスクリプト化してcrondを使ってスケジュールする

2015年10月8日木曜日

PACSサーバ移設作業

前回,VPNサーバをFTTHへ移設し,インターネットへの直接接続を果たした.今回はその続きで,以下の作業を行う.
  • PACSサーバを移設
    • このときIPアドレスを変更する(変更にはsetupコマンドを使う)
    • dcm4cheeは最新版であるv18.1を使用(リンクの張替えが必要)
  • PACSビューアによる接続確認
    • PCからPACSサーバへVPN接続
    • PACSビューアから画像を参照

2015年10月1日木曜日

新学期がはじまりました

今日は新学期になって最初のゼミです.夏休み前にPACSサーバが完成した(はず)なので,秋学期からはいよいよPACSサーバをインターネットに公開する作業に着手します.

VPNサーバを移設

これまで学内LANに置いていたVPNサーバをインターネット上に公開します.そのために行った作業は以下の通りです.
  • IPアドレスの変更
    • /etc/NetworkManager/system-connections/Wired connection 1をviで開いてIPアドレスなどを修正
  • ファイアウォールの設定
    •  /etc/network/if-pre-up.d内に起動スクリプトiptables_startを入れておく(このフォルダ内に入れたスクリプトはネットワーク起動前に実行される)
  • ブロードバンドルータのDMZの設定の変更
    • セキュリティ設定でDMZのIPアドレスをVPNサーバのIPアドレスに変更する
  • VPNサーバ管理マネージャでVPNサーバを設定
    • VPNサーバと同じネットワーク内にPCを接続し,そこにサーバ管理マネージャーをインストールし,IPアドレスを指定して新しい接続を作成する.ただし,既に学内LAN上でVPNサーバの設定をしていたので,その設定内容がそのまま使えた.
  • スマホからVPNサーバに接続
    • スマホのVPN設定をしてVPN接続を行った.

2015年7月21日火曜日

Oviyam2のインストール

これまでPACSサーバ(dcm4chee)のインストールとDicomビューア(weasis)をインストールしてきましたが,今回はもう一つ他のDicomビューアであるOviyam2をインストールします.Oviyamは,WebベースのDICOMビューアで,標準とDICOMプロトコルを使って患者一覧を取得し,特定のシリーズやスタディを検索してJPEG形式でブラウザに表示できます.Oviyamはdcm4cheeはもちろんのこと,WADOをサポートしているDICOMサーバであればどのようなPACSサーバとも連携できます.
Oviyamは,JBoss上で動くJavaアプリケーションなので,warファイル(oviyam2.war)をdeployディレクトリへコピーするだけでインストールは完了です.Oviyamは下記URLからダウンロードできます.現時点での最新バージョンは2.1です.
http://sourceforge.net/projects/dcm4che/files/Oviyam/
Oviyamへは下記URLでアクセスします.
http://172.16.108.100:8080/oviyam2/
weasisがインストールされ,動いていれば,特に問題なくインストールできるでしょう.なお,最初に上記URLへアクセスしたとき,連携するPACSサーバの設定が必要になります.設定内容についてはインストールマニュアルに従って行うだけです.

2015年7月15日水曜日

スケジュールが押し気味なので作り直しました

PACSサーバのインストールに手間取り,スケジュールが押し気味なので,スケジュールを作り直しました.
今度は,卒論提出までのスケジュールを組みました.とにかく,夏休みに入る前にはサーバの構築を終え,夏休み期間中にマニュアルの作成を行い,夏休みが明けたら構築したシステムのテストを実施します.そして,実際の現場で運用評価を行い,その文書化を経ていよいよ卒論の執筆です.予定よりも1か月ずれ込みました.そのため,卒論に割ける時間が約1か月と短縮しました.もう,後がありません.気を引き締めてやっていきましょう.

2015年7月10日金曜日

やはりバージョンごとにデータベースは分けることにする

今回のエラーの原因は,データベースのバージョンによる不整合だった.やはり,ここはバージョンごとにデータベースを分かることにする.その方が余計なトラブルに巻き込まれずに済む.バージョンアップによるデータベースの移行についてはまた必要なときに考えることとしよう.
そこで,ここにdcm4cheeのバージョンごとにデータベースを分かる方法についてまとめておく.まず,データベース名は以下のとおりとする.
PACS用データベース:pacsdbXXXX
ARR用データベース:arrdbXXXX
ここで,XXXXはdcm4cheeのバージョンである.たとえば,dcm4chee-2.17.1-mysqlならばXXXX=2171とする.以下は,バージョン2.17.1を例にして説明する.

データベースの作成方法

データベースpacsdb2171の作成

$ mysql -uroot -p
mysql> create database pacsdb2171;
mysql> grant all on pacsdb2171.* to 'pacs'@'localhost' identified by 'pacs';
mysql> \q
# cd /usr/local/app/dcm4chee-2.17.1-mysql/sql
# mysql -upacs -ppacs pacsdb2171 < create.mysql

データベースarrdb2171の作成

$ mysql -uroot -p
mysql> create database arrdb2171;
mysql> grant all on arrdb2171.* to 'arr'@'localhost' identified by 'arr';
mysql> \q

$ cd [dcm4chee-arr-mysql.ddlがあるディレクトリ]
$ mysql -uarr -parr arrdb2171 < dcm4chee-arr-mysql.ddl

※arrdb2171は初回起動時に自動的に作成されるので最後の2行はなくても良い.

設定ファイルの変更

JBossの設定ファイルで接続するデータベース名を指定しているので,そこを変更する.

修正するファイル:/usr/local/app/dcm4chee-2.17.1-mysql/server/default/deploy/pacs-mysql-ds.xml

<datasources>
  <local-tx-datasource>
    <jndi-name>pacsDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/pacsdb2171</connection-url>

修正するファイル:/usr/local/app/dcm4chee-2.17.1-mysql/server/default/deploy/arr-mysql-ds.xml

<datasources>
  <local-tx-datasource>
    <jndi-name>arrDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/arrdb2171</connection-url>

画像格納ディレクトリを削除する

# rm -rf /usr/local/app/dcm4chee-2.17.1-mysql/server/default/archive

DICOM画像をPACSサーバへ転送する


# /usr/local/dcm4che/bin/dcmsnd DCM4CHEE@localhost:11112 /home/w3412042/OSIRIS

dcm4cheeのディレクトリ階層構造



2015年7月9日木曜日

dcm4chee-2.18.Xのデータベースpacsdbは2.17.Xのものとは違うらしい

昨日のゼミで原因がわからなかった以下のエラーについて,やっと原因が判明した.

2015-07-08 14:41:52,997 INFO  -> (main) [org.jboss.deployment.EARDeployer] Started J2EE application: file:/usr/local/app/dcm4chee-2.18.0-mysql/server/default/deploy/dcm4chee-web-ear-3.0.4-mysql.ear
2015-07-08 14:41:52,998 ERROR -> (main) [org.jboss.deployment.scanner.URLDeploymentScanner] Incomplete Deployment listing:

--- Incompletely deployed packages ---
org.jboss.deployment.DeploymentInfo@cd286966 { url=file:/usr/local/app/dcm4chee-2.18.0-mysql/server/default/deploy/dcm4chee-wado-service.xml }
  deployer: org.jboss.deployment.SARDeployer@3adc2c8
  status: Deployment FAILED reason: - nested throwable: (java.lang.reflect.InvocationTargetException)
  state: FAILED
  watch: file:/usr/local/app/dcm4chee-2.18.0-mysql/server/default/deploy/dcm4chee-wado-service.xml
  altDD: null
  lastDeployed: 1436334099282
  lastModified: 1436334099000
  mbeans:

--- MBeans waiting for other MBeans ---
ObjectName: persistence.units:ear=dcm4chee-web-ear-3.0.4-mysql.ear,unitName=dcm4chee-arc
  State: FAILED
  Reason: javax.persistence.PersistenceException: org.hibernate.HibernateException: Missing table: published_study
ここで,最後のメッセージに注目していただきたい.「Missing table: published_study」とある.そう,テーブルpublished_studyがないということだ.我々は2.17.1をインストールして動作を確認後,データベースをそのままにしてシステムだけバージョン2.18.1に上げようとしていた.しかし,2.17.Xと2.18.Xではデータベースpacsdbの構造が違うのだ.少なくとも2.17.Xにはpublished_studyという名のテーブルなどない.これは,実際に確認済みである.また,/sql/create.mysqlにpacsdbを作るSQL(というかDDL)があるが,その中身を比較したところ,確かに2.17.1にはなかったpublished_studyのcreate table文が2.18.1にはあった.
そこで,いったんpacsdbを削除し,再度作り直すとエラーは消えた.
$ mysql -uroot -p
mysql> create database pacsdb;
mysql> grant all on pacsdb.* to 'pacs'@'localhost' identified by 'pacs';
mysql> \q
# cd /usr/local/app/dcm4chee-2.18.1-mysql/sql
# mysql -upacs -ppacs pacsdb < create.mysql
それだけのことだった.そのそれだけのことでこれだけハマってしまった.データベースは作り直さなくてもよいはずだという固定観念が今回のトラブルを呼んだようだ.しかし,本番のデータベースの場合,移行する方法はあるのだろうか.今回はテストだからいったん削除して再度作り直したけれども・・・.
さらに,2.17.Xと2.18.Xを併存させるには一体どうすればよいのだろうか?まさか,データベースを別々に持つ?そんな馬鹿な・・・.

2015年7月8日水曜日

dcm4cheeバージョンアップで出た問題

dcm4chee-2.18.0-mysql

dcm4cheeを2.17.1から2.18.0へバージョンアップした.その結果,次のようなエラーが出た.
2015-07-01 23:57:20,880 ERROR -> (main) [org.jboss.deployment.MainDeployer] Could not create deployment: file:/usr/local/app/dcm4chee-2.18.0-mysql/server/default/deploy/dcm4chee-wado-service.xml
2015-07-01 23:57:31,511 ERROR -> (main) [org.jboss.deployment.scanner.URLDeploymentScanner] Incomplete Deployment listing:
2015-07-01 23:57:39,662 WARN  -> (http-0.0.0.0-8080-4) [org.dcm4chee.web.common.license.ae.AELicenseProviderManager] No AELicenseProvider found for name: null
2015-07-01 23:57:39,748 ERROR -> (http-0.0.0.0-8080-4) [org.dcm4chee.web.common.secure.SecureTab] Can't instantiate Panel for panel
このうち,最初のエラーはJAI image IO libraryの問題で,dcm4cheeにバンドルされている32bit版を64bit版に変えればよい.しかし,現時点で64bit版がダウンロードできなくなっている.そこで,以前ダウンロードして保存していたjai_imageio-1_1-lib-linux-amd64.tar.gzを使うことで解決できる.
2番目のエラーはpacsdbのスキーマが2.17.Xから2.18.Xにバージョンアップしたときに変更しているために生じたエラーである.今回,2.17.1で作成したデータベースをそのまま使用していたためこのエラーが起きた.本来であればpacsdbは作り直さなければならなかったのである.
問題は最後のエラーである.このエラーメッセージで検索したところ,次のようなページが見つかった.
http://stackoverflow.com/questions/29752448/dcm4chee-linux-oracle-installation
これによれば, マニュアルのステップ5,特にdeploy/arr-xxx-ds.xmlファイルの編集についての部分に従えと書いてある.そこで,検索してみると「the Audit Record Repositoryのインストール方法」というのが見つかった.これによれば,
dcm4cheeのバージョンによって対応するarrのファイルが異なります。2.17.3からはarrのバージョンは3.0.12になります。2.17.2では3.0.11です。
ということであった.したがって,マニュアルのステップ5をdcm4chee-arr-3.0.12を使ってやり直す必要がある.このとき,以下の修正を$DCM4CHEE_HOME/bin/install_arr.shに対して行ってやる必要がある.
  • VERS=3.0.11 → VERS=3.0.12
  • dcm4che-core-2.0.25.jar → dcm4che-core-2.0.27.jar

ログを見る習慣

システムのデバッグにはログは必須である.エラーが発生してもログを見なければ何もわからない.ログを見ても分からないことは多いが,しかし,頼りはログだけである.だからログを見る習慣を身につけることが問題解決のためには最も重要になる.dcm4cheeのログ以下のファイルである.
$DCM4CHEE_HOME/server/default/log/server.log
ログを見る最良の方法は,ログ専用のコンソールを一つ準備し(といってもTeratermを1つ起動するだけだが),そこに以下のコマンドを入力する.
tail -f  $DCM4CHEE_HOME/server/default/log/server.log
ここで,tailコマンドは指定したファイルの最後の何行かを画面に表示するコマンドで,-f はファイルの内容を常に監視し,表示を更新するオプションである.




2015年6月30日火曜日

dcm4cheeの新バージョンをインストール

今回インストールしたdcm4cheeのバージョンは2.17.1ですが,それ以外にも新しいバージョンとして2.17.2,2.17.3,2.18.0,2.18.1が公開されている.
http://sourceforge.net/projects/dcm4che/files/dcm4chee/
そこで,各バージョンを下記のディレクトリ階層に従ってインストールして,インストール手順の違いをドキュメントにまとめる.





ただし,同時に/usr/local/dcm4chee/へシンボリックリンクを張ることはできないので,インストールが完了したバージョンから順番にシンボリックリンクを張り,テストを行う.

問題点

バージョンアップで問題が発生した.WADOサービスが起動できないという問題で,これはdcm4cheeにバンドルされているJAI image IO libraryが32bit版であることに起因するもので,64bit版を下記のサイトからダウンロードして置き換える必要があるというものだった.

http://download.java.net/media/jai-imageio/builds/release/1.1/jai_imageio-1_1-lib-linux-amd64.tar.gz
ところが,このリンクがデッドリンクになっていたため,ダウンロードできない.前回(6/24)やったときは確かにあったのに,あれから1週間でリンク先がなくなっている.これはいったいどういうことだろう?

幸い,先週ダウンロードしたのが残っていたので,それをGoogleドライブのPACSフォルダ内にあるSoftwareフォルダに保存しておいた.必要なときはこれを使うことにする(しかし,64bit版のOSにインストールする人は困るだろうな・・・.それとも,dcm4cheeの新しいバージョンは64bit版のJAI
をバンドルしているのだろうか?あるいは最新のJDKにはJAIあるいはそれに代わるライブラリがあるのだろうか?この辺りについての情報収集が必要だ).

2015年6月24日水曜日

エラーを修正し、インストール作業を続行する

前回のエラーについては詳細に記述したので、それに従って修正を行います。dcm4cheeが正しく作動するようになったら、今度はサービスとして実行するように設定します。サービスとして設定する理由は、今のままだとdcm4cheeを起動するためにシステムにログインして起動コマンドを入力しなければならないからです。さらに、ログアウトすると同時にdcm4cheeも終了してしまいます。これでは、サーバとして使えません。ですから、サーバが再起動しても自動的にdcm4cheeが起動されるようにサービスとして起動するように設定するのです。Linuxでは、サービスのことをデーモンと呼びます。

18. Install as a service:

さあ、では、マニュアルの”18. Install as a service:”に従って設定を行います。とは言っても、このマニュアルに書いてあるのはたったこれだけです。
copy the init script dcm4chee_init_redhat.sh to /etc/init.d/ and adjust it according your installation location of the archive and the JDK and under which user the archive application shall run.
これでは、正直何をしていいのかわかりませんので、ここで詳細に説明します。
まず、起動スクリプト$DCM4CHEE/bin/dcm4chee_init_redhat.shを/etc/init.d/へコピーします。
# cp $DCM4CHEE/bin/dcm4chee_init_redhat.sh /etc/init.d/
次に、この起動スクリプトを環境に合わせて編集します。起動スクリプトファイルをviエディタで開くと、次のような記述が24行目あたりにあります 。
#define the user under which jboss will run, or use 'RUNASIS' to run as the current user
JBOSS_USER=${JBOSS_USER:-"pacs"}

#make sure java is in your path
JAVAPTH=${JAVAPTH:-"/usr/java/jdk/bin"}
まず、JBossがどのユーザ権限で実行するかを指定する環境変数がJBOSS_USERです。ここでは、RUNASISを指定して現在のユーザで実行することにします。
 次に、JAVAPTHですが、これはJAVAのbinディレクトリを指定する環境変数なので、$JAVA_HOME/binを指定することにします。編集が終わったら保存し、次のようにしてシンボリックリンクを作成します。
# ln -s dcm4chee_init_redhat.sh dcm4chee
これは、起動スクリプトの名前が長いので簡潔にするための作業です。次に、作成したシンボリックリンクを自動起動させるために次のコマンドを入力します。
# chkconfig --add dcm4chee
# chkconfig dcm4chee on
ここで、chkconfigは、サービス自動起動を設定するコマンドです 。--addオプションでコマンドを追加すると、/etc/rc.d/rc3.d/内にSで始まる起動コマンドが作成されます(実際には/etc/rc.d/init.d/dcm4cheeへのシンボリックリンクです)。次のchkconfig dcm4chee onは、現在のRUNレベル(マルチユーザモード)で再起動時に自動起動する設定です。こうして設定が完了したら、次のコマンドでサービスを起動します。
# service dcm4chee start
 サービスを停止するには、stop、再起動するにはrestartとオプションを入力します。以上でサービスとして起動する設定は終わりです。

完成


これで,PACSサーバの構築が完成しました.早速ブラウザでPACSビューアを起動してみます.URLは以下の通りです.
 http://172.16.108.100:8080/dcm4chee-web3/
しかし,weasisが起動しません.調べてみるとjavaが入っていません.javaが入っているかどうかはコマンドプロンプトで
java -version
とすればわかります.コマンドが認識されなければjavaは入っていません.javaの公式サイトからダウンロードします.
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
javaのダウンロードは複雑です.何をダウンロードすればよいのかわかりにくいです.ここでは,JDKをダウンロードします.JDKとはjavaの開発キットです.weasisを動かすだけならばJRE(javaランタイム)だけでもいいのですが,ここでは開発キットをインストールしました.上記サイトから32bitのOSならWindows x86を,64bitのOSならばWindows x64をダウンロードします.

2015年6月17日水曜日

ERRORのオンパレード

dcm4cheeをインストールして動作テストを行ったが,ERRORのオンパレードで少々混乱気味.ここで,少し整理する.

画像が出ない

dcm4cheeのWebブラウザから画像アイコンをクリックしても画像が表示されない.ログを見ると次のようなエラーがでていた.
23:55:20,286 ERROR [WADOServiceDelegate] Exception occured in getWADOObject: dcm4chee.archive:service=WADOService is not registered.
このエラーを手掛かりに検索したところ,起動時の以下のエラーが原因らしい.
02:13:33,238 ERROR [MainDeployer] Could not create deployment: file:/usr/local/app/dcm4chee-2.17.1-mysql/server/default/deploy/dcm4chee-wado-service.xml
このエラーメッセージを検索すると,下記URLにたどりついた.
http://stackoverflow.com/questions/18673556/install-dcm4chee-on-centos
この中に次のような記述があった.
In short: The problem is WADO service unable to start due to the JAI Image IO library not being properly installed.
ここで,JAI Image IO library画像圧縮関連のライブラリのようで,このバージョンが関係しているらしい.
You should download the 64 bit version of the library for Linux, extract the files and replace just the original (32 bit) ones from those that you downloaded.
この記述によれば32bit版のライブラリを使っていることになっているが,どうしてそんなことになったのだろうか?javaのバージョンは以下のとおりである.
java version "1.7.0_79"
OpenJDK Runtime Environment (rhel-2.5.5.3.el6_6-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)
見てのとおり64bit版だ.では,ライブラリは?そもそもdcm4cheeに32bit版とか64bit版なんてあったか?あるいはJBossには? そんなものはない.では,どうしてJAI image IO libraryが32bit版になったのか?そもそもどうやって確認するのか?
正規のマニュアルでは, dcm4cheeとは別にJAI image IO libraryをインストールしている場合は以下のファイルを消せと書いている.
  • $DCM4CHEE_HOME/server/default/lib/jai_imageio.jar
  • $DCM4CHEE_HOME/server/default/lib/clibwrapper_jiio.jar
  • $DCM4CHEE_HOME/bin/native/clib_jiio.dll
  • $DCM4CHEE_HOME/bin/native/clib_jiio_sse2.dll
  • $DCM4CHEE_HOME/bin/native/clib_jiio_util.dll
  • $DCM4CHEE_HOME/bin/native/libclib_jiio.so
もちろんそんなことをした覚えはない.一方,先述したInstall dcm4chee on CentosではJAI image IO libraryの64bitバージョンをダウンロードして以下のファイルをコピーしろと書いてある.
$ cp clibwrapper_jiio.jar $DCM4CHEE_HOME/server/default/lib
$ cp jai_imageio.jar $DCM4CHEE_HOME/server/default/lib
$ cp libclib_jiio.so $DCM4CHEE_HOME/bin/native
一体どちらに従えば良いのか?
調べていくうちに次第に原因がわかってきた。今回使用しているIntel NCUは64bitであるが、dcm4cheeのマニュアルにこういう記載がある。

  • The binary distribution packages of dcm4chee already includes necessary JARs and native libraries for Windows and Linux i586.
つまり、Linux i586(これはPentium用の32bit)用のnativeライブラリが含まれているということである。そして、次のように書いてある。
  • For Linux-amd64, and Solaris, you have to download the SW package from Sun here yourself and replace the Linux version of libclib_jiio.so in dcm4chee-2.17.1-xxx/bin/native from the JAI Image IO package for Linux-amd64 or Solaris. Or see this post for a more recent version.
Linux-amd64(これが64bitを意味している?Ubuntuの世界ではamd64は64bitを意味しており、IntelでもOKということだが・・・)の場合は、64bit版のlibclib_jiio.soをダウンロードして差し替えなければならないと書いてある。

解決方法

やはり,原因は32bitと62bitの不整合だった.dcm4cheeに含まれているのは32bit版なので,64bit版をDLして差し替える必要がある.DLするのはjai_imageio-1_1-lib-linux-amd64.tar.gz. wgetで取ってきてtarで解凍.その中に下記のファイルがある(2015/7/1時点でデッドリンクになっている).
  • jai_imageio-1_1/lib/jai_imageio.jar
  • jai_imageio-1_1/lib/clibwrapper_jiio.jar
  • jai_imageio-1_1/lib/libclib_jiio.so
このうち,最初の2つは$DCM4CHEE_HOME/server/default/lib/へ,最後のは$DCM4CHEE_HOME/bin/native/へ上書きコピーするだけでよい.$DCM4CHEE_HOME/bin/native/にあるDLLファイルはWindows用だと思われるので削除して構わない.これでWebインターフェースから画像が表示されるようになった.

weasisが動かない

weasisをdeployしたとき,次のエラーメッセージが出る.
23:59:28,507 ERROR [STDERR] SLF4J: Class path contains multiple SLF4J bindings.
これは前にも経験した.前はdcm4cheeを2.17.1から2.17.3あるいは2.18.0にバージョンアップすることによって解決した.しかし,それでは根本的に解決したことにはならないので,少し調べてみた.
http://www.slf4j.org/codes.html#multiple_bindings
ここには次のような説明がある.
SLF4J API is designed to bind with one and only one underlying logging framework at a time. If more than one binding is present on the class path, SLF4J will emit a warning, listing the location of those bindings.
実際,ログには次のようなエラーメッセージが残っている.
  • 16:35:09,486 ERROR [STDERR] SLF4J: Class path contains multiple SLF4J bindings.
  • 16:35:09,486 ERROR [STDERR] SLF4J: Found binding in [jar:file:/usr/local/app/dcm4chee-2.17.1-mysql/server/default/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
  • 16:35:09,486 ERROR [STDERR] SLF4J: Found binding in [jar:file:/usr/local/app/dcm4chee-2.17.1-mysql/server/default/tmp/deploy/tmp2488711561556272726weasis-pacs-connector-exp.war/WEB-INF/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
  • 16:35:09,487 ERROR [STDERR] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
  • 16:35:09,491 ERROR [STDERR] SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
このログから,slf4j-log4j12-1.6.1.jarが重複していることがわかる.一つは$DCM4CHEE_HOME/server/default/lib/内にあるもので,もう一つはdeployしたweasis-pacs-connector-exp.warである./org/slf4j/impl/StaticLoggerBinder.classというクラスが重複しているらしい.そこで,$DCM4CHEE_HOME/server/default/lib/内のを削除すると,今度は別のエラーが出た.
17:01:48,988 ERROR [STDERR] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
17:01:48,990 ERROR [STDERR] SLF4J: Defaulting to no-operation (NOP) logger implementation
17:01:48,990 ERROR [STDERR] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
こんどは,org.slf4j.impl.StaticLoggerBinderがロードできないという.
諦めてネットを検索していると「Weasis deployment problem」というサイトに次のような記述があった.
This error doesn't have any consequence. This is because SLF4J already exists in the dcm4chee-jboss.
You can simply unzip weasis-pacs-connector.war and remove slf4j-api-1.6.1.jar, logback-classic-0.9.29.jar and logback-core-0.9.29.jar, and then zip it again.
これにしたがって,weasis-pacs-connector.warを作り直してみた.ただし,logback-*というjarファイルはなかったのでslf4j-api-1.7.5.jarだけを削除してjarコマンドでwarファイルを作成した.なお,jarコマンドが入っていなかったので,次のコマンドでインストールした.

# yum install java-1.7.0-openjdk-devel
また,slf4j-api-1.7.5.jarはWEB-INF/lib/の中に入っていたのでそれを削除した後,次のコマンドでwarファイルを作成した.
# jar cvf weasis-pacs-connector.war *
 なお,このコマンドはwarファイルを展開したディレクトリ上で実行した.こうしてdcm4cheeを再起動すると,今度はweasisが動いた.ただし,Webインターフェースで「Open Web Viewer」をクリックしなければならない.目のアイコンではなく左から3つ目のアイコンをクリックしなければならない.先入観で目のアイコンと思い込んでいたためにこのような結果となった.

echoが通らない

dcm4cheeのWebインターフェース画面のAEタイトルを新規作成するところで"Choose one"で"-"を選択しないとエラーになる.こんな簡単なことだけれどそのときは分からなかった.また,iptablesで11112と11113に穴をあけておかなければならない(11113はdcmrcvなので不要かな・・・).

K-Pacsで画像のDLできない

実はできた.ただし,動きがおかしい.エラーメッセージが出るが実は転送できている・・・.動きが良くわからない.使い物にならないのは事実.

Sycoraxで画像がDLできない.

K-Pacsと違って全くDLできない.そもそもSycoraxは転送をサポートしているのだろうか?

dcm4cheeのwebインターフェースに転送先AEを選択するコンボボックスが表示されない

そもそも,そんなコンボボックスはあったのか?

PACSのテスト

前回PACSサーバdcm4cheeをインストールし,起動するところまでやりました.ただし,パケットフィルタリングiptablesがポート8080をブロックしていたため,クライアント(Webブラウザ)から接続することができませんでした.今日はiptablesの設定を変更してポート8080に穴をあけ,dcm4cheeのテストを行います.iptablesの設定については「iptablesの設定方法」や「CentOS iptablesによるパケットフィルタ」が参考になります.
さて,今日の作業内容は以下の通りです.
  • 9 インストールしたPACSサーバのテスト
  • 10 Webブラウザからのログイン
  • 11 JMXコンソールからのログイン
  • 16 DICOMストレージのテスト
  • 17 検索テスト
  • 18 サービスとしてインストール
JMXコンソールとは,JBossを構成するコンポーネントの機能を変更したり,停止したりするためのユーザーインタフェースです.11では,JMXコンソールを使ってストレージアーカイブのディレクトリを設定します.デフォルトは/usr/local/dcm4chee/server/default/archiveです.
DICOMストレージのテストでは,構築したPACSサーバへDICOM画像を転送します.SCU(転送プログラム)にはDICOMツールキット(dcm4che)を使います.転送後,Webインターフェースで画像を検索して表示します.
同様にしてDICOMツールキットのdcmrcvを使って画像の検索を行います.
最後にPACSサーバをサービスとして起動するように設定します.CentOSでは,起動スクリプトを/etc/init.d/へ保存することになっています.起動スクリプトはdcm4chee_init_redhat.shです.ただし,このスクリプトは2点修正が必要です.

JBOSS_USER=${JBOSS_USER:-"pacs"}
 → JBOSS_USER=${JBOSS_USER:-"RUNASIS"}
JAVAPTH=${JAVAPTH:-"/usr/java/jdk/bin"}
 → JAVAPTH=${JAVAPTH:-"/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/"}
 しかし,これだとJAVAPATHがJDK7に固定されてしまう./usr/binでやってみようか・・・.
最後に, dcm4chee_init_redhat.shのシンボリックリンクdcm4cheeを作成する.
ln -s dcm4chee_init_redhat.sh dcm4chee
これでスクリプト名を簡潔にできる. chkconfigで自動起動設定をして起動する.
chkconfig --add dcm4chee
chkconfig dcm4chee on
service dcm4chee start
ログは以下のコマンドで参照できる.
# tail -f /usr/local/dcm4chee/server/default/log/server.log



2015年6月10日水曜日

いよいよPACSを完成させるぞ!

今日は先週に引き続き,Dcm4Cheeのインストールを行います.今日はインストールマニュアルの「5. Deploy the Audit Record Repository (ARR)」からです.そもそもこのARRとはいったい何でしょう?マニュアルには次のように書かれています.
The ARR maintains an audit log of all transactions within the archive. This is necessary for HIPAA and IHE. 
どうやらHIPPA(米国の医療保険の相互運用性と説明責任に関する法律)やIHE(DICOMとHL7などの既存の規格を使用して、病院内の医療情報システムを統一的に運用するためのガイドライン作成と普及を目指す運動)の要件のようです.監査ログを維持するための機能なのでしょうか・・・.

5. Deploy the Audit Record Repository (ARR)


さて,まずはパッケージのダウンロードです.MySQL版dcm4chee-arr-3.0.11-mysql.zipをダウンロードしてきます. PCにダウンロード後,サーバへWinSCPでアップロードします.アップロード先はユーザのホームディレクトリです.アップロードできたらunzipコマンドを使って解凍します.
$ unzip dcm4chee-arr-3.0.11-mysql.zip
解凍すると,ホームディレクトリにdcm4chee-arr-3.0.11-mysqlというディレクトリができますが,この中から必要なファイルをdcm4cheeへコピーします.そのためには,まず,dcm4cheeのbinディレクトリへ入り,その中でinstall_arr.shというスクリプトを,先ほどのdcm4chee-arr-3.0.11-mysqlというディレクトリをパラメタとして実行します.以上をまとめると
# cd /usr/loca/dcm4chee/bin
# ./install_arr.sh /home/ユーザ名/dcm4chee-arr-3.0.11-mysql
となります.なお,この操作は管理者権限で行います.

6. Set environment variable JAVA_HOME to JDK location.

次は,環境変数JAVA_HOMEの設定です.環境変数とは,シェルスクリプトなどで用いる変数で,そのコマンドやライブラリがどのディレクトリ(パス)にあるかを指定したものです.有名なものにPATHというのがあります.echoコマンドを使って環境変数PATHに設定されている内容を見ることができます.
$ echo $PATH
今回は,javaの環境が置かれているパスをJAVA_HOMEという環境変数に設定します.
さて,そのjavaが置かれているところですが,どこでしょう?
それは,whichコマンドを使って調べることができます.whichコマンドは,そのコマンドがどのディレクトリにあるかを教えてくれるコマンドです.
# which java
/usr/bin/java
この実行結果が示すように,javaは/usr/bin/javaであることがわかりました.では,/usr/bin/javaをlsコマンドで見てみましょう.
# ls -al /usr/bin/java
lrwxrwxrwx 1 root root 22  5月 27 23:57 2015 /usr/bin/java -> /etc/alternatives/java
この結果から, /usr/bin/javaはシンボリックリンクで,/etc/alternatives/javaへリンクしていることがわかります.同様に/etc/alternatives/javaをlsコマンドで調べると次のようになります.
# ls -al /etc/alternatives/java
lrwxrwxrwx 1 root root 46  5月 27 23:57 2015 /etc/alternatives/java -> /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
やはり,/etc/alternatives/javaもシンボリックリンクで,/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/javaへリンクしています.三度これをlsすると,次のようになりました.
# ls -al /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
-rwxr-xr-x 1 root root 9904  5月 14 16:48 2015 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
この結果から/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/javaはリンクではなく,実体であることがわかります.よって,JAVA_HOMEは/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/ということになります(binが含まれていないことに注意してください).
さて,JAVA_HOMEへ設定する内容がわかったところで,これはいったいどこで設定すればよいのでしょう?実は,環境変数はログイン時に実行されるスクリプトで設定することになっています.PATHなどもそうです.そして, ログイン時に実行されるスクリプトが/etc/profileなのです.このファイルをviで編集して,以下の2行を追加します.
#vi /etc/profile
JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64
export JAVA_HOME
追加する場所は,export PATH ...の前あたりで良いでしょう.以上で,JAVA_HOMEの設定は完了です.ファイルを上書き保存していったんログアウト後,再度ログインしてください.そのうえで,echo $JAVA_HOMEとすれば,設定したパスが表示されるはずです.
 # echo $JAVA_HOME
/usr/lib/jvm/jre-1.7.0-openjdk.x86_64

 9. Test the installation:

インストールは完了しました.いよいよテストです.次の操作でdcm4cheeを起動します.
# cd /usr/local/bin
# ./run.sh
ところが途中でエラーが発生して起動しません.
Could not create deployment: file:/usr/local/app/dcm4chee-2.17.1-mysql/server/default/conf/jboss-service.xml
対処法をネットで検索したところ,「JBOSSが起動しないときは」というサイトに,/etc/hostsファイルへホスト名とローカルホストのIPアドレス127.0.0.1の対応を書けば良いとあったので,早速次のように編集しました.
# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 semi2014pacs
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
/etc/hostsを上書き保存して再びdcm4cheeを起動すると今度はちゃんと起動しました.
02:42:08,354 INFO  [Server] JBoss (MX MicroKernel) [4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181417)] Started in 41s:565ms
いよいよ,ブラウザから接続テストをすると,つながりません.
http://ホスト名 or IP:8080/dcm4chee-web3/
調べてみると,iptablesでポート8080に穴をあけていませんでした.
 # iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
そのためにdcm4cheeへパケットが送られていないのだろう,ということでこの日は終わりにしました.次回はiptablesの設定から始めることにします.

参考 iptables

iptablesはLinuxで標準的に使われているパケットフィルタリング型のファイアウォールです。ポートの開閉を設定して外部からの不正なアクセスをブロックします。iptablesの解説や設定方法については、例えば「iptablesの設定方法」や「CentOS iptablesによるパケットフィルタ」を見てください。なお、iptablesのルールは以下のファイルに書きます。
/etc/sysconfig/iptables


2015年6月3日水曜日

PACSサーバのインストール

今日は,PACSサーバDcm4Cheeのインストール作業をインストールマニュアルに従って行いました.Dcm4Cheeのバージョンは,マニュアルに従って2.17.1としました.今日は,Step4のデータベースソフトのインストールとデータベースDCM4CHEEの作成までを行いました.今回はMySQLを使っています.

インストール手順

1. dcm4cheeパッケージのバイナリ配布をダウンロードして展開する

 dcm4cheeはSourceForgeサイトから入手する.ダウンロードするのはdcm4chee-2.17.1-mysql.zip.いったん,パソコンにダウンロードしてWinSCPでサーバにアップロードする.アップロード先は一般ユーザアカウントのホームディレクトリ.展開はunzipコマンドを使う.

2.  JBoss Application Server 4.2.3.GAパッケージのバイナリ配布パッケージをダウンロードする

インストールマニュアルサイトのダウンロードリンクがデッドリンクになっているのでGoogleで「JBoss Application Server 4.2.3.GA」 を検索して見つけたSourceForgeサイトからjboss-4.2.3.GA.zipをダウンロードした.これもパソコンにダウンロードしてWinSCPでユーザアカウントのホームディレクトリへアップロードした.そして,unnzipコマンドを使って展開した.
この段階で,ユーザホームディレクトリ(/home/ユーザ名/)に以下のフォルダがある.

dcm4chee-2.17.1-mysql
jboss-4.2.3.GA
ところで,dcm4cheeを動かすためにはJDKが必要であるが, CentOS6.6には最初からjava-1.6.0-openjdk.x86_64とjava-1.7.0-openjdk.x86_64が入っている.java -versionでバージョンを調べると1.7.0_79になっていた.javaのフォルダ構造は複雑で,次のようになっている.
/usr/bin/java → /etc/alternatives/java → /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java

3. JBossからdcm4cheeへファイルをコピーする

JBossはjavaアプリケーション(この場合はdcm4chee)のアプリケーションサーバである.このステップでは,dcm4cheeの中にそのアプリケーションサーバを組み込んでjavaアプリケーションが動くようにする.この作業はshell化(自動化)されており,dcm4chee-2.17.1-mysql/bin内のinstall_jboss.shをJBossのディレクトリを引数にして実行すればよい.
$ cd ~/dcm4chee-2.17.1-mysql/bin
$ ./install_jboss.sh ~/jboss-4.2.3.GA
 これで,必要なJBossファイルがdcm4cheeへコピーされる.

4.  データベースソフトウェアをインストールしてDCM4CHEEデータベースを作成する

今回使うデータベースソフトはMySQLなので,MySQLのインストールマニュアルへ進む.
まず,MySQLサーバをインストールしなければならない.これにはyumコマンドを使う.それに先立って,MySQLサーバがインストールされていないことを確認する.
# yum list installed | grep mysql
表示結果にmysql-serverがなければインストールされていない.その場合は以下のようにしてインストールする.
# yum install mysql-server
インストールできたら,自動起動の設定をしておく.
 # chkconfig mysqld on
 その後,MySQLサーバを起動する.
# service mysqld start
 既に起動している場合はエラーになるので,その場合はMySQLを再起動する.
# service mysqld restart
まず,管理者(root)のパスワードを設定する.
# /usr/bin/mysqladmin -u root password 'パスワード'
次に,pacsdbという名の空のデータベースを作成し,そのデータベースのユーザアカウントとパスワードを設定する.この作業はmysqlコマンドでmysqlクライアントから行う.
# mysql -uroot -p<root password>
mysql> create database pacsdb;
mysql> grant all on pacsdb.* to 'pacs'@'localhost' identified by 'pacs';
mysql> \q
 最後にテーブルを作成する.テーブル作成SQLは,~/dcm4chee-2.17.1-mysql/sql/create.mysqlなので,
# cd ~/dcm4chee-2.17.1-mysql/sql/
# mysql -upacs -ppacs pacsdb < create.mysql
とする.これでテーブルが作成されるので,mysqlコマンドで会話モードに入り,
show tables;
と入力すれば作成されたテーブルが確認できる.
最後にARRデータベース(audit record repository)の作成だが,これはマニュアルで作らなくとも最初に起動したときに自動的に作られるらしいので何もしない.

さて,ここまででデータベースが出来上がったわけだが,アプリケーションを一般的に配置される/usr/localディレクトリへ移動させる. ユーザホームディレクトリに作成したフォルダdcm4chee-2.17.1-mysqlをそのまま/usr/local/へ移動してもいいのだが,ここはdcm4cheeのバージョン管理を行うために,/usr/local/app/というディレクトリを作成し,その中にdcm4chee-2.17.1-mysqlを移動し,/usr/local/dcm4chee/からシンボリックリンクを張ることにする.そうすれば,今後dcm4cheeのバージョンを上げても,このシンボリックリンクを変更するだけで対応できる.
# cd /usr/local
# mkdir app
# mv /home/<user-name>/dcm4chee-2.17.1-mysql /usr/local/app/
# ln -s /usr/local/app/dcm4chee-2.17.1-mysql /usr/local/dcm4chee








2015年5月27日水曜日

リベンジ,ベアボーン

前回は,ミニHDMIケーブルがないばかりにベアボーン(Intel NCU D54250WYKH)にCentOS 6.6をインストールすることができませんでした. そこで急遽アマゾンでミニHDMIケーブルを購入し,今日こそリベンジでOSのインストールを行います.


CentOSのインストール

CentOSのインストール自体は問題なく終わった.しかし,インストール途中で固定IPアドレスの設定を忘れた.そこでインストール後,固定IPアドレスの設定をすべくネットワーク設定の変更を行った.それには,setupコマンドを使った.無事設定を変更し,ネットワークを再起動した.しかし,ネットワークの設定は反映されない.システム自体を再起動したがやはりネットワークに接続されない.そこで,設定ファイルを確認した.

/etc/sysconfig/network-scripts/ifcfg-eth0


DEVICE=eth0
HWADDR=c0:3f:d5:6b:4b:98
TYPE=Ethernet
UUID=934a254e-5af2-405d-8b85-02edd3d278e5
ONBOOT=no
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=172.16.108.100
NETMASK=255.255.0.0
GATEWAY=172.16.254.254
DNS1=172.16.254.1
IPV6INIT=no
USERCTL=no

ONBOOT=noが怪しい.調べてみると,起動時ネットワークを有効にするにはこのパラメタをyesにしなければならないらしい.どうして,最初,このパラメタがnoになっていたのか分からないが,迷惑な話だ.こんなもののためにかなりの時間をロスしてしまった.


2015年5月19日火曜日

PACSサーバを構築するぞ!

前回のゼミでVPNサーバの構築を行ったので,今回はPACSサーバの構築に入ります.その前に,VPNサーバを学内LANから光接続に移行しなければなりません.



そのためには,まず,ファイアウォールの設定を行う必要があります.ここでは,GUIを使って設定する方法をやってみます.
次に,VPNサーバのIPアドレスを学内LANのネットワーク環境から実験室用のネットワーク環境へ設定変更する必要があります.Ubuntu Desktop 14.04 LTS のネットワーク設定は,GUIを使った場合,[システム]→[設定]→[ネットワーク接続]で行います.一方,CUIを使う場合は/etc/NetworkManager/system-connections/Wired connection 1をエディタで修正します(管理者権限が必要).設定を反映するには次のコマンドを入力します.
 sudo service network-manager restart
最後に,vpnserverの自動起動を設定します. 自動起動のために/etc/init.d/rc.localを修正します.

PACSサーバの構築

PACSサーバの構築を行うためにもう一台のベアボーンにCentOS6.6をインストールします.ベアボーンはIntel NCU D54250WYKHです.このベアボーンにはディスク,メモリは入っていません.だから別途購入したSSDとRAMを装着します.別途購入したSSDとRAMの使用は以下の通りです.
  • CSSD-S6T256NHG6Q 256GB×1(TOSHIBA)
  • D3N1600-L DDR3L 8GB×2(BUFFALO)
インストールするのはCentOS6.6で,ネットワークインストールを行います.

OSインストール断念

ベアボーンを 開封しRAM8GB×2枚とSSD256GBを装着し、いざOSをインストールしようとすると、なんと、HDMIのインターフェースがminiHDMIだった!普通のHDMIしか準備していなかったのでディスプレイ装置に接続できない。ということはこれ以上作業を進めることができない!



ということで、この日はここまでとし、オープンキャンパス用のパネルを作ることにした。

オープンキャンパス用のパネル

パネルに使う写真を撮影した。W君,表情固いよ!S君,それじゃあ関取だよ!

http://semi2014kumw.blogspot.jp/

作成したパネルの一部です。







2015年5月12日火曜日

Ubuntu Desktop 14.04 LTS にSoftEther VPN Server をインストールするぞ!

GWも明け,今日からゼミ再開です.前回,何とかベアボーンにUbuntu Desktop 14.04 LTSをインストールできたので,今日からいよいよUbuntu Desktop 14.04 LTS にSoftEther VPN Server をインストールします.ただ,ネットで検索してもUbuntu Serverにインストールしている記事はあってもDesktopにインストールしている記事がなかなか見つかりません.大丈夫でしょうか?

SSH公開鍵認証

まず,いずれVPNサーバをインターネットに晒すことになるので,SSHをパスワード認証から公開鍵認証にすべく各自の公開鍵・秘密鍵ペアをTeratermを使って作成し,公開鍵をサーバ側にセットアップしました(/home/ユーザ名/.ssh/authorized_keys).次に,sshの設定ファイル/etc/ssh/sshd_configを編集し,PasswordAuthenticationをnoに設定し,パスワード認証を禁止しました.これで公開鍵認証しかできなくなります.設定後,sshを再起動しようと /etc/init.d/ssh restartと入力したのですが,何も応答が返ってきません.加えて設定も反映されていません.相変わらずパスワード認証もOKです.いろいろ調べてみると,ubuntuでsshを起動するときはsudo start ssh,ストップするときはsudo stop sshとするらしいです.どうやらupstartという「いくつかのUnix系コンピュータオペレーティングシステムで起動時にタスクを実行する手法として古くから備わるinitデーモンの代わりとなるもの」(Wikipedia)らしいですね.へえ~,initに代わるものか・・・.どおりで/etc/initd/sshが効かなかったわけです.それにしても/etc/initd/sshを入力した時点でエラーメッセージくらい出してくれてもよさそうなものを・・・.しかし,このupstartお手軽そうです.是非,vpnサーバ起動もこのupstartを使おうと思います.upstartでデーモン化する方法については「Upstartを使ってお手軽daemon化」や「Upstartの動きを理解する」が参考になりそうです.
ついでながら,このupstartの特徴.既に接続済みのsshセッションは,sudo stop sshとしても動き続けていることです.ただし,新規にssh接続しようとするとできません.

VPNサーバのインストール

続いてSoftEther VPN Serverをダウンロードして,SoftEther VPN Serverのインストールです.その方法については「SoftEther VPN プロジェクト」に書いてあります.Intel64bit用のLinux版VPNサーバをダウンロードして,「SoftEther VPN プロジェクト」⇒「ドキュメント」⇒「SoftEther VPN マニュアル」⇒「7. VPN Server の導入」と辿っていきます.
こちらはマニュアルを見ながらやると問題なく簡単にインストールできました.Ubuntu Desktopは公式には推奨されていないようですが・・・.また,「必要なソフトウェアおよびライブラリの確認」に記載されているいくつかはUbuntuにはないようですが,それでも何もしなくても問題なくインストールでき,ちゃんと動いているようです.

VPN接続

構築したVPNサーバを使って外部から接続実験を行いました.問題なくVPN接続できました.ただし,FWの関係でVPN Azureを利用しています.次回は,このサーバをイントラネットから光接続に切り替え,インターネットに直接晒す予定です.でも,そのためには以下の2点をやっておかねばなりません.
  • vpnserverの自動起動(upstartを用いて)
  • FW(iptables)の設定

http://semi2014kumw.blogspot.jp/

2015年4月28日火曜日

リベンジ!今日こそベアボーンにUbuntuをインストールするぞ!

先週は,ベアボーンにUbuntu Server 14.04をインストールしようとして,ストレージeMMCのデバイスドライバがないためストレージを認識できず,インストールに失敗した.今回はそのリベンジ.今度はUbuntu Desktop 14.04をインストールする.ベアボーンLIVA MINTI PC KITへのUbuntu Desktop 14.04のインストールには実績があり,前回もインストールの一歩手前までは確かめている.





インストール前に固定IPアドレスを設定するのだが,設定方法がなかなか分からず苦労した.ネットに接続したら,あとはインストーラを起動するだけで無事インストール完了.しかし,随分と時間がかかった.インストール後,SSHサーバをインストールするのだが,これもまたインストール方法がわからない.結局,ソフトウェアセンターを起動してopenssh-serverを検索して選択するだけでインストールできた.
ネットワークの設定にせよ,SSHサーバのインストールにせよ,やり方がよくわかっていないところへもってきて,タイプミスやちょっとした操作ミスがますます状況を混乱させた感じがする.このあたりは今後問題になりそう.それと最も大きい問題は,対処方法を探そうとはせずに,ずっと待っていたり,他のことをしていること.実験に参加していない.これが一番深刻な問題だけれど,そのあたりについては訓練していないから仕方ないのかなとも思う.
さて,SSHサーバがインストールできたら今度はサーバの起動.ところが,これがまたよくわからない.GUIは諦めてコマンドで起動としたが端末の起動方法がわからない.さんざん検索した結果,左メニューの一番上にある検索ボタンをクリックして「端末」と入力したら端末アイコンが出るのでそれをクリックして端末を起動.このあたりは知らなかったら絶対にできないな,と感じた.Ubuntuは使いやすいんだか使いにくいんだかよくわからない.
/etc/ssh/sshd_configを編集してPermitRootLoginをnoに設定.これもviの使い方がわからないため,なかなか前に進まない.かろうじて修正してsshdを再起動.

sudo /etc/init.d/ssh restart

 不思議なことに,何もメッセージが表示されないんだねUbuntuは.うまくいったのかそうでないのかさっぱりわからない.その後,WindowsPCからTeratermで接続テストOK.しかし,CentOSでは確か,/etc/ssh/sshd_configに接続可能ユーザをAllowUsersで列挙しはずだが・・・.これは,書かなかったらすべてのユーザがSSHにログインできるらしい.したがって制限したかったら書けばよいということ.
ひととおり確認した後でPC端末からrebootをかけたりhaltをやったりいろいろ試してみたが,どうも挙動が不審.まあいいか,ということで,キーボード(USBタイプの)やディスプレイを外してネットワークだけ接続して電源を投入.



ところがこれが動かない.PCからTeratermで接続してもpingを打っても応答なし.しかたなく電源を落として,キーボードやディスプレイを接続して再度電源投入.


これで何とか起動してPCからも接続可能.しばらくはこのままで様子を見ようということで今日はここまで.とにかく疲れた.でも,UbuntuがインストールできてSSH接続までやったのだから良しとしよう.次回は公開鍵と秘密鍵を作ってSSHの公開鍵認証を行い,その後VPNサーバをインストールする.







2015年4月22日水曜日

ベアボーンにUbuntuをインストールするぞ!

今日は第2回目のゼミです.ベアボーンにUbuntuをインストールします.ベアボーンとは,パソコンの組み立てキットの一種で,HDDやメモリなど一部の部品を取り付けることで完成するものです.今回使用するベアボーンはLIVA MINTI PC KITです.これは,2GBのメモリと64GBのストレージ(eMMC)が既にオンボードで組み込まれているため,何もしないでもそのまま動きます.ただし,ベアボーンにはキーボード,マウス,ディスプレイ,DVDドライブといったI/O装置の類は一切ありませんので準備しなければなりません.キーボード,マウスはUSBの無線タイプ,ディスプレイはRGB端子で接続します.DVDドライブは外付けタイプをUSBで接続します.NICだけはさすがについています.





必要な装置を取り付けたらいよいよOSをインストールします.今回インストールするのはUbuntu 14.04 64bit版です.VPN Serverを構築するのでサーバ版をインストールします.インストール後の作業は以下の通りです.
  • ユーザ登録
  • SSHサーバのインストール
  • WindowsPCからTeratermでSSH接続(公開鍵認証)
これらの作業については「UbuntuにSSHサーバーをインストール」というサイトが役に立つかもしれません.





やってみてわかったことですが,Ubuntu Server は,このベアボーンのストレージデバイスeMMCをサポートしていません.デバイスドライバが入っていないみたいです(「ECSのLIVA-B3-2G-32Gにubuntu-server14.04 を今度こそインストール」).Ubuntu Desktopはサポートしているようです.なので,次回はDesktopをインストールすることにし,今回はUbuntu DesktopのISOイメージをDLしてDVDに焼くところで終わりです.

DLしたDVDからインストーラが起動するところまでは試してみました(この画面がでるまで結構時間がかかります).

2015年4月15日水曜日

いよいよゼミが始まります!

新年度を迎え,いよいよ今日からゼミが始まります.ゼミ生も4年生になって,就職活動にも励んでおり,ゼミと両立することは大変でしょう.しかし,就活を理由にゼミをおろそかにすることはできません.そのことを肝に銘じて頑張りましょう.
さて,初回のメニューは次の通りです.

  1. ゼミブースのPCにアカウントを登録する
  2. スマホにGoogleカレンダーアプリをインストールする
  3. 今後の計画を確認する
  4. SoftEthe VPN Client をインストールして実験室ネットワークに接続する
  5. 家から実験室内LANに接続できるか確認する
 今日は1から4までやります.5は次回までの宿題です.また,スマホで実験室のネットワークに接続し,ファイラーを使ってファイルサーバにあるファイルを閲覧したりファイルを保存したりできるか確認してきます.それにはAndroid版のファイラーを探す必要があります.Androidのファイラーには様々なアプリがありますが,必要なのはWindowsのファイルシステム(実際にはLinuxのSamba)にアクセスできるファイラーが必要です.iPhoneで言えば,Documentsのようなアプリです.




このビデオはスマホのVPN設定を行い,ファイラーを使ってスマホ内の画像ファイルをVPN接続先のネットワーク内に置かれたファイルサーバへ保存するまでの操作を録画したものです.使用したスマホのOSはAndroidで,使用したファイラーはESファイルエクスプローラーです.
一方,iPhone+Docementsでスマホ側の画像ファイルをファイルサーバへアップロードするには,
  1. ファイルサーバへ接続する
  2. 編集をタップする
  3. アップロードをタップする
  4. Documentsをタップする
  5. 必要なファイルを選んでアップロードをタップする
とします.

2015年1月7日水曜日

第17回ゼミ(VPNの構築に挑戦するぞ!)

年が変わって2015年になりました。昨年はGoogle MapやFusion Tables,そしてQGISなどを使ってGISの勉強をしてきましたが,今年は一転してVPNの勉強です。目的は,スマホから内部LANに設置したサーバにVPN接続する仕組みを構築することです。これは,在宅医療に応用できます。2011年度生の田中ゼミではスマホアプリを使った在宅医療(在宅訪問看護)支援システムの構築をやりましたが,課題としてセキュリティの問題がありました。それを解決するのが2012年度生のテーマです。VPNを構築して,安全管理ガイドラインに謳われている「6.11 外部と個人情報を含む医療情報を交換する場合の安全管理」を解決するというのが目的です。

2015/1/9(8021)
無料で作るリモートアクセスVPN
スマートフォンから社内につなぐには?
日経NETWORK 2014.04

2015/1/13(8020)
無料で作るリモートアクセスVPN
第3回 SoftEther VPNでL2TPを使う
日経NETWORK 2014.06

2015/1/20(8013)
無料で作るリモートアクセスVPN
最終回 OpenVPNでSSL-VPNを実現する
日経NETWORK 2014.08

2015/1/23(8021)

無料で作るリモートアクセスVPN
VyattaでL2TP/IPsecを使う
日経NETWORK 2014.05