2013年12月11日水曜日

MariaDBをインストールしていて、nagios-plugins-allがインストールできないとき


OSはCentOS 6です。

-----------------------
# yum -y install nagios-plugins-all
~~~
Package mysql-libs is obsoleted by MariaDB-shared, but obsoleting package does not provide for requirements
--> Processing Dependency: libmysqlclient.so.16()(64bit) for package: nagios-plugins-mysql-1.4.16-10.el6.x86_64
Package mysql-libs is obsoleted by MariaDB-shared, but obsoleting package does not provide for requirements
---> Package samba-winbind.x86_64 0:3.6.9-167.el6_5 will be installed
--> Finished Dependency Resolution
Error: Package: nagios-plugins-mysql-1.4.16-10.el6.x86_64 (epel)
           Requires: libmysqlclient.so.16(libmysqlclient_16)(64bit)
           Available: mysql-libs-5.1.71-1.el6.x86_64 (base)
               libmysqlclient.so.16(libmysqlclient_16)(64bit)
Error: Package: nagios-plugins-mysql-1.4.16-10.el6.x86_64 (epel)
           Requires: libmysqlclient.so.16()(64bit)
           Available: mysql-libs-5.1.71-1.el6.x86_64 (base)
               libmysqlclient.so.16()(64bit)
 You could try using --skip-broken to work around the problem
** Found 2 pre-existing rpmdb problem(s), 'yum check' output follows:
2:postfix-2.6.6-2.2.el6_1.x86_64 has missing requires of libmysqlclient.so.16()(64bit)
2:postfix-2.6.6-2.2.el6_1.x86_64 has missing requires of libmysqlclient.so.16(libmysqlclient_16)(64bit)
-----------------------

このようなエラーが出るときには、compat-mysql51をインストールしてあげます。

yum -y compat-mysql51
yum -y install nagios-plugins-all

CentOSでSWAPを削除して、カーネルパラメータを最適化する


swapをクリア

swapoff -a && swapon -a

※サーバの負荷が若干上がるので注意

vm.swappinessの設定変更

# cat /proc/sys/vm/swappiness
60
# vi /etc/sysctl.conf
vm.swappiness = 1
# sysctl -p
# cat /proc/sys/vm/swappiness
1

参考
vm.swappiness=0は重要
https://hiroakis.com/blog/2012/06/13/vm-swappiness0%E3%81%AF%E9%87%8D%E8%A6%81/  
カーネルパラメータvm.swappiness によるスワップの最適化
http://blog.takapra.com/2012/09/vm-swappiness/
RHEL6.4(kernel 2.6.32-303)以降の vm.swappiness=0 と OOM Killer の関係 - ablog
http://d.hatena.ne.jp/yohei-a/20151115/1447594914
OOM relation to vm.swappiness=0 in new kernel; kills MySQL server process
https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/

2013年10月9日水曜日

Nagiosgraphのインストール

※最新版の記事はこちらです




http://nagiosgraph.sourceforge.net/
Nagiosgraphを使って、Naigosが取得したデータをグラフで見れるようにします。
OSはCentOS6.4です。

nagiosが/usr/local/nagios/にインストールされている状態にしておきます。

Nagiosgraphをダウンロード
# wget http://sourceforge.net/projects/nagiosgraph/files/latest/download?source=files

環境を整える。
# tar -xvzf nagiosgraph-1.4.4.tar.gz
# cd nagiosgraph-1.4.4
# ./install.pl --check-prereq

Nagiosのインストールディレクトリと同居させるため、overlayを選択。
Nagiosの設定と齟齬のないように選んでいく。
# ./install.pl --layout overlay --prefix /usr/local/nagios

nagios.cfg に以下を記述
# process nagios performance data using nagiosgraph
process_performance_data=1
service_perfdata_file=/tmp/perfdata.log
service_perfdata_file_template=$LASTSERVICECHECK$||$HOSTNAME$||$SERVICEDESC$||$SERVICEOUTPUT$||$SERVICEPERFDATA$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=30
service_perfdata_file_processing_command=process-service-perfdata-for-nagiosgraph

command.cfg に以下を記述
# command to process nagios performance data for nagiosgraph
define command {
  command_name process-service-perfdata-for-nagiosgraph
  command_line /usr/local/nagios/libexec/insert.pl
}

apache confに以下のような記述を追記
ExecCGIで、CGIが動くようにします。
  ScriptAlias /nagios/cgi-bin/ "/usr/local/nagios/sbin/"
  <Directory "/usr/local/nagios/sbin">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
    AuthName "Basic"
    AuthType Basic
    AuthUserFile /usr/local/nagios/etc/htpasswd.users
    Require valid-user
  </Directory>

nagiosをリスタート
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
# /etc/init.d/nagios restart

httpdをリスタート
# /etc/init.d/apache restart

確認してみましょう。

2013年10月8日火曜日

nagiosのHBaseプラグインをセットアップ

http://www.ymc.ch/en/how-to-monitor-hbase-health-by-nagios
Gerd Königmdさんのスクリプトを参考にします。
環境はCentOS 6.4です。

hbaseのパスを確認
# which hbase
/usr/local/hbase/bin/hbase

編集します
# vi check_hadoop_hbase_state

先頭にJava HOMEを記述
# Java HOME
export JAVA_HOME=/usr/lib/jvm/java
export CLASS_PATH=$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

以下を書き換え
hbaseCmd=/usr/bin/hbase
->
hbaseCmd=/usr/local/hbase/bin/hbase

tmpFile=$(tempfile --suffix '_hbck_out')
->
tmpFile=$(mktemp --suffix '_hbck_out')

このようなスクリプトになりました。
#!/bin/sh
#
# Description:
# This plugin will return information about the status of HBASE

# Java HOME
export JAVA_HOME=/usr/lib/jvm/java
export CLASS_PATH=$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

hbaseCmd=/usr/local/hbase/bin/hbase
problemStrings="inconsistent|corrupt|failed|exception"

if [ ! -x $hbaseCmd ]; then
  echo "ERROR: cannot execute $hbaseCmd"
  exit 2
fi
tmpFile=$(mktemp --suffix '_hbck_out')
if [ ! -f "$tmpFile" ]; then
  echo "Problem creating a tempfile for hbck output..." 1>&2
  exit 1
fi

$hbaseCmd hbck > $tmpFile
if [ ! $? -eq 0 ]; then
  echo "Error while executing $hbaseCmd hbck"
  exit 2
fi
count=$(grep -Ei -c "$problemStrings" $tmpFile)
if [ $count -eq 0 ]; then
  message="Ok. HBase is healthy."
  exit_code=0
else
  error=$(grep -Ei "$problemStrings" $tmpFile)
  message="ERROR: $error"
  exit_code=2
fi

