第9週


環境構築

課題

前回、以下のような課題を出された。

  • OpenSSHをソースでインストール
  • SSHでログインできるようにする(rootのログインを禁止する)
  • apacheをソースからインストール
  • MySQLをソースからインストール
  • PHPををソースからインストール
  • PEARでsymfonyをインストール
  • memcachedを入れる

ってなわけで順番に片付けていく。
なお、VMware Serverの設定については前回を参照下さい。

VMware Serverで仮想環境構築

前回参照。

ただし、最低限のインストールから始めるため、以下のものをインストールした。
これらをインストールした理由は
「最低限必要っぽいから」

  • 開発
    • 開発ツール
  • サーバー
    • DNSネームサーバー
    • FTPサーバー
    • Webサーバー
    • サーバー設定ツール
    • ネットワークサーバー
    • レガシーなネットワークサーバー
  • ベースシステム
    • システムツール
    • ベース
    • 管理ツール

OpenSSHをソースでインストール

OpenSSHは、OpenSSH Projectによって開発されているSSHプロトコルを実装したソフトウェア。

システムにインストールされている古い OpenSSH を停止して削除

# /etc/rc.d/init.d/sshd stop
# yum -y remove openssh

zlibのインストール

zlibはzipやgzip、画像フォーマットのPNGに使われている
圧縮アルゴリズムをライブラリ化したものをいいます。

DL、コンパイル、インストールは以下の手順で行なう。

# wget -P /usr/local/src http://www.zlib.net/zlib-1.2.5.tar.gz
# cd /usr/local/src
# tar xzf zlib-1.2.5.tar.gz
# cd zlib-1.2.5
# ./configure --prefix=/usr/local
# make
# make install

configureとは?

「configure」というシェルスクリプトを実行することで、ソースファイルをコンパイルする前に、
インストール対象となるシステム特有の機能/情報をチェックし、チェック状況を記述したMakefileを作成する。

makeとは?

「configure」の実施により作成された「Makefile」を元に、ソースファイルのコンパイルを行う。

make installとは?

「make」コマンドにてコンパイルしたソースファイルをインストールする。

OpenSSLのインストール

OpenSSLは、「Secure Sockets Layer(SSL v2/v3)」と
暗号プロトコルである「Transport Layer Security(TLS v1)」を実装したライブラリ。

OpenSSLのソースファイルのDL、コンパイル、インストールは以下の手順。

# wget -P /usr/local/src http://www.openssl.org/source/openssl-0.9.8d.tar.gz
# cd /usr/local/src
# tar xzf openssl-0.9.8d.tar.gz
# cd openssl-0.9.8d
# ./config --prefix=/usr/local
# make
# make install

OpenSSHのインストール

OpenSSHのソースファイルのDL、コンパイル、インストールは以下の手順。

# wget -P /usr/local/src ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-4.5p1.tar.gz
# mkdir /usr/local/openssh
# cd /usr/local/src
# tar xzf openssh-4.5p1.tar.gz
# cd openssh-4.5p1
# ./configure --prefix=/usr/local/openssh
# make
# make install

openssh起動

# /usr/local/openssh/sbin/sshd

起動を確認する

# ps ax | grep sshd

※なお、openSSHを停止するには以下のコマンドをうつ

# kill `cat /var/run/sshd.pid`

SSHでログインできるようにする(rootのログインを禁止する)

以下のファイルを一部書き換える。

/usr/local/openssh/etc/sshd_config

#Protocol 2,1
 ↓
Protocol 2  //SSH2のみで接続を許可

#PermitRootLogin yes
 ↓
PermitRootLogin no  //rootでのログインを禁止

#PermitEmptyPasswords no
 ↓
PermitEmptyPasswords no  //パスワードなしでのログインを禁止

ユーザー作成

useradd 新規ユーザー名
passwd 新規ユーザー名
→新規ユーザーのパスワード

※以下のファイルにユーザー名があるか確認する

/etc/passwd

openssh再起動

# /usr/local/openssh/sbin/sshd restart

Puttyから仮想環境へつなぐ

ifconfigでサーバーのIPアドレスを再確認

Puttyでログイン!

※rootではログイン不可


sodoの設定

rootでログインできなくしたのはいいんだけど、
今度は安全を考えて管理者権限が必要なコマンドは「sudo」で行った方がよい

というわけで作成したユーザーにroot権限を与える

まずはLinuxにsudoコマンドがインストールされているかどうかを確認

# rpm -qa | grep sudo
sudo-1.7.2p1-7.el5_5

なければ以下のコマンドでインストール

# yum install sudo

早速ユーザーにroot権限を与える

# su
パスワード:

# visudo

※このコマンドを行なうと「/etc/sudoers」をひらくので、下記を追加
ユーザー名 ALL=(ALL) ALL

