ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2013年1月14日月曜日

[Redis 2.6]インストールメモ + パスワード設定時の起動スクリプト

明けまくりましておめでとうございます、おもくそです。
最終更新は汗もしたたる真夏、そして内容は今は亡き(失礼!)koboに関して、そして久方ぶりの更新はヤマト運輸がギブするほどの大雪日という現実に、四季が存在する国の素晴らしさを噛みしめております。

そんな新年一発目のエントリに、今年の抱負といった一般的なものではなく技術ネタを持ってくるという自分のことが、好きでもあり嫌いでもあります。まあ今年もこんな感じでマイペースに行こうと思います。

試した環境

Redisは昨年にバージョン2.4を少し使うことがあったのだけど、その時のドキュメントには「バージョン2.6でクラスタ構成できるようになるよ(Redis Cluster)」ってあったけど、正式リリースはまだみたいですね

ダウンロード、インストール

以下ページの通りに。「make install」しないんだね。あと言わずもがなだけどgcc必要です。
Download – Redis
$ wget http://redis.googlecode.com/files/redis-2.6.8.tar.gz
$ tar xvzf redis-2.6.8.tar.gz
$ cd redis-2.6.8
$ make

起動スクリプト生成

confファイル、ログファイル、起動スクリプトを生成してくれるシェルが同梱されているので、それを実行。Redis本体のバイナリ(redis-server)にパス通して無い場合は、途中でバイナリの実行パスを指定してあげる必要があります。
ところがこのシェル、どうもバグってるっぽいです。詳しくは後述します。まあ僕の環境の問題かもしれないけど・・・もしエラー発生しなかった場合は、エラーが関連している節は読み飛ばしてください。
$ cd utils
# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server


Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
which: no redis-server in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/omokuso/bin)
Please select the redis executable path [] /usr/local/redis/src/redis-server
which: no redis-cli in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/omokuso/bin)
s#^port [0-9]{4}$#port 6379#;s#^logfile .+$#logfile /var/log/redis_6379.log#;s#^dir .+$#dir /var/lib/redis/6379#;s#^pidfile .+$#pidfile /var/run/redis_6379.pid#;s#^daemonize no$#daemonize yes#;
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
./install_server.sh: line 178: update-rc.d: コマンドが見つかりません
 exists, process is already running or crashed
Installation successful!
「update-rc.d: コマンドが見つかりません」だと?
不具合その1。
「update-rc.d」というのは、UbuntuなどのDebian系のコマンドで、自動起動設定を行うものです。CentOSなどRedhat系での「chkconfig」に相当。CentOSで実行したら、見つからないのは当たり前です。

はて、バグか?起動スクリプト生成シェルを確認してみたところ・・・
・・・
#Install the service
echo "Installing service..."
if [ !`which chkconfig` ] ; then
        #if we're not a chkconfig box assume we're able to use update-rc.d
        update-rc.d redis_$REDIS_PORT defaults && echo "Success!"
else
        # we're chkconfig, so lets add to chkconfig and put in runlevel 345
        chkconfig --add redis_$REDIS_PORT && echo "Successfully added to chkconfig!"
        chkconfig --level 345 redis_$REDIS_PORT on && echo "Successfully added to runlevels 345!"
fi
・・・

うーん・・・ちゃんと「『chkconfig』が見つからなかったら」という判定を行ってRedhat系の場合の分岐もあるのけどな・・・chkconfigのパスも通ってるし。何でだろう・・・

とりあえず、判定条件とupdate-rc.d実行部分をコメントアウトし、chkconfigが無理矢理実行されるようにしてから再度実行してみたところ・・・
今度は「サービス redis_6379 は、chkconfig をサポートしていません。」ですって!?
不具合その2。
「redis_6379」ってのは自動生成されたRedisの起動スクリプトです。
chkconfigに登録するには、特定のフォーマットの記述が必要。以下はApacheの起動スクリプトの例です。
$ head /etc/init.d/httpd
#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# 以下2項目が必要
# ↓順番に「ランレベル(この例だと未指定だけど)」「起動優先順位」「停止優先順位」
#     優先順位はそれぞれ100未満じゃないとダメっぽい
# chkconfig: - 85 15
# ↓これはただの説明
# description: The Apache HTTP Server is an efficient and extensible  \
#        server implementing the current HTTP standards.
・・・

前述の「サポートしていません」エラーは、上記の記述が無い場合に発生する。
登録対象の起動スクリプトを確認してみると・・・何じゃこりゃぁっ!!
# vim /etc/init.d/redis_6379
#/bin/sh\n #Configurations injected by install_server below....\n\n EXEC=/usr/local/redis/src/redis-server\n CLIEXEC=/usr/local/redis/src/redis-cli\n PIDFILE=/var/run/redis_6379.pid\n CONF="/etc/redis/6379.conf"\n\n REDISPORT="6379"\n\n ###############\n\n

case "$1" in
    start)
・・・

chkconfig登録に必要な記述が無いばかりか、実行コードの一部分が改行されずに冒頭のシバンに連なってしまっている。どうも「\n」をメタ文字じゃなくテキストとして処理してしまっているっぽい。

とりあえず問題の「\n」を改行に変換(正規表現は「%s/\\n/\r/g」)し、chkconfig登録に必要な記述を追加したのが以下。
#/bin/sh
# chkconfig: - 90 90
# description: Redis and Gentlemen!

 EXEC=/usr/local/redis/src/redis-server
 CLIEXEC=/usr/local/redis/src/redis-cli
 PIDFILE=/var/run/redis_6379.pid
 CONF="/etc/redis/6379.conf"

 REDISPORT="6379"
・・・

これでようやく全ての準備が整いました。
起動・停止してみる。
# /etc/init.d/redis_6379 start
Starting Redis server...
# /etc/init.d/redis_6379 stop
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped

そして自動起動設定。
# chkconfig --add redis_6379
# chkconfig redis_6379 on
# chkconfig --list redis_6379
redis_6379      0:off 1:off 2:on 3:on 4:on 5:on 6:off

Redisにパスワードを設定してみたら、停止できなくなった!

Redisは以下のようにパスワードを設定できます。
# vim /etc/redis/6379.conf
・・・
requirepass RedisAndGentlemen
・・・

これにより、各種操作を行う前にauthコマンドによる認証が必要になる。

さて、この状態で先ほど生成した起動スクリプトを実行すると、起動は問題なく行われるのだけど、停止は・・・
# /etc/init.d/redis_6379 start
Starting Redis server...
# /etc/init.d/redis_6379 stop
Stopping ...
(error) ERR operation not permitted
Waiting for Redis to shutdown ...

失敗してしまいます。shutdownコマンドの実行前にauthコマンドで認証通っておく必要あるようだ。

というわけで、起動スクリプトを修正。ちなみに当サンプルではncコマンドを使用するのでインストールしておいてください。

# yum install nc
# vim /etc/init.d/redis_6379
・・・

# パスワード
REQUIREPASS="RedisAndGentlemen"

・・・
    stop)
        if [ ! -f $PIDFILE ]
               ・・・
        else
               ・・・
                # 旧ロジック。こういうのはコミット前に削除しようね!
                #$CLIEXEC -p $REDISPORT shutdown

                # authとshutdownは同一セッションで実行しないといけません
                echo -en "auth $REQUIREPASS\r\nshutdown\r\n" | nc localhost $REDISPORT

                # ちなみに以下はダメ。auth時とshutdown時はセッション異なるので。
                #$CLIEXEC -p $REDISPORT auth $REQUIREPASS
                #$CLIEXEC -p $REDISPORT shutdown
                ・・・