hbckDetails=$(head -n 17 $tmpFile && tail -n 2 $tmpFile)
if [ -f "$tmpFile" ]; then
  rm -f $tmpFile
fi
echo "$message | $hbckDetails"
exit $exit_code

スクリプトを設置
# cp check_hadoop_hbase_state /usr/lib64/nagios/plugins/

動作チェック
# /usr/lib64/nagios/plugins/check_hadoop_hbase_state

nrpeに追記
# emacs /etc/nagios/nrpe.cfg
command[check_hadoop_hbase_state]=sudo /usr/lib64/nagios/plugins/check_hadoop_hbase_state

rootで実行できるようにしておく
# visudo
nrpe  ALL=(ALL)       NOPASSWD:/usr/lib64/nagios/plugins/check_hadoop_hbase_state

nrpeをリスタート
# /etc/init.d/nrpe restart


nagiosのRedisプラグインをセットアップ


nagiosのRedisプラグインをセットアップします。

William Leibzon

さんのプラグインを利用します。
https://github.com/willixix/


CPANモジュールをインストール
# yum install cpan
# yum install perl-ExtUtils-Manifest
# cpan
cpan[1]> force install Redis

githubからスクリプトをクローン
# git clone https://github.com/willixix/WL-NagiosPlugins.git

スクリプトを設置
# cp WL-NagiosPlugins/check_redis.pl /usr/lib64/nagios/plugins/

動作チェック
# /usr/lib64/nagios/plugins/check_redis.pl -H localhost -A used_memory,used_memory_peak,connected_clients

nrpeに追記
# emacs /etc/nagios/nrpe.cfg
command[check_redis]=/usr/lib64/nagios/plugins/check_redis.pl -H localhost -p 6379 -T "0.01,0.02" -R -A -M 60G -m "50,80" -a blocked_clients,connected_clients -w 10,5000 -c 100,10000  -f

nrpeをリスタート
# /etc/init.d/nrpe restart


上記の監視では、以下のパラメータを設定しています。

-H : ホスト
localhost

-p : ポート
6379

-T "[conntime_warn,conntime_crit]" : コネクションタイムでのアラート
0.01秒で警告、0.02秒でクリティカル

-R : ヒットレート出力
-A :  パフォーマンス情報一覧出力

-M : サーバのメモリ値(アラートのしきい値では無いので注意)
60G

-m "[mem_utilization_warn,mem_utilization_crit] ": メモリの使用率でのアラート
50%で警告、80%でクリティカル

-a : 追加の統計変数
blocked_clients ブロッキングコールされた数
connected_clients コネクション数

-w : -aの変数の警告しきい値
blocked_clients 10クライアント以上で警告
connected_clients 5000クライアント以上で警告

-c : -aの変数のクリティカルしきい値
blocked_clients 100クライアント以上でクリティカル
connected_clients 10000クライアント以上でクリティカル

-f : グラフ出力の為に出力データを整形する


参考)
INFO [section] -> redisのinfo詳細が記載されている。
http://redis.io/commands/info


2013年10月6日日曜日

Kestrelに関する日本語の情報まとめ


Kestrelは、分散メッセージキューシステムです。
Twitterのバックエンドで使われていることで有名になりました。
日本語の情報は少ないですが、集めてみました。

PHP+Kestrel+Supervisorでお手軽タスクキューイング
http://blog.asial.co.jp/875

twitterでも利用されているメッセージキュー Kestrelを試す
http://yuroyoro.hatenablog.com/entry/20090803/1249297348

kestrelのマニュアル和訳
http://d.hatena.ne.jp/hito_asa/20101018/1287407597

kestrelの作者さんによるkestrelの紹介
http://d.hatena.ne.jp/hito_asa/20101018/1287382292

ZendQueueとKestrelでメッセージキューサーバーを体験
http://qiita.com/NAKANO_Akihito/items/241869eaa857ac843a65

Kestrel:Reliable Read
メッセージングシステムで、dequeue 後に正しく処理できずに異常終了したらどうなるのか?
http://siguniang.wordpress.com/2012/05/06/kestrel-reliable-read/


2013年8月28日水曜日

パフォーマンス監視 New Relic



パフォーマンス監視 New RelicについてのURLメモ

カジュアルに鯖を監視するNewRelic をAmazon Linux に導入 - aws memo
http://understeer.hatenablog.com/entry/2012/10/10/140709

Rails - パフォーマンス監視サービスのNew Relicが超便利な件 - Qiita [キータ]
http://qiita.com/y_uuki/items/dd4fce78b1bc32b64600

New Relicでアプリケーションのパフォーマンス測定 | Developers.IO
http://dev.classmethod.jp/tool/newrelic/

Rails + New Relic ならレスポンスタイム等のパフォーマンス監視が簡単にできるよ - 彼女からは、おいちゃんと呼ばれています
http://d.hatena.ne.jp/inouetakuya/20121216/1355656214

プロセス監視 God



プロセス監視 GodについてのURLメモ

スクリプトをDaemonizeする。god ツール.しかもプロセス監視・再起動付き - それマグで!
http://takuya-1st.hatenablog.jp/entry/20110918/1316365681

プロセス監視ツール God で delayed job を監視しよう。 - モーリスのシステム開発日記
http://d.hatena.ne.jp/maurice38/20111128/1322469725

GOD Ruby製プロセス監視フレームワーク
http://www.bootstrap-english.net/translations/god

Ruby製のプロセス監視ツールGodについてのメモ。
http://maeshima.hateblo.jp/entry/20100825/1282743494

Ruby - godのevent監視:monitがやらないけどGodがすること - Qiita [キータ]
http://qiita.com/sawanoboly@github/items/0c9202d447ec67402a0f

あーありがち - Godで初めてのプロセス監視
http://aligach.net/diary/20090817.html

プロセス監視ツール「God」 | Fusic Developers' Weblog
http://blog.fusic.co.jp/archives/235

2013年8月26日月曜日

WordPress Similar Postsのパッチ 同じタイトルのポストが複数出なくなります。

*** similar-posts.php.org Mon Aug 26 13:50:00 2013
--- similar-posts.php Mon Aug 26 13:52:13 2013
***************
*** 140,146 ****
     if ($check_age) $where[] = where_check_age($options['age']['direction'], $options['age']['length'], $options['age']['duration']);
     if ($check_custom) $where[] = where_check_custom($options['custom']['key'], $options['custom']['op'], $options['custom']['value']);
     $sql .= "WHERE ".implode(' AND ', $where);
!    if ($check_custom) $sql .= " GROUP BY $wpdb->posts.ID"; 
     $sql .= " ORDER BY score DESC LIMIT $limit";
     //echo $sql;
     $results = $wpdb->get_results($sql);
