Sausalitoで遊ぼう ! ☆cobalt appliance programming 入門☆
DESCRIPTION
Cobalt Users Conference2002/Summer. Sausalitoで遊ぼう ! ☆Cobalt Appliance Programming 入門☆. 2002 年 9 月 8 日 NTT DoCoMo Kansai,Inc. Masahiro Watanabe. Cobalt Server は UNIX の省スペース性と、 Web ブラウザを使った GUI での簡易な操作を兼ね備えた Server Appliance である。. Windows マシン、 Unix マシンと Cobalt の違い. Sausalito とはなにか. - PowerPoint PPT PresentationTRANSCRIPT
Sausalitoで遊ぼうSausalitoで遊ぼう !!
☆Cobalt Appliance ☆Cobalt Appliance ProgrammingProgramming 入門☆入門☆
20022002 年年 99 月月 88 日日NTTNTT DoCoMo Kansai,Inc.DoCoMo Kansai,Inc.
Masahiro WatanabeMasahiro Watanabe
Cobalt Users Conference2002/Summer
WindowsWindows マシン、マシン、 UnixUnix マシンとマシンと CobaltCobaltの違い の違い
Windows 一般的なUnix Cobalt
ディスプレイおよびキーボード
要 不要(接続可) 不要( LCDコンソールあり)
操作の手段 GUI(ウィンドウシステム)
CUI(コマンドラインインターフェース)
GUI( LCDコンソールおよびWebブラウザ)
遠隔メンテナンス 不可 可( CUI) 可( GUI)
Cobalt Server は UNIX の省スペース性と、Web ブラウザを使った GUI での簡易な操作を兼ね備えた Server Appliance である。
SausalitoSausalito とはなにか とはなにか Sausalito とは、 Cobalt Server のソフトウェ
アに一貫した操作性を与えるために開発された、新アーキテクチャである。
従来の Cobalt Sausalito管理画面の構成 画面ごとに Perl の CG
I で作成XMLを使って自動生成されたメニューと、 PHPの UIFCライブラリを利用して作成した画面から構成
管理画面の認証方法
HTTPの BASIC認証を利用
Sausalito内の独自認証を利用(ユーザ権限ごとにメニュー構成を変更することが可能)
国際版対応 各国版毎に Perl のソースを書き換えてリリース
表示されるメッセージを Stringファイルとして独立させ、 Stringファイルを言語毎に用意することにより対応(ソースは各国語版同一)
システムリソースへのアクセス
Perlにてアクセス サーバ管理用デーモン( CCE)経由でアクセス
SausalitoSausalito の特長 の特長 1)柔軟な機能拡張が可能
– XML を用いたメニュー自動生成処理( Navigation Manager )により、メニューツリーへのメニュー追加が他の既存のメニューに影響を与えずに可能
2)各国語版パッチリリースに要する期間の短縮および信頼性の向上– 各国語版間でソースが共通であるため、シンプルな
バージョン管理が可能3)ユーザインターフェースの Look & Feel の統
一性の保持が可能– ユーザインターフェース用 API ( UIFC )が公開され
ているため、サードパーティのアプリケーションにおいても Cobalt オリジナル機能と同一の Look &Feel を実現可能
SausalitoSausalito の特長(つづき)の特長(つづき)4)サードパーティのアプリケーションにおいて
も Sausalito のユーザ認証の利用が可能– サードパーティのアプリケーションにおいても、
Navigation Manager および UIFC を用いることにより、 Sausalito のユーザ認証を利用可能(独自の認証機構を準備する必要がない)
5) Sausalito 対応機種間でのアプリケーションの移植が容易– ハードウェアやシステム情報へのアクセス用の
API ( CCE )が提供されていることにより、機種間のアプリケーションの移植が従来に比べ容易であると思われる。
SausalitoSausalito 版版 Cobalt ServerCobalt Server
• Sausalito アーキテクチャを採用している Cobalt Server は以下のとおり– Sun Cobalt Qube3– NTT DoCoMo MMQUBE2 (OEM 版 Qube3)– Sun Cobalt Qube3 Plus – Sun Cobalt RaQ550– SunCobalt Control Station
(2002 年 9 月現在)備考: Sun Cobalt XTR は部分的に Sausalito が使われ
ている。
SausalitoSausalito の画面構成(ログイン画の画面構成(ログイン画面)面)
※ この画面は MMQUBE2 のものである。
test.cobalt*qube.org
SausalitoSausalito の画面構成(ログイン後)の画面構成(ログイン後)
※ この画面は MMQUBE2 のものである。
SausalitoSausalito 対応アプリケーション作成の準備対応アプリケーション作成の準備用意するもの
– Sausalito アーキテクチャのサーバ• 管理者権限が必要
– IE5 以上が動作する PC– Telnet クライアントフト
• TeraTerm( フリーウェア ) がおすすめ– FTP クライアントソフト
• FFFTP( フリーウェア ) がおすすめ– tar,gzip,rpm に対応した圧縮・解凍ソフト
• ExpLzh( シェアウェア )+tar32.dll がおすすめ– テキストエディタ
• 秀丸 ( シェアウェア ) がおすすめ
SausalitoSausalito 対応アプリケーション作成の準備対応アプリケーション作成の準備• あるとうれしい予備知識(なくても
可?)– Telnet および Shell を使ったことがある– html のソースを見たり書いたことがある– xml について知っている– rpm の SPEC ファイルを書いたことがある– Perl 、 PHP 、 Awk のソースを見たことがある– EUC 、 SJIS コードとは何のことか知っている– vi 、 more を使ったことがある– ‘/’ と書いて root と読める
SausalitoSausalito のディレクトリ構成(後で使うのディレクトリ構成(後で使うよ)よ)
/usr/ share/locale/ ja/LC_MESSAGES/ ***.mo
String ファイルen/LC_MESSAGES/ ***.mo
・・・
sausalito/ constructor/
destructor/
handler/
schema/
***.pl
***.pl
***.schema
***.pl
CCE 関連ファイル(今回は作成しない)
ui/ menu/
web/
style/
conf/
libPhp/bin/
lib/
・・・
Sausalito システムディレクトリ(ユーザは直接使用しない)
***.xml
***. php ,html,pl
***.xml
menu 定義ファイル
CGI ファイル
Style ファイル
本日のお題本日のお題
課題1) Sausalito メニューに“ HelloWorld”アプリを追加する
課題2) Sausalito のメッセージを大阪弁に変更する
課題1:メニュー追加課題1:メニュー追加 Sausalito メニューに“ HelloWorld” アプリを追
加しよう
STEPSTEP 1:メニューの構造を探ってみ1:メニューの構造を探ってみるる
/usr/sausalito/ui/menu の下を覗く[admin admin]$ cd /usr/sausalito/ui/menu[admin menu]$ ls -FVM/ base/ ioffice/ live/ palette/
[admin menu]$ cd base[admin base]$ ls -Faddressbook/ carmel/ firewall/ network/ telnet/ wizard/ am/ dhcpd/ ftp/ power/ time/ workgroup/ apache/ disk/ import/ quotastats/ user/ appleshare/ dns/ ldap/ snmp/ webmail/ backup/ email/ maillist/ swupdate/ webstats/ cache/fileshare/ multidrop/ system/ winshare/
[admin base]$ cd am[admin am]$ ls -FamSettings.xml amStatus.xml monitor.xml monitorLight.xml
STEPSTEP 2:xmlファイルの構造を推2:xmlファイルの構造を推測する測する
① 既存のxmlファイルを見てみる
ソース1: monitor.xml
ソース2: amStatus.xml
<item id="base_monitor" label="[[base-am.activeMonitor]]" description=“[[base-am.activeMonitor_help]]” > <parent id="base_administration" order="80"/></item>
<item id="base_amStatus" label="[[base-am.amStatusMenuName]]" description="[[base-am.amStatusMenuDesc]]" url=“/base/am/amStatus.php” > <parent id="base_monitor" order="10"/></item>
STEPSTEP 2:続き2:続き② xmlファイルの構造を推測する (id 属性)
– item エレメントの id 属性は自分自身の ID を指しているらしい。
– parent エレメントの id 属性は自分の親の ID を指しているらしい。base_administration
base_monitor
base_amStatus
STEPSTEP 2:続き2:続き③ xmlファイルの構造を推測する (order 属
性)– parent エレメントの order 属性は同じ親に属してい
るものの間の順序を指しているらしい。monitor.xml の parent エレメントの order 属性を 80
から25に変更してみる
アクティブモニタのメニューの場所が移動した。
注意:自分で試す場合、ファイルを書き換えるときは、元のファイルを必ず バックアップしてから行うこと!
STEPSTEP 2:続き2:続き④ xmlファイルの構造を推測する (label,description 属
性)monitor.xml の item エレメントのlabel description 属性を右のように書き換えてみる
注意:自分で試す場合、ファイルを書き換えるときは、元のファイルを必ず バックアップしてから行うこと!
<item id="base_monitor" label="base_monitor の Label だよ " description="base_monitor の description だよ "> <parent id="base_administration" order="80"/></item>
メニュータイトルとアクティブヘルプが書き換わった!
STEP2:STEP2: 続き続き⑤ xmlファイルの構造を推測する (url 属性)
amStatus.xml ファイルの item エレメントの URL 属性の URL を左上のロゴのビットマップの URL に書き換えてみる。
※URL のドキュメントルートは /usr/sausalito/ui/web である。
<item id="base_amStatus" label="[[base-am.amStatusMenuName]]" description="[[base-am.amStatusMenuDesc]]" url="/libImage/topLogo.gif“ > <parent id="base_monitor" order="10"/></item>
注意:自分で試す場合、ファイルを書き換えるときは、元のファイルを必ず バックアップしてから行うこと!
amStatus.xml
クリックすると、ロゴが表示された!
STEP2:STEP2: まとめまとめ
<item id="base_amStatus" label="[[base-am.amStatusMenuName]]" description="[[base-am.amStatusMenuDesc]]" url=“/base/am/amStatus.php” > <parent id="base_monitor" order="10"/></item>
• xml ファイルの構造エレメント
属性 意味
item id 自分自身のメニュー項目 ID (すべてのメニュー項目でユニークである必要がある)
item label メニューに表示される文字列(日本語も使用可。 S-JIS で指定する必要がある。)
item description アクティブヘルプに表示される文字列(日本語も使用可。 S-JISで指定する必要がある。)
item url メニュー項目クリック時に表示される URL
parent id 自分がぶら下がるメニュー項目 ID
parent order メニューの並び(小さいほど上または、左に表示される。)amStatus.xml
① ② ③ ④ ⑤ ⑥ ⑦root
STEP3:STEP3: メニューツリーを確認するメニューツリーを確認する管理者ログイン時のメニューツリーを知る
• メニューツリーの TOP は root である。
root
①base_administration②base_software
③base_programs
④base_personalProfile
⑤base_updateLight
⑥base_monitorLight
⑦base_logout
STEP4:STEP4: 課題の課題の HelloHello メニューをチェックすメニューをチェックするる
• Hello メニューは「プログラム」タブの中にある。– base_programs の子メニューとなる
• HelloWorld メニューは「 Hello 」メニューの中にある
– Hello メニューの ID の子メニューとなる。
• HelloWorld アプリケーションは「 HelloWorld 」メニューから呼び出される。
base_programs
base_hello
base_helloWorld
STEP5:HelloSTEP5:Hello メニューを作成するメニューを作成する• これまでの情報を用いて、 Hello メニュ
ーを作成する
<item id="base_hello" label=“Hello" description=“Hello メニューです。” > <parent id="base_administration" order=“21"/></item>
<item id="base_helloWorld" label=“HelloWorld” description=“HelloWorld アプリケーションです。 " url=“hello/hello.htm” > <parent id="base_hello" order="10"/></item>
hello.xml
helloworld.xml
STEP5:STEP5: 続き続き•どこに XML ファイルを置くか?
– Sausalito は /usr/sausalito/ui/menu の下のフォルダを再帰的に探索する。
– アプリごとにxmlファイル配置のためのディレクトリを分けることが望ましい。•今回は、 ui/menu の下に、 hello というディレク
トリを作成し、その中に配置する。
注意: Sausalito は、シンボリックリンクのディレクトリは探索 しないため、実体のディレクトリ内に入れる必要がある
STEP6:hello.htmSTEP6:hello.htm を作成するを作成する• メニューからリンクされる HTML ファイ
ルを作成する
hello.htm
HTML ファイルの配置場所は /usr/sausalito/ui/web/hello/
<HTML><body>Hello World アプリケーションの出力です。</body></html>
課題1:完成!課題1:完成!
課題2:メッセージの書き換え課題2:メッセージの書き換え課題2) Sausalito のメッセージを大阪弁に変更
しよう– 電源切断手順画面を大阪弁に変更する
STEP1:STEP1: メッセージのありかを探すメッセージのありかを探す• /usr/share/locale/ja/LC_MESSAGES/ の下を覗
く
• *.mo というファイルが多数存在する。• これらは String ファイルと呼ばれるものである。
admin admin]$ cd /usr/share/locale/ja/LC_MESSAGES/[admin LC_MESSAGES]$ lsbase-fileshare.mo base-sys.mo base-firewall.mo base-system.mo base-ftp.mo base-telnet.mobase-import.mo base-time.mo base-lcd.mo base-user.mo base-ldap.mo base-webmail.moadamnet.mo base-maillist.mo base-webstats.mo base-addressbook.mo base-memory.mobase-winnetwork.mo base-am.mo base-modem.mo base-winshare.mo base-apache.mo base-multidrop.mo base-wizard.mo base-appleshare.mo base-network.mo base-workgroup.mo base-backup.mo gnupg.mo base-cache.mo base-power.mo palette.mo base-carmel.mobase-power.mo.org sharutils.mo base-cce.mo base-quotastats.mo swatch.mo base-dhclient.mo base-sauce-basic.mo tar.mo base-dhcpd.mo base-services.mo textutils.mo base-disk.mo base-snmp.mo trueBlue.mo base-dns.mo base-ssl.mo util-linux.mo base-email.mo base-swupdate.mo[admin LC_MESSAGES]$
STEP2:StringSTEP2:String ファイルとはファイルとは• String ファイルとは、文字列にタグ (ID)
をつけて格納したもの。• String ソースファイル (*.po) から生成さ
れる。•国際化ライブラリにて使用される。String ソースファイル (*.po)
String ファイル (*.mo)
enco
de
deco
de
msgfmt コマンド msgunfmt コマンド
STEP3:StringSTEP3:String ソースファイルの書式ソースファイルの書式
msgid: メッセージの ID をあらわす msgstr: メッセージの文字列。日本語可。文字コードは S-JIS を使用する。
msgid “ユニークな ID1”msgstr “ メッセージ 1” (空行 )msgid “ユニークな ID2”msgstr “ メッセージ 2” (空行 ) ・・・・・・msgid “ユニークな IDn”msgstr “ メッセージ n”
STEP4:msgfmt,msgunfmtSTEP4:msgfmt,msgunfmt の使い方の使い方• msgfmtコマンド
書式: msgfmt xxx.po [ -o xxx.mo ]– String ソースファイル xxx.po から、 String ファ
イル xxx.mo を生成する。 -oオプションが無指定の場合は message というファイル名のファイルに出力する。
• msgunfmt コマンド
書式: msgunfmt xxx.mo [ -o xxx.po]– String ファイル xxx.mo から、 String ファイル xxx.
po を生成する。 -oオプションが無指定の場合は、標準出力に出力する。
STEP5:*moSTEP5:*mo ファイルからファイルから *po*po ファイルを作ファイルを作成成
•Stringファイルから、Stringソースファイルを作成する[root LC_MESSAGES]# msgunfmt base-power.mo -o /tmp/base-power.po[root LC_MESSAGES]# head /tmp/base-power.pomsgid "askRebootConfirmation"msgstr " サーバを再起動してよろしいですか? "
msgid "power"msgstr "電源 "
msgid "powerHelp"msgstr " サーバを再起動できます。 "
msgid "reboot“・・・・・
STEP6:*poSTEP6:*po ファイルをPCに転送するファイルをPCに転送する
– STEP5 で生成した base-power.po を FFFTP を利用してPCに転送する。• ASCIIモードで転送する。•文字コードは、変換しない。
STEP7:*.poSTEP7:*.po ファイルを編集するファイルを編集する– msgunfmt コマンドで生成された *.po ファ
イルは、文字列が長い場合80文字で改行されているため、文字列を一本にする。
STEP7:STEP7: 続き(関西人用)続き(関西人用)• 文字列をチェックし、変な日本語をすべ
て大阪弁に書き換える。
編集が完了したら、 base-power-osaka.po というファイル名で保存する。
STEP7:STEP7: 続き(関西人以外用)続き(関西人以外用)• インターネット上の大阪弁変換フィルタ等を用いて、メッセージを大阪弁に変換する。例: http://www.yorosiku.net/yan/imode/iosaka.htmlを用いる。
編集が完了したら、 base-power-osaka.po というファイル名で保存する。
STEP8:STEP8: 編集後の編集後の *.po*.po ファイルをアップすファイルをアップする。る。
– 編集後の base-power-osaka.po ファイルをサーバにFTPする。・ ASCIIモードで転送する。・文字コードは、変換しない。
STEP9:*.moSTEP9:*.mo ファイルを作成し入替えファイルを作成し入替えるる
• 書き換えた、 base-power-osaka.po ファイルを元に、 base-power.mo ファイルを作成し、元のファイルと入替えを行う。
[root /tmp]# msgfmt base-power-osaka.po -o base-power.mo[root /tmp]# cd /usr/share/locale/ja/LC_MESSAGES/[root LC_MESSAGES]# mv base-power.mo base-power.mo.org[root LC_MESSAGES]# cp /tmp/base-power.mo .[root LC_MESSAGES]#
注意:自分で試す場合、ファイルを書き換えるときは、元のファイルを必ず バックアップしてから行うこと!
課題2:完成!課題2:完成!
おまけ1:メニュ内でおまけ1:メニュ内で StringString ファイルファイルを使うを使う
hello.po
hello.xml
helloworld.xml
msgid "hellogroup"msgstr "Hello でっせ "
msgid "helloworldgroup"msgstr "HelloWorldどすえ "
/usr/share/locale/ja/LC_MESSAGES/hello.mo
<item id="base_hello" label="[[hello.hellogroup]]" description="HelloWorld メニューです " type="monitorOn" > <parent id="base_programs" order="21"/></item>
<item id=“base_hello_helloApp” label=“[[hello.helloworldgroup]]” description=“HelloWorld でっせ。よろしゅうたのむわ” url="/hello/hello.htm" > <parent id="base_hello" order="21"/></item>
*.moファイル名msgid
おまけ1:出力結果おまけ1:出力結果
おまけ2:日本語文字が化ける場合おまけ2:日本語文字が化ける場合• S-JIS漢字中に含まれる 0x5c(\) キャラクター
コードをエスケープすることにより回避する。– enadd.pl :漢字中に 0 x 5c が含まれている場合、その前に 0x5c を挿入する。( msgfmt の前に使用 )
– endel.pl :漢字中に 0 x 5c が 2回連続して含まれている場合、 0x5c をひとつ削る。( msgunfmt の後に使用 )
#!/usr/bin/perlwhile(<>){s/\\\\/\\/g;print;}
#!/usr/bin/perlwhile(<>){s/\\/\\\\/g;print;}
enadd.pl endel.pl
おまけ3:メニューツリーのおまけ3:メニューツリーの rootroot を変を変えるえる
• ログイン後特定のメニューを root にして、Navigation Manager を立ち上げる
http:// サーバ :444/ login.php?target=/nav/cList.php%3Froot= メニュー ID %3FCo
mmFrame= 追加スクリプト
例 :http://192.168.0.30:444/login.php?target=/nav/cList.php%3Froot=base_administration
おまけ3:結果おまけ3:結果