以上。

2012年6月24日日曜日

[Python 2.7]インストールメモ

業務系SIerを脱出してWeb系の世界に飛びこんで早1年半、仕事でのメイン言語はJava1.4(!)からPython2.7へと変わったのに、そういえばPythonネタまだ一つも書いてなかったなーってことでまずはインストールメモ。
つってもこの先別に大したネタなんてないですけど。

試した環境

3系はフレームワークとかの対応が芳しくないようなので(Djangoとか)、当ブログでは暫くの間2系でいきます。
ちなみにCentOSにはデフォルトでインストール済ですが(yumとかPython製なので)、2.4とか2.6とかバージョン古いです。
  • CentOS 5.6, 6.2
  • Python 2.7.3

Pythonインストール

事前準備
zlibはeasy_install使うのに必要。
# yum install gcc zlib zlib-devel
ダウンロード&configure
ダウンロードページは以下。
$ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
$ tar xvzf Python-2.7.3.tgz
$ cd Python-2.7.3
$ ./configure --with-threads --enable-shared
コンパイル&インストール
Modules/Setupの一部行をアンコメント(コメントアウトの対義語だよ知ってた?)。
$ vim Modules/Setup
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz

そしてお馴染みのコマンド。
$ make
# make install
ライブラリ設定&動作確認
# vim /etc/ld.so.conf.d/python2.7.conf
/usr/local/lib
# /sbin/ldconfig
$ python -V
Python 2.7.3
動作確認で以下エラー発生したら
$ python -V
python: error while loading shared libraries: libpython2.7.so.1.0:
cannot open shared object file:

共有ライブラリ確認してみる。
$ ldd python
…
libpython2.7.so.1.0 => not found
…

上記の状態の場合、ライブラリへのシンボリックリンクを/lib配下に作成。
# ln -s {Pythonソースルート}/libpython2.7.so.1.0 /usr/local/lib/libpython2.7.so.1.0

pipインストール

いわゆるパッケージ管理システムです。Rubyで言うところのgem、PHPではpear。
まずはeasy_installのインストール
setuptoolsってのの中に入っている。ダウンロードページは以下。
$ wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg#md5=fe1f997bc722265116870bc7919059ea
# sh setuptools-0.6c11-py2.7.egg
easy_install使ってpipインストール
# easy_install pip
使い方
他人のふんどしをお借りします。

参考



2012年5月5日土曜日

[MySQL]レプリケーション環境構築手順 for メモリかつかつ人 vol2~本題のレプリケーション設定

黄金の日々を皆様いかがお過ごしでしょうか。
私としましては、いろいろと出費が嵩むことがありまして、2年連続で家計は火の鳥となっておりますが故、「ちょっと長めないつもの週末」を謳歌しております。ていうか結婚した輩ってホント付き合ってくれなくなりますね!

さて、「レプリケーション環境構築手順」とかほざいておきながら、レプリケーションのレの字も無かった前回の続きです。Google Analyticsで検索ワード確認してみたら「MySQL レプリケーション」といったワードが幾つか見つかり、非常に心苦しい限りです詐欺師です…

というわけで今回のテーマは「脱・詐欺師」、要するに「タイトルに即した内容を書く」です。
ちなみに人から時々「話が長い」と言われます。

試した環境

  • CentOS 5.6(64bit), 6.2
  • MySQL 5.1.61

マスター

my.cnf設定
最低限、サーバーIDとバイナリログ名を設定。サーバーIDは他のサーバーとかぶらない値に。
[mysqld]
server-id=1
log-bin=mysql-bin
# dataディレクトリ以外に作成したけりゃ以下のように絶対パスで指定
# log-bin=/var/lib/binlog/mysql-bin
設定したら再起動。
レプリケーション専用ユーザー作成

マスターデータのスナップショットを作成
レプリケーションを開始するに当たって、当然マスタとスレーブのデータを同一にしておく必要がある。

まず、設定作業中にマスターデータが更新されてしまわないよう、書き込みロックをかける。
mysql> FLUSH TABLES WITH READ LOCK;

そしてマスターデータのスナップショットを作成。データフォルダをアーカイブしてしまえ。
# cd /var/lib/mysql/
# tar cpf /tmp/master_snapshot.tar .
バイナリログのPositionをメモ
「スレーブが起動した際、バイナリログの読み込み開始位置」を表す。
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      106 |              |                  |
+------------------+----------+--------------+------------------+
書き込みロック解除
バイナリログのPositionさえメモしてしまえば、スレーブの設定完了前にいくら更新かかろうが恐くない。
mysql> UNLOCK TABLES;

スレーブ

マスターデータを展開
展開前にスレーブ停止するのをお忘れ無く。
もしマスターでバイナリログなどをデータフォルダ配下に出力していた場合は、スレーブ側では当然不要なので削除しちゃってください。
# /etc/init.d/mysqld_slave stop
# cd /usr/local/mysql/var
# rm -rf *
# tar xpf /tmp/master_snapshot.tar -C /usr/local/mysql/var/
# rm msyql-bin.00000X mysql-bin.index
my.cnf設定
最低限サーバーIDを設定。
[mysqld]
server-id=2

# スレーブのバイナリログやリレーログの名称やパスを指定したけりゃ以下のように
# log-bin=/usr/local/mysql/mysql-bin
# relay-log=/usr/local/mysql/mysql-relay-bin
# relay-log-index=/usr/local/mysql/mysql-relay-bin
マスター情報セット
ここでの肝は「MASTER_LOG_FILE」と「MASTER_LOG_POS」です。メモした値を設定してください。
mysql> CHANGE MASTER TO
-> MASTER_HOST='localhost'
-> , MASTER_PORT=3306
-> , MASTER_USER='repl'
-> , MASTER_PASSWORD='password'
-> , MASTER_LOG_FILE='mysql-bin.000001'
-> , MASTER_LOG_POS=106;
mysql> START SLAVE;
起動!
mysql> START SLAVE;
動作確認
「Slave_IO_Running」「Slave_SQL_Running」が「Yes」で、「Last_IO_Error」が空ならOKです。
mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.XX.XX
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 257
Relay_Log_File: virtualbox-relay-bin.000002
Relay_Log_Pos: 402
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
…

それでは良きレプリケーションライフを!

参考

2012年4月8日日曜日

[MySQL]レプリケーション環境構築手順 for メモリかつかつ人 vol1~1サーバーにMySQL2つインストール

簡単お手軽なMySQLレプリケーション。一昔前だと、環境作って動作確認するのにハードウェアが最低2台は必要だったのでしょうが、現代はというと…いや~仮想マシンって本当にいいもんですね。ハード1台でも、独立したサーバー環境を複数作成できちゃいます。

ただ、仮想マシンは当然それなりにメモリを食います。そして、いくらメモリ激安な現代と言えど、かつかつな環境で日夜スワッピングと戦いながら仕事をしているプログラマはきっと存在する筈。ちなみに僕も前の会社ではこんな感じで、転職してからこんなんだったのが、現在は何と12Gというデラインコグニタですよ。