--- 140,148 ----
     if ($check_age) $where[] = where_check_age($options['age']['direction'], $options['age']['length'], $options['age']['duration']);
     if ($check_custom) $where[] = where_check_custom($options['custom']['key'], $options['custom']['op'], $options['custom']['value']);
     $sql .= "WHERE ".implode(' AND ', $where);
!    if ($check_custom) $sql .= " GROUP BY $wpdb->posts.ID";
!    // delete duplicate rows
!    $sql .= " GROUP BY title"; 
     $sql .= " ORDER BY score DESC LIMIT $limit";
     //echo $sql;
     $results = $wpdb->get_results($sql);
similar-posts.php.patch
WordPressのプラグインである、Similar Postsのパッチを書いてみました。
Similar Postsのバージョンは、2.6.2.0です。
同じタイトルのポストが複数出なくなります。
普通にblogを書いているぶんには、同じタイトルのポストとかは、あまりしないと思いますが、情報を自動で集めたりしている場合には役に立つかもです。

2013年8月23日金曜日

PHP5.4 + MySQL5.5 + APCをインストール (おもに友人のWordPressサーバのセットアップメモです。)

 (おもに友人のWordPressサーバのセットアップメモです。)

ミドルウェアは、最新のものを使うならば、PHP5.5 + MySQL5.6 + Zend OPcacheなのですが、 『簡単に・素早くセットアップ出来る』 ということを優先して、このバージョンを選んでいます。

環境はCentOS 6です。

MySQL5.5のインストール

既存のmysqlがあった場合アンインストール。
# yum remove mysql-libs mysql-server mysqlclient15 mysql-devel perl-DBD-mysql mysql

OSが64bitの場合です。
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm 
# wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -Uvh epel-release-6-8.noarch.rpm
# rpm -Uvh remi-release-6.rpm 
# yum --enablerepo=remi install mysql.x86_64 mysql-server.x86_64 mysql-devel.x86_64
# /etc/init.d/mysqld start

パスワードを設定します。 new-passwordと、hostnameのところは便宜変えてください。
# /usr/bin/mysqladmin -u root password 'new-password'
# /usr/bin/mysqladmin -u root -h hostname password 'new-password'

ログインできることを確認。
# /usr/bin/mysql -uroot -pnew-password

my.cnf調整
innodb_buffer_pool_sizeは使用可能メモリの60%を推奨です。
PHPアプリなどと同居する場合は便宜調整してください。
# cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
# emacs /etc/my.cnf
[client]
default-character-set = utf8

[mysqld]
log-bin=mysql-bin
binlog_format=mixed  
max_connections = 1024
character-set-server = utf8
table_open_cache = 4000
table_definition_cache = 400
key_buffer_size = 16M       
read_buffer_size = 256K     
read_rnd_buffer_size = 512K 
join_buffer_size = 256K
max_binlog_size = 128M
expire_logs_days = 7
server_id = 101 # サーバ毎に違う値を入れる
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/mysqld-slow.log
long_query_time = 5
innodb_buffer_pool_size = 5G # 使用可能メモリの60%を推奨
innodb_additional_mem_pool_size = 16M
innodb_autoextend_increment = 64M
innodb_log_file_size = 128M
innodb_log_buffer_size = 16M
innodb_flush_method = O_DIRECT
innodb_thread_concurrency = 8
innodb_commit_concurrency = 10
innodb_lock_wait_timeout = 3600
innodb_file_format = Barracuda
innodb_file_per_table
skip-name-resolve
performance_schema = 0 # サーバのメモリが少ないときにはオフにしておく

MySQL5.5の再起動。
# /etc/init.d/mysqld stop
# cd /var/lib/mysql
# rm ib_logfile0 ib_logfile1
# /etc/init.d/mysqld start

ログを確認。
# cat /var/log/mysqld.log 

ログインして、データベースを作っておきます。
PHP5.4のインストール

iusレポジトリを使います。 一緒にhttpdもインストールします。
# rpm -Uvh  http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-11.ius.centos6.noarch.rpm
# rpm -Uvh  http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/epel-release-6-5.noarch.rpm
# yum install php54-cli php54-pdo php54-mysql php54-common php54 php54-fpm php54-devel php54-mbstring php54-mcrypt php54-pear php54-gd httpd httpd-devel

