ブログ移設しました。

bloggerから記事を移設しました。


HUGOで記事を書いてみると思いのほか書きやすかったので移動。

月曜日, 6月 29, 2015

E420であがく

結論

ここで使おうとしているrawdisk結構あぶなげ、安定していないなら、やるべきじゃない。(途中でマウント外れる事象が起こると、パーティション情報が死んだ)
なんか、データ復旧面倒だな。。。昔のMac用HDDもってきてそれからデータコピーして、、、で足りないデータなんてないよね。きっとね。大したデータじゃないよね(いいきかせ)

自宅サーバーなんて初めからなかったんや!(いいきかせ)

前書き

新しいマシン音がすごくて安眠妨害になっちゃうね。そして、このマシンあまり早いとは思えないぞ。電源もったいないかな?と思って停止させました。
http://tluna-journal.blogspot.jp/2015/06/i5-670-mem16g.html

とはいえ、このマシンに課せられた使命は、ファイルサーバーとかも担う予定だったので、またE420にlinuxを入れようとしていたのですが、

「VirtualBoxってrawdiskって考え方ないのかしら?」と思って探してみるとヒット。
http://hrn25.sakura.ne.jp/win/virtualbox-rawdisk/virtualbox-rawdisk.html

このESATA PCIXカードもwindowsだったら安定しているかもしれない。
ちなみに利用しているのは、このカード
http://www.kuroutoshikou.com/product/interface/ata_sata/sata3-ec34/
そして、HDDマウンタ?として利用しているのは、こちらの裸族のインテリジェントビル(revがちがうかもしれないけど)
http://www.century.co.jp/products/pc/hdd-case/35satahddusb30/crib535eu3v2.html

上記の環境+E420をlinuxでやっていると、並列で書き込みをする、または、でかいデータを書き込みすると、ブロックデバイスを見失ってしまうので、ファイルサーバーとしては使い物にならないという結論でして。(ファイルサーバーだけだったら、いいけど、dockerもやりたいし)

試験環境準備

以下の環境を用意した
ソフト:
Windows7 home edition
VirtualBox 4.3.28
CentOS7

ハード類:
Thinkpad E420(確か購入当初でも5万円台で、それにメモリ8Gのっけた、当然絶版)

このマシン何気に年季が入っていますが、なんか会社のマシンより軽い不思議な子。きっとメモリのおかげ?
やろうとしていることは、図解するとこんな感じ。
サーバーなんてする気がなかったけど誤ってやってしまった構成ですね。

rawdiskについては、前述の手順を踏めばいいでしょう。もちろん、私の構成だと、PhysicalDrive1,2,3,4,5がターゲットボリュームになりますね。(この辺の数字はちゃんと追っていないけど、おそらくwhindowsの管理=>ボリューム?あたりに表示されているものと同じはず)

いざ実食

する前に、パーティション情報を壊してお亡くなりになりました。
各HDDをrawdiskとして、virtualboxに認識させ、その後、mountしていましたが、しょんぼりな結果です。

ただ、何度か読めていたはいたので、問題となっている組み合わせ(SATA3-EC34<->インテリジェンスビル)の可能性も、、、否定できませんが。(何か問題があったら、パーティションまで吹き飛ばすってひどい話ではありますが。)

あとがき

rawdiskで何か問題起きると被害すごいっぽいよ。

金曜日, 6月 05, 2015

CentOS7でも定期実行を(systemctl)

サーバーを手に入れましたが、yahoo簡単決済のおかげで先方にお金を渡せていない状態です。。。。
落札者の皆々様、ちゃんと入金されるまで確認をしてください。

さて、CentOS7はsystemctlになりましたが、そのサーバー上で定期実行をさせるとなると以下の対応が考えられますね。

  1. cronをインストールしてそれで実行
  2. systemctlのtimer-unitで実行
archlinuxではそこそこ情報が出てくるのですが、CentOSではあまり情報が出てこなかったので(なれたら一緒なんでしょうが、そもそもCentOSではエラー吐いて動かないものもある)ご紹介

RHEL7: How to use Systemd timers. - CertDepot : http://www.certdepot.net/rhel7-use-systemd-timers/

MyDNSへの通知をこれで自動的にだせるようになりました。
ちゃんと使えるまでには程遠いレベルです(素直にcron使えばいいのに)

常時実行する際にユーザの実行は以下の参考URLがよさげ
http://qiita.com/todanano/items/f66f1a3ad76f76de0772

金曜日, 5月 22, 2015

俺のためじゃない。pythoniaのため

履歴として

検証環境:docker

[root@6f9b1cb04894 ~]# cat /etc/redhat-release 

CentOS release 5.11 (Final)

package

yum -y install zlib-devel openssl-devel readline-devel ncurses-devel sqlite-devel expat-devel bzip2-devel tcl-devel tk-devel gdbm-devel  unzip 

python 2.7.9

wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
cd Python 2.7.9
tar xvzf Python-2.7.9.tgz 
./configure --prefix=/usr/local/python2.7.9 --enable-shared --with-threads  && make && make install

shared lib

vi /etc/ld.so.conf
/usr/local/python2.7.9/lib
ldconfig

vim .bashrc
export PATH=/usr/local/python2.7.9/bin:$PATH

distribute-0.7.3(easy_install)

wget --no-check-certificate https://pypi.python.org/packages/source/d/distribute/distribute-0.7.3.zip#md5=c6c59594a7b180af57af8a0cc0cf5b4a
unzip distribute-0.7.3.zip 
cd distribute-0.7.3
python setup.py install 

s3cmd

wget http://downloads.sourceforge.net/project/s3tools/s3cmd/1.5.2/s3cmd-1.5.2.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fs3tools%2Ffiles%2Fs3cmd%2F1.5.2%2F&ts=1432226044&use_mirror=jaist
tar xvzf s3cmd-1.5.2.tar.gz 
cd s3cmd-1.5.2
python setup.py install 

あとがき、いろいろ追っていると、pythonが少しかわいそうな境遇。
perl5.xと似た匂いもあるけど、そんなんんじゃなくて、出ても、Python3系を使わないぞ!そんな記事を見たとき、少し落胆した。