#exit

これで作成したユーザーにroot権限がふられた。
これによって「root」のパスワードを何度も入力しなくてすむ

apacheをソースからインストール

以下の手順で行なった。

# wget -P /usr/local/src http://www.apache.org/dist/httpd/httpd-2.3.6.tar.gz
# mkdir /usr/local/httpd-2.3.6
# cd /usr/local/src
# tar xzf httpd-2.3.6.tar.gz
# cd httpd-2.3.6
# ./configure --prefix=/usr/local/httpd --enable-so

※ --enable-so オプションは、DSO(Dynamic Shared Object)拡張モジュールを有効にする。
DSOモジュールはサーバがビルドされるときにコンパイルしたり、Apache拡張ツール(apxs)を使って、
後でコンパイルして追加したりできます。

ここで以下のエラーが発生

error: APR not found

どうやら「apr」がないと言われたので
「The Apache Portable Runtime Project」からダウンロードして入れる。

# wget  -P /usr/local/src http://ftp.riken.jp/net/apache/apr/apr-1.4.2.tar.gz
# tar xvzf apr-1.4.2.tar.gz
# cd apr-1.4.2
# ./configure
# make
# make install

「apr-util」も必要らしいのでインストール。

# wget -P /usr/local/src http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-1.3.9.tar.gz
# tar xvzf apr-util-1.3.9.tar.gz 
# cd apr-util-1.3.9
# ./configure --with-apr=/usr/local/apr
# make
# make install

APRとは?

Apache Portable Runtime(アパッチ・ポータブル・ランタイム、APR)は、Apache HTTP Server のサポートライブラリ。
OSとソフトウェアの間でOSなどの環境の違いを吸収するAPIを提供する。

ここで、再度/usr/local/src/httpd-2.3.6でコンパイルすると、以下のエラーが発生

pcre-config for libpcre not found

ってなわけで、「pcre」が使えるようにする

# wget -P /usr/local/src ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.10.tar.gz
# tar xvzf pcre-8.10.tar.gz
# cd pcre-8.10
# ./configure
# make
# make install

…が、うまくいかず…
さっきと同様のエラーがでました…
結構調べてみたけど、よく分からなかったので、以下の禁じ手を実行

# yum install pcre-devel

で、再度以下を実行

# cd httpd-2.3.6
# ./configure --prefix=/usr/local/httpd --enable-so
# make
# make install

Apacheの設定

/usr/local/httpd/conf/httpd.conf のファイルで行なえる

APACHEの起動

# /usr/local/httpd/bin/apachectl start

で、自分のIPアドレスにブラウザからアクセス!!

…繋がらないorz


SELinux設定

どうやらSELinuxの設定を無効にしないといけないらしい

# vi /etc/sysconfig/selinux
SELINUX=enforcing
  ↓
SELINUX=disabled 

これで再起動して再度アクセス!

…繋がらないorz

SELinuxとは?

SELinuxはセキュリティ強化のための仕組みで、セキュアOS(不正侵入されても被害を受けにくいOS)の実装の一つ

VMwareからのアクセス

どうやらFirewallが有効になっていると繋がらない(らしい)
なので以下のコマンド実行後、無効にする

# system-config-securitylevel-tui

今度こそ再起動してアクセス!

…繋がった!!!

※どうやらVMWareからはセキュリティレベルが高いとアクセスできないみたいです

MySQLをソースからインストール

以下のコマンドでインストールする

# wget -P /usr/local/src http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.49.tar.gz/from/ftp://ftp.jaist.ac.jp/pub/mysql/
# tar xvzf mysql-5.1.49.tar.gz
# cd mysql-5.1.49
# ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charset=all --with-mysqld-user=taiga

するとこんなエラーが出てきた

error: No curses/termcap library found

curses/termcapのライブラリが無いらしいのでインストール

 # yum install ncurses-devel

再度チャレンジ!

# ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charset=all --with-mysqld-user=taiga
# make
# make install

初期データベースの生成・MySQL起動

# /usr/local/mysql/bin/mysql_install_db
# chown -R root /usr/local/mysql
# chown -R taiga /usr/local/mysql/var
# chgrp -R taiga /usr/local/mysql

MySQL起動

# /usr/local/mysql/bin/mysqld_safe &

MySQLの起動確認

# /usr/local/mysql/bin/mysqladmin ping
mysqld is alive

パスワードの設定

まずはrootのパスワードを設定

# /usr/local/mysql/bin/mysql -u root
mysql > SET PASSWORD FOR root@localhost=PASSWORD('rootのパスワード');
mysql > USE mysql;
mysql > DELETE FROM user WHERE password='';
mysql > exit;

データベースアクセス用の新規ユーザーを設定

