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
- 設定ファイルたち
- コマンド
動作状態の確認
$ 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>;