2015年5月15日金曜日

CentOS7 におけるローカル日時への変更

ご無沙汰しております。約3年ぶりの投稿らしいです。

さて、本題です。 

はじめに

CentOS7 の 日付を確認します。

(1) 現在時刻を確認

$ date 2015年 5月 15日 金曜日 22:18:47 EDT 

⇒ EDT アメリカ東部夏時間

(2) ローカルタイムの確認

/etc/localtime -> ../usr/share/zoneinfo/America/New_York

⇒ America/New_York

EDT から JST(日本標準時) に変更する手順について説明します。他のローカル日時に変更する時にも応用出来ます。その時にもサポートされているローカルタイムを調べ、設定し確認するという手順は共通です。

timedatectl

CentOS7以降で対応されたシステムの時間と日付を管理・設定するコマンドです。 このコマンドを使用してTimezoneの設定を行います。

(1) サポートされている TimeZone を調べます。

JST に設定しますので Asiaに絞って検索をします。

$ timedatectl list-timezones |grep Asia

Asia/Tehran
Asia/Thimphu
Asia/Tokyo ← これを使う
Asia/Ulaanbaatar

 3) TimeZone を 設定します。

$ timedatectl set-timezone Asia/Tokyo

日付の確認


(1) timedatectl のLocal time と  Timezoneを確認します。

$ timedatectl

Local time: 金 2015-05-15 14:18:01 JST ← JSTである事を確認
Universal time: 金 2015-05-15 05:18:01 UTC
Timezone: Asia/Tokyo (JST, +0900) ← JSTである事を確認
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a

(2) date コマンドで現在の日付を確認します。

$ date
2015年  5月 15日 金曜日 14:22:45 JST ← JSTである事を確認

(3) ローカルタイムの確認

$ ls -l /etc/localtime

/etc/localtime -> ../usr/share/zoneinfo/Asia/Tokyo ← Asia/Tokyoである事を確認




14:31 2 comments

2012年6月20日水曜日

Problem "root lost privileges"


http://www.jimhermann.com/ensim/index10811.htm

http://www.cyberciti.biz/faq/mysql-change-root-password/
19:26 No comments

2012年6月14日木曜日

How to Reset the Root Password


運用の人が mysqlのroot のパスワードを伝えずにいなくなり、連絡しても無しのつぶてでスキーマが作れない という時に役立つかもしれません。

 原文 ⇒  How to Reset the Root Password

1.   MySQL サーバを停止します。


kill `cat /mysql-data-directory/host_name.pid`


ps ax |grep mysqld で --pid-file を確認するのも一つの方法です。


/usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --socket=/var/lib/mysql/mysql.sock


2.   ~/mysql-init に 下記を記入し保存します。



SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPassword');



※ このファイルはパスワードの再設定が完了したら削除して下さい。


3.   MySQL サーバを再起動します。

僕の環境では駄目でした。手順書にある第二の方法を試しました。

1.   MySQL サーバを停止します。

2. mysqld にオプションを付けて実行します。

mysqld_safe --skip-grant-tables --user=root

3. mysql -uroot で MySQLのクライアントに入ります。

4. パスワードを変更します。


mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd')
    ->                   WHERE User='root';
mysql> FLUSH PRIVILEGES;

5. MySQL サーバを再起動します。


/etc/rc.d/init.d/mysqld start

 




11:05 No comments

2012年3月28日水曜日

第58回PHP勉強会@東京 に参加した

第58回PHP勉強会@東京に参加した。毎回気づいた時にはいっぱいだったり時期が過ぎていたりで参加は初めてとなりました。発表者だけでなく 全員が自己紹介するのも新鮮でした。人数が30 人という比較的少人数だから出来る業かもしれませんが、心の準備をしておらずドキドキしてしまいました。 感想は別に書くとして 発表された資料を 纏めておきます。 (発表順)

PHP と MySQL でカジュアルに MapReduce する

Phakeで簡単モックオブジェクト作成

入門 PHP 5.4

14:46 2 comments

2012年3月19日月曜日

PHP Fog に SOY CMS2をインストール

基本的にPHP Fog へのインストールは 他の共用サーバと同じ様な手順で行う事が出来ます。
ドキュメントルート は ****.phpfogapp.com であり、ファイルのアップロード(デプロイ)は git を使用します。



SOY CMS2を新規インストールする手順

  1. 動作環境を満たしたサーバーを準備する※1
  2. SOY CMS2インストールファイルをダウンロードする
  3. インストールファイルをサーバーへアップロードする
  4. インストールウィザードに従ってインストールを進める

※ SOY CMS2 をインストール するより引用


1. github から SOY CMS2 を PHP Fog のアプリケーションの中にダウンロードする。


# cd ****.phpfogapp.com
# git clone git@github.com:SOYCMS2-dev/SOYCMS2.git


2.  soycms 配下のファイルを ****.phpfogapp.com に移動する

