highlight js

2012年12月20日木曜日

[AWS]AmzonLinuxにMindtouch入れた個人用覚え書き



公式サイト:http://developer.mindtouch.com/jp/docs/MindTouch
AWSへのinstall参考:http://www.claassen.net/geek/blog/2010/12/installing-mono-2-8-1-on-amazon-linux-ami-1-0.html

これか?
http://developer.mindtouch.com/en/kb/Deploying_MindTouch_on_Amazon_EC2

これか?
http://blog.designrecipe.jp/2009/4/29/mindtouch-deki-wiki-lyons-9-02/
http://www.hyk-home.com/blog/infra/archives/2009/12/16-150647-199.html
土台
時間合わせ
  • タイムゾーンの設定
    # cp -i /usr/share/zoneinfo/Japan /etc/localtime
    # vim /etc/yum.conf
    +++ exclude=tzdata
    # /etc/init.d/yum-updatesd restart
  • ホスト名の変更
    # vim /etc/sysconfig/network
    # vim /etc/hosts
    
  • swap(無くても動くけどさー)
  • $ dd if=/dev/zero of=/swap bs=1M count=2048
    $ mkswap /swap
    # swapon /swap
    # swapon -s
    
  • 再起動しても確保されるように
    # vim /etc/fstab
    +++ /swap   swap        swap    defaults        0   0
    
  • EBSサイズを認識させる
  • # resize2fs /dev/sda1 # df -kh 


セットアップ

useradd -M -g apache dekiwiki
yum install -y \
http mysql-server tidy html2ps \
gcc libtool bison gettext make bzip2 \
gcc-c++ \

php は 5.4系で。
何故ならば5.3は非対応だから。
call_user_func_arrayで
「PHP Warning:  Parameter 1 to DekiSiteMap::execute() expected to be a reference, 」って。
※でも、5.4でも色々問題有った。まーイッカー

$ sudo yum install php54
$ sudo yum install php54-cli
$ sudo yum install php54-mysql
$ sudo yum install php54-mcrypt
$ sudo yum install php54-mbstring
$ sudo yum install php54-gd
$ sudo yum install php54-curl

Prince install
$ cd /usr/local/src/
$ wget http://www.princexml.com/download/prince-8.1r3-linux-static.tar.gz
$ tar xfzv prince-8.1r3-linux-static.tar.gz
$ cd prince-8.1r3-linux-static
$ ./install.sh
   [/usr/local]: /usr

MONO
yumれないからソースins

mono-2.11 だと、Mindtouch Coreのアクティベーションで落ちる問題が有る模様。
有償ライセンスのトライアルは通った。
2.10系で行けるか検証中。

$ cd /usr/local/src/
$ wget http://origin-download.mono-project.com/sources/mono/mono-2.11.4.tar.bz2
$ tar xvjf mono-2.11.4.tar.bz2
$ cd mono-2.11.4
$ ./configure --prefix=/opt/mono-2.11

# make にすげー時間かかるから注意
$ make
$ make install


$ ln -s /opt/mono-2.11/bin/mono /usr/bin/mono
$ ln -s /opt/mono-2.11/bin/gmcs /usr/bin/gmcs
DEKIWIKI
ソースDL
http://sourceforge.net/projects/dekiwiki/
して、
UP、cd /usrl/local/src にて展開
$ cd /usr/local/src
$ tar zxvf MindTouch_Core_Source_10.0.9.tar.gz

