月次アーカイブ: 4月 2012

さくらのvpsを借りてあれこれ遊ぼうとhshsしている (っ´∀`)っ ゃーたんです、こんにちは!
メモリ2GB(仮想3コア)を借りてみたのですが、思ったよりサクサク動いてくれています。お申し込みはこちらから。

まだお試し期間なのをいいことに、ab砲ぶっ放したりして遊んでるのですが、
テスト用のphpファイル(単なるphpinfo)にアクセスすると、apacheのエラーログに何やら変なのが・・・。
環境は CentOS release 6.2 (Final) httpd-2.2.15 PHP 5.3.3 です。

[Sun Apr 22 15:47:03 2012] [error] [client xxx.xxx.xxx.xxx] PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in /home/vhosts/path/to/hoge/public_html/index.php on line 2

見てみたらタイムゾーンのエラー(warning)と言っています。
このままにしておくと、date系の関数を実行するたびにエラーが記録されてしまいます。

We selected 'Asia/Tokyo' for 'JST/9.0/no DST'

って言ってるので、きっとタイムゾーンの設定してないんだろうなーと思って /etc/php.ini を見てみたら案の定でした。
どうやらこういう理由のようです。

※ PHPのドキュメントより引用

全ての日付/時刻関数で使用されるデフォルトのタイムゾーン。 PHP 5.4.0 より前のバージョンでは、
これは環境変数 TZ の値が設定されていない場合にのみ機能していました。
明示的に指定しなかったときにどのタイムゾーンを利用するのかについての優先順位は 
date_default_timezone_get() のページで
解説されています。サポートしているタイムゾーンについては
 サポートされるタイムゾーンのリスト を参照ください。

 

※ エラー発生時の設定

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
;date.timezone =

※ 変更後の設定

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
;date.timezone =
date.timezone = 'Asia/Tokyo'

たった1行 「date.timezone = 'Asia/Tokyo'」 を追加してあげて、
Apacheを再起動すればOKです。エラーログは余計なもの出力しちゃうと、実運用でクリティカルなエラーを見逃してしまう原因になるので、
極力余計なログを出さない設定にしたいものです。

でわ~♪

1件のコメント

こんばんは。2012/04/07に、普段怒られながら障害対応してるであろう僕らが休みの日にわざわざ障害対応しに集まるイベント「トラブル☆しゅーたーずに参加してきた (っ´∀`)っ ゃーです。

■ トラブル☆しゅーたーず とは

シナリオ
あなたはとあるwebインテグレーターにつとめる社員です。
立ち居値としては、リーダークラス?
ちょっといい気分になってきていました。

ある日、待望の新入社員の山〇君がやってきました。
しかも、あなたの部署です。
OJTが一通り行われたあと、幸運にもあなたの配下に配属されたではありませんか。

さっそく、いろいろ教えつつ「これで少しでも負荷がさがれば。。。」とほくそ笑むのでした。
さてある日、山〇君にお客様のクラウド上のシステムメンテナンスを指示します。
さほど難しい作業ではなかったので、彼にまかせて別の作業を実施します。
しばらくすると、お客様から入電が・・・・

どうもお客様のシステムが調子がおかしいとのこと
山〇君にどのような作業を実施したのか確認しても
「何もやっていない」
「ログはとっていない」
と繰り返すばかりです。

一抹の不安を覚えつつ、あなたはチームを従えてコンソールに向かうのでした

という前提で障害対応のロールプレイをしよう!というhbstudy、ncstudy、odstudy合同開催の勉強会でした。

…続きを読む

みなさんこんにちわ。githubのアカウント作成から自作のプログラムをアップロードするまでの手順をまとめてみました。

用意するもの

• プログラム開発環境 (ここではCentOS6を前提としています)
• メールアドレス

これだけです。開発環境はroot権限のコマンドを実行できるようにしておいてください。(suコマンドでrootに昇格できるか、sudoコマンドが使える)

githubって何?

• gitのプロジェクトホスティングサービス
• 100MBまで無料で使える
• gitリポジトリを自分で作って公開できる
• WEB上から変更履歴などが参照可能
• githubで公開されている他のOSSのコードをforkして開発することが可能
• ただしバグトラッキングシステムがない
※ 出展: はてなキーワード

すべての手順を書くと長くなってしまうので、1枚のスライドにまとめてみました。それでも、1時間もあればgithubアカウント作成、リポジトリ作成、自分で作ったプログラムのアップロードまでできてしまいます。

アカウント作成方法はスライドを見てください。ここでは開発環境のサーバ側でどんな作業をするのかをまとめておきます(スライドにも書いてありますが)。

■  rpmforge リポジトリをダウンロードする
[cc lang='bash' ]wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm[/cc]

■  git パッケージをインストールする
[cc lang='bash' ]sudo yum --enablerepo=rpmforge install git[/cc]

■ SSH鍵ペアを作成する
1) すでに鍵ペアがあった場合、上書きしないように .ssh ディレクトリをバックアップする
[cc lang='bash' ]$ [ -d ${HOME}/.ssh ] && cp -pr ${HOME}/.ssh ${HOME}/DOT.ssh.$(date +%Y%m%d)[/cc]