httpdのログを圧縮・90日間保存するように設定しておく。
compressと、rotate 90を追記。 notifemptyを削除。
# emacs /etc/logrotate.d/httpd
/var/log/httpd/*log {
    missingok
    rotate 90
    compress
    sharedscripts
    delaycompress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

APCのインストール 

peclコマンドでインストールできます。
# pecl install APC

extensionの設定と、メモリの設定をします。
# emacs /etc/php.ini
extension=apc.so
apc.shm_size=64M

httpdもしくはphp-fpmの再起動で有効になります。
# /etc/init.d/httpd restart 

確認します。
# php -i | grep apc

APCの管理画面 apcのキャッシュを可視化できるようにしておくと良いでしょう。 phpスクリプトができているのでコピーします。 ※便宜アクセス制限をかけてください。
# mkdir -p /var/www/apc
# cp /usr/share/pear/apc.php /var/www/apc

apc.phpの以下の行を調整すると、グラフが見えるようになり、より使えるようになります。
defaults('ADMIN_PASSWORD','password');          // Admin Password - CHANGE THIS TO ENABLE!!!

httpdの設定例
# vi /etc/httpd/conf.d/002_apc.conf

Listen 8080

  ServerName ****************
  DocumentRoot /var/www/apc
  
    Options All
    Options -Indexes
    AllowOverride All
    Order allow,deny
    allow from all

    # BASIC Auth
    AllowOverride AuthConfig
    AuthType Basic
    AuthName Basic
    AuthUserFile /var/www/apc/.htpasswd
    Require valid-user
  


nginxの設定例
server {
  listen 5130;
  server_name xxxxxxxxxxxxxxxxxxxxxxxx;

  auth_basic "basic authentication";
  auth_basic_user_file "/var/www/apc_control_panel/.htpasswd";

  server_name _;
  root /var/www/apc_control_panel;
  index index.php index.html;
  charset utf-8;

  ## access log settings
  access_log  /var/log/nginx/fastcgi_log combined;

  location / {
    index index.php;
  }

  ## location /
  location ~ \.php$ {
      fastcgi_pass unix:/tmp/php.socket;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
      fastcgi_pass_header "X-Accel-Redirect";
      fastcgi_pass_header "X-Accel-Expires";
  }
}


iptablesの設定

とりあえず、ssh用の22番ポートと、HTTP用の80番ポートを開放します。 それ以外を遮断します。
# vi /etc/sysconfig/iptables
*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22    -j ACCEPT

# HTTP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT

# REJECT others
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT
# /etc/init.d/iptables restart


httpd.confの設定

アクセス過多でサーバがハングアップした状態にならないように、プロセスの数が一定なるように調整してあげます。 数値はメモリ量を見つつ、いい感じに変更してください。
# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
# vi /etc/httpd/conf/httpd.conf

     
StartServers       8     
MinSpareServers    5     
MaxSpareServers   20     
ServerLimit      256     
MaxClients       256     
MaxRequestsPerChild  4000
      
StartServers      50      
MinSpareServers   50      
MaxSpareServers   50      
ServerLimit       50      
MaxClients        50      
MaxRequestsPerChild  4000 
      
NameVirtualHostを有効にします。 今回は、80番ポートだけです。SSLも使う場合は443も設定しましょう。
# NameVirtualHost *:80  
↓
NameVirtualHost *:80  
WordPress用の設定
# vi /etc/httpd/conf.d/001_wp.conf 


  ServerName ssd1.xxxxxx.jp
  DocumentRoot /var/www/wordpress-ssd1
  
    Options All
    Options -Indexes
    AllowOverride All
    Order allow,deny
    allow from all
  



  ServerName ssd2.xxxxxx.jp
  DocumentRoot /var/www/wordpress-ssd2
  
    Options All
    Options -Indexes
    AllowOverride All
    Order allow,deny
    allow from all
  

ディレクトリを作成して、そこにWordPressを設置します。
mdkir -p /var/www/wordpress-ssd1
mdkir -p /var/www/wordpress-ssd2

↓
WordPress設置

↓
ファイルの権限を変更
# cd /var/www/
# chown -R apache:apache wordpress-ssd1
# chown -R apache:apache wordpress-ssd2
httpdをスタートして、ブラウザでアクセスしてみます。
# /etc/init.d/httpd restart


以上。
簡単ですね!

2013年7月17日水曜日

RHEL6/RHEL5の稼動208日でkernel panic問題まとめ

稼動期間208日のRHEL6/RHEL5で、カーネルのバージョンが古いときにkernel panicが発生する場合があるそうです。
SLES11や、Ubuntuでも同様の問題があります。

・RHEL6の場合
カーネルのバージョン 2.6.32-220.4.2 未満が対象です。

・RHEL5の場合
カーネルのバージョン 2.6.18-348 未満が対象です。


カーネルバージョンの調べ方
調べておきましょう。
# uname -r


対策方法
『すでにパッチが適用された新カーネルが公開されているので、アップデートすれば良いようです。』


参考URL
HPカスタマー サポート
連続稼動期間が208日を越えた後にOSがpanicする 現象が起きることがあります
http://h10025.www1.hp.com/ewfrf/wc/document?cc=jp&lc=ja&dlc=ja&docname=c03556367

RHEL6やSLES11に208日以上の連続稼働でカーネルパニックが発生する問題
http://db2.jugem.cc/?eid=2458

RHEL5の208日問題について考えてみた
http://divisionbyzero.hatenablog.jp/entry/2012/07/17/234145


2013年7月11日木曜日

knife-solo 0.3.0をインストールする方法(仮)


http://matschaffer.github.io/knife-solo/
knife-soloとは、ホストサーバからリモートサーバのchef-soloを実行するためのアプリケーションです。
これを使うことによって、リモートサーバにいちいちログインすることなく、ソフトウェアのセットアップをすることができるようになります。
入門Chef Solo』を読んでいて、knife-soloのインストールでちょっと詰まったので、インストールメモを書いておきます。


環境

# cat /etc/redhat-release
CentOS release 6.4 (Final)

yumライブラリをインストール
# yum install libxslt-devel
# yum install git
# yum install openssl-devel


ruby2.0とopensslライブラリをインストール

# wget ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz
# tar xvzf ruby-2.0.0-p247.tar.gz
# cd ruby-2.0.0-p247
# ./configure --prefix=/usr
# make
# make install
# cd ext/openssl
# ruby extconf.rb
# make install

# which ruby                                                                          
/usr/bin/ruby

# ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]

# gem -v
2.0.3

bundlerをインストール
# gem install bundler

gitからknife-soloをコピーして、インストール
# cd
# git clone git://github.com/matschaffer/knife-solo.git
# cd knife-solo/
# git submodule update --init
# bundle && bundle exec rake install

ヘルプを表示してみましょう
# knife -h
Usage: knife sub-command (options)
    -s, --server-url URL             Chef Server URL
    -k, --key KEY                    API Client Key
        --[no-]color                 Use colored output, defaults to enabled
    -c, --config CONFIG              The configuration file to use
        --defaults                   Accept default values for all questions
    -d, --disable-editing            Do not open EDITOR, just accept the data as is
    -e, --editor EDITOR              Set the editor to use for interactive commands
    -E, --environment ENVIRONMENT    Set the Chef environment
    -F, --format FORMAT              Which format to use for output
    -u, --user USER                  API Client Username
        --print-after                Show the data after a destructive operation
    -V, --verbose                    More verbose output. Use twice for max verbosity
    -v, --version                    Show chef version
    -y, --yes                        Say yes to all prompts for confirmation
    -h, --help                       Show this message

Available subcommands: (for details, knife SUB-COMMAND --help)

** BOOTSTRAP COMMANDS **
knife bootstrap FQDN (options)

** CLIENT COMMANDS **
knife client create CLIENT (options)
knife client delete CLIENT (options)
knife client bulk delete REGEX (options)
knife client list (options)
knife client show CLIENT (options)
knife client edit CLIENT (options)
knife client reregister CLIENT (options)

** CONFIGURE COMMANDS **
knife configure client DIRECTORY
knife configure (options)

** COOK COMMANDS **
`knife cook` is deprecated! Please use:
  knife solo cook [USER@]HOSTNAME [JSON] (options)

** COOKBOOK COMMANDS **
knife cookbook metadata COOKBOOK (options)
knife cookbook show COOKBOOK [VERSION] [PART] [FILENAME] (options)
knife cookbook upload [COOKBOOKS...] (options)
knife cookbook test [COOKBOOKS...] (options)
knife cookbook download COOKBOOK [VERSION] (options)
knife cookbook list (options)
knife cookbook bulk delete REGEX (options)
knife cookbook metadata from FILE (options)
knife cookbook create COOKBOOK (options)
knife cookbook delete COOKBOOK VERSION (options)

** COOKBOOK SITE COMMANDS **
knife cookbook site unshare COOKBOOK
knife cookbook site install COOKBOOK [VERSION] (options)
knife cookbook site share COOKBOOK CATEGORY (options)
knife cookbook site download COOKBOOK [VERSION] (options)
knife cookbook site search QUERY (options)
knife cookbook site list (options)
knife cookbook site show COOKBOOK [VERSION] (options)

** DATA BAG COMMANDS **
knife data bag delete BAG [ITEM] (options)
knife data bag from file BAG FILE|FOLDER [FILE|FOLDER..] (options)
knife data bag create BAG [ITEM] (options)
knife data bag show BAG [ITEM] (options)
knife data bag list (options)
knife data bag edit BAG ITEM (options)

** DELETE COMMANDS **
knife delete [PATTERN1 ... PATTERNn]

** DIFF COMMANDS **
knife diff PATTERNS

** DOWNLOAD COMMANDS **
knife download PATTERNS

** ENVIRONMENT COMMANDS **
knife environment edit ENVIRONMENT (options)
knife environment delete ENVIRONMENT (options)
knife environment create ENVIRONMENT (options)
knife environment show ENVIRONMENT (options)
knife environment list (options)
knife environment from file FILE [FILE..] (options)

** EXEC COMMANDS **
knife exec [SCRIPT] (options)

** HELP COMMANDS **
knife help [list|TOPIC]

** INDEX COMMANDS **
knife index rebuild (options)

** KITCHEN COMMANDS **
`knife kitchen` is deprecated! Please use:
  knife solo init DIRECTORY

** KNIFE COMMANDS **
Usage: /usr/bin/knife (options)

** LIST COMMANDS **
knife list [-dR] [PATTERN1 ... PATTERNn]

** NODE COMMANDS **
knife node edit NODE (options)
knife node show NODE (options)
knife node from file FILE (options)
knife node run_list add [NODE] [ENTRY[,ENTRY]] (options)
knife node run_list remove [NODE] [ENTRIES] (options)
knife node delete NODE (options)
knife node create NODE (options)
knife node bulk delete REGEX (options)
knife node list (options)

** PREPARE COMMANDS **
`knife prepare` is deprecated! Please use:
  knife solo prepare [USER@]HOSTNAME [JSON] (options)

** RAW COMMANDS **
knife raw REQUEST_PATH

** RECIPE COMMANDS **
knife recipe list [PATTERN]

** ROLE COMMANDS **
knife role create ROLE (options)
knife role from file FILE [FILE..] (options)
knife role bulk delete REGEX (options)
knife role show ROLE (options)
knife role list (options)
knife role delete ROLE (options)
knife role edit ROLE (options)

** SEARCH COMMANDS **
knife search INDEX QUERY (options)

** SHOW COMMANDS **
knife show [PATTERN1 ... PATTERNn]

** SOLO COMMANDS **
knife solo clean [USER@]HOSTNAME
knife solo cook [USER@]HOSTNAME [JSON] (options)
knife solo prepare [USER@]HOSTNAME [JSON] (options)
knife solo bootstrap [USER@]HOSTNAME [JSON] (options)
knife solo init DIRECTORY

** SSH COMMANDS **
knife ssh QUERY COMMAND (options)

** STATUS COMMANDS **
knife status QUERY (options)

** TAG COMMANDS **
knife tag create NODE TAG ...
knife tag list NODE
knife tag delete NODE TAG ...

** UPLOAD COMMANDS **
knife upload PATTERNS

** USER COMMANDS **
knife user edit USER (options)
knife user delete USER (options)
knife user create USER (options)
knife user reregister USER (options)
knife user show USER (options)
knife user list (options)

** WASH COMMANDS **
`knife wash up` is deprecated! Please use:
  knife solo clean [USER@]HOSTNAME



ちゃんと、knife soloコマンドがありますか?
# knife | grep solo
  knife solo cook [USER@]HOSTNAME [JSON] (options)
  knife solo init DIRECTORY
  knife solo prepare [USER@]HOSTNAME [JSON] (options)
knife solo clean [USER@]HOSTNAME
knife solo cook [USER@]HOSTNAME [JSON] (options)
knife solo prepare [USER@]HOSTNAME [JSON] (options)
knife solo bootstrap [USER@]HOSTNAME [JSON] (options)
knife solo init DIRECTORY
  knife solo clean [USER@]HOSTNAME



knife-soloを使ってリモートサーバにChef Soloをインストールしてみます。


ホストサーバ
公開鍵作成
# cd
# ssh-keygen -t rsa
# cat .ssh/id_rsa.pub
# ssh-rsa AAAAB********************************************************

リモートサーバ
鍵を設置
# cd
# mkdir -p .ssh
# vi .ssh/authorized_keys
# ssh-rsa AAAAB********************************************************
# chmod -R 700 .ssh


ホストサーバからリモートサーバにsshログインできることを確認
# ssh root@192.168.17.141

ホストサーバ
knifeを使って、リモートサーバにChef Soloをインストール。
# knife solo prepare root@192.168.17.141

WARNING: No knife configuration file found
Bootstrapping Chef...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6510  100  6510    0     0   8206      0 --:--:-- --:--:-- --:--:-- 35769
Downloading Chef 11.4.4 for el...
Installing Chef 11.4.4
warning: /tmp/tmp.t5p75n9d/chef-11.4.4.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
Preparing...                ########################################### [100%]
   1:chef                   ########################################### [100%]
Thank you for installing Chef!
Generating node config 'nodes/192.168.17.141.json'...

うまくいきました。
レシピを作ってサーバをセットアップしまくりたいですね。

2013年6月11日火曜日

Plagger::Plugin::Filter::MicrosoftTranslator (仮)

PlaggerのFilterです。
MicrosoftTranslatorを使って、タイトルを翻訳しています。
Plagger::Plugin::Filter::Babelfishを参考に書きましたが、まだゼンゼン中途半端でコードが汚いです。。。
メモ的に載せておきます。

コスト的に考えて、本文の翻訳はやめておいたほうが良さそうかなと。

package Plagger::Plugin::Filter::MicrosoftTranslator;
use strict;
use base qw( Plagger::Plugin );

use Plagger::UserAgent;
use Digest::MD5 qw(md5_hex);
use Encode qw(encode_utf8);
use LWP::UserAgent;
use XML::Atom::Feed;
use XML::Atom::Entry;

sub register {
    my($self, $context) = @_;

    $context->autoload_plugin({ module => 'Filter::GuessLanguage' });
    $context->register_hook(
        $self,
        'plugin.init'        => \&connect_to_azure_api,
        'update.entry.fixup' => \&update,
    );
}

sub rule_hook { 'update.entry.fixup' }

sub connect_to_azure_api {
    my($self, $context, $args) = @_;
    $context->log(debug => "hello");
}

sub update {
    my($self, $context, $args) = @_;

    my $language   = $self->conf->{source};

    my $title    = $args->{entry}->title->data;
    my $title_tr = $self->translate($title, $language);
    unless (defined $title_tr) {
        $context->log(error => "Translation failed");
        return;
    }

    $args->{entry}->title($title_tr);

    sleep 1;
=c
    my $body    = $args->{entry}->body->data;
    my $body_tr = $self->translate($body, $language);
    unless (defined $body_tr) {
        $context->log(error => "Translation failed: ");
        return;
    }
    $args->{entry}->body($body_tr);
=cut 
}

sub translate {
    my ($self, $text, $language) = @_;

    my $destination = $self->conf->{destination} or do {
      Plagger->context->log(error => "set destination language");
      return;
    };

    # get content from azure api
    my $account_key = $self->conf->{account_key};
    $ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0;
    my $url = URI->new("https://api.datamarket.azure.com/Bing/MicrosoftTranslator/v1/Translate?Text=%27$text%27&To=%27$destination%27");
    my $ua = LWP::UserAgent->new or die;
    my $req = HTTP::Request->new(GET => $url);
    $req->authorization_basic('', $account_key);
    my $res = $ua->request($req);
    die $res->status_line if !$res->is_success;
    my $content = $res->content;

    # get elem from Atom
    my $feed = XML::Atom::Feed->new(\$content);
    my @entries = $feed->entries;
    foreach my $entry(@entries){
 return $entry->content->elem->findvalue('./m:properties/d:Text')
    }
}

1;

__END__

=head1 NAME

Plagger::Plugin::Filter::MicrosoftTranslator - translate via MicrosoftTranslator

=head1 SYNOPSIS

  - module: Filter::MicrosoftTranslator
    config:
      destination: ko
      account_key: xxxxxxxxxxxxxxxxxxxx

=head1 DESCRIPTION

This plugin translates each entry TITLE via MicrosoftTranslator.
See "Microsoft Translator" http://msdn.microsoft.com/en-us/library/dd576287.aspx for details.

=head1 CONFIG

=over 4

=item destination

Which language the feeds/entries should be translated to.
See "Translator Language Codes" http://msdn.microsoft.com/en-us/library/hh456380.aspx for details.   

=back

=head1 AUTHOR

yako.takeshi@googlemail.com

=head1 SEE ALSO

L

=cut





2013年6月10日月曜日

WordPressで本文中の画像URLを抜き出す

本文中の画像URLをループで使えるようにします。

テーマのための関数 (functions.php)に以下のコードを追記します。
画像がなかったときには、no_thumb.jpgを表示します。
/**
 * get image url from post 
 */

