[[ノート>ノート/ノート]]~
訪問者数 &counter();      最終更新 &lastmod();

*ACS導入の経緯 2 [#cd1bf006]
***導入ガイドメモ &ref(); [#j3ff74d0]

***面倒なので、ACSご指定の環境を別途構築 ⇒ salt.yy [#u1908681]

-間借りだとソフト環境がご指定のものにならない。特にPHP4 vs PHP5の問題は、さしあたって付き合いたくない。
-もう1台マシンを調達。どうせテスト用だから非力でも良い。ということで、1台確保。念のためHDD(ころがっていた30GB)をローレベルフォーマットしてからスタート。
-Linuxとして手元マシンと同様Fedora導入。これが間違いかも?? Fedora-8。Live-CDを作り、そこからインストール。
-ネットワーク設定でトラブル。NetworkManagerとかいうわけの分からないものが入っていて、「インターフェースの変更などを自動認識する」と称するのだが、勝手にネットワークの設定を変えてしまう。具合が悪いので(サーバーには向かないよね)、/etc/rc.d/rc2.d, rc3.d, rc4.dからNetworkManagerの起動を外す(S90NetworkManagerからK90NetworkManagerに名前変更)。今度は全くネットワークがスタートしないので、もともとからある"network"スクリプトを実行するように、K90networkをS10networkに変更。これは他のLinuxマシンでS90ではなくてS10の順位になっているため。
-一応これで起動可能。

***環境作り salt編 [#s367014c]
-saltはFedora8-live。パッケージからインストール。パッケージ情報は
http://koji.fedoraproject.org/koji/packageinfo?packageID=280 あたりにあり。検索で探せる。
-OpenSSLは、Fedora-8上のパッケージを利用。/usr/bin/openssl version ⇒ 
OpenSSL 0.9.8b 04 May 2006。ということでよさそう。~
ヘッダファイルなどが見当たらない。で yum install openssl-devel~
これのdependencyとして、yum install krb5-devel、yum install zlib-devel。
-mod_sslが必要。コンパイル時にリンクしてしまうのではなく、モジュールとして実行時にロードする(ようにFedoraでは設定されている)~
yum install mod_ssl
-あと必要なのが、OpenSSLでサーバー証明書を作成しておくこと。
これらの証明書ファイルの作り方は、http://httpd.apache.org/docs/2.2/ssl/ssl_faq.html のCertificateの項を参照。
今のところ手抜きで、Self-signed certificateを使うことにする。~

-ApacheにSSL virtual host 導入
--http://httpd.apache.org/docs/2.2/vhosts/
--http://wiki.apache.org/httpd/ExampleVhosts
--httpd.confファイルに2つの変更。1つはvirtual host機能を使ってnon-SSLとSSLの
2つのサーバー(named host)を立てること。もう1つはSSL用の構成を作ること。
--virtual host機能は
 ### Virtual Host Configuration.  Two V-H are configured
 NameVirtualHost *:80
 NameVirtualHost *:443
 
 # Virtual Host #1  Non-SSL host
 <VirtualHost *:80>
   ServerName pepper.is.sci.toho-u.ac.jp
   DocumentRoot "/usr/local/apache2/htdocs"
 </VirtualHost>
 
 <VirtualHost *:443>
   ServerName pepper.is.sci.toho-u.ac.jp
   DocumentRoot "/usr/local/apache2/htdocs-ssl"
   SSLEngine On
 </VirtualHost>
--SSL用の構成は、全体に
    SSLCertificateFile    /path/path/path/server.crt
    SSLCertificateKeyFile /path/path/path/server.key
--SSLがうまく動くかどうかのアクセスチェック方法として、
http://httpd.apache.org/docs/2.2/ssl/ssl_faq.htmlのConfigurationの項の
「How do I speak HTTPS manually for testing purposes?」が使える。具体的には
port80にtelnetする代わりに
 $ openssl s_client -connect localhost:443 -state -debug
 GET / HTTP/1.0
でマニュアルアクセスできる。telnetの時と同様に、GET / HTTP/1.0のあとで2回Enterキーを押すこと。
-Fedoraのapacheのconfファイルは、追加分を別ファイルとしてconf.d/ssl.confやconf.d/php.confのように作ることになっている。でも全体構造がわかり難いので
このやり方はやめて(includeを止めて)すべてhttpd.confに書き込む。

-PHP5 (ACSはPHP-4を仮定しているが、12月いっぱいでPHP-4の提供が終わるので、PHP-5を入れてしかしZend-1を使うようにphp.iniを設定して、PHP-4をシミュレートしよう。)~
yum install php にてphp-5.2.4-3をインストール。~
phpinfo();を試してOK

-PHPからldapサーバをアクセスするために、php-ldapモジュールが必要。上記のパッケージだと、--with-ldap=sharedでコンパイルされているため、shared moduleが必要になる。
yum install php-ldapを実行してインストール。OK。~
テストのため、次のページを作って試す。http://www.php.net/manual/ja/ref.ldap.php
 <?php
 // LDAP の基本シーケンスは、接続、バインド、検索、検索結果の解釈、
 // 接続のクローズです。
 
 echo "<h3>LDAP query test</h3>";
 echo "Connecting ...";
 $ds=ldap_connect("localhost");  // 有効な LDAP サーバーに違いない!
 echo "connect result is " . $ds . "<br />";
 
 if ($ds) { 
     echo "Binding ..."; 
     $r=ldap_bind($ds);     // これは "匿名" バインドで、通常は
                            // 読みこみのみのアクセスとなります。
     echo "Bind result is " . $r . "<br />";
 
     echo "Searching for (sn=S*) ...";
     // 名前(surname)エントリを検索
     $sr=ldap_search($ds, "o=My Company, c=US", "sn=S*");  
     echo "Search result is " . $sr . "<br />";
 
     echo "Number of entires returned is " . ldap_count_entries($ds, $sr) . "<br />";
 
     echo "Getting entries ...<p>";
     $info = ldap_get_entries($ds, $sr);
     echo "Data for " . $info["count"] . " items returned:<p>";
 
     for ($i=0; $i<$info["count"]; $i++) {
         echo "dn is: " . $info[$i]["dn"] . "<br />";
         echo "first cn entry is: " . $info[$i]["cn"][0] . "<br />";
         echo "first email entry is: " . $info[$i]["mail"][0] . "<br /><hr />";
     }
 
     echo "Closing connection";
     ldap_close($ds);
 
 } else {
     echo "<h4>Unable to connect to LDAP server</h4>";
 }
 ?>
(localhostはリモートで試す。)

-PostgreSQL(server)もパッケージで導入。yum install postgresql-serverで、postgresql8.2.5-1.fc8とpootgresql-server8.2.5-1を導入。yumで、Fedoraサイトに存在するパッケージを探すには
 yum list | grep postgres
などとやるとよい。yumの使い方サマリーはhttp://www.searchman.info/tips/1800.html~
Postgresqlをテストするにはhttp://www.postgresql.org/docs/8.2/static/install-short.html
 adduser postgres  これはyumでパッケージインストールすれば自動的に作られる
 mkdir /usr/local/pgsql/data  今は/var/db/pgsqlを作った
 chown postgres /usr/local/pgsql/data
 su - postgres
 /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
 /usr/local/pgsql/bin/createdb test
 /usr/local/pgsql/bin/psql test


-ImageMatickの導入。これもyumで済まそう。yum list | grep ImageMagickとすると
いろいろ出てくるが、ImageMagick.i386とImageMagick-devel.i386だけにしておこう。
yum install ImageMagick-develとすると、dependencyとしてImageMagick本体も入る。
そのほかたくさんdependencyがある。

-なんと、PHPでPEARによるライブラリ導入が必要。PEARとはPHPの(外部)ライブラリを
簡単に導入できる仕組(というか、開発を標準化してみんなが便利なライブラリを作り、
流通させられるようにする仕組かな)。ACSのインストールリストにあがっているものを
PEARで導入する必要がある。たとえばDB, Mail, ...~
まず、pear本体をyum install php-pearで1.6.2-2.fc8をインストール。
--PEARでライブラリをインストール。コマンドラインから
 pear install --alldeps <library>
無事完了

〜〜〜〜ここまで

-いよいよACSにかかる。
--さっそく、PHP4 vs 5 の問題が発生。PHP5では"this"の扱いが違うので、PHP4で書かれたコンストラクタ(PHP4ではクラス名の関数を定義する)内で、if (うまくいかなければ) $this=NULL; 
としておいて、外側で $xx_instance = new Class名(); としてうまく作られなければ 
$if (!xx_instance) あきらめる、 という仕組が、「$this=NULL」の部分がエラーになる。
PHP5のマニュアルを見ると、thisは変わったよ、と書いてある。どう書き換えたらいちばんいいのか?~
~
マニュアル [[PHP 4 から PHP 5 への移行:http://www.php.net/manual/ja/migration5.php]]
の下位互換性のない変更点の1行目 「新たな予約キーワードがいくつか あります。」

--あっさり逃げる手としては、[[FAQ PHP 4 から PHP 5 への移行:http://www.php.net/manual/ja/faq.migration5.php]] にある記述、~
PHP 5 ではまったく新しいオブジェクト指向モデルが採用されていると 聞きましたが、既存のオブジェクト指向なコードは動きますか? 新しい オブジェクト指向モデルについての情報はどこで得られますか?~
PHP 5 での主要な変更点は新しいオブジェクト指向モデルであり、それは Zend Engine 2.0 を用いています。 zend.ze1_compatibility_mode ディレクティブを設定することで、 Zend Engine 1.0 (PHP 4) との互換性を保つことができます。~
新しいオブジェクト指向モデルについては、 クラスとオブジェクト と 新しい オブジェクトモデル の章に記述されています。~
にあるように、Zend Engineの1.0を使うようにしてしまえばいいはず。~
しかしこれでもだめ。

--関数unsetは使えるか? 仮にNULLの代入からunsetに変更。

-そのほかのエラーが出る。/home/acsuser/acs/webapp/logs/mojavi*を見る。直す。
--Assigning the return value of new by reference is deprecated  /home/acsuser/acs/webapp/modules/Public/actions/IndexAction.class.php:23~
			// Action Chain //
			//$action_chain =& new ActionChain;  // Yamanouchi 
			$action_chain = new ActionChain;
--Assigning the return value of new by reference is deprecated  /home/acsuser/acs/webapp/GlobalFilterList.class.php:33
//        	$this->filters['AcsExecutionTimeFilter'] =& new AcsExecutionTimeFilter;  Yamanouchi
        	$this->filters['AcsExecutionTimeFilter'] = new AcsExecutionTimeFilter;
--Implicit cloning object of class 'GlobalFilterList' because of 'zend.ze1_compatibility_mode'  /home/acsuser/acs/mojavi/mojavi-all-classes.php:1582~
仕方ないのでze1_compatibility_modeをOffにする。
--Non-static method ACSMsg::get_lang() should not be called statically, assuming $this from incompatible context  /home/acsuser/acs/webapp/modules/Public/actions/StaticIndexAction.class.php:9


--画面に何も表示されず。 ログにはcronで書かれている中でmb_http_outputがundefinedとのメッセージ。

-であるが、ここまでしか行かない。~
[[PHP-4にして、完全にやり直し。>ノート/ACS3]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS