OpenPNE3インストールメモ

環境情報

とあるVPSサーバです。。

作業前
作業後

環境準備

全然やってなかったのでいろいろ面倒でした

PHPのバージョンアップ(再インストール)

一旦全部アンインストール

yum remove php*
yumのレポジトリを追加
  • remi
cd /etc/yum.repos.d/
wget http://rpms.famillecollet.com/enterprise/remi.repo
  • epel
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
PHP5.3のインストール
yum --enablerepo=epel install libedit
yum --enalberepo=remi install php
yum --enablerepo=remi install php-mbs* php-XML* php-pcre*  他にもいろいろ OpenPNEに必要なパッケージを。
yum --enablerepo=remi install php-mysql

依存性の問題でインストールされない・・
yumは「依存性無視」というオプションがないそうなので

  • ダウンロードだけできるutilityをインストール
yum install yum-utils
yumdownloader --enablerepo=remi php-mysql

rpmで依存性を無視(--nodeps)してインストール

rpm -ivh --nodeps php-mysql-5.3.5-1.el5.remi.1.i386.rpm

PHPからMysqlに繋がらない・・・
apacheのエラーログを見ると

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/mysql.so' - libmysqlclient.so.16: cannot open shared object file: No such file or directory in Unknown on line 0

依存性を無視してphp-mysqlを入れたが、php-mysql同梱のmoduleはlibmysqlclient.so.15で、libmysqlclient.so.16が必要なようだ・・

MysqlをUpdateしてみる
  • Mysqlのアップデート
yum --enablerepo=remi update mysql

エラーは出ず。つながったようだ。

OpenPNEのインストール

ファイルの配置
cd /usr/local
  • zipファイルをダウンロード
wget http://github.com/openpne/OpenPNE3/zipball/OpenPNE-3.2.7.4 

証明書がナントカカントカ・・
無視する

wget http://github.com/openpne/OpenPNE3/zipball/OpenPNE-3.2.7.4 --no-check-certificate
  • 解凍 → リネーム
(pwd → /usr/local)
unzip openpne-OpenPNE3-OpenPNE-3.2.7.4-0-g9e16c04.zip
mv openpne-OpenPNE3-9e16c04 openpne
ln -s /var/www/html/pnesns /usr/local/openpne/web
やっとインストールだ・・
./symfony openpne:install

あれ?いきなりエラー

PHP Warning:  require_once(/usr/local/openpne/config/ProjectConfiguration.class.php): failed to open stream: No such file or directory in /usr/local/openpne/symfony on line 13

ProjectConfiguration.class.php がないみたい。sample付きがあったのでそれをコピー

cp ProjectConfiguration.class.php.sample ProjectConfiguration.class.php

あれあれ?またエラー

Installation of "opAuthMailAddressPlugin" plugin failed: unable to unpack /usr/local/openpne/cache/.pear/opAuthMailAddressPlugin-1.1.4.1.tgz

これはPHP5.3だと起こるエラーらしい。(OpenPNE同梱のPEARのtar.phpが古い)

  • PEARPHPといっしょに入れていたのでそこからコピー
cp /usr/share/pear/Archive/Tar.php /usr/local/openpne/lib/vendor/PEAR/Archive/Tar.php

さて、もう一度

./symfony openpne:install

できたみたいだ・・けど
あららら、、なにやらWarnが

Warning: symlink(): No such file or directory in /usr/local/openpne/lib/vendor/symfony/lib/task/sfFilesystem.class.php on line 224

これはhttpd.confでのmod rewriteの許可がないと出るそうです

<Directory "/var/www/html/pnesns">
    AllowOverride All

</Directory>

アクセスしてみる

http://myRentalServer/pnesns/

とりあえずログイン画面はでた。
今日はここまで。

OpenPNE3+sendmail でケータイメール投稿に挑戦

訳あって、調べてみました。sendmailは全く触ったことないのですが・・

先人のみなさんのやり方を確認

ググるといろいろ出ますが、Ver2の情報が多いようです。
参考にさせていただいたのはこちら。
[OpenPNE] sendmail で携帯からのメール投稿を設定する方法 | Sun Limited Mt.
sendmailについてはこちら。ドメイン名やサンプルのメアドが素晴らしいです。komo繋がりということで。
http://www.komonet.ne.jp/~linux/sendmail/gaiyou.htm

まずは情報を列記

とりあえず、整理する準備としてつらつら書いてみます。