というわけで、そんな戦うプログラマの方々のために、1つのサーバー環境でレプリケーション環境を構築する手順を捧げます。つっても、+αの作業は、1台のサーバーにMySQLを複数インストールってことだけですけど。仮想環境を複数起動する余裕があり、レプリケーション環境構築手順だけ知りたい方は、このエントリ読み飛ばしてこちらを参照ください
尚、実運用においてはマスターとスレーブを別々の箱に置くべきであることは言うまでもありません。

試した環境

  • CentOS 5.6(64bit), 6.2
  • MySQL 5.1.61

1.MySQLインストール(マスター用)

yumでさくっと入れちゃいましょう。2行目移行のセキュア設定と自動起動設定はお好みで。
# yum -y install mysql-server
# /etc/init.d/mysqld start
# mysql_secure_installation
# /sbin/chkconfig mysqld on

2.MySQLインストール(スレーブ用)

こっちはソースからインストールします。
事前準備
コンパイラをインストール。バージョン5.1移行の場合は、2行目も必要。makeが入ってない場合はインストールしてください。
# yum install gcc gcc-c++
# yum install ncurses-devel
# yum install make
ソースダウンロード
以下のページから入手できるので、wgetかブラウザでダウンロード。

# wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.61.tar.gz
コンパイル&インストール
以下の例では「/usr/local/mysql」にインストールします。
ポート番号はマスターや既存サービスと被らないものを指定するように。
あとInnoDB有効とするconfigureオプションは、バージョン5.1では
「--with-plugins=innobase」
です(「--with-innodb」ではない。「./configure --help」で調べてみ。)。
$ tar xvzf mysql-5.1.61.tar.gz
$ cd mysql-5.1.61
$ ./configure --with-charset=utf8 --with-extra-charsets=all --with-mysqld-user=mysql --prefix=/usr/local/mysql --with-tcp-port=53306 --with-unix-socket-path=/usr/local/mysql/var/mysql.sock --with-plugins=innobase
$ make
# make install
# chown -R mysql:mysql /usr/local/mysql/
DB初期化
# {ソースディレクトリ}/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql
my.cnf作成
一例。配置場所はbasedirかdatadirに。まあbasedirが一般的だろうか。
# vim /usr/local/mysql/my.cnf
[mysqld]
port=53306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/var
default-character-set=utf8

[mysql.server]
user=mysql
basedir=/usr/local/mysql

[mysqld_safe]
socket=/usr/local/mysql/var/mysql.sock
log-error=/var/log/mysqld_slave.log
pid-file=/var/run/mysqld/mysqld_slave.pid

[client]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8
起動スクリプトコピー
インストールディレクトリ配下にある「mysql.server」をリネームコピーし、ルートディレクトリのパスなどを追記。
# cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld_slave
# chmod 755 /etc/init.d/mysqld_slave
# vim /etc/init.d/mysqld_slave
basedir=/usr/local/mysql
datadir=/usr/local/mysql/var
pid_file=/var/run/mysqld/mysqld_slave.pid
起動確認と自動起動設定
# /etc/init.d/mysqld_slave start
# /usr/local/mysql/bin/mysql -u root
# /sbin/chkconfig --add mysqld_slave
# /sbin/chkconfig mysqld_slave on
# /sbin/chkconfig --list | grep mysql

記事ボリュームが結構でかくなったので

肝心のレプリケーション設定は次回に持ち越します。
録画しといたIPPONグランプリも早く観たいし。

2012年3月7日水曜日

PHP4環境構築とPEAR強制アップグレードメモ

PHP4…CakePHPがバージョン2になってついにサポート対象から外れたこんな時代に需要なんて殆ど無いだろうけど、まあ仮想マシンなら物理的な場所とらないってことで一応環境作って残しときましょう…ってことで実際需要が発生したので、まあブログなら物理的な場(以下同文)

願わくば、我のみならず俗世においても当エントリを必要とする状況があまり発生せんことを。停滞は後退だ。2010年にもなって新規案件でVBScriptてIE6てJava1.4て…(はいわざわざ過去をほじくり返してイラついている大馬鹿者です)

試した環境

  • CentOS 5.6(64bit)
  • Apache 2.2
  • PHP 4.3.11
ちなみに、PHP4.2以前はApache2系と相性悪いらしく、実際僕もインストールできませんでした。

事前準備

Apacheインストール
apxsってのも必要なのでhttpd-develも一緒に。
# yum -y install httpd httpd-devel
Flexとlibxml2インストール
# yum -y install flex libxml2-devel

PHPインストール

yumでのインストールはできないので、ソースからインストールせざるをえない。
ダウンロード、コンパイル、インストール
旧バージョンも含めたPHPのソース置き場は以下。
configureオプションはとりあえず必要最低限の設定。
$ wget http://museum.php.net/php4/php-4.3.11.tar.gz
$ tar zxvf php-4.3.11.tar.gz
$ cd php-4.3.11
$ ./configure --enable-mbstring --with-apxs2=/usr/sbin/apxs
$ make
# make install
php.ini作成
解凍したソース一式の中にある「php.ini-dist」という雛形があるので、それをコピー。
# cp php.ini-dist /etc/php.ini
Apache設定
httpd.confに以下の設定を追加。その後再起動。
AddType application/x-httpd-php .php
最低限の設定は完了。あとはおなじみのphpinfo()で動作確認。
動かなかったら、ファイアウォールやSELinuxの設定を確認してみろ、と自分に向けて書いておく。

HTTP_Requestインストールから学ぶ、PEARパッケージ強制アップグレード

作成したPHP4環境では、HTTP_Requestも必要だったのだけど、これも一筋縄ではいかなかったのでメモする次第。
普通にインストールできるかと思いきや…
# pear install HTTP_Request -a
HTTP error, got response: HTTP/1.1 410 Gone
Didn't receive 200 OK from remote server. (HTTP/1.1 410 Gone)
何か「そんな古いパッケージはもう置いてねえよ」とでも言ってるようなエラーメッセージだ。
以下によると、PEARのバージョンが古いからだろうとのこと。
確かにパッケージのドキュメントに「PEAR Installer 1.4.3」って書いてあるわ。PHP 4.3.11を当エントリの手順でインストールした場合、PEARのバージョンは1.3.5だった。

ということで、上記記事を参考に、PEARを強制アップグレード…の前にまず「Archive_Tar」を強制アップグレード。これやっとかないと、PEAR強制アップグレード自体で同様の「410 Gone」エラーが発生する。
# pear upgrade --force http://pear.php.net/get/Archive_Tar-1.3.1.tar
# pear upgrade --force http://pear.php.net/get/PEAR-1.4.3.tar
# pear install HTTP_Request -a

終わり。自分で書いときながらだけど、このエントリ読み返したくねぇ(読み返すような状況に遭遇したくねぇってことです)。

2011年12月28日水曜日

VirtualBox環境構築メモ

仕事で使う機会があったのでメモっておく。大した内容じゃないですけど。VMware Playerより高機能っぽいど、お勉強とかに使うくらいなら別にどっちでもいいかな。
ちなみに仕事ではCentOSばっかりなので、当エントリではせっかくなんでUbuntuにしてみました。

各種ソフトウェア

  • VirtualBox 4.1.8
  • Ubuntu 11.10

VirtualBoxインストール

以下ページよりダウンロード。
インストールに関しては特に説明すべきことは無い。

UbuntuのISOイメージダウンロード

from... Ubuntu Desktop 日本語 Remix CDのダウンロード

仮想マシン作成