2) ssh-keygenコマンドで鍵ペアを作成する
[cc lang='bash' ]$ ssh-keygen[/cc]
鍵ペアは、ホームディレクトリ/.ssh の下に生成されます。ホームディレクトリでlsコマンドを叩いて「そんなのねーよ」と思っても焦らないでください。「ls -la」のように、aオプションをつけると .ssh ディレクトリの存在が確認できます。sshの鍵ペアを作成したら、「id_rsa.pub」のほうをcatコマンドで開いて、マウスでクリップボードにコピーし、githubの公開鍵登録画面に貼り付けます。

成果物をアップロードしよう!

githubでアカウントを作成し、sshの公開鍵登録を行い、リポジトリを作成したあとは、開発サーバでプログラム開発してgitコマンドでアップロードしましょう。

■ 初期設定

[cc lang='bash' ]git config --global user.name "githubのユーザ名"[/cc]
[cc lang='bash' ]git config --global user.email "githubに登録したメールアドレス"[/cc]

これらは最初に1回やっておけばOKです。ただし、同じサーバで複数のgithubアカウントを切り替えて使う場合は、都度実行する必要があります。

開発サーバでリポジトリを新規作成する

例) NABEATSU というリポジトリを作成してみる

[cc lang='bash' ]mkdir NABEATSU[/cc]
[cc lang='bash' ]cd NABEATSU[/cc]
[cc lang='bash' ]git init[/cc]

リポジトリ名と開発サーバに作るディレクトリ名は必ずしも同じでなくてもよいらしいですが、後でわかりにくくなるので同じ名前にしておいたほうが無難でしょう。

READMEファイルを新規作成する

[cc lang='bash' ]touch README[/cc]
READMEファイルは、ファイル名を大文字にして作成します。この中に書き込んだテキストをローカルリポジトリにコミットし、リモートリポジトリにpushする(反映させる)までは、githubからは存在しないものとして扱われます。

READMEファイルをローカルリポジトリにコミットする

[cc lang='bash' ]git add README[/cc]
[cc lang='bash' ]git commit -m 'first commit'[/cc]
コミット後、次のページに表示するようにコミット後のメッセージをchangelogに書くよう、編集画面が出てきます。デフォルトのエディタが立ち上がるので、コミットメッセージを残しましょう。

ローカルリポジトリにgithubのリポジトリをリモートとして登録する

例) oresama アカウントで NABEATSU というリポジトリに登録する場合

[cc lang='bash' ]git remote add origin git@github.com:oresama/NABEATSU.git[/cc]
このコマンドは、リポジトリを作成して最初に実行するだけでOKです。ローカルリポジトリで何かしら編集するたびに実行する必要はありません。

ローカルリポジトリからリモートリポジトリへ修正内容を反映させる

[cc lang='bash' ]git push origin master[/cc]

ローカルリポジトリで何かしら編集し、リモートリポジトリへ反映させる都度に実行します。

自作のプログラムをアップロードしてみよう!

ここでは例として、binディレクトリの下に自作のシェルスクリプト「3.sh」を作ります。
[cc lang='bash' ]mkdir bin[/cc]
[cc lang='bash' ]cd bin[/cc]
[cc lang='bash' ]vi 3.sh[/cc]
# 成果物 3.sh を編集します

[cc lang='bash' ]cd ../[/cc]

ここまでできたら、ディレクトリの中身全部pushしてみましょう。

[cc lang='bash' ]git add *[/cc]
[cc lang='bash' ]git commit[/cc]
[cc lang='bash' ]git push -u origin master[/cc]

※ 個別のファイルをアップロードしたい場合は以下で。
[cc lang='bash' ]git add bin/3.sh[/cc]
[cc lang='bash' ]git commit[/cc]
[cc lang='bash' ]git push -u origin master[/cc]

ここまでできたら、githubの画面で確認してみてください。スライドの通りに設定したら、リポジトリ内にご自慢のプログラムがアップロードされているはずです。ね、簡単でしょう?

rubyでコマンドラインの引数に与えたサイトをダウンロードするスクリプトを作ってみた。お手本サイトのこことかここの合わせ技で、ハードコーディングされたURLではなく、引数の1番目に与えたURLを引っ張ってくる。あと、引数が空っぽだと"nil"って表示されちゃうので、エラー抑止するようにした。rubyのお手本サイトを見て自分でちょっと考えて手を加えた第一号かも。楽しい!ソース (URL01.rb) は以下。

[cc lang='ruby' ]
# coding: utf-8

unless ARGV[0].nil? then
end
if ARGV.size > 0 then
require 'open-uri'
open(ARGV[0]) do |f|
f.each do |line|
puts line
end
end
end
[/cc]

実行結果はこんな感じ。

[cc lang='text' ]
ruby URL01.rb https://nullpopopo.blogcube.info/ > index.html
[/cc]