sendmail側と思われるもの
  • /etc/mail/local-host-names
    • 受け取るべきドメイン名の一覧を記述しておくファイル。ホスト名と異なる場合など。
sns.example.com
  • /etc/mail/virtusertable
    • メールアドレスを見て配送先を振り分ける、バーチャルユーザーテーブル
@sns.example.com sns-ktai@example.com
  • virtusertable を変更後は下記コマンドを実行して設定を反映させてください。
    • これは定義ファイルを.dbファイルに反映させパフォーマンスを上げるため、と解釈しました
# makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable
  • /etc/aliases
    • sns-ktai」を別処理(openpneのmail.phpスクリプト)に振り分けるために記述
    • なお、コレはOpenPNE2の記述です
sns-ktai: "| php /path/to/openpne/bin/mail.php"
  • aliases を変更後は下記コマンドを実行して設定を反映させてください。
    • makemapと似たようなもの?と解釈
# newaliases

php の部分を /usr/bin/php とかフルパスにしても同じです。sendmail が実行する smrsh というのが sh よりも厳しいらしく実行時にエラーになってしまいます。そこで、 /etc/smrsh 以下に /usr/bin/phpシンボリックリンクを作ることにより回避できます。

$ ln -s /usr/bin/php /etc/smrsh/php
これはどっちだ?
define('MAIL_SERVER_DOMAIN', 'example.com');
    • OpenPNEの設定ファイルでした。
OpenPNE

こちらを参考にさせていただきました。※これはOpenPNE3の記述です
OPVC04 携帯メール投稿のセットアップ|OpenPNEの手嶋屋

openpne_user: "| cd /path/to/openpne/ && php /path/to/openpne/symfony openpne:execute-mail-action"

手嶋社長のブログでは、Postfixがメールサーバとなっており、パイプでつなげてOpenPNEにメールを渡しています。
中を見るとOpenPNEディレクトリに移動してから、引数として「execute-mail-action」を渡して、symfonyフレームワークに処理を依頼しているようです。

sendmailについてもう少し調べてみた

「&&」について

Postfixでは「&&」でチェンジディレクトリとphpの実行を連続して書いていますが、sendmailだとどう書くのだろうと思い調べてみました。

「これだ!」と明確に書いているサイトは見つからなかったのですが、「&&」でつなぐのはどうやら共通のようです。なので、大丈夫だろう、ということで。クウォートしている中身はAPLには関係なく、Linuxコマンドの世界で動くもの、と解釈しました。

何が渡されるの?

直接関係はなさそうですが気になったので。百式さんのサイトが参考になりました。
PHPとsendmailで任意のメールアドレスに来たメールを処理する方法 | IDEA*IDEA
「4.さてPHP」でのところにありますが、フツーに標準出力からもらっているようです。なので、PHPコード側では「stdin」標準入力から読み出しと考えればよさそうです。

整理してみた

メールサーバの使い方は、OpenPNEのバージョンには左右されないはずなので、Ver2での先人のみなさんのノウハウをそのまま拝借。Ver3ではメールサーバからの流し込み先の処理が違う(Ver2はフツーのphp、Ver3はsymfony経由)ので、alias定義だけVer3用に変更。これでいけるのでは??

ということで、まとめてみると、

Sendmail側の設定
sns.example.com
  • /etc/mail/virtusertable
    • xxxxxxx@sns.example.com のメールの振り分け先をバーチャルユーザーテーブルに登録
@sns.example.com sns-ktai@example.com
    • 反映
# makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable
  • /etc/aliases
sns-ktai: "| cd /path/to/openpne/ && php /path/to/openpne/symfony openpne:execute-mail-action"
    • 反映
# newaliases
  • php /path/to/openpne/bin/mail.phpが実行されない件の対策
    • /etc/smrsh に php へのシンボリックリンクを作成
      • OpenPNEがVer2でもVer3でも、引数が変わっているだけで実行プログラムは「php」なので変更なし
    • phpの在り処が違うなら「/usr/bin」を適切なパスに変更
    • cd については大丈夫じゃないの?
# ln -s /usr/bin/php /etc/smrsh/php
OpenPNE側の設定
define('MAIL_SERVER_DOMAIN', 'example.com');

とここまで書きましたが

まだ、なんにもテストとかはしてません。これからです・・・

CakePHPの規約

モデル

クラス名
Post , PostType
ファイル名
post.php , post_type.php
テーブル名
posts , post_types

