jma-receipt2.7の内部的な挙動に関するメモ。ネットワークにつながっていない状態でdpkg-reconfigureすると、jma-receiptの起動に失敗する現象も調査。
■ jma-receipt 2.7.0での変更点メモ 基本的な情報は以下のURLの内容ならびにPDFを参照のこと。 http://www.orca.med.or.jp/receipt/outline/update/ver270.rhtml □ 依存関係のバージョンの変更 $ diff 2.6.0/debian/control 2.7.0/debian/control panda-serverの依存関係が、panda-server (>= 1:1.2.5)からpanda-server (>= 1:1.2.6)に変更。 □ debconfによるインストール時の質問 インストール時にデータベース構造変更処理をするかどうかの debconfの質問ダイアログを出すのが追加になっている。 $ diff 2.6.0/debian/config 2.7.0/debian/config 44a45,47 > db_input medium jma-receipt/install-with-database || true > db_go > □ /usr/lib/jma-receipt/bin/ディレクトリの追加 ソース的には、2.7.0から従来のorca-hospid-set.shからjma-receipt-hospid-set.shに 名前変更になり、binディレクトリの中に格納されるようになった。 binディレクトリ内には、jma-receipt-hospid-set.shと新規のjma-receipt-db-setup.shがある。 それぞれ、医療機関IDの設定とデータベース構造変更処理のためのスクリプト。 □ /etc/init.d/jma-receiptスクリプトの変更 initスクリプト中で、スキーマチェックが行われるようになった。 これにより、/usr/lib/jma-receipt/init/database-non-upgradeというチェックファイルの 存在により、データベーススキーマのチェックを行うかどうかの判断をしている。 このチェックファイルは、jma-receiptのインストール時またはdpkg-reconfigureでの 設定時に作成/削除される。または、以下のようなdebconfでの設定時のメッセージにも あるように、手動で/usr/lib/jma-receipt/bin/jma-receipt-db-setup.shを 実行することで、データベース構造変更処理に成功すれば、このチェックファイルが削除される。 試しに、jma-receiptが起動できない状態にして、このチェックファイルを削除すれば jma-receiptが起動して、ひととおり使えるようだ。ただし、DB管理情報等に不整合が 起きないかどうかについては、いまのところ検証中。 「No」を選択すると、インストールまたはアップグレードすると同時にデー タベース構造変更処理は実行されなくなります。この場合、インストール またはアップグレードが終了してから、手動で/usr/lib/jma-receipt/bin/ jma-receipt-db-setup.sh を実行する必要があります。実行していない場合、 jma-receipt デーモン(サーバプログラム)をスタートさせても起動されません。 □ 簡単なまとめ apt-getやdpkg-reconfigureの実行 ↓ jma-receiptパッケージ内部のpostinstスクリプトが実行される ↓ /usr/lib/jma-receipt/init/database-non-upgrade というチェックファイルが生成される。 ↓ orca-db-create.shとorca-db-install.shとorca-db-clear.shが 実行される。 ↓ ↓ orca-db-install.shで orca-db-install.shで インストールに成功 インストールに失敗(ネットワークにつながっていない等) ↓ ↓ 上記のチェックファイルが 上記のチェックファイルは 削除される 削除されない ↓ ↓ /etc/init.d/jma-receipt /etc/init.d/jma-receipt でちゃんと起動する で警告メッセージが表示されて 起動しない (orca-db-install.shでは、オンラインモードだとwgetでftp.orca.med.or.jpから ファイルを取得するので、ネットワークにつながっていないと失敗する。) □ /etc/init.d/jma-receipt 起動スクリプトの差分 $ diff 2.6.0/debian/init.d 2.7.0/debian/init.d 56a57,68 > function schema_check() { > # check. execute database schema change processiong > if [ -e "$ORCALIB"/init/database-non-upgrade ] > then > echo "Don't execute database schema change processing." > echo "Execute $ORCALIB/bin/jma-receipt-db-setup.sh manually." > echo > echo "Cancel {$1} $DESC daemon." > exit 0 > fi > } > 64a77 > schema_check "$1" 100c113 < -dir "$LDDIRECTORY" -restart -wait 1 -wfcwait 10 \ --- > -dir "$LDDIRECTORY" -restart -wait 1 -wfcwait 10 -retry 1 \ 147a161 > schema_check "$1" 212a227 > schema_check "$1" 253a269 > schema_check "$1" □ インストール/再設定時に実行されるpostinstスクリプトの差分 diff -r 2.6.0/debian/postinst 2.7.0/debian/postinst 57a58,61 > db_get jma-receipt/install-with-database > echo "INSTALL_WITH_DATABASE=$RET" >> $tmp > INSTALL_WITH_DATABASE=$RET > 140,142c144,159 < "$ORCADIR"/init/orca-db-create.sh < "$ORCADIR"/init/orca-db-install.sh < "$ORCADIR"/init/orca-db-clear.sh --- > touch "$ORCADIR"/init/database-non-upgrade > > if [ "$INSTALL_WITH_DATABASE" = true ] ; then > "$ORCADIR"/init/orca-db-create.sh > "$ORCADIR"/init/orca-db-install.sh > if [ $? -eq 0 ] ; then > if [ -e "$ORCADIR"/init/database-non-upgrade ] ; then > rm -f "$ORCADIR"/init/database-non-upgrade > fi > fi > "$ORCADIR"/init/orca-db-clear.sh > fi > > rm -rf /var/tmp/.orca_ps > rm -f /var/tmp/K02SPASCR* > rm -f /var/tmp/K01PARA* 参考にしたdebconfのメモ http://ukai.jp/debuan/2001w/debconf.txt