「VirtualBox マネージャー」を起動し、ツールバーの「新規」を押下。ウィザードが開始される。
開発者なら各項目の意味合いは何となく分かると思うので、僕が踏んだ手順は箇条書きでお送りします。
  1. 仮想マシン名とOSタイプ
    • 名前
      任意の名称を入力
    • オペレーティング システム
      Linux
    • バージョン
      Ubuntu
  2. メモリ
    お好みで
  3. 仮想ハードディスク
    「新規ハードディスクの作成」にチェック
  4. File type ※何故ここから英語混じり?
    「VDI」を選択
  5. Storage details
    ※仮想ディスクのファイルサイズを固定サイズとするか可変サイズとするか。
    「Dynamically allocated(可変)」を選択。
    • 場所(仮想ディスク作成先フォルダ)
      お好みで
    • サイズ(タイプを可変とした場合は最大サイズ)
      お好みで
  6. 概要(仮想ディスクの)
    「Create」を押下
  7. 概要(仮想マシンの)
    「Create」を押下

作成した仮想マシンにOSインストール

作成した仮想マシンを選択してツールバーの「起動」押下。またもやウィザードが開始される。
以下、僕の足跡を箇条書き。
  1. インストールメディアを選択
    ダウンロードしたUbuntuのISOイメージファイルを選択
  2. 概要
    「起動」押下。
    尚、これ以降はUbuntuインストーラの世界です。
  3. ようこそ
    Ubuntuをインストール
  4. Ubuntuのインストール準備
    特に何も選択せず「続ける」押下
  5. インストールの種類
    「ディスクを削除して…」を選択
  6. ディスクを削除して…
    「ドライブの選択」欄でVirtualBoxのHDが選択されてることを確認し(てか選択しは一つだと思うけど)、「インストール」押下
  7. どこに住んでんだよお前
    Tokyo
  8. キーボード
    日本語
  9. あなたの情報教えてよ
    適当にお好みで
そしてじっと待つべし。

ネットワークアダプタ設定

デフォルトの「NAT」だと、同一ネットワークのマシンからはおろか、ホストOSからもゲストOSと通信できない。よって、通信したい場合はネットワークアダプタ設定を変更する必要がある。

仮想マシンを選択してツールバーの「設定」を押下し、表示されたダイアログの「ネットワーク」を選択。
「割り当て」を以下のいずれかに設定する。尚、ダイアログ見れば明らかだが、アダプタは最大4つまで設定可能。
  • ブリッジ アダプタ
    同一ネットワークのマシンと通信可能
  • ホストオンリー アダプタ
    ホストOSとのみ通信可能
  • 内部ネットワーク
    同一の名前(「割り当て」のしたの項目)のアダプタと通信可能
    ※仮想マシン同士で高速に通信したい場合に

Guest Additionsのインストール(任意)

VMwareにとっての「VMware Tools」のような便利ツール。
これいれとくと、ウィンドウサイズに合わせて描画領域がリサイズされたり、ホストOSとの共有フォルダが利用できるとのこと。
実行中の仮想マシンのウィンドウメニュー「デバイス」>「Guest Additionsのインストール」を選択。Ubuntu側でディスクがマウントされるので実行する。
インストール完了したら、メニューに項目が追加される(ウィンドウリサイズは「ビュー」内に)ので、お好みに合わせて設定してください。

2011年12月24日土曜日

Subversion導入メモ

クリスマスだ。ということで、Subversionの導入メモだ。
これからはGitだぜ的な世の中だけど、大抵の現場ではまだ根強く使われているであろうSubversion…
何だこの始まり方は。

試した環境

CentOS 6.0

インストール

Subversion本体
# yum install subversion
mod_dav_svn
Apache経由で(HTTPで)リポジトリにアクセスするために「mod_dav_svn」モジュールをインストール。
# yum install mod_dav_svn

リポジトリ作成

「svnadmin create」コマンドを使用。
下の例では、まずSVNのホームディレクトリを作成し、それからrepo1リポジトリを作成。
最後にディレクトリの所有者をapacheに変更。
# mkdir /var/www/svn
# svnadmin create /var/www/svn/repo1
# chown -R apache:apache /var/www/svn

リポジトリのアクセスアカウント作成

htpasswdコマンドを使用。
下の例では、アカウントuser1とuser2を追加しています。
# htpasswd -cm /etc/httpd/.svnpasswd user1
New password:
Re-type new password:
Adding password for user user1
# htpasswd -m /etc/httpd/.svnpasswd user2
New password:
Re-type new password:
Adding password for user user2

設定ファイル編集

/etc/httpd/conf.d/subversion.confを開き、URLとSVNホームを紐づける設定を定義。
下記の例では、「http://{ホスト}/svn」というURLと「/var/www/svn」を対応付け、さらに先程作成したパスワードファイルを使用して基本認証を行う設定をしています。

編集完了したら、念のため設定ファイルにエラーが無いか確認。
# service httpd configtest

「Syntax OK」を表示されればOKなので、Apache再起動。
僕ずっと「/etc/init.d/httpd」使ってたけど、serviceコマンドなんてのがあったのね。
# service httpd restart

Subersionにアクセスしてみる

チェックアウト
「svn co」コマンドを使用。
下記の例ではrepo1リポジトリにuser1でアクセスしています。
$ svn co http://{ホスト or IPアドレス}/svn/repo1 --username user1
認証領域: Authorization Realm
'user1' のパスワード:
-----------------------------------------------------------------------
ATTENTION! Your password for authentication realm:

<http://192.168.xx.xx:xx> Authorization Realm

can only be stored to disk unencrypted! You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible. See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/home/omokuso/.subversion/servers'.
-----------------------------------------------------------------------
暗号化されていないパスワードを保存しますか (yes/no)? no
リビジョン 0 をチェックアウトしました。

最後の「暗号化されていないパスワードを保存しますか?」ですが、保存しておくともちろんそれ以降のアクセスの際に一々パスワード入力せずに済みます。が、それは当然セキュリティ的にはあまりよろしくありません。この辺はお好みで選択してください。

ところで、保存を拒否した場合、何と毎回「暗号化されていないパスワードを保存しますか?」と聞いてきやがります。このお節介を止めさせるのは以下の設定。
$ ~/.subversion/config
store-passwords = no
リソースを追加してみる
流れは
  1. チェックアウトしたディレクトリ配下にリソース新規作成
  2. リソースをバージョン管理に追加
  3. コミット
$ cd repo1
$ mkdir trunk branches tags
$ svn add trunk branches tags
$ svn ci -m "お馴染みのディレクトリ新規追加"

参考

LAMP of CakePHP on VMware:構築後のデザート~Samba導入

超豚足でお送りしている当シリーズ。CakePHPに関してはインストールと簡単な動作確認を行った以外は何も書かずに早8ヶ月。
月日の移ろいとは残酷なもので、この間の僕はお陰様でRubyやPythonにも携わる機会があり、正直PHPへの興味は薄れてきました…。前述の言語や、SIer時代にメインで使ってきたJavaと比べると、言語としての力の差(※1)やスタイルの一貫性(※2)とかでどうしても見劣りを感じてしまうんだよな。まぁそんな偉そうなこと言えるほど使い込んではないですけど。

まあそれでも需要が高い言語ではあるし、メモしておきたい事は溜まっているので、追々書いていきます。ちなみに今日もPHPではありません。今回はSambaの導入です。
尚、OSはCentOSです(5.4以降で確認済)。