# cd SOYCMS2/soycms
# move * ../../
# cd ../../
# rm -fr SOYCMS2

3.  PHP Fog にデプロイ(アップロード)する

# git add *

# git commit -m "soycmsを展開"
# git push

4.  SOY CMS2のインストールの設定

「サーバによってはドキュメントルートより上に設置する事も可能です」とありますが、PHP Fogの場合はデフォルト(soycms_config)以外には選択肢が無さそうです。

5. 初期管理者の追加

パスワードを設定します。「メールサーバの設定」 は PHP Fog に mail() が使えるとの記述があったので取りあえずデフォルトのままとし特に編集しませんでした 。


6. 初回ログイン

先ほど設定した管理者ID とパスワードを入力します。管理画面のテーマは ベースとなる色を変更する事が出来ます。試してみると理解出来ると思います。

7. サイトの作成

8. データベース種別

mysql を選択します。「Database Connection Info」に書かれている設定情報を参考にします。

次へを押すとエラーが発生しました。直接 サーバ上にディレクトリを作る方法(権限)が無い様です。
サイトを作成するには ローカルの環境で サイトまで作って git push し、mysql をリストアするしか方法は無さそうです。
別の機会に試してみます。今日はここまでとします。



11:57 1 comment

2012年3月12日月曜日

運用しているPHP のバージョンをアップデート

アップデートまでのいきさつ


開発からは7年ほど経過していますが、サーバ自体を去年入れ替えました。ただCentOS5の標準のPHPを使用したため PHPのバージョンは5.1.6 でした。

今まで問題はなかったのですが、Smarty3 にアップグレード した時に問題が発生しました。
具体的には escape 処理を使った時に出力した画面が真っ白になってしまいました。
Smarty3の継承機能が便利な事もあり、 escape が使用出来ない件に関しては目をつぶっていました。

ちょうど、新規開発をするタイミングもあり、原因を調査しようと考えました。
最初にescapeのソースを確認します。

smarty2