function catch_that_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<\s*img [^\>]*src\s*=\s*[\""\']?([^\""\'>]*)/i', $post->post_content, $matches);

  $first_img = $matches [1] [0];
 
  if(empty($first_img)){
    $first_img = "/no_thumb.jpg";
  }
  return $first_img;
}

メインインデックスのテンプレート (index.php)などの記事のループで以下のコードを使います。


うまく画像が出たでしょうか?

参考)
記事内の最初の画像を取り出す
http://kachibito.net/wp-code/display-first-image-url

2013年6月6日木曜日

MySQL 5.6をrpmでインストールします

MySQL 5.6をrpmでインストールします。
現時点でremiレポジトリなどで対応していないので、rpmからインストールします。
 
http://dev.mysql.com/downloads/mysql/5.6.html#downloads 
新バージョンを確認し、便宜、以下の 5.6.12-1 の数字を合わせましょう。

ダウンロード
# wget -q http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.11-2.el6.x86_64.rpm/from/http://cdn.mysql.com/ \
http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-compat-5.6.11-2.el6.x86_64.rpm/from/http://cdn.mysql.com/ \
http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.11-2.el6.x86_64.rpm/from/http://cdn.mysql.com/ \
http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-devel-5.6.11-2.el6.x86_64.rpm/from/http://cdn.mysql.com/ \
http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-5.6.11-2.el6.x86_64.rpm/from/http://cdn.mysql.com/ \
インストール
# yum install MySQL-{client,devel,server,shared-compat}-5.6.11-2.el6.x86_64.rpm
# yum install MySQL-shared-5.6.11-2.el6.x86_64.rpm
yumログ確認
# tail /var/log/yum.log
MySQLスタート
# /etc/init.d/mysql start
MySQLログ確認
# cat /var/log/mysqld.log    
root初期パスワード確認
*****のところがパスワードです
# cat /root/.mysql_secret
# The random password set for the root user at Thu Jun  6 14:23:31 2013 (local time): *****
MySQLにログイン
# mysql -uroot -p******
パスワード設定
mysql> SET PASSWORD FOR root@localhost=PASSWORD('******');
mysql_secure_installationを実行
# mysql_secure_installation

