GOL @Wiki

Open IMS CoreをSolarisにセットアップする

最終更新:

divadiva

- view
管理者のみ編集可


基本的にインストールガイド通りでOKなのですが、Open IMS CoreをSolarisで動かす場合、若干、プログラムソースなどに修正を加える必要があります。ここでは実際にSolaris10にインストールした際に発生した作業を記述します。(インストールガイドをベースとして下さい)

ser_imsとFHoSSのビルド

ser_ims

ser_imsパッケージはgccでコンパイルしますが、ビルドバージョンによっては、
 In file included from /usr/include/sys/signal.h:34, 
 from /usr/include/signal.h:26, 
 from main.c:34: 
 /usr/include/sys/siginfo.h:259: error: parse error before "ctid_t" 
 /usr/include/sys/siginfo.h:292: error: parse error before '}' token 
 /usr/include/sys/siginfo.h:294: error: parse error before '}' token 
 /usr/include/sys/siginfo.h:390: error: parse error before "ctid_t" 
 /usr/include/sys/siginfo.h:392: error: conflicting types for `__proc' 
    ・
    ・
    ・
のようなエラーが発生します。

その場合は、ここにも書いてある通り、・・・/gcc-lib/・・・/install-tools/mkheaders.confの先頭行に、SHELL=/bin/sh を追加し、再度makeしましょう。

また、make all中に、Solaris依存的な原因でコンパイルに失敗する箇所があるかもしれません。必ず標準出力・標準エラーログをとるようにします。(make all > LOG.log 2>&1)

  • modules/pcscf
sdp_util.cで、AF_LOCALが定義されていないぞエラー、が発生した場合、sdp_util.cの最上部にある標準インクルード行の直後くらいに、
 #ifndef PF_LOCAL
 # ifdef PF_UNIX
 #  define PF_LOCAL PF_UNIX
 # else
 #  define PF_LOCAL AF_UNIX
 # endif
 # ifndef AF_LOCAL
 #  define AF_LOCAL AF_UNIX
 # endif
 #endif
を挿入してください。 Solarisのsocket.hではPF_LOCAL、AF_LOCALのかわりに、PF_UNIX、AF_UNIXが定義されているため、書き換えなければならないためです。

  • modules/cdp
modules/cdp/peerstatemachine.cで、u_int32_tの未定義エラーが発生した場合は、peerstatemachine.cの上部に、
 #define u_int32_t uint32_t
を追加しましょう。

  • modules/mysql
modules/mysql/*.cのコンパイルで、MySQL関連のインクルードファイルが見つからないエラーが発生するかもしれません。その場合は、 modules/mysql/Makefileを編集して、実際のMySQLインクルードファイルパスに修正しましょう。

  • 実行時エラー
さて、めでたくビルドに成功したとしても、実行時エラーという罠もあります。 Open IMS Coreは基本的にSolarisを完全サポートしていないのです。icscfとscscfを実行すると、Bus ErrorやSegmentation Faultが発生して落ちませんか?pstackやgdbなどで調べるとわかりますが、modules/cdp/worker.cの130行目、 semctl()関数を実行したところで落ちます。これはsemctl()の第4引数に問題があります。Solaris以外では第4引数が単なるintでOKだとしても、Solarisはマズいのです。下記の変更を施してください。

modules/cdp/worker.h(どこでもいいですが、とりあえず最下部に):
 typedef union semun {
         int val;
         struct semid_ds* buf;
         ushort* array;
 } SEMUN;

modules/cdp/worker.c(void worker_init()):
まず変数を宣言。
 SEMUN arg;
そのうえで、下記のような記述を(2箇所あります)、
 semctl(tasks->empty, 0, SETVAL, 0666 | IPC_CREAT);
こんな風に修正。
 arg.val = 0666 | IPC_CREAT;
 semctl(tasks->empty, 0, SETVAL, arg);
これでOK。

FHoSS

FHoSSのantビルドにおいては、環境によっては、xsd/ZhDataType.xsdを入力ファイルとしたCastorによるプログラム生成処理が失敗する場合があります。イントラなどの環境だと、ZhDataType?.xsdのimport要素のschemaLocation属性で指定されているとこにアクセスできずに、UnknownHostExceptionなどが発生します。その場合、このファイルをbuild.xmlと同じディレクトリにおいて、ZhDataType?.xsdのimport要素を下記のように書き換えちゃいましょう。
 <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="file:xml.xsd"/>
ファイルロケーションの指定は、build.xmlの場所からの相対アドレスでOKです。

ser_imsとFHoSSの設定

ser_ims

「*.cfg」「*.sh」「*.xml」などのファイルを編集し、環境に合わせなければなりません。特に、open-ims.testドメインの記述がいたるところにあるので、これを例えばtsc.ctc-g.co.jpなどに修正しなければなりません。また、icscf.sqlとsip2ims.sqlを環境に合うように修正する必要があるでしょう。これも主にドメインの修正となります。

pcscf.sh、icscf.sh、scscf.shはser_ims/cfg/killserというスクリプトを呼び出していますが、killserの記述を修正しなければなりません。psコマンドのオプションに問題があるためです(xオプションが未定義)。

MySQLのライブラリも動的リンクされますので、LD_LIBRARY_PATHにライブラリのパスを通しておきましょう。

FHoSS

インストールの過程でMySQLにテスト用データベースを作成しますが(hssdb.sql, userdata.sqlの使用)、これらのsqlファイルも作りたい環境に合わせて修正する必要があります。テーブルスキーマなどの設定をするhssdb.sqlは修正する必要はありませんが、hssdb.sqlで作成したテーブルにデータを挿入する userdata.sqlは修正の必要があります。最低限、open-ims.testの記述を適切なドメイン名に変更しなければならないでしょう。その他、DiameterPeerHSS.xmlも修正しなければなりません。

無事にhssが起動して、管理コンソール(http://xxx:8080/)にアクセスした際、なぜか接続拒否されたりしてませんか?hss.propertiesの「host=xxx」の「xxx」を修正してください。ここが仮に「127.0.0.1」になっていると、ローカルホストからしか接続できません。

その他周辺装置の設定

DNS

  • 設定ファイルたち
/var/named/etc および /etc:
named.conf
/var/named/etc/namedb:
cache.db tokyo.zone tokyo.rev local.rev

  • コマンド
動作状態の確認
 $ svcs -x dns/server
起動&停止
 $ svcadm enable dns/server
 $ svcadm disable dns/server

MySQL

インストール後のDB初期化
 $ mysql_install_db
rootユーザのパスワード設定
 $ mysqladmin -u root password new_password
 $ mysqladmin reload
サーバ起動
 $ mysqld_safe --user=mysql &
       or
 $ mysqld_safe -u root -p &
サーバ停止
 $ mysqladmin -u root -p shutdown
その他コマンド
 mysql> show databases;
 mysql> show tables;
 mysql> use <DB-NAME>;
ウィキ募集バナー