Google Appe Engineってその辺どうなんかねー。
前に使ったとき2.7系だったの覚えてる。

火曜日, 5月 19, 2015

仮想化技術について

Dockerなる仮想化について調べていると、最初は、ハイパーバイザー+chef?とかそういう印象を受けました。

しかし、調べていくうちにこれってjailやchroot(使ったことないけど)に似ていないか?そんな気持ちで仮想化技術のことを帰り道調べてました。

知らぬはエンジニアの恥。今さら聞けない【コンテナ/仮想化技術】11選 - paiza開発日誌 : http://paiza.hatenablog.com/entry/2014/10/21/%E7%9F%A5%E3%82%89%E3%81%AC%E3%81%AF%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E6%81%A5%E3%80%82%E4%BB%8A%E3%81%95%E3%82%89%E8%81%9E%E3%81%91%E3%81%AA%E3%81%84%E3%80%90%E3%82%B3%E3%83%B3

今更聞けないか。。。

結構みかけた、使った技術が多いですね。
さて、この記事でも書かれているように、Dockerってchroot型なんですね。

ただ、chrootだけでは実現できない機能もあるので、chrootで我慢できないなら、dockerでいいのかな?と思います。

BSDの兄貴がまえからDockerなんてできとったわい!とか、cgroupsについて書かれていたのがあったのでぺたり。
コンテナの歴史と Linux カーネルのコンテナ関連機能についての割とどうでも良い愚痴 - TenForwardの日記 : http://d.hatena.ne.jp/defiant/20141218/1418860851

BSDの兄貴、ここでも2000年は輝きまくってる。(とはいえ、BSDなひとは「FreeBSD bhyve」が登場したのはうれしいかぎりなのかな?)

んで、どれ使う?

どことは言わない、Windowsで使いそうなもの:VirtualBox
俺しか使わない、速度を上げたい:kvm

まだやりきっていないけど、こうしたい。
VMイメージ製造機:vagrant
ホストOSでリソースを極力削って運用したいもの:Docker
chefをお供に(Dockerでも)

かな。

今のマシンにxenいれて慣れるのも面倒だし。
Xenの基本 – ドメイン0とドメインU | OpenGroove : http://open-groove.net/xen/domain0-domainu/

まぁ、リバースプロキシやるよ。

夢を見ていた。
1IP<=>multi domainって、さくっとリバースプロキシやらなくてもいいんじゃない?
もしかしたら、いけんじゃね?とか思っていましたが、出来なかったんで、リバースプロキシにしたよって話を書きます。

この記事でやりたいこと