# rootパスワードを入力
Enter current password for root (enter for none):

# rootユーザーのパスワードを変更するか?
Change the root password? [Y/n] n

# 匿名ユーザーを削除するか?
Remove anonymous users? [Y/n] Y

# rootユーザーでリモートからのログインを許可するか?
Disallow root login remotely? [Y/n] Y or N

# 「test」データベースを削除するか?
Remove test database and access to it? [Y/n] Y

# 権限テーブルをリロードするか?
Reload privilege tables now? [Y/n] Y

my.cnf設定
・/usr/my.cnfが優先されるので、5.5以前の慣習のため、/etc/にリンクを貼っておく
・innodb_buffer_pool_size = 1G この値は使用可能メモリの60%を推奨
・クエリを確認したいときには、general_logを有効にしてください(SET GLOBAL general_log = ON or OFF;でも可)

# rm /etc/my.cnf
# ln -s /usr/my.cnf /etc/
# vi /usr/my.cnf

[mysqld]
datadir                 = /var/lib/mysql
socket                  = /var/lib/mysql/mysql.sock
character-set-server    = utf8
skip-character-set-client-handshake

log-error               = /var/lib/mysql/mysqld-error.log
#general_log             = 1
#general_log_file        = /var/lib/mysql/mysql.log
slow_query_log          = 1
slow_query_log_file     = /var/lib/mysql/slow.log 
long_query_time = 5

log-bin                 = mysql-bin
binlog_format           = mixed
expire_logs_days        = 1
server-id               = 101
max_allowed_packet      = 8M
table_open_cache        = 256
max_connections         = 1024
innodb_file_per_table
innodb_flush_log_at_trx_commit = 0
innodb_flush_method     = O_DIRECT
innodb_buffer_pool_size = 1G
innodb_log_file_size    = 128M
innodb_log_buffer_size  = 8M
query_cache_type        = 1
query_cache_size        = 64M
key_buffer_size         = 32M
sort_buffer_size        = 1M
read_buffer_size        = 1M
read_rnd_buffer_size    = 4M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqld_safe]
log-error               = /var/lib/mysql/mysqld_safe-error.log
pid-file                = /var/run/mysqld/mysqld.pid
character-set-server    = utf8
log_fileを削除して、MySQLをスタート
# /etc/init.d/mysql stop
# rm /var/lib/mysql/ib_logfile0
# rm /var/lib/mysql/ib_logfile1
# /etc/init.d/mysql start
MySQLログ確認
# cat /var/lib/mysql/mysqld_safe-error.log

こちらのblogを参考にさせて頂きました。
有難うございます。
http://d.hatena.ne.jp/akishin999/20130207/1360241401