function smarty_modifier_escape($string, $esc_type = 'html', $char_set = 'ISO-8859-1')
{
    switch ($esc_type) {
        case 'html':
            return htmlspecialchars($string, ENT_QUOTES, $char_set);


smarty3

function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
{
    if (!$char_set) {
        $char_set = Smarty::$_CHARSET;
    }

    switch ($esc_type) {
        case 'html':
            return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);


比較すると 関数 htmlspecialchars の double_encode が追加され 引数が異なっています。
double_encode は 5.2.3 からのサポートなのでこれが原因と考えられます。
必要条件には Smarty 3.x: PHP 5.2+ とあるのですが、5.2.3 以降を使用した方が良いかもしれません。

アップデートの手順

CentOS5での手順です。コマンドだけですが。。。

# cd /etc/yum.repos.d/
# wget http://dev.centos.org/centos/5/CentOS-Testing.repo
# yum --enablerepo=c5-testing update php
# httpd -k restart

Apacheの再起動をしないと Apacheモジュールとして動かしているPHP は 古いバージョンのままになります。

引き続き。。。

それはまた別の話。と書いていましたが、何日かして、Fatal error: Call to undefined function mcrypt_get_key_size() が発生しました。原因としては mcrypt のモジュールが存在しないという事のようです。確認してみます。

確認1. yum info php-mcrypt
Installed Packages
Name : php-mcrypt
Arch : x86_64
Version 5.1.6
を見るとインストールはされていますが Version が 5.1.6 と古い為にエラーが起きている様です。

確認2. php -v

#php -v

PHP Warning:  PHP Startup: mcrypt: Unable to initialize module  ← ここ
Module compiled with module API=20050922, debug=0, thread-safety=0
PHP    compiled with module API=20060613, debug=0, thread-safety=0
These options need to match
 in Unknown on line 0
PHP 5.2.10 (cli) (built: Nov 13 2009 11:44:05) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

確認の結果 mcrypt を アップデートする事に決めした。

google ます。

wget ftp://ftp.pbone.net/mirror/rpms.famillecollet.com/fedora/9/olds/x86_64/php-mcrypt-5.2.10-1.fc9.remi.x86_64.rpm

この辺は決まり文句。


rpm -e php-mcrypt-5.1.6-15.el5.centos.1.x86_64
rpm -i --nodeps php-mcrypt-5.2.10-1.fc9.remi.x86_64.rpm

確認。

#php -v


PHP 5.2.10 (cli) (built: Nov 13 2009 11:44:05)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies


# rpm -qa |grep php
php-5.2.10-1.el5.centos
php-devel-5.2.10-1.el5.centos
php-pear-1.4.9-6.el5
php-common-5.2.10-1.el5.centos
php-cli-5.2.10-1.el5.centos
php-gd-5.2.10-1.el5.centos
php-ldap-5.2.10-1.el5.centos
php-mbstring-5.2.10-1.el5.centos
php-pdo-5.2.10-1.el5.centos
php-mysql-5.2.10-1.el5.centos
php-mcrypt-5.2.10-1.fc9.remi

一つだけ、fc9.remi となっているのは気持ち悪いが バージョンは揃いました。

アパッチを再起動して確認 ! して画面が正常に表示されました。

英語のサイトですが

http://wiki.centos.org/HowTos/PHP_5.1_To_5.2

を参考にしました。











1:08 1 comment

2012年2月7日火曜日

Smmrty3 〜Smarty2との互換性がないアップグレード〜

原文ママ。その内訳すかも。newline at {if} tags は メールとかでここに改行を入れたく無いという時は個人的には邪魔です。


= Known incompatibilities with Smarty 2 =

Smarty 2 との良く知られている非互換性

== Syntax ==

Smarty 3 API has a new syntax. Much of the Smarty 2 syntax is supported
by a wrapper but deprecated. See the README that comes with Smarty 3 for more
information.

Smarty 3 API には 新しい シンタックスがある。

The {$array|@mod} syntax has always been a bit confusing, where an "@" is required
to apply a modifier to an array instead of the individual elements. Normally you
always want the modifier to apply to the variable regardless of its type. In Smarty 3,
{$array|mod} and {$array|@mod} behave identical. It is safe to drop the "@" and the
modifier will still apply to the array. If you really want the modifier to apply to
each array element, you must loop the array in-template, or use a custom modifier that
supports array iteration. Most smarty functions already escape values where necessary
such as {html_options}

== PHP Version ==
Smarty 3 is PHP 5 only. It will not work with PHP 4.

== {php} Tag ==
The {php} tag is disabled by default. The use of {php} tags is
deprecated. It can be enabled with $smarty->allow_php_tag=true.

But if you scatter PHP code which belongs together into several
{php} tags it may not work any longer.

== Delimiters and whitespace ==
Delimiters surrounded by whitespace are no longer treated as Smarty tags.
Therefore, { foo } will not compile as a tag, you must use {foo}. This change
Makes Javascript/CSS easier to work with, eliminating the need for {literal}.
This can be disabled by setting $smarty->auto_literal = false;

== Unquoted Strings ==
Smarty 2 was a bit more forgiving (and ambiguous) when it comes to unquoted strings
in parameters. Smarty3 is more restrictive. You can still pass strings without quotes
so long as they contain no special characters. (anything outside of A-Za-z0-9_)

For example filename strings must be quoted

{include file='path/foo.tpl'}


== Extending the Smarty class ==
Smarty 3 makes use of the __construct method for initialization. If you are extending
the Smarty class, its constructor is not called implicitly if the your child class defines
its own constructor. In order to run Smarty's constructor, a call to parent::__construct()
within your child constructor is required.


class MySmarty extends Smarty {
function __construct() {
parent::__construct();

// your initialization code goes here

}
}


== Autoloader ==
Smarty 3 does register its own autoloader with spl_autoload_register. If your code has
an existing __autoload function then this function must be explicitly registered on
the __autoload stack. See http://us3.php.net/manual/en/function.spl-autoload-register.php
for further details.

== Plugin Filenames ==
Smarty 3 optionally supports the PHP spl_autoloader. The autoloader requires filenames
to be lower case. Because of this, Smarty plugin file names must also be lowercase.
In Smarty 2, mixed case file names did work.

== Scope of Special Smarty Variables ==
In Smarty 2 the special Smarty variables $smarty.section... and $smarty.foreach...
had global scope. If you had loops with the same name in subtemplates you could accidentally
overwrite values of parent template.

In Smarty 3 these special Smarty variable have only local scope in the template which
is defining the loop. If you need their value in a subtemplate you have to pass them
as parameter.

{include file='path/foo.tpl' index=$smarty.section.foo.index}


== SMARTY_RESOURCE_CHAR_SET ==
Smarty 3 sets the constant SMARTY_RESOURCE_CHAR_SET to utf-8 as default template charset.
This is now used also on modifiers like escape as default charset. If your templates use
other charsets make sure that you define the constant accordingly. Otherwise you may not
get any output.

== newline at {if} tags ==
A \n was added to the compiled code of the {if},{else},{elseif},{/if} tags to get output of newlines as expected by the template source.
If one of the {if} tags is at the line end you will now get a newline in the HTML output.



== trigger_error() ==
The API function trigger_error() has been removed because it did just map to PHP trigger_error.
However it's still included in the Smarty2 API wrapper.

== Smarty constants ==
The constants
SMARTY_PHP_PASSTHRU
SMARTY_PHP_QUOTE
SMARTY_PHP_REMOVE
SMARTY_PHP_ALLOW
have been replaced with class constants
Smarty::PHP_PASSTHRU
Smarty::PHP_QUOTE
Smarty::PHP_REMOVE
Smarty::PHP_ALLOW
14:29 No comments