コントローラ

クラス名
PostsController , PostTypesController
ファイル名
posts_controller.php , post_types_controller.php
メソッド名
delete , deleteAll

ビュー

ファイル名
view/posts/delete.ctp , view/posts/delete_all.ctp

Bakeの使い方

準備

まずはPathの設定

cakeコマンド(実体はbatchファイル)にパスを通します。
新しく作ったCakePHPアプリを作るディレクトリ(よくあるのはhtdocs/[APL名])の下のcake\consoleに移動して

>set PATH=%PATH%;%CD% 

これでPathが通りますた。確認。

>set
・
・
PATH=C:\Program ・・・・・ 最後に ;D:\〜〜〜\htdocs\[CakeAPL]\cake\console
appディレクトリに移動
cd ../../app

Bakeで各ファイルを作る

下記コマンドでbakeを起動

>cake bake

Welcome to CakePHP v1.3.5 Console
---------------------------------------------------------------
App : app
Path: \〜〜\app
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q)
DB定義

[D]を選択

モデル作成

[M]を選択

  • モデル作成時の注意

CakePHPのCSS

まずは全体に対して

マージン(BOXの外側の余白)、パディング(BOXの内側の余白)を0に

{
	margin:0;
	padding:0;
}

HTMLタグに対して

id/classが無指定の場合はコレが適用されます

bodyタグ

背景色、文字色、フォント、マージン(BOXの外側の余白)を設定

body {
	background: #003d4c;
	color: #fff;
	font-family:'lucida grande',verdana,helvetica,arial,sans-serif;
	font-size:90%;
	margin: 0;
}
アンカー(a)タグ

基本的な設定

a {
	color: #003d4c;
	text-decoration: underline;
	font-weight: bold;
}

マウスポインタを置いたときは色を変える

a:hover {
	color: #367889;
	text-decoration:none;
}

アンカーの中にimgがある時は枠線なし

a img {
	border:none;
}
見出し(h1 など)タグ

h1〜4までの基本設定

h1, h2, h3, h4 {
	font-weight: normal;
	margin-bottom:0.5em;
}

レベル毎の個別設定

h1 {
	background:#fff;
	color: #003d4c;
	font-size: 100%;
}
h2 {
	background:#fff;
	color: #e32;
	font-family:'Gill Sans','lucida grande', helvetica, arial, sans-serif;
	font-size: 190%;
}
h3 {
	color: #993;
	font-family:'Gill Sans','lucida grande', helvetica, arial, sans-serif;
	font-size: 165%;
}
h4 {
	color: #993;
	font-weight: normal;
}
リスト(ul、li)タグ

マージン(外余白)を設定。値が2つなので【上下】【左右】と読んで、左右にマージンを取る

ul, li {
	margin: 0 12px;
}

id指定用(レイアウト用)

HTML側で「id=xxxx」と指定する

コンテナ

で指定。全体を囲む

#container {
	text-align: left;
}
ヘッダ

で指定。

#header{
	padding: 10px 20px;
}

ヘッダの中の見出し「h1」とアンカー「a」

#header h1 {
	line-height:20px;
	background: #003d4c url('../img/cake.icon.png') no-repeat left;
	color: #fff;
	padding: 0px 30px;
}
#header h1 a {
	color: #fff;
	background: #003d4c;
	font-weight: normal;
	text-decoration: none;
}
#header h1 a:hover {
	color: #fff;
	background: #003d4c;
	text-decoration: underline;
}
コンテンツ

で指定。いわゆる本文。

#content{
	background: #fff;
	clear: both;
	color: #333;
	padding: 10px 20px 40px 20px;
	overflow: auto;
}
フッタ

で指定。

#footer {
	clear: both;
	padding: 6px 10px;
	text-align: right;
}

インターネットで起こっていることがいろいろわかった

ここ数日、やっといろいろな事がわかってきた。
ずいぶん遅いとは思うけど、。

facebookTwitterよりつながりが届く気がする。英語必須。

github:ダニエル ピンクさんの「フリーエージェント社会の到来」で言ってた協業のプラットフォームか。これも英語必須。

昔からあったことなのだろうけど、そして僕が知らなかっただけなのだろうけど、これだけカタチになって見せられるとビビった。

昔ながらの閉じた世界での開発やらいろいろなことは、いつまで生き残るのだろう。たぶんそれはそれで残るのだろうけど。

とにかく、英語必須。そして価値ある情報を発信すること。