試した環境

CentOS 5.4以降

本題に入るその前に、VMにLAN内の別マシンからアクセスするには

デフォルトの「NAT」だとVMを動かしているマシン上からしかアクセスできないので、同一ネットワーク内の他のマシンからもアクセスできるようにネットワークアダプタ設定を変更。
仮想マシン設定の「ハードウェア」→「ネットワーク アダプタ」の「ネットワーク接続」欄の「ブリッジ」を選択。

Sambaパッケージインストール

# yum install samba

Sambaアクセス用ユーザー作成

sambaユーザーを使用する例。
「pdbedit」コマンドはsambaパッケージと共にインストールされる。アクセス用パスワードを聞かれるので入力する。
# useradd samba
# passwd samba
# pdbedit -a samba
new password:
retype new password:

Samba設定

smb.confファイルを編集。最低限以下を設定しておけば大丈夫でしょう。
各設定項目の意味は何となく分かると思うので割愛。
# vim /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
hosts allow = 127. 192.168. 
dos charset = CP932
unix charset = UTF-8
display charset = UTF-8

# 任意の名前をどうぞ
[share]
comment = "share"
path = /home/samba/share
pubilc = no
writable = yes

ファイアウォール設定

Sambaで使用するポートはUDP137・138とTCP139。
# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
# /sbin/service iptables restart

デーモン起動

ついでに自動起動設定もやっちゃいましょう。
# /etc/init.d/smb start
# /sbin/chkconfig smb on

アクセス確認

Windowsのエクスプローラーのアドレスバーに「\\IPアドレス」と入力してアクセス。アカウント情報を入力すると、晴れて共有ディレクトリに入場できます。

ディレクトリ一覧は表示されるが「権限がありません」的なエラーが発生してディレクトリに潜れない場合
SELinuxを無効化してみてください。
setenforceコマンドで無効にし、再起動時に有効にならないよう設定ファイルを編集。
# setenforce 0
# vim /etc/sysconfig/selinux 
SELINUX=disabled

参考

関連エントリ


※1
仕事しててPHPでイマイチだなと思わざるをえなかった点は以下。
  • マルチスレッド機構
    Javaライクなやつ。curl_multiはもちろん知ってるけど、あれってスレッド間通信できます?
  • Selenium WebDriverで、Javaみたいにスタンドアロンで動かせない。
    PHPからはPHPエクステンション形式以外のCプログラム使えない事に起因?

※2
関数の引数の順番(in_array()では検索キーが第一引数だけどstrpos()では第二)とか、クラスや関数の名称がアンスコ区切りだったりキャメルケースだったり…
PEARの「HTTP_Request」とかの命名規則って何て言うの?

2011年8月16日火曜日

LAMP of CakePHP on VMware:構築後のデザート~phpMyAdminインストール

MySQLサーバーをウェブブラウザから操作するGUIツールであるphpMyAdminのインストール手順を解説します。

ダウンロード

phpMyAdmin - Download
上記ページにも記載されていますが、バージョン3以降はPHP5.2以上である必要があるのでご注意を。

ドキュメントルートに配置

アーカイブを解凍後、Apacheの公開ディレクトリに配置。
$ cd /var/www/html 
$ tar xvzf phpMyAdmin-3.4.3.2-all-languages.tar.gz 
# mv phpMyAdmin-3.4.3.2-all-languages phpMyAdmin 

設定ファイル作成

ルートディレクトリ直下に設定ファイルの雛形「config.sample.inc.php」があるので、「config.inc.php」という名前にリネーム(orコピー)。
# cd phpMyAdmin 
# cp config.sample.inc.php config.inc.php 

つづいて編集。最低限以下の設定だけでOK。
$cfg['blowfish_secret'] = '(ランダムな文字列)'

php-mcryptパッケージインストール

phpMyAdminの認証時に認証情報の暗号化を行うためかどうか知らんが、これインストールしておかないと警告が表示される。
ここで、CentOSのバージョン、PHPのバージョンにより運命が分かれます。
CentOS 5.xで、phpパッケージの場合
以下コマンドで瞬殺です。
# yum install php-mcrypt  
php53パッケージ OR CentOS 6.0の場合
残念ながら、現時点ではyumのパッケージは提供されていませんので、RPMパッケージを使用するか、ソースからコンパイルするしかありません。

ここではCentOS 6.0でRPMパッケージを使った手順を説明します。CentOS 5.6でphp53パッケージの場合の手順は調べていませんが、流れは同じようなもんだと思います。
必要なパッケージは以下。
  • libmcrypt
  • php-mcrypt
まずは以下サイトでRPMパッケージを検索。
CentOS 6.0用のがいつくか見つかる。僕がチョイスしたのは以下。
libmcrypt-develも必要かどうか分からんが、とりあえず除外した。
パッケージのURLは、上記ページから「Download Mirrors」→「select mirror」と辿ったページの「binary package」のリンクがそれ。
wgetで取得してインストールし、Apache再起動。
# wget http://download.fedora.redhat.com/pub/epel/6/i386/libmcrypt-2.5.8-9.el6.i686.rpm 
# wget http://download.fedora.redhat.com/pub/epel/6/i386/php-mcrypt-5.3.2-3.el6.i686.rpm 
# rpm -ivh libmcrypt-2.5.8-9.el6.i686.rpm 
# rpm -ivh php-mcrypt-5.3.2-3.el6.i686.rpm 
# /etc/init.d/httpd restart 

以上でOK!
phpMyAdminの設定ファイルで特に言語や文字コードの変更はしなかったけど、日本語データは問題無く扱えました。

※参考

関連エントリ



2011年8月15日月曜日

LAMP of CakePHP on VMware:MySQL追加設定~日本語設定、DB・ユーザー作成など

さて、LAMPほぼ童貞の男(当時)がお送りする、VMware Player上のCakePHP自習環境構築シリーズ。
初稿は今年の4月、「MySQLのDB・ユーザー作成やらは追々書いていきます」などとぬかしてから早4ヶ月…ようやくここまで辿り着きましたよ。

mysql_secure_installationの実行

まずはMySQLをセキュアにするために「mysql_secure_installation」を実行します。
# mysql_secure_installation

以下設定を行うかどうか尋ねてくるので、適宜設定してください。
基本、全てYesにしておいた方が良いでしょう。
  • rootユーザーのパスワード設定
  • 匿名ユーザーの削除
  • リモートからのrootユーザーログイン禁止設定
  • testデータベースの削除
  • 権限テーブルのリロード ※ここまでの権限に関する設定の適用

文字コード設定

我らが日本語を使用するために、DBの文字コードをUTF-8に設定。
/etc/my.cnfを開き、以下設定を追加。
[mysqld]
# MySQLサーバー用の文字コード設定
character-set-server=utf8

[client]
# クライアント用の文字コード設定
default-character-set=utf8

設定済んだら再起動。
# /etc/init.d/mysqld restart

MySQLにコマンドラインから接続

rootユーザーで接続する場合は以下コマンド。
「-u」オプションでユーザーを指定します。
「-p」オプションはパスワードを設定している場合に必要。よってパスワード未設定の場合は不要ですが、パスワードは設定しておくべきです。特にrootなら尚更。
$ mysql -u root -p
Enter password:
Welcome…
…
mysql>