PHP5.4もインストールするときは、こちらのblogが参考になります。
http://blog.youyo.info/blog/2013/02/12/server-build-log/

2013年5月29日水曜日

【WordPress】 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT

by:OiMax

WordPressのデータを扱っているMySQLのエラーログを確認していたら見慣れないWarningがありました。
# tail -f /var/lib/mysql/*err
130529 12:22:26 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE  on a table with more than one UNIQUE KEY is unsafe Statement: INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('_transient_feed_mod_57bc725ad6568758915363af670fd8bc', '1369797746', 'no') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)
130529 12:22:26 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE  on a table with more than one UNIQUE KEY is unsafe Statement: INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('_transient_timeout_dash_de3249c4736ad3bd2cd29147c4a0d43e', '1369840946', 'no') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)
130529 12:22:26 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE  on a table with more than one UNIQUE KEY is unsafe Statement: INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('_transient_dash_de3249c4736ad3bd2cd29147c4a0d43e', '<h4>人気上位</h4>\n<h5><a href=\'http://wordpress.org/plugins/facebook/\'>Facebook</a></h5>&nbsp;<span>(<a href=\'plugin-install.php?tab=plugin-information&amp;plugin=facebook&amp;_wpnonce=0c777d14e5&amp;TB_iframe=true&amp;width=600&amp;height=800\' class=\'thickbox\' title=\'Facebook\'>インストール</a>)</span>\n<p>Add Facebook social plugins and the ability to publish new posts to a Facebook Timeline or Facebook Page. Official Facebook plugin.</p>\n<h4>最新のプラグイン</h4>\n<h5><a href=\'http://wordpress.org/plugins/ppm-testimonial/\'>PPM Testimonial</a></h5>&nbsp;<span>(<a href=\'plugin-install.php?tab=plugin-information&amp;plugin=ppm-testimonial&amp;_wpnonce=93cd144
こんな感じでわーっと出てますね。
MySQLのBINLOG_FORMATが良くないのかな?

現在のフォーマットを確認します。
mysql> SHOW GLOBAL VARIABLES like 'binlog_format';                                                                             
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)

STATEMENTですね。
これを、MIXEDにしてみました。
mysql> SET GLOBAL binlog_format = 'MIXED';
# vi /etc/my.cnf
binlog_format=mixed
これでしばらく様子見です。

追伸:MySQLのWarning出なくなりました。

2013年5月22日水曜日

PHP5.5 + nginx1.4 + php-fpm + Zend OPcacheを立ち上げてみよう

Conway L.

PHP5.5 + nginx1.4 + php-fpm + Zend OPcacheのインストールメモです
OSはCentOS6です

# cat /etc/redhat-release                                                              
CentOS release 6.4 (Final)


PHPの最新版をインストール

※ここでインストールしているのはPHP 5.5.0RC1で、リリース候補版です
プロダクション環境では安定版のほうが、たぶん良いでしょう

# rpm -ivh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# yum --enablerepo=remi-test install php php-common php-mbstring php-pdo php-cli php-devel php-fpm
# php --version
PHP 5.5.0RC1 (cli) (built: May  8 2013 21:08:03)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0-dev, Copyright (c) 1998-2013 Zend Technologies


nginxの最新版をインストール

# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm
# yum install nginx
# nginx -v
nginx version: nginx/1.4.1


サーバ立ち上げ時に、PHP-FPMが自動起動するようにchkconfigを設定しておく

# /sbin/chkconfig php-fpm on
# /sbin/chkconfig --list


nginxの設定を編集

# cp -r /etc/nginx /etc/nginx.org
# emacs /etc/nginx/conf.d/default.conf

ルートディレクトリの箇所を編集

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }


    root   /usr/share/nginx/html;
    index  index.php index.html;


PHP-FPM向けの設定を追記

    location ~ \.php$ {
      fastcgi_pass unix:/tmp/php.socket;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
      fastcgi_pass_header "X-Accel-Redirect";
      fastcgi_pass_header "X-Accel-Expires";
    }


nginxをリスタート
# /etc/init.d/nginx restart



PHP-FPMの設定を編集

# cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.org
# emacs /etc/php-fpm.d/www.conf

php.socketとの通信を有効にする

#listen = 127.0.0.1:9000
listen = /tmp/php.socket

ユーザをnginxにする

; RPM: apache Choosed to be able to access some dir as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache



; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx


タイムゾーンを東京にする

php_admin_value[date.timezone]= 'Asia/Tokyo'

PHP-FPMをリスタート

# /etc/init.d/php-fpm restart

phpinfoを出すphpファイルを設置

# emacs /usr/share/nginx/html/index.php
<?php phpinfo(); ?>

ブラウザで確認してみましょう



Zend OPcacheをインストールしてみる

Zend OPcacheは、PHP 5.5 のコードキャッシュです
このスライドが参考になります


# yum --enablerepo=remi-test install php-opcache
# php -v
PHP 5.5.0RC1 (cli) (built: May  8 2013 21:08:03)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0-dev, Copyright (c) 1998-2013 Zend Technologies
    with Zend OPcache v7.0.2-dev, Copyright (c) 1999-2013, by Zend Technologies

Zend OPcacheと出ました


Opcache Control Panel



Zend OPcacheの状況が見れるスクリプトが公開されています
これを設置しておくと良いでしょう

OCP – Opcache Control Panel
https://gist.github.com/ck-on/4959032


# cd /usr/share/nginx/html/
# wget https://gist.github.com/ck-on/4959032/raw/0b871b345fd6cfcd6d2be030c1f33d1ad6a475cb/ocp.php

※便宜パスワードなど掛けておきましょう


2013年5月20日月曜日

進撃の巨人 タペストリー

進撃の巨人のポスターはまだないみたいですが、、、タペストリーがあるみたいですね。
これは、かなりカッコイイ。

この商品の発売予定日は2013年6月15日です。

だそうです。
品切れになる前に予約しておくといいかも。









2013年5月17日金曜日

Wordpress Popular Postsが重い。。。


著作者:Karns234


Wordpress Popular Postsを外したらblogが軽くなりました
サムネが/wp-content/plugins/wordpress-popular-posts/timthumb.php
を叩きまくっていたみたいで、、、
php-fpmがひぃひぃ言っていたみたいです
(いや、そんなに辛くはないですが。。。そこそこマシに)
ここを何とかしたら良くなりそうですね

サーバのload averageが常時1~2くらいだったのが、0.5に下がりました

Wordpress Popular Postsが、MySQLにクエリ送りまくっていたってのもあるみたいです
MySQLも軽くなりました

イイ感じです

代わりに、Simple GA Rankingというモノがあるらしいので、いろいろ試してみたりしようかなと。