$ mkdir /var/www/dekiwiki
$ cp -r web/*  /var/www/dekiwiki
$ chown -R root:root /var/www/dekiwiki 
$ chown -R apache:apache /var/www/dekiwiki/config
$ chown -R apache:apache /var/www/dekiwiki/bin
$ vim /etc/httpd/conf/httpd.conf 
+++ ServerName hoge.jp:80

$ cp config/deki-apache.conf /etc/httpd/conf.d/.
$ vim /etc/httpd/conf.d/deki-apache.conf 
--- <VirtualHost :>
+++ <VirtualHost *:80>
+++ ServerName hoge.jp
+++ DocumentRoot "/var/www/dekiwiki"

# /var/log/apache2をhttpd/に変更
+++       ErrorLog /var/log/httpd/error-dekiwiki.log
+++        CustomLog /var/log/httpd/access-dekiwiki.log common

mod_rewriteは有効になってるからOK
$ /usr/sbin/apachectl configtest

$ mkdir /var/log/dekiwiki
$ touch /var/log/dekiwiki/deki-api.log
$ chown root:root /var/log/dekiwiki/deki-api.log
$ mkdir /var/www/.wapi
$ chown dekiwiki:apache /var/www/.wapi

$ cp config/dekiwiki-init.redhat /etc/init.d/dekiwiki
MySQLセット
# /etc/init.d/mysqld start
# mysql -u root -e "set password = password('hogehoge');"
# /sbin/chkconfig mysqld on
後はMindTouchの管理画面に上記を設定して、勝手に作ってくれる

最後に
この環境だと、PHPで
eregのE_DEPECREADが山盛り出てくるので、php.iniを変更

$ vim /etc/php.ini

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED

date.timezone="Asia/Tokyo"

PHP5.2系じゃないとダメなんだけど、yumで提供されてるの5.3、5.4なんだよなー
画面からセットアップ
apacheたちあげてアクセスして、画面にそって入力。
$ /usr/sbin/apachectl start
メールアドレスは、アクティベーション用のファイルが送られてくるので、使えるものを。
途中、コマンドラインでコマンド流してね、ってのが出てくるので要注意。
流してあげましょう。

アクティベーションに関して、オープンソース版、
「Mindtouch Core」の方を選ぶように。

2012年12月10日月曜日

[AWS][ELB]ELBがスケールアウトされないケース

ELBがスケールアウトされず、Latency低下に悩んでた原因がハッキリしたのでメモ。

状況
アドサービスの入り口部分で、
フロントをさばいているELBのLatencyが、
ピークタイムに不自然な動き、Latencyが1sec超えるなどの遅延。
(何故かMAX3秒以上は遅延しない。)


対応
memcachedへのアクセスをinternal ELB経由で行なっていた部分を
IP直指定とした。
Latencyは 10ms前後で落ち着いた。
このことから、遅延原因はinternal ELBと断定。


ELBの動作
SA様に聞いた所、
ELBは、内部的にEC2を動かして動作させてるとのことなのだが、
そのインスタンスが一定条件を満たした際に、ELBのスケールアウトが行われる。
(スケールアップも有るのかな?)

スケールアウト条件は、対象インスタンスの
CPU Utilization、Network IN/OUTにて判定されるとの事。
小さいデータを件数多く捌く、今回のような使用方法だと
適切にスケールアウトされない事がある。
らしい。
しきい値については聞き漏れだったと思う。
しかしながらブラックボックスぽいな。。

ちなみに、遅延発生時のinternal ELBへのアクセス件数は
10000 req /1 min  なので
約 167 req / 1sec.
※訂正 グラフが跳ね上がる形で、20000〜60000弱のケースまで色々のようだ。
 跳ねてるタイミングで、ELBがアカン感じだったのかな。。

やり取りしていたデータ長は
数百バイト〜数キロバイト。10キロバイト前後が最も多いか。


まとめ
とりあえず、ELBで小さいデータを取り扱う際は
上記のことを頭の片隅に。。。
ELBは使わないでhaproxyとかでさばいたり、
プログラム側で対応したりするのが現状のベターな選択肢かと。


CloudWatch上では、Internal ELBが捌ききれていない事を示すグラフなどは確認できなかった。



2012年12月5日水曜日

[AWS][VPC]ハンズオンセミナー メモ

なぜVPC
  • ネットワークセキュリティを高める
    • きめ細やかなアクセス制御
    • VPN、ダイレクトコネクト(DX)を使って完全に外部と遮断した環境を実現
  • 自由なネットワーク設計が加納
  • ローカルIPを固定で使用可能(これが一番うれしいか)
※っつうか、機能的にもVPC内のEC2でしか出来ないこと多いし、VPCを使えって事だよね。使わない理由が無いよね。



public subnetとprivate subnet の違い
ROUTE TABLEに、IGWがアタッチされているかどうか、のみ。
IGWが設定されてれば、GW経由でインターネットに出れる。

NACLはSUBNETに対するセキュリティグループ。
(Network Access Controller)


RDS
MULTI-AZ→ホットスタンバイを作ってくれる。超便利!


RDS DB Subnet Groupsで、subnetをまとめとく。


メモ終了。

2012年12月3日月曜日

[AWS][VPC]公開VPCを設定する際の覚え書き

1. VPCタブ [Your VPC]から
XX.XX.XX.XX/16
Tenancy: defauly 
で VPCを作る。
 Tenancy: dedicated は物理サーバ専有サービスとなる
 (料金高い)ので注意

2.VPCタブ [Subnets]から
 1で作ったVPCに対して適宜subnets作成。
 CIDR Blockは最大値の/24が楽ちんでね?
 

3. VPCタブ [Your VPC]から
 Internet Gatewaysを作り、[Attache tp VPC]

4. [Route Tables]から対象VPCを選択し、
 Routes タブで
  Destination   0.0.0.0/0
  Target   先ほどのInternet Gatewayを設定

 Associationsタブで、2で作ったSubnetを選択。

後は、Security Groupでポートなど設定されてれば、
VPC内に作られたインスタンスまで届くはず。。


覚え書き。2012/12/03

2012年9月19日水曜日

AWS S3バケットに格納するメモ

http://docs.amazonwebservices.com/AWSSDKforPHP/latest/index.html#i=AmazonS3

# sudo pear channel-discover pear.amazonwebservices.com
# sudo pear install aws/sdk
とやるか、PHP SDKをDLしてきて、適宜設置する。
# cp config-sample.inc.php config.inc.php
として、key, secretを設定



include_once "AWSSDKforPHP/sdk.class.php";
include_once "AWSSDKforPHP/config.inc.php";

$s3 = new AmazonS3();

$aws_upfile = "test/test-".time().".txt"; 

# test-bucketは既に生成済みのbucket
# AmazonS3::ACL_PUBLIC で公開ファイルとして。
$res = $s3->create_object("test-bucket", $aws_upfile, array('fileUpload' => $filename, 'acl' => AmazonS3::ACL_PUBLIC));

# UPしたファイルの公開URLの取得
$url = $s3->get_object_url("test-bucket", $aws_upfile);
# UPしたファイル一覧
$list = $s3->get_object_list("test-bucket");

2012年7月12日木曜日

repcachedの起動スクリプトメモ。

AWS amazon Linuxでrepcachedの起動スクリプト書いたメモ。
こちらを参考にさせて頂きました。Repcacheを調べてみる

  • repcached用としては提供されていないので、改修したものを下記に記載。
$ sudo vim /etc/init.d/repcached
#! /bin/sh
#
# chkconfig: - 55 45
# description:  The memcached daemon is a network memory cache service.
# processname: memcached
# config: /etc/sysconfig/repcached
# pidfile: /var/run/memcached/memcached.pid

# Standard LSB functions
#. /lib/lsb/init-functions

# Source function library.
. /etc/init.d/functions

EXEC=/usr/local/bin/memcached
REPHOST=localhost

PORT=11211
USER=memcached
MAXCONN=1024
CACHESIZE=64
OPTIONS=""

if [ -f /etc/sysconfig/repcached ];then
        . /etc/sysconfig/repcached
fi

# Check that networking is up.
. /etc/sysconfig/network

if [ "$NETWORKING" = "no" ]
then
        exit 0
fi

RETVAL=0
prog="repcached(memcached)"
PIDFILE=/var/run/memcached/repcached.pid
LOCKFILE=/var/lock/subsys/repcached

start () {
        echo -n $"Starting $prog: "

        daemon --pidfile $PIDFILE $EXEC -d -x $REPHOST -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P $PIDFILE $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch $LOCKFILE
}
stop () {
        echo -n $"Stopping $prog: "
        killproc -p $PIDFILE $EXEC
        RETVAL=$?
        echo
        if [ $RETVAL -eq 0 ] ; then
                rm -f $LOCKFILE $PIDFILE
        fi
}

restart () {
        stop
        start
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status -p $PIDFILE $prog
        RETVAL=$?
        ;;
  restart|reload|force-reload)
        restart
        ;;
  condrestart|try-restart)
        [ -f $LOCKFILE ] && restart || :
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart|try-restart}"
        RETVAL=2
        ;;
esac

exit $RETVAL

  • 設定ファイルを記述
  • こちらは、環境で適宜書き換えが必須
$ sudo vim /etc/sysconfig/repcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="メガ指定"
OPTIONS=""
REPHOST="ホストのIP"
  • 自分はREPHOSTはEIPのパブリックネームにしてたりします。
    ローガルでの接続で、経費削減、できてると思うんだ・・・!
  • スクリプトに実行権限付与
$ sudo chmod +x /etc/init.d/repcached
  • pidを記録するディレクトリ作成(ユーザmemcachedで書き込みをするため。)
  • $ sudo mkdir /var/run/memcached
    $ sudo chown memcached:memcached /var/run/memcached

  • サービス登録&自動起動の設定
$ sudo chkconfig --add repcached
$ sudo chkconfig repcached on
$ sudo chkconfig --list | grep repcached
  • サービスとして起動&停止
$ sudo service repcache start
$ sudo service repcache stop
$ sudo service repcache status
$ sudo service repcache restart

AWS DynamoDB PHPでquery使う時のメモ。

AWS DynamoDB 
PHPでquery使う時のメモ。
下記のような感じで行けた。




$dynamodb = get_client();
$response = $dynamodb->query(array(
                        'TableName' => 'ad_disp_log',
                        'HashKeyValue' => array(AmazonDynamoDB::TYPE_STRING=>$hashid),
                        'RangeKeyCondition'=>array(
                        'AttributeValueList'=>array(
                                array(AmazonDynamoDB::TYPE_NUMBER=> '201209090121'),
                            ),
                        'ComparisonOperator'=>AmazonDynamoDB::CONDITION_EQUAL),
                )); 

2012年5月3日木曜日

apache cassandra install メモ

参考 http://blog.gmocloud.com/?p=888

sudo yum install java-1.6.0-openjdk.x86_64


mkdir src
cd src
wget http://ftp.jaist.ac.jp/pub/apache/cassandra/1.1.0/apache-cassandra-1.1.0-bin.tar.gz
tar xvzf apache-cassandra-1.1.0-bin.tar.gz


sudo mv apache-cassandra-1.1.0 /usr/local/
sudo ln -s /usr/local/apache-cassandra-1.1.0/ /usr/local/cassandra

vim /usr/local/cassandra/conf/cassandra.yaml
listen_address: localhost
rpc_address: localhost
seeds

フォアグラウンドで起動
/usr/local/cassandra/bin/cassandra -f
ctrl+cで止める

daemonとして起動
/usr/local/cassandra/bin/cassandra -p 'プロセスIDを記載するファイル名'
ex.  /usr/local/cassandra/bin/cassandra -p /usr/local/cassandra/proc.txt
killで止める



接続してみる
/usr/local/cassandra/bin/cassandra-cli -localhost -p9160
[default@unknown]
って出ればとりあえず接続成功


ノードの状態を調べる
/usr/local/cassandra/bin/nodetool -h localhost ring



2012年4月11日水曜日

EC2:ELBにmod_cidr_lookupを対応させるメモ

EC2、ELB経由でモバイルのアクセスをさばく時に
klabさんの、mod_cidr_lookup を使っていたんだけど、
AMAZONのEC2のElastic Load Balancerで、アクセス元のIPが
x-forward-forヘッダに含まれる所でドハマリしたので対応メモ。

他リバースプロキシ経由してきた時なんかにも同様の流れで行けるはず…

C言語判らんがな(´;ω;`)


まずは取得して解凍
cd
cd src
wget http://downloads.sourceforge.net/modcidrlookup/mod_cidr_lookup-1.2.tar.gz
tar zxvf mod_cidr_lookup-1.2.tar.gz
cd mod_cidr_lookup-1.2/apache2
場合によってはMakefile書き換え。
--- APXS      = apxs
--- APACHECTL = apachectl
+++ APXS      = /usr/local/apache2/bin/apxs
+++ APACHECTL = /usr/local/apache2/bin/apachectl

でもって本体書き換え。
lookup_cidr関数内でremote_addrからipaddr_ptrを取得してる部分で、
X-Forwarded-Forから作ったネットワークアドレス構造体で
ipaddr_ptrを上書き。

今回のEC2の場合はIPV6を持ってるので、IPV6の方だけ書き換え。

  • vim mod_cidr_lookup.c


$ *lookup_cidrを探す

uint8_t        *addr;
++  const char *fwdvalue;
++  fwdvalue = apr_table_get(r->headers_in, "X-Forwarded-For");


#if APR_HAVE_IPV6
  if (sockaddr->family == AF_INET6 &&
      IN6_IS_ADDR_V4MAPPED(&sockaddr->sa.sin6.sin6_addr)) {
++    if (fwdvalue) {
++      inet_aton(fwdvalue, sockaddr->ipaddr_ptr);
++    }
   addr = (uint8_t *)&((uint32_t *)sockaddr->ipaddr_ptr)[3];
     } else
#endif
.
.
.


inet_atonとか知らなかったから、対応方法調べるのに
えらい時間かかったぜ。。。

2012年3月1日木曜日

macbook air 設定覚え書き

2012/03/01
  • INSTALAL SOFT
    • filezilla
    • cot editor
    • iterm
    • google ime
    • eclipse
    • open office
    • dropbox
    • suger sync

  • Chrome
    • ログインして、googleアカウントと同期
    • pluginとか自動で同期してくれて超便利

  • 環境設定
    • PHPをlocalで動かす
      • terminal で sudo vim /private/etc/apache2/httpd.conf
      • #LoadModule php5_module libexec/apache2/libphp5.so のコメントアウトを外す
      • システム環境設定>共有>web共有のチェックを外す、入れる
    • シンボリックリンク
      • ln -s WebServer/Documents/ htmlroot
    • shell設定
    • SugerSyncの同期ディレクトリに、WebServer/Documents/ を設定
      • wikiだけでもいいかな…


2012年1月31日火曜日

PHPメモ ビット演算子

Stringでビット演算して、結果おかしいなと悩む30分。

ビット演算はintにキャストするのを忘れないように・・・

2012年1月10日火曜日

Eclipse インストールと設定メモ

MAC用のEclipse開発環境構築用のメモ
日本語で使いたいねん!


  • Eclipse PDTをDL
    • http://www.eclipse.org/pdt/downloads/

 Eclipse PDT 2.2.0 All In Ones / Eclipse PHP Package

 OSX 64bit用を。



  1. 2つとも解答
  2. ダウンロードしたPDTをAppフォスダにinstall
  3. ダウンロードしたPleiadesを解凍してできたdropinsフォルダで先ほどインストールしたMac版Eclipseのdropinsを上書き
  4. appに入れたeclipseのAPPアイコンを右クリックで「パッケージの内容を表示」
  5. Contents/MacOS/eclipse.iniを編集
  6. Pleoadesのeclipse.iniを開いて、「-javaagent:dropins ・・・」の箇所をコピー
  7. この一文を、先程開いたAppのEclipse.iniに。
    -javaagent:dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
  8. さっきのをパスを変えてこんな感じで 編集して保存
    - javaagent:../../../dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
で、起動すれば日本語かされてるはず。起動ロゴも変わってる。

[参考]
  • http://nicomelmo.blog118.fc2.com/blog-entry-666.html
  • http://labs.uechoco.com/blog/2009/04/mac-eclipse-install-pleiades-japanese.html


追加install
http://ermaster.sourceforge.net/index_ja.html
http://subclipse.tigris.org/update_1.8.x