ログイン済んだら上記のように「mysql>」とのプロンプトが表示されます。
ここで先程の文字コード設定がちゃんと適用されているか確認してみましょう。
以下コマンドを実行してみてください。
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> show variables like 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

上記のような実行結果が得られればOKです。

ユーザー作成

  • ユーザー名:user
  • パスワード:userpass
  • 接続元ホスト:localhost
上記のユーザーを作成するには以下のコマンドを実行。
mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'userpass';

ここでユーザー情報を確認してみましょう。
ユーザー情報はmysqlデータベースのuserテーブルに格納されています。
mysql > use mysql;
mysql > SELECT user, password, host FROM user;
+------+-------------------------------------------+--------------+
| user | password                                  | host         |
+------+-------------------------------------------+--------------+
| root | *…| localhost    |
| root | *… | 127.0.0.1    |
| user | *… | localhost    |
+------+-------------------------------------------+--------------+
補足1:ユーザーの識別単位
MySQLのユーザーは「ユーザー名+接続元ホスト」の単位がキーです。
つまり、「'user'@'localhost'」と「'user'@'192.168.1.1'」は別人です。
試しにホスト違いの同名ユーザーを作成してからuserテーブルを覗いてみてください。
補足2:匿名ユーザーが残っている場合はホスト名を必ず指定すること
CREATE USER文はホスト名の省略が可能。
mysql> CREATE USER 'test' IDENTIFIED BY 'testpass';

この場合、ホストには「%」(全てのホストから接続可能)が設定される。
この時、もし匿名ユーザー(userテーブルのuser列が空白)が存在する場合、ユーザーの照合順序の関係で、testユーザーでアクセスしても匿名ユーザーとして扱われてしまいます。よって、認証時のパスワードはtestユーザーのものではなく、匿名ユーザーのものを使用しないといけません。
この事知らないと、「何で認証通らないんだ!?」と不毛な時間を浪費することになりますので、注意してください。ていうかそもそも匿名ユーザーなんて残しておくべきではないので、前述のmysql_secure_installationで葬ってあげましょう。

※参考
公式マニュアル:接続確認

データベース作成

文法の詳細はここでは割愛。日本語環境のDBなら以下の設定が一般的です。
mysql> CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

作ったDBは以下で確認できます。
mysql> show databases;
テーブル作成
ここも文法の詳細は割愛。日本語文字列扱う場合の一般的な書き方。
ちなみにテーブル定義はCakePHPの規約に準じたものです。
mysql> use sample;
mysql> CREATE TABLE sample_tables (
->  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
->  note TEXT NOT NULL,
->  created DATETIME DEFAULT NULL,
->  modified DATETIME DEFAULT NULL
-> )
-> engine=innodb,
-> charset=utf8,
-> collate=utf8_general_ci
-> ;

作ったテーブルは以下で確認できます。
mysql> show tables;
mysql> show columns from sample_tables;

ユーザーに権限付与

ユーザーを作成しただけでは、データベースやテーブルに対する操作は出来ません。適切に権限を設定する必要があります。
権限付与にはGRANT文を使用。文法詳細は割愛。
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON sampledb.* TO 'user'@'localhost';
mysql> FLUSH PRIVILEGES;
権限を削除するには
REVOKE~FROM文を使用。
mysql> REVOKE SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON sampledb.* FROM 'user'@'localhost';
mysql> FLUSH PRIVILEGES;

関連エントリ

2011年8月14日日曜日

LAMP of CakePHP on VMware:構築後のデザート~NTP設定

今回はNTP設定の手順を説明します。
要するにOSの時刻の自動調整設定のことで、まあ電波時計みたいなもんです。

NTPインストール

恐らくデフォルトでインストール済だと思われますが。
# yum install ntp

自動起動設定

# chkconfig ntpd on
エラー発生したら、この記事参考にして「ntpd」を追加してから再度試してください。

設定ファイルにNTPサーバー追加

/etc/ntp.confをオープン。「server」で始まる行がNTPサーバーの設定。
既存の設定を削除orコメントアウトし、以下の3行を追加。
server -4 ntp.nict.jp iburst
server -4 ntp.nict.jp iburst
server -4 ntp.nict.jp iburst
※上記NTPサーバーの情報元

ntpd起動

起動済の場合はrestart。ちなみにすぐに時刻同期されるわけではありません。
# /etc/init.d/ntpd start

すぐに同期したければ

以下のようにすれば手動で同期できます。
# ntpdate NTPサーバーアドレス

関連エントリ



LAMP of CakePHP on VMware:構築後のデザート~Apache, MySQL自動起動設定

さて、ここまでVMware Player上のCentOS 5.5・6.0でCakePHPを最低限動作させる環境構築手順を説明してきました。

上記手順の中で何度かOSを再起動する機会があったと思いますが、その度に一々ApacheやMySQLを起動し直さなくてはならない事にイラついた方もいると思います。
ここではそれらがOS起動時に自動起動するための設定手順を説明します。

その前にまず、起動しているかどうかの確認方法

以下の「プロセス名」を置き換えてください。
Apacheは「httpd」、MySQLなら「mysqld」です。
$ ps aux | grep プロセス名

chkconfigコマンド

Red Hat系Linuxの場合、chkconfigという便利なコマンドがありますので、それを利用します。
※よってUbuntuなどDebian系の場合は他をあたってください。
ちなみにrootユーザーで実行します。
起動スクリプトが登録済みかどうかの確認
下記のように「on」「off」と表示されれば既に登録済みです。
# chkconfig --list httpd
httpd           0:off 1:off 2:off 3:off 4:off 5:off 6:off

# chkconfig --list mysqld
mysqld          0:off 1:off 2:off 3:off 4:off 5:off 6:off
未登録だった場合
下記のように「--add」オプションを指定して追加してください。
# chkconfig --add httpd
# chkconfig --add mysqld
自動起動設定ON
以下コマンドを実行するだけです。
# chkconfig httpd on
# chkconfig mysqld on
「chkconfig --list …」で再度確認してみてください。2~5の値が「on」に変更されていればOKです。

関連エントリ



2011年8月7日日曜日

LAMP of CakePHP on VMware:構築手順メモ外伝 ~CentOS 6.0環境構築

ごぶサタデー…のつもりだったが、後述のインストール作業の見通しが甘くて日付を跨いでしまった。
ところで更新が滞ると記事コメント頂けるという法則がこの宇宙には存在しているようです。

技術メモ・ネタが結構溜まってきているので(えと、レベルは高くないです)、いい加減そろそろ消化していかないとなと思って臨んだサタデー、CentOS 6.0が先月リリースされていた事を知りました。
うーん、情報収集は怠っていなかったつもりだけどな…このニュース、認知度ありました?

まあ何はともあれ、せっかくなんでVMware Player上に仮想環境構築です。
まずは以前に自分で書いた構築手順(簡易インストール)を踏んでみました。若干の手順の差異はあれど、OSの日本語化設定まではすんなり済みましたが、日本語入力メソッド(前述の記事における『SCIM+Anthy』)のインストールで躓いてしまい、日本語の入力ができない状態で通行止めに…

なので今回は簡易インストールではなく、ISOイメージファイルからブートすることでインストールしました。その手順をここに記します。
ちなみに2011年8月7日時点で、当記事の手順でインストールされるAMPのバージョンは以下の通り。PHP、5.3だー!
  • A:2.2.15
  • M:5.1.52
  • P:5.3.2

ISOイメージのダウンロード