ヒマがあったら自分でプラグイン、書いてみようかな?
むしろ、プラグインよりも、BlogにXML-RPCでPostするようなバッチプログラムならば楽かも。

2013年4月1日月曜日

IBI@Life is a bitch: Tumblrの初め方→使い方

IBI@Life is a bitch: Tumblrの初め方→使い方


①ポスト上限までリブログ
②デートでもtumblr
③ネットよりtumblr
④0.2秒でリブログする
もはやすでに【上級者編】に足を踏み入れているような気がします
②と④はわからないですが、①③はだいたい満たしているような
いや、人間の反射限界でリブログに挑んでいるのは事実(・_・;)

2013年3月27日水曜日

フェイスブック広告の相場を出しているサイト



Advertising costs on Facebook in your country
http://www.socialbakers.com/facebook-advertising/

フェイスブック広告の相場を出しているサイトです。
CPCとCPMの数字がわかります。

CPCとは
1クリック(=サイトへの1アクセス)を獲得するのにかかるコストのこと。

CPMとは
Webサイトの広告掲載料金の単位の一つで、掲載1000回あたりの料金。これに掲載対象ページの閲覧数(ページビュー)を乗じて1000で割ったものが広告掲載料金となる。
via http://e-words.jp/

2013年3月19日火曜日

ruby-modeを利用してemacsのrubyのコードに色を付ける CentOS版

CentOSのemacsでrubyのコードに色を付けます
なにはともあれ、emacsをyumでインストール
# sudo su
# yum install emacs
ruby-modeもyumでインストール
# yum install ruby-mode
コード内のEND対応する行をハイライトするelispパッケージをダウンロードして設置
# mkdir -p /usr/share/emacs/site-lisp/ruby-block
# wget http://www.emacswiki.org/emacs/download/ruby-block.el -P /usr/share/emacs/site-lisp/ruby-block
.emacsを編集します
$ vi .emacs
(autoload 'ruby-mode "ruby-mode" "Mode for editing ruby source files" t)
(setq auto-mode-alist  (append '(("\\.rb$" . ruby-mode)) auto-mode-alist))
(setq interpreter-mode-alist (append '(("ruby" . ruby-mode)) interpreter-mode-alist))
(autoload 'run-ruby "inf-ruby" "Run an inferior Ruby process")
(autoload 'inf-ruby-keys "inf-ruby" "Set local key defs for inf-ruby in ruby-mode")

(add-hook 'ruby-mode-hook
  '(lambda ()
    (turn-on-font-lock)
    (set-face-foreground font-lock-comment-face "pink")
    (set-face-foreground font-lock-string-face "yellow")
    (set-face-foreground font-lock-function-name-face "grey")
    (set-face-foreground font-lock-variable-name-face "orange")
    (set-face-foreground font-lock-keyword-face "LightSeaGreen")
    (set-face-foreground font-lock-type-face "LightSeaGreen"))
)

(global-font-lock-mode 1)
(setq default-frame-alist (append '(
  (foreground-color . "gray")  ;
  (background-color . "black") ;
  (cursor-color     . "blue")  ;
) default-frame-alist))

;;ruby-block
(require 'ruby-block)
(ruby-block-mode t)
(setq ruby-block-highlight-toggle t)

参考)
[Emacs][Ruby] end に対応する行をハイライトするelispパッケージ ruby-block.el

2013年3月10日日曜日

オープンソースでRTB?

リアルタイムエンジン開発会社Datacratic 、オープンソースによるRTBキットを発表
via http://rtbsquare.ciao.jp/?p=1194

そして、そのソースはこちら。
https://github.com/RTBkit

ドキュメントはこちらにまとめられています。
http://rtbkit.org/site/
いわく、
RTBkitはRTB(リアルタイム・ビッディング)フレームワークです。
Rubicon Project, Nexage, App Nexus, The Google Ad Exchange などのAd Exchange(アドエクスチェンジ)が使えるようにデザインされています。
とのこと。
c++で実装されています。
プラグインはNode.jsなどでも書けるとのこと。

2013年3月4日月曜日

ウィリアム・S・バロウズの本をYahoo!オークションに出品しました

http://openuser.auctions.yahoo.co.jp/jp/user/system_of_the_freaks
ウィリアム・S・バロウズの本をYahoo!オークションに出品しました
ペヨトル工房の本が幾つかあり、それらは絶版本です
それぞれ500円から出品しております
ありがたい事に、何冊かに入札していただいています
よろしかったらどうぞ~


 タイトル現在価格即決価格入札ソート残り
ウィリアム・S・バロウズ『ブレードランナ...
ウィリアム・S・バロウズ『ブレードランナー』 1990 初版です
出品者(評価):system_of_the_freaks評価
[NEW]
500 円-14 日
ウォッチリスト
ウィリアム・S・バロウズ 『ソフトマシーン...
ウィリアム・S・バロウズ 『ソフトマシーン』ペヨトル工房 絶版
出品者(評価):system_of_the_freaks評価
[NEW]
500 円-14 日
ウォッチリスト
ウィリアム・バロウズ シティーズ・オブ・...
ウィリアム・バロウズ シティーズ・オブ・ザ・レッド・ナイト
出品者(評価):system_of_the_freaks評価
[NEW]
500 円--4 日
ウォッチリスト
ウィリアム・S・バロウズ 『おかま』 ペヨ...
ウィリアム・S・バロウズ 『おかま』 ペヨトル工房 絶版
出品者(評価):system_of_the_freaks評価
[NEW]
500 円-14 日
ウォッチリスト
ウィリアム・S・バロウズ 『内なるネコ』 ...
ウィリアム・S・バロウズ 『内なるネコ』 1994 初版
出品者(評価):system_of_the_freaks評価
[NEW] 即決価格
500 円1,500 円-4 日
ウォッチリスト
ウィリアム・S・バロウズ『デッド・ロード...
ウィリアム・S・バロウズ『デッド・ロード』 1990 初版です
出品者(評価):system_of_the_freaks評価
[NEW]
500 円--4 日
ウォッチリスト
ウィリアム・S・バロウズ 『ウエスタン・ラ...
ウィリアム・S・バロウズ 『ウエスタン・ランド』 1991 初版
出品者(評価):system_of_the_freaks評価
[NEW]
500 円-14 日
ウォッチリスト
ウィリアム・S・バロウズ『猛者(ワイルド・...
ウィリアム・S・バロウズ『猛者(ワイルド・ボーイズ)-死者の書』
出品者(評価):system_of_the_freaks評価
[NEW]
500 円-14 日
ウォッチリスト
ウィリアム・S・バロウズ『裸のランチ』 1...
ウィリアム・S・バロウズ『裸のランチ』 1987 新装版初版です
出品者(評価):system_of_the_freaks評価
[NEW] 即決価格
500 円1,800 円-4 日
ウォッチリスト