# /usr/local/mysql/bin/mysql -u root -p
password: ****
mysql > GRANT ALL PRIVILEGES ON ユーザー名.* TO taiga@localhost.localdomain IDENTIFIED BY 'ユーザー用パスワード';

今後、新ユーザーでmysqlを実行する際には以下のコマンド

# /usr/local/mysql/bin/mysqld_safe --user=ユーザー名 &

PHPををソースからインストール

以下のコマンドでインストールする

# wget  -P /usr/local/src http://jp2.php.net/get/php-5.3.3.tar.gz/from/jp.php.net/mirror
# tar xvzf php-5.3.3.tar.gz
# cd php-5.3.3
# ./configure --with-apxs2=/usr/local/httpd/bin/apxs --with-pdo-mysql=/usr/local/mysql/ --enable-mbstring

するとこんなエラーが出てきた

xml2-config not found. Please check your libxml2 installation.

ってなわけで「xml2-config」を使える状態にする

#yum install libxml2-devel
# ./configure --with-apxs2=/usr/local/httpd/bin/apxs --with-pdo-mysql=/usr/local/mysql/ --enable-mbstring
# make
# make install

php.iniの設定を変更

/usr/local/http/conf/httpd.confに以下を追加

AddType application/x-httpd-php .php

php.iniの編集

# cp php.ini-development /usr/local/lib/php.ini

※設定をいろいろいじるといいと思う

PHPがちゃんと動作しているか確認

/usr/local/httpd-2.3.6/htdocs/ 以下にちゃんとPHPファイルをつくり、
ちゃんとブラウザからみれるか確認

※再起動も忘れずに!

PEARでsymfonyをインストール

PEAR をアップデート

# pear upgrade PEAR 

するとこんなエラーが出た

-bash: pear: command not found

パスが通ってないらしい

# cd
# vi .bash_profile

PATH=/usr/local/bin:$PATH

# source .bash_profile

これでパスが通ったので、

# pear upgrade PEAR 
Nothing to upgrade

今度はsymfonyプロジェクトのPEAR チャネルを登録する。

# pear channel-discover pear.symfony-project.com

symfonyをインストールする。

# pear install symfony/symfony

インストールされたかどうか確認

# symfony -V
symfony version 1.4.6 (/usr/local/lib/php/symfony)

memcachedを入れる

以下のコマンドでインストールする

# wget -P /usr/local/src http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz
# tar zxvf memcached-1.4.0.tar.gz
# cd memcached-1.4.0
# ./configure

すると以下のようなエラーがでる

If it's already installed, specify its path using --with-libevent=/dir/

どうやら「libevent」なるものが無いと怒られているらしいので入れる

#yum install -y libevent-devel.i386

で、再度チャレンジ!!

# ./configure
# make
# make install

.bash_profileに環境変数を設定

export LD_LIBRARY_PATH=/usr/local/lib/

以下でmemcached起動!!

# memcached -d -m 64-l 192.168.157.128 -p 11211 -u root

やっつけアプリを作成

今回は、今まで設定していたものがちゃんと使用できるか検証するための
簡単なアプリを作成

やることとしては、アプリケーションを作って
/usr/local/httpd/conf/httpd.conf の DocumentRoot? の設定を変更すればokなはず。

以下、はまったところを追記

DBに接続できない

symfony1.4系ということで、せっかくなので、Doctrineを使用。
DBを作ってアプリケーションから接続しようとしたら、なぜか接続できない orz

いろいろさぐってみるとこんな記事に遭遇

MR.NiNi -symfony 1.4初期構築-

〜 抜粋 〜 symfony 1.4の場合、PostgreSQLやMySQLにアクセスする際にPDO(PHP Data Object)が必要となった。

マジか orz

というわけで、PHPのコンパイルからやり直す

# ./configure --with-apxs2=/usr/local/httpd/bin/apxs --with-pdo-mysql=/usr/local/mysql/ --enable-mbstring  --with-pdo-mysql
# make
# make install

あとは再起動すれば接続完了!

実はmemcachedが動いていなかった件

なぜだか知らんがうまくできていなかった…
というわけで調べた結果、以下を実行

まず、memcachedをPHPで使うには、zlibがPHP側で使えるようになっていなくてはいけない。
要するに--with-zlibでビルドされてないないといけない

 # ./configure --with-apxs2=/usr/local/httpd/bin/apxs --with-pdo-mysql=/usr/local/mysql/ --enable-mbstring  --with-pdo-mysql --with-zlib
# make
# make install

奥の手使用

# pecl install memcache

/usr/local/lib/php.iniに追加

extension_dir = "/usr/local/lib/php/extensionsno-debug-zts-20090626"
extension=memcache.so

apache再起動して…うごいた!!


参考資料

  • 独習PHP 第2版