松尾です
On Tue, 24 Aug 2004 12:29:34 +0900
Hisao SHIBUYA <shibuya (at mark) alpha.or.jp> wrote:
> 渋谷です.
>
> snip...
>
> > 少し調べてパッチを作りました。
> >
> > ui ディレクトリで
> > patch -p0 < wizard.mod.diff
> > であたります。
> >
> > 元のソースの該当部分を載せます。
> >
> > $oid = $cceClient->find('System');
> >
> > if ( $accept == 'accept' ) {
> > $cceClient->set($oid, '', array('isLicenseAccepted' => '1'));
> > $errors = $cceClient->errors();
> > } else {
> > $cceClient->set($oid, '', array('isLicenseAccepted' => '0'));
> > $errors = $cceClient->errors();
> > $errors[] = new Error('[[base-wizard.mustAcceptToUse]]');
> > }
> >
> > $oid には、find の結果の ARRAY が入っています。
>
> これですが,普通 System という名前のオブジェクトは 1つしか存在しないは
> ずなんですが.
えっと、問題が起きるマシンでも、System はひとつです。ただ OID
は 6 です。ちなみに、OID 1 は、 Disk オブジェクトです。
find System
104 OBJECT 6
201 OK
$oid はいつも中身がひとつしかない ARRAY で、その一番目の要素が
1 だったり 6 だったりします。で、その ARRAY をスカラーで評価
すると 偶然 1 になるので、 System の OID が 1 の時は 偶然うまく
いっているのだと思います。
> > $cceClient->set($oid, '', array('isLicenseAccepted' => '1'));
> > ここで System オブジェクトの OID が 1 の時は偶然大丈夫ですが、
> > System オブジェクトの OID が 例えば 6 だったりすると、エラー
> > が出ます。どんな時に System の OID が 1 では無くなるのかは、
> > 検証していません。
>
> 6 の時にエラーではなく,1 と 6 が存在しているとかではないでしょうか.
> /usr/sausalito/bin/cceclient
> を実行して
> find System
> で結果を見てもらえますか.
> 普通であれば
> find System
> 104 OBJECT 1
> 201 OK
> のように 1 のみが帰ってくると思います.複数ある場合は 104 の行が複数行
> 帰って来ます.
先ほど書けばよかったのですが、これは確認済みです。System は ひとつ
しかなくて、OID が 6 になってます。
> System オブジェクトは cce_construct で作成されます.
> [root@fc1]# /usr/sausalito/bin/cce_construct
> ----- constructing -----
> /usr/sausalito/constructor/base/system/10_addSystem.pl
>
> これはアルファベット順に実行されるので,今のところ一番初めに
> 10_addSystem.pl が実行され,System がないと追加します.
> なので,普通であれば,1 に System が追加されると思います.
問題のマシンで /usr/sausalito/bin/cce_construct を実行しても
10_addSystem.pl が 一番始めに実行されています。
うーん。何故 System が 6 で出来るのでしょうか
--
Takashi Matsuo
tmatsuo (at mark) 10art-ni.co.jp