わざわざ書くことでもないですが。
以下ページに日本のミラーサイトへのリンクが記載されているので、お好みのサイトからダウンロードしてください。ちなみにISOイメージは「6.0/isos」ディレクトリにあります。

VMware Player : 空の仮想マシンを作成

VMware Playerを起動し、ホーム画面の「新規仮想マシンの作成」を選択。
「後でOSをインストール」を選択し、次画面で「Linux」「CentOS」を選択し、後は簡易インストールと同じ流れ。
よく分からなければ、例によって画像付きで解説してくださっている以下ブログを参照してください。
尚、今回は空仮想マシン作成なので、この時点でのCentOSインストールは当然開始されません。

VMware Player : CentOSインストール

作成した空仮想マシンを選択して
「仮想マシン設定の編集」→「ハードウェア」→「CD/DVD(IDE)」と選択していき、
「接続」ペインの「ISOイメージファイルを使用する」欄に、ダウンロードしたISOイメージのパスを入力。
この状態で「仮想マシンの再生」を行います。

後は、画像付きで解説してくださっている以下ブログを参照してください。
僕はネットワーク設定まで全く同じ手順を踏ませていただきました。
ちなみに上記記事の(1)と(2)の間に、もしかしたらディスクチェックを行うかどうかの画面が表示されるかもしれません。手っ取り早く進めたければスキップしちゃってください。

VMware Toolsを自分でインストール

今回は簡易インストールではない手順をとったので、VMware Tools(※1)は自分でインストールする必要があります。

まずは仮想OSにログインした状態で、VMwareウィンドウ下部の「ツールのインストール」を押下。

インストーラのアーカイブが保存された仮想CDドライブがマウントされます。

次にターミナルを起動し、mountコマンドでアーカイブのパスを確認。
$ mount
…
/dev/sr0 on /media/VMWare Tools …

僕の場合は上記のパスでした。
続いてアーカイブを展開し、rootユーザーになってからインストールスクリプトを実行します。
$ tar xvzf /media/VMware\ Tools/VMwareTools-8.4.6-385535.tar.gz
$ cd vmware-tools-distrib
$ su
# ./vmware-install.pl

インストールスクリプトでは、ディレクトリなどいくつか設定を問われますが、全て何も入力せずEnter(その場合[]内の値が使用される)。

完了したら一旦シャットダウンし、仮想マシン設定の「CD/DVD(IDE)」の設定を元に(「物理ドライブを使用する(自動検出)」)戻し、再度起動してみます。
ゲスト・ホストOS間でクリップボードの共有、マウスカーソルのシームレスな行き来、VMware Playerのウィンドウ最大化した際にゲストOSの描画エリアも最大化…などが実現できていればOKです。

あと、せっかくなんでこのタイミングでパッケージを更新しておくといいかもしれません。
「システム」→「管理」→「ソフトウェア更新」で更新できます。ちなみに僕の場合、見つかった更新の数は約170個で、更新完了するまで結構時間かかりました。

Apache インストール

恐らく既にインストールされていると思います。
もしインストールされていなければ、以下コマンドでインストール。
# yum install httpd

そして起動。
# /etc/init.d/httpd start
ファイアウォール設定
「システム」→「管理」→「ファイアーウォール」
「信頼したサービス」で表示されるリスト内の「WWW(HTTP)」にチェックを入れ、ツールバーの「適用」押下。
※恐らく「SSH」はデフォルトでチェックが入っていると思いますが、チェックされてなければ入れといてください。

MySQL インストール

# yum install mysql-server

そして起動。
# /etc/init.d/mysqld start

DBやユーザーの作成に関しては、今回も割愛。

PHP インストール

MySQL接続用のパッケージも一緒にインストール。
# yum install php php-mysql

インストール済んだらApache再起動。
# /etc/init.d/httpd restart

ApacheやPHPとかの動作確認やらCakePHPの導入やら

以前に僕が書いた以下記事を参照してください。
記事の環境はバージョン5.5ですが、やることは変わりません。

その他の関連エントリ


※1
ゲスト・ホストOS間でクリップボードの共有やマウスカーソルのシームレスな行き来を実現したり、VMware Playerのウィンドウ最大化した際にゲストOSの描画エリアも最大化したりetcetcと、痒いところに手を届かせてくれるツール。


2011年4月4日月曜日

LAMP of CakePHP on VMware:構築手順メモ2~CakePHPデコレーション

はじめに ※2011年8月追記

当記事は、CentOS 5.5環境の構築手順です。
CentOSと言えば、4月に5.6、7月にようやく6.0がリリースされました。
5.6環境のインストールは、この記事で解説している5.5と全く同じ流れでいけます。ちなみに、5.6だとPHP5.3のパッケージが提供されています。
6.0の場合、微妙に違いますが殆ど変わらないので、何となく分かるかとは思いますが、確実を期したければこちらを参照してください。ただしApacheとPHPの動作確認、CakePHPインストールは当記事の通りです。

では本題

LAMPほぼ童貞の男がお送りする、VMware Player上のCakePHP自習環境構築第2弾。
今回はCentOS上にLAMPの『AMP』及びCakePHPをインストールする手順をお届け。
※VMware PlayerとCentOS仮想マシンの構築手順はこちらを参照

Apache インストール

※プロンプトが『$』の場合は一般ユーザー、『#』の場合はrootユーザーで実行(或いは頭に「sudo」をつける)してください。
# yum install httpd

インストール済んだら起動。
# /etc/init.d/httpd start
ファイアウォール設定
「システム」→「管理」→「セキュリティレベルとファイヤーウォールの設定」を選択。
「ファイアウォールのオプション」タブを選択して
  • ファイアウォール:有効
  • 信頼できるサービス:「WWW(HTTP)」にチェック
※「信頼できるサービス」はついでに「SSH」もチェックしておきましょう。
ここいらで接続確認
まずIPアドレスを確認。
# ifconfig
※パス通ってない場合は「/sbin/ifconfig」とフルパス指定してください。

ブラウザで「http://{IPアドレス}」にアクセスし、Apacheのテストページが表示されたらOK。

MySQL インストール

# yum install mysql-server

インストール済んだら起動。
# /etc/init.d/mysqld start

DBやユーザーの作成に関しては、今回は割愛。

PHP インストール

MySQL接続用のパッケージも一緒にインストールします。
バージョン 5.1
# yum install php php-mysql
バージョン 5.3 ※CentOS 5.6のみ
# yum install php53 php53-mysql

インストール済んだらApache再起動。
# /etc/init.d/httpd restart
ここいらでPHP動作確認
Apache公開ディレクトリ(デフォルトでは/var/www/html)直下に以下ソースを適当なファイル名で保存(拡張子は「.php」)。

ブラウザで「http://{IPアドレス}//{ファイル名}」にアクセスし、「PHP Version…」から始まるページが表示されればOK。

CakePHP インストール

以下ページよりアーカイブをダウンロード。3月下旬時点での最新安定バージョンは「1.3.8」。
アーカイブを解凍し(tar zxvf {ファイル名})、Apache公開ディレクトリ(デフォルトでは/var/www/html)内に展開。
CakePHPディレクトリ内の.htaccess有効化
「/etc/httpd/conf/httpd.conf」を開き、以下設定を追加。