multi domain<=>1IPをやりたい。
外部のサブドメイン(そのマシンに対してのトップドメイン、サブドメインは*の状態)で仮想マシンに対して通信をさせるようにしたい。(httpd,sshなどなど
前に血迷った記事書いた。あれはあれで別の方向で育てる。

とある面倒な事

なんか、開発しててこんなことがあったりしますね。
  1. 開発・検証環境あげないと、アプリでは確認できない。
    1. ローカルに対してドメインでアクセスできないから。
    2. virtualhostで開発PCではhostsとかに書いて名前解決できているけど、スマフォには適用させることができないから。
自社内に、DNSサーバーを持っている かつ DNSに対して変更を加えるのが容易ならいいかもしれませんね。
開発環境は外に持っていなくてもいいと一つ経費かかるのが減りますし。

本音は自分で触るサーバーがあるので、その辺を整える時に一つしかIP持っていないけど、アクセスする時にはFQDNでアクセスしたい。

そんな時は、Http reverse proxyですぞ。

構成的には、

こんな感じ。

環境を作っていくぞ。

https://gist.github.com/tluna/75b8fcb89ff437036e82#file-1
こんな感じ。

各々rails入れていくぞ。

reverse proxyを設定するぞい。

https://gist.github.com/tluna/75b8fcb89ff437036e82#file-3-reverse-proxy

あとは、ホストPCからアクセスできるか確認、あれ?繋がらないを繰り返しましょう。 原因は、だいたい凡ミスです。
これで、VM上のサービスをいつでもみれるね。よかったね。。。
DNSがいじれるなら、欲しいだけ、ドメインを切るが良いさ。
ただ、上記の設定は問題がありますね。

  1. 静的ファイルをスクリプトファイル側が管理しないといけない。
    1. んー。VMじゃなかったら、これは、staticなパスをきればいいけど、VMだったら、このまま?それとも、追加で各々にnginxまたいれるの?(いやかな。)
  2. 4xx,5xxのページを用意していない。
    1. さくっと用意できるならすれば良い。
代わりに良い点としては、
  1. 簡単なLBが作れちゃう。
    1. 検証していないけどな!
    2. http://ameblo.jp/yuu-sys-guard/entry-11873359237.html
  2. 大変なコンパイル作業とapacheからの解放。
    1. 個人的にこれがでかいかな。
  3. バックエンド側は種類が豊富。
    1. 楽しい楽しい選定タイム。
まだ重たくて重たくて仕方がない、LBをこさえるか。なんて状態になったことがないですし、そういうのは用意されていることが大半なので、まぁ、開発だけかな。これ。


あとがき:
これを書き始めたときにopenflowの構築に足を突っ込んだ(昨日)。 これはこれで面白いと思ったので、今度はvmをちゃんと用意してその中でopenflowしたいかな。

火曜日, 5月 12, 2015

daemontoolsを入れる。

小ネタです。

centosにdaemontoolsを入れたいと思った(perl関連)

daemontoolsは要はデーモン化してくれるやつだ。(監視もね。)

https://github.com/kteru/daemontools-rpm

こんなのを公開してくれている人がいる。 使わない手はない。

buildrpm.shを叩く時には、rootで(rpmbuildのインストール先はrootじゃないと書き込みできないところなんでね)
といいたいところだけど、この点を考えてくれよな!
http://blog.tnmt.info/2011/04/29/rpmbuild-for-beginner/

[root@tluna x86_64]# pwd 

/root/rpmbuild/RPMS/x86_64

上記ディレクトリに入れてくれます。(64bit)

水曜日, 5月 06, 2015

openssl更新後、パッケージとの共存

現在想定しているパッケージのうち、opensslを利用しているじゃね?と思って調べてみた状況は以下の通り。
  • openssl
    • さて、これはどうしてやろうか。そのまま入れ替えてしまえ
  • openssh(
    • ibcryptoだけじゃね?
  • perl
    • やべー、みあたらねぇ。
  • php
    • パスをコンパイル時点で指定してるんじゃ => 要再ビルド?
  • httpd
    • mod_sslで使っている。きっと、シンボリックリンクだけでいいはず? エラーが出たらビルドしなおす。

がありますね。

前回はパッケージを使ってインストールすると、どういう風にプログラム側からopensslを欲しているかを確認しました。

一部わからないものがありましたが、それに関してはこのopenssl適用作業実施時にエラーなりが出た時に分析と対処によってはっきりさせていきたいです。

linuxをちゃんと理解して、opensslのライブラリを参照している人たちがどういう風に参照しているかを知っていれば問題ないのでしょうが、残念ながらopensslに依存しているぞ!っていうパッケージがあまりにも多すぎる。

そして、面倒になったので、CentOSだけにします。
もしかしたら、Debianもあとあと書くかもしれません。

OpenSSL入れ替え

openssl本体

https://gist.github.com/tluna/1d4df2d4da86fd1d0180#file-centos-change-openssl

opensslのso達

単にmoduleを入れ替えるだけではだめ。
もしかして、srpmとか見たら、専用のパッチとか当たってたりするのかな。(versionに関しては明示するようにしても、エラーになるし)

影響を受けて、wget, ssh sshd perl phpが全滅というお粗末さ。(phpは仕方がないにしてもよ。)

ものすごい時間かかってますね。これ。

引き続きしらべるけども。(virtualboxに引きずられてMacごと強制終了されちゃっているっぽい現象が)

あー。。。。仮説だけど、それぞれのプログラムってddlのバージョンが1.0.1eであることを期待してたり、、、する?
と思って色々やってみたけど、以下の原因でだめ

試してみたのは、openssl1.0.1e openssl1.0.1m ともにsoファイルにバージョン情報の付与をするかのオプションを追加。追加なしのパターンを用意

openssh

libcrypto.soでエラー(ssh/sshdともに)

httpd

libphp5.so,mod_ssl.soでそもそもsegmentation fault。。。。辛い。

php

version提示するようにしても、そんなバージョンしらんと言われる。

perl

通る。どっちでもOK

んー。srpmに入っていたパッチの中でバージョン情報に関するパッチを適用するとか、結構追って追ってしないとダメっぽい気がしてきた。

少し動的リンクについて見てみると、今のやり方では通らない気がしてきた。
 共有ライブラリーを解剖する http://ibm.co/1Ig3Jjv

perl php httpdのopensslの利用(パッケージ)

一旦、まずは、使ってきそうなperl,php,httpdの関連パッケージをインストールしていく。

パッケージインストール

perl(どっちももうはいっているはず) php httpdなどをインストール
環境構築のため、cpanmをwget後、以下の作業を実施。 ここは、各ディストリ共通。
環境変数
モジュールインストール
んで、リクエストを送ってみる。

Apache

ごめん、この辺ログに残していなかったので、CentOSとDebianに分けてやったことを列挙

CentOS

確か、
  • サーバーのオレオレ証明書を発行(これは不要かも。)
  • mod_sslインストール後に自動的にhttpsの設定有効になっていたと思う。
  • service httpd restart 

Debian

  • a2enmod ssl
  • a2ensite default-ssl
  • service httpd restart 
こんな感じ。
こういうときに思うのだけど、debianの方がこういうところ洗練されている感じがします。(CentOSが洗練されているのは、きっと、RPMだけじゃないか?と思っている今日この頃。)


確認していく

さて、一通りパッケージインストールで作成できましたね。

各言語、及びhttpdのモジュールからopensslがどういう風にリンクされているかを見ていきましょう。

PHP

どうもSharedObjectファイルが見当たらないので、php自体に組み込み?
centosはphp -iでコンパイル時にopensslの場所を指定してることはわかったのだけど。
libssl.soへのリンクあり
curl.soにはリンクあるなぁ。

perl

Net::SSLeayでリンクされているSO発見。
libssl.soへのリンクあり
CentOS
Debian

Apache

libssl.soへのリンクあり
CentOS
Debian

openssh(sshd)

CentOS
Debian
https://gist.github.com/tluna/61f495ebfeaf16c99ba6#file-debian-sshd

前に書いた「他のプログラムから色々依存関係があるから」っていう理由で、差し替えるだけですむものはいいですが、そうじゃないコンパイルオプション時点で決まってしまうものについては、更新しても新しいものを見てくれそうにないですね。

その辺を次記事で書いていきますか。。。(メンドクセェなこれ)

月曜日, 5月 04, 2015

opensslのインストール

opensslのインストールについて書いていきますか。

そもそも、opensslって各ディストリでは、ランタイムとdevelみたいなのがあって、ライブラリの組み込みがないのであれば、develは必要ないのかなと思っています。

さて、そんなわけで、debianとcentosのパッケージから見ていきましょう。

はじめに

検証用のvmを作成するので、vagrantでどんどん作っていきましょう。
mkdir -p openssl/centos
mkdir -p openssl/debian
cd openssl/centos
vagrant init centos6.64
cd ../debian
vagrant init debian7.8.64

これで二つのOSのVMができたので、確認をしていきましょう。。。

vagrantで接続する時には、sshで接続するので、ダメですね。
一度作成した後は、Virtualboxのコンソール画面でopenssl削除してから作業開始ですね。

と、アンインストールを試してみたいと思ったのですが、色々なライブラリから呼ばれて強制削除じゃないとダメみたいですね。

そしたら、各インストールされるファイルを確認しますか。

パッケージで何が入るのか。

openssl-develもインストールして一緒に確認して。(もう利用している環境で入れているわけではないなら、ちゃんとrpmファイルをダウンロードして確認ね?)
これだけはいるんだね。
https://gist.github.com/tluna/26eccbc8d248dc076e71

んー、予想外なのはファイル名的にopensslとdevの関係にあるパッケージがどうも同期を取ろうとは思っていない感じがすることですね。

さて、これらのファイルに上書きするようにインストールをしないようにしなきゃなね。(切り戻しをパス変更だけでできるように)

ソースインストール

さて、 今度はソースインストールするとどう配置されるか。ですね。 念のため、各ディストリごとに見ていきますか。

1.0.1系だと勝手に決めつけて作業を進めます。
wget https://www.openssl.org/source/openssl-1.0.1m.tar.gz
tar xvzf openssl-1.0.1m.tar.gz
cd openssl-1.0.1m.tar.gz
だめだ。vimとタイポするので、vimいれよ。


はいってるよね。
  * make
  * Perl 5
  * an ANSI C compiler
  * a development environment in form of development libraries and C
    header files
  * a supported Unix operating system

CentOS

んー、ディストリのビルドオプションがわからないですね。 centosのsrpm持ってきて中身を見るか。

srpm展開して、その中のtar.gxを展開したら予想だにしないオプションの列挙が。


だんだん頭が痛くなってきた。 no-sharedな訳ないでしょ。
実はインストール時点で./Configureしているのかしら。 とおもったら、srpmはspecファイルでしたね。


結構色々なオプションを定義しているのね。

Debian

やばい。srpmみたいなのあるのかしら。どう考えてもなさそうだ。 その中放浪していると、openssl version -a でコンパイルオプションまで見れるんだね。

centosとdebianを比較してみるとコンパイルオプションに差があるのがきになりますけど。

https://gist.github.com/tluna/a9a9a3869e21a2f5f9b1

とりあえず、インストールしてみてprefix以外のところにファイルが配置されないか、確認しますか

インストール前後でファイルの一覧差分を確認しましたが、prefix以外だとopensslのソースディレクトリで差分があるくらいで、インストールの切り戻しは容易だね。
アンインストールもprefix指定のディレクトリを削除するだけでOKということの確認も取れたわけだ。

debianとcentosも同一オプションにしたいな。(めんどいので)
なので、両方の差分をとってコレっぽいと思ったのを使うとに。
https://gist.github.com/tluna/a9a9a3869e21a2f5f9b1#file-centos-sourceinstall-configure-option

インストールの結果はあとあとしかわかんないので、この記事はここまで。次の調査にうつる。
make testでこけるので、オプションを--prefix以外削除。 ocnfigureの段階で自動的につけてくれるオプションもあるはずなので、それで進めてみる。

日曜日, 5月 03, 2015

OpenSSLビルド・影響範囲調査

どうも。またまた環境周りのことで対処が速攻決断できない事象があったので、一度自分で実践と調査することに。

先に結論

現在opensslをソースインストールあと、lib64でlibssl.so、libcrypt.soを入れ替えて試してみましたが、パッケージでいれたものは、perl以外成功にはならず。
なので、そのままでもいける方法が見つからないのであれば、既存のライブラリを残したまま、opensslを別でコンパイルして、LD_LIBRALY_PATHに追加して、各プログラムをソースコンパイルですかね。。。
何かわかったら、更新します。 知っている方いらっしゃいましたら、ご教示願います。。。

きっかけ

perl周りで複数のDB繋いで遊ぶみたいなことをやってたんだけど、そこのエントリーは、また次にする。。。

んで、OpenSSLってなんでいきなり話題にあがったかというと、
話としてはこの辺がトリガー

CVE-2015-0291のほうがすごい深刻な問題だと感じたけど、CVE-2015-0204のほうだけ対応できればいいということが判明。
そうなると外部通信時にデータ抜かれるだけっぽいし、まぁいいかな?と思ったけど、そういうわけにもいかないので、調べてみることに。

そもそも、OpenSSLってライブラリとして利用しているものが多すぎて影響範囲がわかんねぇよ。ってところからのスタートです。
※今回の話は影響調査〜構築までとなりそうなので、以下のシリーズの7〜20までは読んでないと意味わからないかもね。
http://www.atmarkit.co.jp/ait/kw/buildlamp.html

恥ずかしながら、知らないことばかりでした。

さて、話を戻すと、OpenSSLで私が使っている中で影響を受けそうなのは、
  • webサーバー
  • php,perlなどのプログラミング言語(外部通信するなら)
  • sshd, ssh, wget, curl,etc
  • RDBMS(ビルドオプション次第かな。)
これらのプログラム、デーモンが影響を受けますね。
ただ、きになるのは、更新された後、そのまま動くんですか? 本当に新しくなったものを利用しているんですか?
ですね。

ソースで入れたのは各々で認識しているはずなので、それは置いといて、yum,aptで入れた人はどういう状態なのか確認しておくとしましょう。

vagrant box list 
centos6.64     (virtualbox, 0)
centos7.64     (virtualbox, 0)
debian7.8.64   (virtualbox, 0)

freebsd10.1.64 (virtualbox, 0)

perlでDB操作する時用にvagrantのboxは自作してあるので、この中からcentos6とdebian7.8で確認していくとしましょう。
freebsdは書いていくと説教されそうなのでやめとこう。

で、各々のものに関してはきっと確認していくポイントが違いそうなので、各々のページを作って後でまとめをこのページに書くかな。

基本的に作業ログに関しては全てgistに登録して、結果だけブログに記載するようにしたいです。

各プログラムの確認及び更新作業
なお、調査当初から見ていこうとしている順番が異なっています。
どうしても、公式パッケージ環境構築=>公式パッケージ環境確認=>opensslビルド=>適用作業=>確認となるので、上記の順番に変更を行いました。

あっ、openssl周りでwindowsからssh系の作業ができるやつははサーバー云々とかとは別に新しいプログラムが出ているはずなので、ちゃんと更新してますよね?
彼らはきっとopensslについては静的リンクになっているか、opensslのライブラリがディレクトリ内にいるはずなので、ちゃんと更新しましょう

火曜日, 4月 14, 2015

mod_perlがビルドできなかった

mod_perlがビルド時点でしくってるので確認。

以下、ログ

/home/luna/perl5/perlbrew/perls/perl-5.18.4/bin/perl /home/luna/perl5/perlbrew/perls/perl-5.18.4/lib/5.18.4
/ExtUtils/xsubpp  -typemap /home/luna/perl5/perlbrew/perls/perl-5.18.4/lib/5.18.4/ExtUtils/typemap -typemap
 /usr/local/src/mod_perl-2.0.8/xs/typemap  Connection.xs > Connection.xsc && mv Connection.xsc Connection.c
cc -c  -I/usr/local/src/mod_perl-2.0.8/src/modules/perl -I/usr/local/src/mod_perl-2.0.8/xs -I/usr/include/a
pr-1 -I/usr/include/httpd -D_REENTRANT -D_GNU_SOURCE -fPIC -fno-strict-aliasing -pipe -fstack-protector -I/
usr/local/include  -DMOD_PERL -DMP_COMPAT_1X -DLINUX -D_REENTRANT -D_GNU_SOURCE  -O2   -DVERSION=\"2.000008
\" -DXS_VERSION=\"2.000008\" -fPIC "-I/home/luna/perl5/perlbrew/perls/perl-5.18.4/lib/5.18.4/x86_64-linux-t
hread-multi/CORE"  -DMP_HAVE_APR_LIBS Connection.c
Connection.xs: 関数 ‘XS_Apache2__Connection_remote_addr’ 内:
Connection.xs:117:33: エラー: ‘conn_rec’ は ‘remote_addr’ という名前のメンバを持っていません
     RETVAL = (APR__SockAddr) obj->remote_addr;
                                 ^
Connection.xs: 関数 ‘XS_Apache2__Connection_remote_ip’ 内:
Connection.xs:134:26: エラー: ‘conn_rec’ は ‘remote_ip’ という名前のメンバを持っていません
     RETVAL = (char *) obj->remote_ip;
                          ^
Connection.xs:138:13: エラー: ‘conn_rec’ は ‘remote_ip’ という名前のメンバを持っていません
          obj->remote_ip = (char *) (SvOK(ST(1)) ?
             ^
make[3]: *** [Connection.o] エラー 1
make[3]: ディレクトリ `/usr/local/src/mod_perl-2.0.8/WrapXS/Apache2/Connection' から出ます
make[2]: *** [subdirs] エラー 2
make[2]: ディレクトリ `/usr/local/src/mod_perl-2.0.8/WrapXS/Apache2' から出ます
make[1]: *** [subdirs] エラー 2
make[1]: ディレクトリ `/usr/local/src/mod_perl-2.0.8/WrapXS' から出ます
make: *** [subdirs] エラー 2
[luna@v3290 mod_perl-2.0.8]$

んー。。。。なんかすでに入っている何かを呼び出そうとして失敗してるのかな。

調べてみると、以下の記事

httpd -V
Server version: Apache/2.4.6 (CentOS)
Server built:   Mar 12 2015 15:07:19
Server's Module Magic Number: 20120211:24
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

今までの環境ってそういえばみんなapache2.2系でしたね。

stackoverflowで提示されている方法試してみるか。

I solve that problem by installing apache2 via apt-get and installing Apache2::RequestRec via cpan
or

Try to run these commands before make: 

make source_scan

make xs_generate

makeのターゲット指定をまず試してみた。
結果はダメで、再度perl Makefile.PLを叩いても結果一緒です。

もう一つのperlモジュールもmod_perl持ってきてから、なので、これも通らなさそう。

となるとこれか。。

Unfortunately upstream mod_perl is not ported to Apache 2.4 yet.

AFAIK Debian developers went ahead and made some changes that allows you to compile and use mod_perl on Apache 2.4. Here is there source tree http://svn.apache.org/repos/asf/perl/modperl/branches/httpd24

今度試した時に追記するよ。

modern ie

思い出したので、書いておきたい。

もし、IEのテストを行う時には、このVMを思い出して欲しい。

https://www.modern.ie/ja-jp

様々なWindowsとIEの組み合わせが入っているそんなやつらだ。
特にMacしかもっていない人は、これでIEの動作確認ができる。

Browser+OSの組みあわせで可能なものが表示されるので、欲しいものをダウンロードしておくと良いだろう。
必要になったら、OVAファイルをダブルクリックすればいい。

月曜日, 4月 13, 2015

perl周りについて書き散らかす。

perl今自分の中でホットになりました。
そんなわけでperlのことについて色々書いてみたいと思う。

開発環境は何がいいかな?

慣れていないなら、Linux。 Windowsは別途ノウハウがいる。(cpanであれが通らないんだけどを解決する術)

perl6がいいの?

ほかの言語とは違い、perl6は全く別言語と聞きます。
ずっと前から名前だけは聞いてますが、まだまだな感じを受けます。
(触ってみた、動かしてみたが多いけど、入門系の記事はあまり見受けないので)

site_perlでいい?自分でビルド?

ほかの人が言うにはvendor_perlはフレームワークみたいなものを使う時には良くないとききます。
が、私自身ビルドしてもある程度のエラーが出るのでなんとも。

オススメの環境は?

plack + webサーバー mod_perlの運用方法は知っておくべき事柄の一つかもしれないけど。
(plackの紹介記事だけ見て話してる)

perlビルドするのが大変です。

開発環境では、 perlbrew、プロダクションでは、plenvがいいとか。
ログに載せているけど、オプションは、あんな感じで良いと思います。

その他

runy使っててもwindowsでやるときは別途ノウハウが必要だと感じてて、慣れるまでは大変かな?と思います。
また、mod_perl全力ディスではなく、監視対象が一つ減るとかいいとこもあるので、この辺は要件になるかなと思います。

手を動かす。

そこを踏まえた上で、開発環境で、catalyst、sledgeとかを動かす環境を作ってみるとしましょう。(mojoは触れる機会がまだないのでスキップ)

perlbrew

perlbrewのインストール及び概要については上のサイトが全体像掴みやすかった。
しかし、上記のやり方ではGetop周りで怒られちゃうので、以下のサイトの様な回避策を講じる必要がある。
ワンライナーで何か置き換えているね。sedは使えた方がいいね。(遠い目)

ではどんどんインストール

インストールするバージョンはperlbrew availableで確認できるのがインストール可能なバージョンです。
心ゆくままに5.8オーバーを各種ビルドなんてのもいいのではないでしょうか。
(この記事を修正してるとき、裏でperlbrewを回しまくっています。)

いざ、モジュールのインストール

さて、cpanmまでインストールが終わったら、いざ開発に必要なモジュールを揃える旅に出よう。
perlbrewはrvmみたいにmoduleセットの切り替えができるんですね。すてきです。
perl5libの面倒もみてくれるんですかね。 site_perl的なところに入ってしまうものについてはみてくれるパスではないかもしれないですが。

個人的にはプロジェクト作成時点でcartonで必要なパッケージをちゃんとバージョン管理する様にした方がいいかなと思うよ。。。

  • 個人的にcatalystのディレクトリ構成とあまりマッチしていない気がしますが
    • いやいや。catalystに関しては、cpanfileだけでよくね?


cartonで管理するなら、あまりcpanmでどこにインストールするのかとか最初だけ気にしていればいいからね。
となると、cpanmでいれたほうがいいのは?
carton、DBD系くらいしか思いつかない。きっと、熟れてる人ならもっと出てくるかもしれないけど。

carton+catalyst+sqlite
https://github.com/tluna/perl
sledge
諦めた。mod_perl必須

後書き perlって環境周りはあまり楽じゃない気がします。。。
へぼいのは承知でちとperlerはすげぇとおもう。また、テストツールはperl界隈は随一とのことなので、その辺も触ったらいいのかな。次の機会に書こう

ごりっとバージョンごとにインストール(あまり意味ないけど)
#!/bin/bash
perlbrew -v install perl-5.21.10 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.20.2 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.18.4 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.16.3 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.14.4 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.12.5 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.10.1 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.8.9 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads

#perl-5.21.10
#perl-5.20.2
#perl-5.18.4
#perl-5.16.3
#perl-5.14.4
#perl-5.12.5
#perl-5.10.1
#perl-5.8.9
#perl-5.6.2
#perl5.005_04
#perl5.004_05
#perl5.003_07

$ perlbrew list 
  perl-5.16.3
  perl-5.18.4

  perl-5.20.2

その他のバージョンのビルドについては後日確認します。

木曜日, 8月 21, 2014

vim! grep!

最近会社のマシン上でvimのBundleが正しく動くようになりました。

今までこのマシンが悪いと思っていたのですが、悪いのは結局本人ですね!

んで、vimが動くようになったので、外部grepの設定を行いました。
できるようになったことは次の通り(一例)

カレントディレクトリに対しての検索
grep -r search_word * | cw 

今開いているファイルの検索
grep search_word % | cw

検索結果はリスト表示されるのでこれがやれないとすごいつらいです。検索もかなり早いので、grep -r とかをcygwinとかでやるより素敵ですよ。

現状のvimfilesのディレクトリは、以下のリポジトリに登録してあります(汚いから書き方は他の人を真似てね!)

happy vim life

月曜日, 7月 07, 2014

とあるサイトのURLを飛ばしてくれる ChromeExtension作成中

今以下のようなChromeでとあるサイトのリンクをクリックした時に、リンクに含まれる先をとってきてサーバーに返却するExcentionを作成中です。


えっと、、、またツールですね。
twitterのなにがしかを作ろうと思っていたのですが、うまい事考えがまとまらずこういう事をしています。

extensionじゃなくて、userjsにしてやればいいのでしょうけど。

後ほど作ったら報告

木曜日, 6月 05, 2014

ログどうしましょう。

crontabで実行したものがメールに投げられてうざい。 /dev/nullに葬るか?

と思ったのですが、あんまりじゃね?と思ったので、これを期にログを管理する方法を考えてみましょう。ということを考えた訳で、


cron で > /dev/null して椅子を投げられないための3つの方法 - 酒日記 はてな支店 http://d.hatena.ne.jp/sfujiwara/20120613/1339547638

syslogを押さえよう! | Think IT http://thinkit.co.jp/article/724/1

シスログの管理 rsyslog.conf の設定 〜 CentOS6 | EasyRamble http://easyramble.com/configure-rsyslog.html

rsyslogの方がサーバーが増えたときも良さそう。
iptablesで外部接続を遮断しておけばいいべ。


という訳で、ログ周りの設定を。。。するか。

月曜日, 5月 05, 2014

tmuxよいですね。

今までscreenというものを使っていましたが、沖縄のガチな友達から教えてもらいました、tmuxを使っております。
印象的にはscreenより便利です。 キーバインドも気になったら変更すればいいし、screenよりも柔軟でよいです。 今のところ結構利用しておりますが、バグった瞬間もないのでおすすめです。


screen を使っていたときには、ssh-agentのsocketをどうやって持ちまわすか?についてscreenrcに書いておりましたが、これで書かないです みそうです。tmuxでコンソールを複数開いてwhoしてもひとつしかコンソール表示されないのに何か秘密があるんじゃないかとか。

注:ssh-agentの例のアレ
│     /tmp/ssh-XXXXXXXXXX/agent.<ppid>
│             Unix-domain sockets used to
│             contain the connection to
│             the authentication agent.
│             These sockets should only
│             be readable by the owner.
│             The sockets should get
│             automatically removed when
│             the agent exits.
screen(だけ)の時代は終わり。tmuxでリモートコンソールを便利に使うTips
時代はGNU screenからtmuxへ - Dマイナー志向

2015/5/5追記
どうもssh-agentのsockets共有するときにこれでOKっていうものがこの当時見つかっていなかったらしく(mac,windowsのagentがよしなにしてくれていた。)
なんで、linuxでもこれで解決できるよ。っていうのがあったら教えてください。

debianな人も赤帽な人もBSDな人もみんなまとめてtmuxしたらいい!

同一端末上で、puttyやteratermを複数起動して使い分けている人是非試してみてくださいな。
(けっこうsshで接続するときも切断されると結構面倒ではないですか? tmuxやscreenを使えば、その辺の面倒な事が一気に解決。)

いつもながら乱文すいません。

MacでChromeが暴走

Js周りの解析で結構便利とか、結構軽いのが好きとか、Shift+ホイールで横移動できたりで、デフォルトブラウザをWindows,Macともに設定しています。

そこで、最近Macの電池が切れるのが早いし、処理をおこなっていないときにも、ファンが回っているなぁ。。。夏だからかな?とかそんなことを考えていました。

ActivityMonitorで確認してみると、ChromeがCPU usage ダントツの120%。
タブしか開いていないのにこれはありえないでしょう。

Chromeもエクステンションが増えてきたので、誰かが暴走しているのかなー?と
そうなった時は、右のメニューボタン?=>ツール=>タスクマネージャを開きましょう。

拡張機能が最初怪しいということで、すべてをOFFにしても解決しなかったので、途方に暮れていました。

私の場合今回は、オフラインgmailが原因でした。(あれって拡張機能だけど、どうもツール=>拡張機能には出てこないみたい)

なんで、ホームにてオフラインGmailを削除しますた。(どのみちあまり使っていないですし)


てなわけで、暑い暑いなかファンがえらい元気に回っている時が多いですけど、そこまで処理をおこなっていないときにそうなる場合は、Windowsならtaskmgr、MacならActivityMonitorみてみてねー。。。ってことで。

tizenのdata contorolsを読み解いてみる。

tizenを使う用事があって、その中で利用するData Contorolsについて読んでみる。

忘れっぽいので書いたあとにドキュメントをなくす人だからここに書く。

追記:
DataContorlって何するの?まとめ。
アプリ間でデータを共有するときにAppManager?AppContorlの一緒に載せてデータを送るとか、そのリスナーだけで解決できない小難しい問題に対しての解決策を提供するもの。
SQL型とキーバリュー型があるから好きなものを使うよろし、(一つのパッケージに複数のプロバイダーを入れても問題はないからそれでも良いと思う。 SQL型の場合今見ている限り、DBを切り替えるみたいなものはないですし)

Datacontrolを使うためには、
サービスアプリ(DataControlProviderとなるもの)
クライアント
でやりますので、1対多で使えるけど、実際これってデータの完全性とかトランザクションの概念はあるのかな。。。 その辺がまだわからない状態で時間切れになりました。

チラ裏でやれ。ってツッコミは正解でモチベーションのために記事書いた。公開したいものがあるから記事書いたわけではない( ー`дー´)キリッ

BGMはこんな感じの意味が読み取りづらい曲を流していると作業に集中できることを発見。


日本語訳を公開している人もいなかったので、読みながら書いてミスを発見するために文章を起こした。
でもね、訳も間違っている。話の大筋は自分が追える(書いたあとに思ったのは、これだったら本文読んだほうが1.5倍早く追える)このエントリーを更新していくきりょくがなかったりするんで
もし、コメントにノイズ載せるなハゲ的な苦情が殺到したらページを閉じます。

https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Fguide%2Fapp%2Fdata_controls.htm

上記のページから開始。

データコントロール

データコントロールは標準的なアプリケーション間のデータのやり取りを行う機構です。
すべてのアプリケーションは、データの共有を他のアプリケーションに対してリクエストすることができます。しかし、サービスは自分のデータを提供することしか出来ません。

2つのタイプのデータコントロールがあります。
SqlDataContorol
MapDataControl

ここで脱線します(具志個人的に使って覚えるほうが早い人はこっちのほうがいい気がしたので)--------------
チュートリアルを見たほうが早いという人は
SqlDataControl
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrolprovider_sql.htm

MapDataCOntrol
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrol_map.htm

とかをみればよい。
------------------

続き行きます。
SqlDataControl
このクラスは、他のサービスアプリケーションにより、特定のデータをSQL型のデータコントロールを使用することができるようにするものです。
また、あなたのサービスアプリケーションからSQLデータ管理プロバイダーを定義することができます。

MapDataControl
このクラスは、他のサービスアプリケーションからエクスポートされたデータに対してキーバリュー型のデータアクセスを可能にするクラスです。またサービスアプリケーションかからキーバリュー型データ管理プロバイダーを定義することができます。

(exportの意味が結構危ないですね。 また、データコントロールは、データ管理と書くべき?CRUDするだけじゃないの?)

データコントロールは、共有データにアクセスし、結果を戻すための操作を供給することができます。

データコントロールを使ってみる

sqldatacontrol または mapdatacontrolのインスタンスをappmanagerクラスから取得します。
appmanagerクラスは、要求されたデータコントロールを提供し、あなたのアプリケーションにデータコントロールを返すサービスアプリケーションを見つけます。

データコントロールはプロバイダーIDを第一情報として使います。
これは、データコントロールプロバイダーで定義します。
例えば、static const Tizen::Base::String DATACONTROL_PROVIDER_EXAMPLE = L"http://tizen.org/datacontrol/provider/exmaple"
(あれ?この書式operationidに似てね?)

sqldatacontorl
appmanager::getsqldatacontorlN メソッドを使用してプロバイダーIDを指定する場合、一意に特定のSQLデータコントロールを取得出来ます。データコントロール取得後、(解決 後)sqldatacontorlのselect(),insert(),update(),deleteなどを呼び出せます。
sqldatacontorlインスタンスの実行結果はリスナーを返します。(この時に返すのは、OnSqlDataControlSelectResponseReceived(),
OnSqlDataContorlUpdateResponseReceived(),
OnSqlDataContorlDeleteResponseReceived(),
OnSqlDataContorlInsertResponseReceived(),
はTizen::App::ISqlDatacontorolResponseListenerのインターフェースです。
サービスアプリケーションが終了した時、そのsqldatacontrol操作を終了した応答リスナーが呼び出されます。(上の4つね。)

(やばい、訳があやしすぎるw 楽しくなってきた。)

MapDataControl
GetMapDataContorolN() を使用してプロバイダIDを指定する場合、ユニークな特定のマップタイプのデータコントロールを得ることができます。データコントロールを解決したあと、 GetValue, AddValue SetValue removeValueのようなMapDataContorlクラスのメソッドをよびだします。
MapDataContorlインスタンスの実行結果は以下のメソッドから取得出来ます。
OnMapDataControlAddValueResponseReceived(), OnMapDataControlSetValueResponseReceived(), OnMapDataControlRemoveValueResponseReceived()
はTizen::App::IMapDataControlResponseListenernaのインターフェースです。
上記の応答リスナーはサービスアプリケーションがマップデータコントロールの操作を行ったあと呼び出されます。

データコントロールのライフサイクル(ここは図を見たほうがいい)
順番を書いておくと

  1. データコントロールを取得(C++App)
  2. データコントロールのプロバイダーIDを解決、アクセス権限をチェックする。(AppManager)
  3. データコントロール応答リスナーをセット(C++APP)
  4. データコントロールメソッドを使用(C++APP)
  5. データコントロールを起動または、データコントロールのプロバイダーに要求(これはきっと、provider側(datacontorolを実装したアプリ側))
  6. 結果が非同期にデータコントロール応答リスナーに対して送られる。
  7. 終了
順番は、そのプロバイダー側で制御してあげないといけないのか。

データコントロールを用いた開発

でサービスから他のアプリケーションにデータを出力する。(やっぱり、exportの訳が分かんね)
データベースファイルを提供する(データベースを提供という解釈で)サービスアプリは、ISqlDataControlProviderEventListenerインタフェースを実装し、
Tizen::App::DataControlProviderManager のSetSqlDataControlProviderEventListener()を使用し、プロバイダーのリスナーとして登録します。
サービスアプリケションは、SQL型データコントロールリクエストをプロバイダーリスナーからデータコントールリクエストを
OnSqlDataControlSelectRequestReceived(),
OnSqlDataControlInsertRequestReceived(), OnSqlDataControlUpdateRequestReceived(), OnSqlDataControlDeleteRequestReceived() 
ISqlDataControlProviderEventListenerインターフェースから受け取るよ。。。
(手が疲れてきたよ)

んで、キーバリュー型の〜〜、、、、(ここも大体が同じ説明、何を実装して、どれからリクエストをとるかというお話)

終了

このへんを頭に入れて、各チュートリアルを見てみましょう。


SqlDataControl
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrolprovider_sql.htm

MapDataControl
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrolprovider_sql.htm

両方共、インタフェースの用意からインスタンスの取得、データの読み取り追加まで流行っています。更新と削除については、コードは用意していないけど、きっと同じように〜ってなっていますね。

使い方はわかったけど、んー。 RDBMSないし、キーバリューのサーバー(サービスアプリケーション)に対して、クライアントからどうすれば利用できるか。を書いたものでしたねー。。。。 ちょっと、これ制御めんどくさそうだな。

さ て、読み解いた。 Tizenの中だけでデータをやり取りして(MessagePort)、そして、データを書込して(DataControl)で面白い 題材ないかなー。。。。 私の頭ではぐちゃぐちゃになってきっともうすでに存在しないデータに対して更新とかやりそうで。

眠たいので、風呂入って寝ますかね。

火曜日, 4月 29, 2014

PHP 5.5 & cakephp(on composer)

Jenkinsをインストールした際にfinallyを使っているものがうごかねぇ!という事が判明したので、macとcentosのphpのバージョンをアップ!
ついでにcomposerに寄り道した時のメモ

やったこと:php55とphp-fpmのインストール cakephp on composer
composerを利用してphpunitを目的のものをインストール(古すぎず、新しすぎず欲しいライブラリを自由に個々の環境にインストールしてbundlerみたいに)

まず、php5.5のインストール

mac:

まとめ:色々あって問題解決 twitterからその時のログをコピペ
brew doctor->指定の問題を解決->brew uninstall opennssl->brew uninstall postgresql-> brew install openssl postgresql -> brew install php55 -オプション
原因:openssl postgresqlの順に参照しているライブラリのシンボルが無いぜーってエラーでした。

linux:

まとめ
remi-php55 remiを追加yumリポジトリとして利用する事で解決。
linuxに関してはソースインストールを行うも、コンパイル後、postgresqlのシンボル周りでオコされたので撤退。
php55のインストールについては、以下の記事参照。
CentOSにPHP5.5をインストール - Qiita

事の発端はcakephp cakeコマンドでbakeコマンドを動かそうとしたら、おこられたことから。

久しぶりにアップデートをかけてみると、やっぱりかなり更新があったみたいです。。。
パッケージが新しい状態かどうか確認するのは大切ですなー。

composer

http://book.cakephp.org/2.0/ja/installation/advanced-installation.html
pearの問題点であるバージョンの異なるライブラリを読み込みできない事を解決しようぜ!ってものだと思っています。
んで、cakephpからcomposerでライブラリをインストールしていたのですが、面倒になってcomposerでcakephpで管理してしまえ!
という事で、
手順メモ: (以下の項目に関してですが、一度整備してしまえば、cakephpとりに行って準備するより面倒が少なくてよいかなと。)

composerの取得

composer.json作成

結構使い方間違っているんだろうな。って項目も多いですが、以下のように。

bundle installのように


php composer.phar install  
memo:このときrequire-devの項目に関してはインストールされないはずなんですが、なんかインストールされていました。 まぁ、使うのでいいのですけど。(プロダクション環境では無効にできるようにしておかなければなりませんが)

ディレクトリ確認

その後のディレクトリ構成は以下のようになっていると思います。
▸ Plugin/
▸ Vendor/
  composer.json
  composer.lock
  composer.phar*

プロジェクト作成

./Vendor/bin/cake bake applitionname
applicationnameに指定した名前がカレントディレクトリに作成されます。

bootloaderの設定

このままでは、せっかくインストールしたphpunitも動かないので、bootloaderもちゃんと設定してあげましょう。

※gistをbloggerでさくさく貼付ける方法が欲しいです。

composerを使ってcakephpを導入しなかった人へ

通常使っているbootloaderと少し異なるので、diffでもとった後に導入を検討してください。(きっと、この辺はcakephpを素で落としただけの人も使える)

以上です。使いたいライブラリが増えたらpeclとかじゃ無い限り対応できますし、何よりライブラリの制限も設ける事ができるので、よりよいのではないかなと思います。

結果

成果:php5.5系のインストール composerの導入
失ったもの:kyototycoon用のdatasource。。。。 残っているとうれしいかな。