ここいらでCakePHP試食
ブラウザで「http://{IPアドレス}/{CakePHPのパス}」にアクセス。
403エラーが発生した場合、SELinux設定を確認し、有効になっていたら無効に設定。
# getenforce
Enforcing ←disabled以外の場合は有効
# setenforce 0 ←無効化コマンド
さらに再起動時にも無効になるよう、設定ファイル編集。
# vim /etc/sysconfig/selinux
SELINUX=disabled
ここでOS再起動。これで恐らくOKな筈。
警告メッセージがいくつか表示されているはずなので、一つずつ潰していく。
apacheユーザーにapp/tmpディレクトリの書込権限追加
以下は一例。「chmod -R 757」とかでもOK。
chmod -R o+w {CakePHPのパス}app/tmp/
「strtotime()」の警告が発生したら
PHPが5.3でタイムゾーン設定を行っていない場合に発生する。
/etc/php.iniを開き、「date.timezone」の値に「Asia/Tokyo」を設定。
;date.timezone = 
↓ 修正
date.timezone = "Asia/Tokyo"
設定済んだらApache再起動。

app/config/core.phpのセキュリティ関連パラメータ変更
以下項目の値をデフォルト値から適当に変更。
  • 'Security.salt'
  • 'Security.cipherSeed'
app/config/database.php作成
既存のdatabase.php.defaultを元に作成。
ここまでの手順でMySQLをインストールした場合、パスワード無しの「root」ユーザーと「test」DBが作成されている筈なので、とりあえず接続情報を以下のように設定する。

PCREだか何かのエラーが発生してたら
「cake/libs/validation.php」のalphaNumeric関数内にある正規表現を修正する。

※ここの部分は以下のブログを参考にさせていただきました。
以上でとりあえず完成(の筈)。OS起動時にApacheやMySQLを自動起動させる設定やらMySQLのDB・ユーザー作成やらは、後述の関連エントリを参照してください。
それではCakePHPを召し上がってください。

関連エントリ



2011年4月3日日曜日

LAMP of CakePHP on VMware:構築手順メモ1~CentOSインストールまで

はじめに ※2011年8月追記

当記事は、CentOS 5.5環境の構築手順です。
CentOSと言えば、4月に5.6、7月にようやく6.0がリリースされました。
5.6環境のインストールは、この記事で解説している5.5と全く同じ流れでいけます。ちなみに、5.6だとPHP5.3のパッケージが提供されています。
6.0環境の構築手順はこちらを参照してください。

では本題

職務経歴の大半がWindows Server+商用クソJavaフレームワークで占められており、LAMPのどれ一つ未経験の男がお届けする、VMware Player上のCakePHP自習環境構築手順です。よろしければご覧あれ。
尚、タイトルの通り当記事で言及しているのはCentOSインストールまでです。AMPのインストール手順に関してはこちらを参照

ちなみに当記事におけるLAMPのバージョンは以下の通り。
3月下旬にバージョン指定しないでyumインストールした結果であります。
  • L:CentOS 5.5
    ※5.6環境の構築手順も同じ流れです
  • A:2.2.3
  • M:5.0.77
  • P:5.1.6
    ※CentOS 5.6の場合、PHP5.3のパッケージが提供されています
ところでCentOSと言えばRed Hat互換ということで人気な訳ですが、開発コミュニティが分裂しかかっていて次期バージョンリリースの目処が立たず、待ちきれないならScientific Linux使ってねなんて状況なんだそうな。

VMware Player インストール

以下ページの「ダウンロード」リンクから。
姓、名、メールアドレスを入力後、インストーラーのダウンロードページリンクが記載されたメールが送られてくる。

CentOS ISOイメージのダウンロード

本家サイトのダウンロードページから。
お好みのミラーサイトから『CentOS-5.5-i386-bin-DVD.iso』をダウンロードしてください。尚、ファイルサイズは3.9GBです。

※ダウンロードを速く終えたくて堪らないあなたは、『CentOS-5.5-i386-bin-DVD.torrent』でBitTorrentによるダウンロードを利用するといいよ。ちなみに僕は今回のこれでBitTorrent処女喪失しました。TorrentクライアントにはOperaを使用。
※1:BitTorrentについての補足というかメモ書き

CentOS仮想マシン作成

VMware Playerを起動し、ホーム画面の「新規仮想マシンの作成」を選択、後はウィザードに従って進める。特に躓くようなことはないだろうから詳細な解説はここでは割愛。もし躓くようであれば、画像付きで解説してくださっている以下ブログを参照してください。

日本語化設定

OSの画面を見れば一目瞭然だが、言語設定が英語の状態。どうも上記手順によるインストール(簡易インストール)だとこうなってしまうらしい(※2)。
というわけで日本語化設定を行う。
キーボード設定
今のままだとキー配列が英語でコマンドタイプがままならないので、まずはキーボード設定から。
メニューの「System」→「Preference」→「Keyboard」で表示されるダイアログの「Layouts」タブを選択し、
  • Keyboard model:Japanese 106-key
  • Selected layouts:japan ※それ以外は削除
システムの言語設定
以下コマンド実行したらダイアログ表示されるので『Japanese』を選択。
※プロンプトが『$』の場合は一般ユーザー、『#』の場合はrootユーザーで実行(或いは頭に「sudo」をつける)してください。
# system-config-language
日本語フォント インストール
# yum install fonts-japanese
日本語入力メソッド『SCIM+Anthy』のインストール(※3
# yum install scim-anthy

ここまでやったら一旦再起動。

メニューなどで文字化け発生したら

フォントキャッシュを更新して再起動したら解消。
# fc-cache -fv

※ここの部分は以下のブログを参考にさせていただきました。

LAMPの『L』のインストール・設定はとりあえずこんなもんでOK。
残りのAMPに関しては次の記事で解説してます。

関連エントリ

※1:BitTorrentメモ書き
CentOS ISOイメージのダウンロード先にデスクトップを指定し、ダウンロード開始して無事完了。なるほど、確かにHTTPやFTPに比べて速い…と感動していると、何かアップロード処理が始まっている。BitTorrentといえばWinnyとかと同種のいわゆるP2Pなもんだから、「やばい!デスクトップ上のファイルが晒される!!」と焦った焦った…。
BitTorrentの場合、ファイルをダウンロードすると、今度は自分が配布者となってダウンロードしたばかりのファイルがアップロードされるのだそうな。要するに、アップロードされるのはダウンロードしたファイルだけ。心配するな、俺。ていうか事前に学んどけよ、俺。

BitTorrent - Opera Wiki
BitTorrentにアップフォルダという概念はありません。あなたがBitTorrentを利用してダウンロードしている途中、またはダウンロード完了したものを他のひとに分けあたえるのみです。それ以外のファイルを勝手に流されることは仕組み上ありえません。

尚、ダウンロード後に接続解除するなどしてアップロードしないのはマナー違反。
Operaヘルプ:BitTorrent
BitTorrent アーカイブをダウンロードしている間、あなたは他のユーザーへの配布も助けていることにをなります。たとえ帯域制限をするなどしても、アップロードをせずダウンロードのみ行うということはできません。

※2
当記事の手順(簡易インストール)ではなく、ディスクからインストールするのと同じ手順でいきたい場合は、CentOS 6.0環境構築手順の記事を参考にしてください。その手順の場合、当記事で解説している日本語化設定は不要(OSインストールウィザードで行う)になりますが、『VMware Tools』は自分でインストールするしなければなりません。

※3
Windowsにおける『MS-IME』、Macにおける『ことえり』ね。