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

2012年5月14日月曜日

KVMで仮想環境構築 for Ubuntu Server 12.04

近頃ずいぶん便利になった仮想化技術ですが、クリーンインストール環境がたまにほしくなるので、
KVM + QEMUを利用してCentOS 6.2Ubuntu Server 12.04のインストールとゲスト環境の複製までやってみます。

ホスト環境はこれまでセットアップしてきたUbuntu Server 12.04を利用します。

ハードウェアの前提確認

まずKVMを導入するにはCPUが仮想化に対応しているかホスト環境で確認します。
IntelのCPUの場合は、次のようにvmxが含まれれば対応しています。

・Intel VTの場合
grep vmx /proc/cpuinfo

flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority
・AMD-Vの場合
grep svm /proc/cpuinfo

OSのダウンロード

インストールに使用するCentOS 6.2 と Ubuntu Server 12.04をダウンロードします。
cd /usr/local/src
curl -LO http://mirror.symnds.com/distributions/CentOS-vault/6.2/isos/x86_64/CentOS-6.2-x86_64-minimal.iso
curl -LO http://ftp.iij.ad.jp/pub/linux/ubuntu/releases/precise/ubuntu-12.04.3-server-amd64.iso

ネットワークの設定(ブリッジ接続)

・参考
https://help.ubuntu.com/12.04/serverguide/network-configuration.html#bridging
http://www.linux-kvm.org/page/Networking

・bridge-utilsのインストール
sudo apt-get install bridge-utils
・設定ファイルの修正
vi /etc/network/interfaces 次のように修正して保存する
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto br0
iface br0 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 8.8.8.8
dns-search example.local

・ネットワークを再起動
sudo /etc/init.d/networking restart

・ネットワークの設定確認(br0の追加)
ifconfig -aの内容
br0       Link encap:Ethernet  HWaddr **:**:**:**:**:**  
    inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
    以下省略

ネットワークの設定(iptables)

・/etc/sysctl.confの修正
vi /etc/sysctl.conf
次の内容を追記して保存する
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
net.ipv4.ip_forward = 1
・設定を読み込み
sysctl -p /etc/sysctl.conf

KVM + QEMU のインストール

sudo apt-get install qemu-kvm virt-manager virt-viewer

イメージファイル作成

適宜容量は変更してください。
qemu-img create -f qcow2 /var/lib/libvirt/images/centos6.img 160G
qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu1204.img 160G
参考
qcow2形式なので、作成されるイメージファイルが160GB使用するわけではありません。
以下の手順で最小構成インストール直後のファイルサイズは3.3GB(centos6)と2.6GB(ubuntu1204) でした。またvirt-cloneで作成したファイルはそれ以下のサイズとなりました。

ゲストOSのインストール

・CentOS 6.2
virt-install --connect qemu:///system \
 --name=centos6 \
 --connect=qemu:///system \
 --ram=2048  \
 --vcpu=2 \
 --os-type=linux \
 --hvm \
 --os-variant=virtio26 \
 --disk path=/var/lib/libvirt/images/centos6.img,size=160,format=qcow2 \
 --cdrom=/usr/local/src/CentOS-6.2-x86_64-minimal.iso \
 --network bridge=br0 \
 --graphics vnc,port=5900,password=foobar,listen=0.0.0.0,keymap=ja
・Ubuntu Server 12.04
virt-install --connect qemu:///system \
 --name=ubuntu1204 \
 --connect=qemu:///system \
 --ram=2048  \
 --vcpu=2 \
 --os-type=linux \
 --hvm \
 --os-variant=ubuntuprecise \
 --disk path=/var/lib/libvirt/images/ubuntu1204.img,size=160,format=qcow2 \
 --cdrom=/usr/local/src/ubuntu-12.04-server-amd64.iso \
 --network bridge=br0 \
 --graphics vnc,port=5901,password=foobar,listen=0.0.0.0,keymap=ja

VNC接続

・VNCで使用するポートを開ける
環境に合わせて適宜変更してください。
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5900:5901
・VNCクライアントで接続して各ゲストOSをインストールする
各OSのインストールは省略いたしますが、ホスト名、IPアドレス、VNCのポート番号などは
マスター作成用に普段使用しないものを割り当てた方がよいかと思います。
セットアップが完了した仮想環境は複製して使い回せるため1台のサーバに複数の環境を導入する場合や、
複数のサーバに展開する場合を考慮してあらかじめ設計するとよいでしょう。

インストール完了後に再起動していない模様

OSインストールが環境してvirshコマンドでゲスト環境を確認したところ
いずれも状態がシャットオフで起動していませんでした。
virsh list --all
Id Name                 State
----------------------------------
  - centos6              shut off
  - ubuntu1204           shut off
・virshコマンドでゲストOSを起動します
virsh start centos6
virsh start ubuntu1204
・確認
virsh list --all
 Id Name                 State
----------------------------------
  1 centos6              running
  2 ubuntu1204           running

virshでゲストOSの再起動やシャットダウンができない

ホスト環境からvirsh shutdownコマンドを実行してもゲスト環境(centos6)がシャットダウンせず実行中のままでした。
この問題は、acpidをインストールして解決します。
・ゲストOSにacpidをインストールする
・CentOS 6.2 の場合
sudo yum install acpid.x86_64
/etc/init.d/acpid start

・Ubuntu Server 12.04の場合(最小構成でもインストールされていたためこの手順は不要です)
sudo apt-get install acpid service acpid start
ホスト環境からシャットダウンするか確認してみます。
virsh shutdown centos6
virsh shutdown ubuntu1204
どちらもシャットダウンできました。
virsh list --all
 Id 名前               状態
----------------------------------
  - centos6              シャットオフ
  - ubuntu1204           シャットオフ
これでゲスト環境の準備は完了です。次にゲスト環境を複製を試してみます。

クローン作成

・複製前の準備
一通りセットアップが完了した状態で不要なログなどを削除してから
シャットダウンして配布用マスターとして利用します。

・virtc-cloneコマンドでゲスト環境のクローン作成
virt-clone --connect=qemu:///system \
  -o centos6 \
  -n centos6clone \
  -f /var/lib/libvirt/images/centos6clone.img
・定義ファイルを一部修正
virsh edit centos6clone なぜかディスクがraw形式になっていたのでrawをqcow2に修正しました。
<disk type='file' device='disk'>:
<driver name='qemu' type='qcow2'/>:

vncのポートが重複していると起動しないため、graphicsタグを削除するかポート番号を変更します。
<graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0' keymap='ja'>
<listen type='address' address='0.0.0.0'/>
</graphics>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>

virt-cloneがMACアドレス適当に割り当ててくれているのでこれをそのまま利用しますが、
CentOSではネットワーク設定に問題があり修正が入ったのでこのMACアドレスをメモしてください。
<interface type='bridge'>
<mac address='52:54:00:1f:b3:76'/>

・複製したゲストOSを起動する
virsh start centos6clone
・ホスト名を変更する(CentOS)
vi /etc/sysconfig/network
HOSTNAME=kvm2
・ホスト名を変更する(Ubuntu)
vi /etc/hostname
kvm3
・IPアドレスとMACアドレスの変更(CentOS)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
HWADDR=52:54:00:1f:b3:76
IPADDR=192.168.1.101
CentOSでは、virt-cloneで作成したイメージで起動すると、eth0がeth1に書き変わってしまいネットワークの起動に失敗しました。同じ現象と思われる記事 http://d.hatena.ne.jp/ngyuki/20110805/p1 もあるでの私だけではないようです。
dmesgには次のようなログが出力されます。
udev: renamed network interface eth0 to eth1
・eht0がリネームされた場合は次のファイルを削除する(CentOS)
sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
・IPアドレスとMACアドレスの変更(Ubuntu)
vi /etc/network/interfaces
iface eth0 inet static
        address 192.168.1.102
再起動してホスト名とIPアドレスが変更されていることを確認します。
reboot
以上でゲスト環境の複製ができました。

kvm環境すごく便利ですね。
OpenStackやEucalyptusとまではいかなくても、
小規模なプライベートクラウドなら自作できそうですね。

2012年5月5日土曜日

Mosh (mobile shell) インストール for Ubuntu Server 12.04 LTS



前回のパッケージのアップデートに引き続き、SSHのインストールおよび設定を行います。
それに加え、最近気になっているMosh (mobile shell)も試してみます。

ファイアーウォール設定(ufw)


まずはファイアーウォールの設定でSSHに使用するポートを許可します。
下記の設定はあくまで一例であり、同一ネットワークはセキュアなのが前提です。
そのため環境により適宜変更してください。


sudo ufw default deny
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 22
sudo ufw limit 22/tcp
sudo ufw enable

コマンドの内容


  • デフォルトを拒否に設定する

  • 同一ネットワークからの22番ポートを許可する

  • 外部ネットワークからの22番は限定許可する

  • ファイアーウォールを有効にする



OpenSSHのインストール


apt-getでopenssh-serverをインストールします。


sudo apt-get install openssh-server


インストールが完了するとsshdが自動起動するので、別のPCなどのターミナルで接続します。
次に鍵を作成します。


ssh-keygen -t rsa
Enter file in which to save the key (/home/[ユーザ名]/.ssh/id_rsa): [Enter]キーを押す
Created directory '/home/[ユーザ名]/.ssh'.
Enter passphrase (empty for no passphrase): パスフレーズを入力して[Enter]キーを押す
Enter same passphrase again: 再度パスフレーズを入力して[Enter]キーを押す

cd $HOME/.ssh
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys

作成した秘密鍵(/home/[ユーザー名]/.ssh/id_rsa)を自分のPCなどにコピーします。


パスワード認証を停止


sudo vi /etc/ssh/sshd_config
次の項目の設定を追記または書き換え保存する
PasswordAuthentication no
UsePAM no


sshdの設定再読み込み後にログアウトして秘密鍵を使用して再度SSHで接続します。


sudo service ssh reload



Mosh用ファイアーウォールの設定


moshは、デフォルトでudpの60000から61000番ポートを使用するので、
今回はそのままポートを開けますが、このあたりはポリシーに従って適宜変更が必要です。
使用状況にもよりますが、モバイル用途なら常時ヘビーに使う感じがしないので、
使用する人数分かその倍ぐらいのポート数でも十分ではないかと思います。


sudo ufw allow proto udp from 192.168.1.0/24 to any port 60000:61000
sudo ufw limit 60000:61000/udp



Moshのインストール




  • サーバ側


sudo apt-get -y install mosh


Moshのバージョンをサーバとクライアントで合わせたい場合は、
ソースコードやgitからインストールしてください。
ちなみに今回のバージョンは、サーバ側1.1.3、クライアント側1.2と異なりますが動作しました。


  • クライアント側(Macの場合)


次のいずれかの方法でインストールしますが、今回はパッケージでインストールしました。


  • パッケージの場合

https://github.com/downloads/keithw/mosh/mosh-1.2.pkg


  • Homebrewの場合

brew install mobile-shell


  • MacPortsの場合

sudo port install mosh



Moshで接続する




  • クライアント側からmoshコマンドでサーバに接続する


mosh [ホスト名]



  • ポート番号を指定する場合


mosh -p [ポート番号] [ホスト名]


これでmosh接続完了です。

mobile shellというだけあって、WiFiを切ったりPCをスリープさせて復帰した後でも
すぐに再接続してコマンド入力できました。
ただし、screenやtmuxの代わりになるわけではないので併用するのがよさそうです。




2012年5月4日金曜日

Ubuntu Server 12.04 LTS のパッケージ管理



皆様、大雨の連休をいかがお過ごしでしょうか?
今日は、幸い?外出せず自宅にこもっているのでUbuntu Serverインストールの続きを書いてみます。

前回、Ubuntu Server 12.04 LTSを最小構成でインストールしましたが、
アプリケーションのインストールの前に、パッケージ管理について確認してみました。

パッケージ管理


Ubuntuのパッケージ管理は、主に次の3つがあります。







dpkgdebパッケージ管理システム
apt-getコマンドラインのパッケージ管理ツール
aptitudeテキストユーザーインターフェースのパッケージ管理ツール

apt-getとaptitudeの違いは、テキストユーザーインターフェースが使える以外にも依存関係のない使われなくなったパッケージの扱いなど何点かあるようです。
このあたりはdebianのマニュアル「apt-get/apt-cache と aptitude の比較」が詳しいですね。

aptitudeが良さそうなんですが、apt-getを使用してみます。
理由としては、上記のマニュアルで次の点が気に入りました。


  • コマンドラインで使用する

  • メモリーの消費は少なく、実行速度が早い

  • 推薦パッケージの自動インストールや自動削除を行わない




apt-getコマンドオプション


以下debianのマニュアルを引用しました。
















apt-get/apt-cache シンタックス説明
apt-get updateパッケージアーカイブメタデーター更新
apt-get install foo"foo" パッケージの候補バージョンをその依存関係とともにインストール
apt-get upgrade他のパッケージを削除すること無くインストール済みパッケージの候補バージョンをインストール
apt-get dist-upgrade <パッケージ>必要なら他のパッケージを削除しながらインストール済みパッケージの候補バージョンをインストール
apt-get remove foo設定ファイルを残したまま "foo" パッケージを削除
apt-get autoremove既に必要なくなっている自動済みパッケージを削除
apt-get purge foo設定ファイルを含めて "foo" パッケージを完全削除
apt-get clean収集されローカルに貯蔵されたパッケージファイルを完全消去
apt-get autoclean収集されローカルに貯蔵されたパッケージファイルのうち古くなったパッケージを消去
apt-cache show <パッケージ>"foo"パッケージに関する詳細情報を表示
apt-cache search <regex><regex> とマッチするパッケージを検索


パッケージ更新


インストール直後に、apt-getでさっそくアップデートしてみます。
また、リリースして間もないですが、カーネルのアップデートがあったので再起動します。
最後に、不要なパッケージの削除を行います。


sudo apt-get -y update
sudo apt-get -y dist-upgrade
sudo reboot
sudo apt-get -y autoremove


インストール済みのパッケージ一覧は、dpkgコマンドで確認します。


dpkg -l





2012年5月2日水曜日

Ubuntu Server 12.04 LTS 最小構成インストールしてみた(スクリーンキャプチャ付き)



スタートアップ系Webサービスではよく利用されてと思われるUbuntuですが、
「Ubuntu 12.04 LTS」がリリースされたのと、LTSが5年サポートになったのを記念して、
最小構成でインストールしてスクリーンキャプチャーを取ってみました。
ちなみに今回インストールするのは、サーバ版です。

Ubuntuのシェアが下がったという記事がたまにありますが、
おそらくこれはデスクトップの話で、サーバ用途ではないと思われます。
W3Techsによれば、Webサービスのサーバとしては、Debian、CentOSに続いて利用されています。
http://w3techs.com/technologies/details/os-linux/all/all
また、Redhatの10年サポートには及びませんが、
Ubuntuも12.04 LTSから5年サポートとなり企業でも導入しやすくなったのではないでしょうか。

ダウンロードはこちらから
http://www.ubuntu.com/download/server

Ubuntu Server 12.04 LTS 最小構成インストール


1. [日本語]を選択して[Enter]キーを押す
f:id:ono51:20120501110728p:image:w480

2. [Enter]キーを押す([Ubuntu Serverをインストール(I)]選択済み)
f:id:ono51:20120501110729p:image:w480

3. [Enter]キーを押す(<はい>が選択済み)
f:id:ono51:20120501110730p:image:w480

4. [Enter]キーを押す([日本]選択済み)
f:id:ono51:20120501110731p:image:w480

5. [Enter]キーを押す([日本語]選択済み)
f:id:ono51:20120501110732p:image:w480

6. [Enter]キーを押す([日本語]選択済み)
f:id:ono51:20120501110733p:image:w480

7. [Enter]キーを押す([eth0]選択済み)
f:id:ono51:20120501142124p:image:w480

8. ホスト名の入力画面が表示されますが、手動でネットワーク設定を行うため[esc]キーを押します。
DHCPでの自動取得の場合は、14へ
f:id:ono51:20120501110734p:image:w480

9. [Enter]キーを押す([ネットワークを手動で設定]選択済み)
f:id:ono51:20120501110735p:image:w480

10. IPアドレスを入力して[Enter]キーを押す
f:id:ono51:20120501110736p:image:w480

11. ネットマスクを入力して[Enter]キーを押す
f:id:ono51:20120501110737p:image:w480

12. ゲートウェイを入力して[Enter]キーを押す
f:id:ono51:20120501110738p:image:w480

13. ネームサーバアドレスを入力して[Enter]キーを押す
f:id:ono51:20120501110739p:image:w480

14. ホスト名を入力して[Enter]キーを押す
f:id:ono51:20120501110740p:image:w480

15. ドメイン名を入力して[Enter]キーを押す
f:id:ono51:20120501110741p:image:w480

16. 新しいユーザの本名(フルネーム)を入力して[Enter]キーを押す
f:id:ono51:20120501110742p:image:w480

17. あなたのアカウントのユーザ名を入力して[Enter]キーを押す
f:id:ono51:20120501110743p:image:w480

18. パスワードを入力して[Enter]キーを押す
f:id:ono51:20120501110744p:image:w480

19. 再度パスワードを入力して[Enter]キーを押す
f:id:ono51:20120501110745p:image:w480

20. [Enter]キーを押す(<いいえ>が選択済み)
f:id:ono51:20120501110746p:image:w480

21. タイムゾーンが正しいことを確認してカーソルまたはTABキーで<はい>を選択して[Enter]キーを押す
f:id:ono51:20120501110747p:image:w480

22. [ガイド ー ディスク全体を使う]を選択して[Enter]キーを押す
MySQL、LVM、jbd2の組み合わせで悪夢のような性能劣化が・・・あったような気がする。
f:id:ono51:20120501110748p:image:w480

23. [Enter]キーを押す
f:id:ono51:20120501110749p:image:w480

24. <はい>を選択して[Enter]キーを押す
f:id:ono51:20120501115021p:image:w480

ファイルシステムやパーティションの設定を変更する場合は、
<いいえ>を選択して[Enter]キーを押すと次のような設定画面に遷移する






パーティション選択
f:id:ono51:20120501110750p:image:w240
パーティション選択
f:id:ono51:20120501110751p:image:w240
ファイルシステムなどの選択
f:id:ono51:20120501112407p:image:w240

25. [Enter]キーを押す(HTTPプロキシの設定が必要であれば入力する)
f:id:ono51:20120501112448p:image:w480

26. [Enter]キーを押す([自動的にアップデートしない]選択済み)
f:id:ono51:20120502012048p:image:w480

27. [Enter]キーを押す。
最小構成とはいえ[OpenSSH server]ぐらいは[スペース]キーを押してチェックをつけてもいいかも。
f:id:ono51:20120501112450p:image:w480

28. [Enter]キーを押す(<はい>選択済み)
f:id:ono51:20120501112451p:image:w480

29. [Enter]キーを押す(<続ける>選択済み)
f:id:ono51:20120501112452p:image:w480

30. ログイン画面
f:id:ono51:20120501112453p:image:w480

最小構成での、Ubuntu Server 12.04 LTS インストール完了です。




2011年12月19日月曜日

CentOS 6.1でまだまだLAMP環境 PHP 5.3.8 インストール編



LAMPの「P」は、Perl、PHP、Pythonと様々なプログラミング言語ですが、今回はPHPをインストールします。
(これまでのインストールしたものは、CentOS 6.1Apache HTTP Server 2.2.21MySQL 5.5.19です。)
もうすぐバージョン5.4もリリースされそうですが、まだRC3なので安定板の最新バージョンである5.3.8をインストールします。ちなみにバージョン5.3.7のバグは、PHP界隈で今年の重大ニュースに入るのような・・・。

今回のphpインストール手順と同じ処理を行うバッチを作成しました。
管理者権限があれば次の1行でインストールできます。
ご使用になられた場合の損害は一切責任を負いませんのでご了承ください。


PHP 5.3.8 インストール(apc, xdebugなどの追加モジュールは含まず)
curl http://dl.dropbox.com/u/30648910/install/php/php.sh | env PHP_VERSION=5.3.8 sh



必要なモジュールのインストール




cd /usr/local/src
curl -L -o rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -i rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

yum install \
flex.x86_64 \
gd-devel.x86_64 \
libxml2-devel.x86_64 \
gettext-devel.x86_64 \
libxslt-devel.x86_64 \
libcurl-devel.x86_64 \
libtool-ltdl-devel.x86_64 \
re2c.x86_64 \
libmcrypt-devel.x86_64

ln -s /usr/local/mysql/lib /usr/local/mysql/lib64
ldconfig



ソースコードからPHP 5.3.8をインストールする




オプションはいろいろ付けてます。
開発環境ならいろいろ入れた方がよいかと思います。
本番環境では、必要なもの以外は除去してビルドするのがよいでしょう。
しかし、最近のサーバはメモリー容量も多いので、後で使うかも?とか、汎用的なサーバにしたいとか、開発環境と同じオプションでなければテストにならない!という心配性の方は、同じオプションでよいと思います。
ただし、AWS EC2(small,micro)やVPSのようなメモリーが少ない環境では、使うのもだけ付けるのがよいのは言うまでもありません。あとはお好みで。

cd /usr/local/src
curl -L -o php-5.3.8.tar.gz http://jp2.php.net/get/php-5.3.8.tar.gz/from/jp.php.net/mirror
tar zxfv php-5.3.8.tar.gz
cd php-5.3.8
./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/apache2/bin/apxs \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--with-libdir=lib64 \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql \
--with-gd \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-xpm-dir=/usr \
--with-libxml-dir=/usr \
--with-freetype-dir=/usr \
--with-gettext \
--with-zlib \
--with-openssl \
--with-mcrypt \
--with-xsl \
--with-curl \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--enable-exif \
--enable-soap \
--enable-sockets \
--enable-zip

make
make install

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



パスの追加





  • bashの場合

echo "PATH=\$PATH:/usr/local/php/bin" >> $HOME/.bashrc
source $HOME/.bahrc


  • zshの場合

echo "PATH=\$PATH:/usr/local/php/bin" >> $HOME/.zshrc
source $HOME/.zshrc



コマンドでバージョンや設定を確認する





  • バージョン情報

php -v


PHP 5.3.8 (cli) (built: Dec 19 2011 12:34:56)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies



  • 設定情報

php -i | grep iconv


Registered Stream Filters => zlib.*, convert.iconv.*, mcrypt.*, mdecrypt.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk
iconv
iconv support => enabled
iconv implementation => glibc
iconv library version => 2.12
iconv.input_encoding => ISO-8859-1 => ISO-8859-1
iconv.internal_encoding => ISO-8859-1 => ISO-8859-1
iconv.output_encoding => ISO-8859-1 => ISO-8859-1




ライブラリーや拡張モジュールのインストール


PHPでは、pear、peclコマンドを使用して標準ライブラリーや拡張モジュールをインストールします。
いくつかインストールしてみます。



  • apc (PHPアクセラレータ)

pecl install apc
デフォルトのまま[Enter]キーを押しつづければインストールできます。


  • xdebug (デバッグ用エクステンション)

pecl install xdebug


  • php.iniの修正

これらの拡張モジュールを有効にするには、php.iniに設定を追記します。

上記2つのモジュールを有効にする場合
vi /usr/local/php/lib/php.ini
extension=apc.so
extension=xdebug.so

php.iniを書き換えて保存したらapacheを再起動します。
/usr/local/apache2/bin/apachectl graceful


  • pearのアップグレード

pear upgrade PEAR
pear upgrade-all


  • Net_IPv4のインストール

pear install Net_IPv4




apacheの設定例




ここでは、VirtualHostに追加する場合の例です。
<VirtualHost *>
 ServerName www.example.com

 DocumentRoot /path/to/example/htdocs
 DirectoryIndex index.php index.html

 ErrorLog  "|/usr/local/sbin/cronolog /usr/local/apache2/logs/example/error_log.%Y-%m-%d"
 CustomLog "/usr/local/apache2/logs/example/access_log.%Y-%m-%d" combined

 <FilesMatch \.php$>
  SetHandler application/x-httpd-php
 </FilesMatch>

 <Directory /path/to/example/htdocs>
  Order Deny,Allow
  Deny from all
  Allow from all
      Options All -Indexes
 </Directory>
</VirtualHost>




インストールされるモジュール




freetype-2.3.11-6.el6_1.8.x86_64
fontconfig-2.8.0-3.el6.x86_64
libjpeg-6b-46.el6.x86_64
libpng-1.2.46-1.el6_1.x86_64
libICE-1.0.6-1.el6.x86_64
xorg-x11-proto-devel-7.4-35.el6.noarch
libSM-1.1.0-7.1.el6.x86_64
libtiff-3.9.4-1.el6_0.3.x86_64
freetype-devel-2.3.11-6.el6_1.8.x86_64
libXau-1.0.5-1.el6.x86_64
libxcb-1.5-1.el6.x86_64
libXau-devel-1.0.5-1.el6.x86_64
atk-1.28.0-2.el6.x86_64
libxcb-devel-1.5-1.el6.x86_64
fontconfig-devel-2.8.0-3.el6.x86_64
libpng-devel-1.2.46-1.el6_1.x86_64
libjpeg-devel-6b-46.el6.x86_64
jasper-libs-1.900.1-15.el6.x86_64
cvs-1.11.23-11.el6_0.1.x86_64
gettext-0.17-16.el6.x86_64
hicolor-icon-theme-0.11-1.1.el6.noarch
avahi-libs-0.6.25-11.el6.x86_64
gettext-libs-0.17-16.el6.x86_64
libtasn1-2.3-3.el6.x86_64
gnutls-2.8.5-4.el6.x86_64
cups-libs-1.4.2-39.el6_1.1.x86_64
libgpg-error-devel-1.7-3.el6.x86_64
libgcrypt-devel-1.4.5-5.el6_1.2.x86_64
alsa-lib-1.0.21-3.el6.x86_64
pixman-0.18.4-1.el6_0.1.x86_64
libXdmcp-1.0.3-1.el6.x86_64
libXdmcp-devel-1.0.3-1.el6.x86_64
libthai-0.1.12-3.el6.x86_64
libmcrypt-2.5.7-1.2.el6.rf.x86_64
zip-3.0-1.el6.x86_64
libart_lgpl-2.3.20-5.1.el6.x86_64
libxslt-1.1.26-2.el6.x86_64
libxml2-devel-2.7.6-1.el6.x86_64
libX11-common-1.3-2.el6.noarch
libX11-1.3-2.el6.x86_64
libXext-1.1-3.el6.x86_64
libXrender-0.9.5-1.el6.x86_64
libXfixes-4.0.4-1.el6.x86_64
cairo-1.8.8-3.1.el6.x86_64
libXrandr-1.3.0-4.el6.x86_64
libXi-1.3-3.el6.x86_64
libXpm-3.5.8-2.el6.x86_64
libX11-devel-1.3-2.el6.x86_64
gd-2.0.35-10.el6.x86_64
libXtst-1.0.99.2-3.el6.x86_64
libXcomposite-0.4.1-2.el6.x86_64
libXcursor-1.1.10-2.el6.x86_64
libXdamage-1.1.2-1.el6.x86_64
libXft-2.1.13-4.1.el6.x86_64
pango-1.28.1-3.el6_0.centos.5.x86_64
libXinerama-1.1-1.el6.x86_64
gtk2-2.18.9-6.el6.centos.x86_64
libgcj-4.4.5-6.el6.x86_64
libXt-1.0.7-1.el6.x86_64
libXpm-devel-3.5.8-2.el6.x86_64
gd-devel-2.0.35-10.el6.x86_64
gettext-devel-0.17-16.el6.x86_64
libxslt-devel-1.1.26-2.el6.x86_64
libmcrypt-devel-2.5.7-1.2.el6.rf.x86_64
re2c-0.13.5-1.el6.rf.x86_64
flex-2.5.35-8.el6.x86_64
libidn-devel-1.18-2.el6.x86_64
libcurl-devel-7.19.7-26.el6_1.2.x86_64
libtool-ltdl-2.2.6-15.5.el6.x86_64
libtool-ltdl-devel-2.2.6-15.5.el6.x86_64


Linux(CentOS)、Apache、MySQL、PHPのインストールが完了してLAMP構成となりました。
情報閲覧系のサイトならピュアPHPでもある程度作れる環境になったと思います。

ソースコードでインストールするといろいろなオプションがあることに気づくと思います。
また、1つではなく複合的な技術で成り立っているのもよくわかるのではないでしょうか。
実は、全部yumだけでインストール可能なんですが、あえてやらない方が仕様とか理解が深まりますね。




2011年12月16日金曜日

CentOS 6.1でまだまだLAMP環境 Apache HTTP Server 2.2.21 インストール編



新しいサービスなどではWebサーバにNginxが使われることが多くなってきた感じがますが、
既存のサービスでは、まだまだapacheが使われていることが多いと思います。
何が使われているかを調べるには、curlコマンドが便利です。
気になるサイトを調べてみてはいかがでしょうか。
はてなダイアリーとはてなブログでも違うようですね。



  • はてなダイアリー

curl -s -I http://d.hatena.ne.jp/ | grep "^Server"
Server: Apache


  • はてなブログ

curl -s -I http://hatenablog.com/ | grep "^Server"
Server: nginx/1.0.3

※オプション(-I)は、半角英字大文字のアイです。


それでは、前々回(CentOS 6.1)、前回(MySQL 5.5.19)、に引き続きApache HTTP Server 2.2.21をインストールします。

今回のapacheインストール手順と同じ処理を行うバッチを作成しました。
管理者権限があれば次の1行でインストールできます。
ご使用になられた場合の損害は一切責任を負いませんのでご了承ください。
Apache HTTP Server 2.2.21(WebDAV,Proxy関連のオプションは含まれません)
curl http://dl.dropbox.com/u/30648910/install/apache/apache.sh | env APACHE_VERSION=2.2.21 sh

cronolog 1.6.2
curl http://dl.dropbox.com/u/30648910/install/cronolog.sh | sh


必要なモジュールのインストール




yum -y install \
make.x86_64 \
gcc.x86_64 \
gcc-c++.x86_64 \
libtool.x86_64 \
autoconf.noarch \
perl.x86_64 \
openssl.x86_64 \
openssl-devel.x86_64



ソースコードからapache 2.2.21をインストール




cd /usr/local/src
curl -L -o httpd-2.2.21.tar.gz http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.2.21.tar.gz
tar zxfv httpd-2.2.21.tar.gz
cd httpd-2.2.21

追加するオプションはいろいろあるので一例です。

./configure --prefix=/usr/local/apache2 \
--enable-cache \
--enable-disk-cache \
--enable-mem-cache \
--enable-logio \
--enable-headers \
--enable-ssl \
--enable-rewrite \
--enable-so

make
make install



  • gitやsubversionのリポジトリをWebDAV経由で公開したい場合

--enable-dav
--enable-dav-fs
--enable-dav-lock


  • プロキシーサーバの機能を追加したい場合(必要に応じて追加するモジュールを選択)

--enable-proxy
--enable-proxy-connect
--enable-proxy-ftp
--enable-proxy-http
--enable-proxy-scgi
--enable-proxy-ajp
--enable-proxy-balancer



他にもいろいろな拡張モジュールがあるので、気になるのもは試してください。
http://httpd.apache.org/docs/2.2/ja/mod/




apache再起動無しで、ログファイルの日毎自動ローテート




apacheの標準でもrotatelogsがありますが、
日毎(毎日0時0分)にapacheの再起動無しでローテートしたいので、
次の2つをインストールします。


  • mod_log_rotateのインストール


mkdir /usr/local/src/mod_log_rotate
cd /usr/local/src/mod_log_rotate
curl -o mod_log_rotate.c http://hexten.net/assets/apache2/mod_log_rotate.c
/usr/local/apache2/bin/apxs -i -a -c mod_log_rotate.c



  • cronologのインストール


cd /usr/local/src
curl -L -o cronolog-1.6.2.tar.gz http://cronolog.org/download/cronolog-1.6.2.tar.gz
tar zxfv cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure
make
make install



自動ローテートの設定例




  • mod_log_rotateを有効化(httpd.confに追記)


RotateLogs On
RotateLogsLocalTime On



  • http.confやvirtualhostディレクティブでログファイルの設定をします。


CustomLog "/usr/local/apache2/logs/access_log.%Y-%m-%d" combined
ErrorLog "|/usr/local/sbin/cronolog /usr/local/apache2/logs/error_log.%Y-%m-%d"




yumインストール時に追加されたモジュール




keyutils-libs-devel-1.4-1.el6.x86_64
libsepol-devel-2.0.41-3.el6.x86_64
libselinux-devel-2.0.94-5.el6.x86_64
zlib-devel-1.2.3-26.el6.x86_64
libcom_err-devel-1.41.12-7.el6.x86_64
krb5-devel-1.9-9.el6_1.2.x86_64
openssl-devel-1.0.0-10.el6_1.5.x86_64



次回は、PHPのインストールを予定しています。




2011年12月11日日曜日

CentOS 6.1でまだまだLAMP環境 OSインストール編



Webサービスを構築するソフトウェアは、LAMP(Linux, Apache, MySQL, Perl or PHP or Python)がよく使われていますが、最近は、LAMP以外のプログラミング言語、データベース、KVS、キャッシュなどの様々な技術を用いることも多くなり、ここ数年で選択肢がかなり広がった印象があります。

nginxやnode.jsのように、イベント駆動やノンブロキッキングの処理に注目があつまっていたり、
HTML5を用いたリアルタイムWebなど新しい技術なしでは実装が難しいというのも理由かもしれません。

そんな状況で、LAMPという言葉自体はもう古いものですが、中身は古くなったというよりは、安定してかつ新しい機能やライブラリーも増えてより便利になったという印象です。また、他が注目されているとはいえ、まだまだ多くのWebサービスを支えている技術はLAMPであるのもまた事実です。これまでのノウハウが活用できるというのもメリットですぐにやめられない理由の1つだと思います。

そんな当たり前の技術となったLAMPですが、CentOS 6.1がリリースされたタイミングなので、
最近のバージョンで、LAMP構成のサーバを作成してみようと思います。
これからWebエンジニアを目指す人でも、クラウドの時代でも、最低限知っておいて損はないと思います。

まずは、CentOS 6.1のインストールから


  • CentOS 6.1 インストール事前準備

  • CentOS 6.1 インストール(最小構成)

  • よく使うコマンドのインストールと環境構築

  • sshの鍵作成

  • LAN以外からの22番ポート(ssh)へアクセスを不可にする

  • この手順でインストールしたモジュール(依存関係も含む)




CentOS 6.1 インストール事前準備



▼ファイルをダウンロードする
http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.1/isos/x86_64/CentOS-6.1-x86_64-bin-DVD1.iso
http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.1/isos/x86_64/CentOS-6.1-x86_64-bin-DVD2.iso
※以下の作業で必要なのは、CentOS-6.1-x86_64-bin-DVD1.isoのみ

▼ダウンロードしたファイルをDVD-Rに焼く
Macの場合は、標準のディスクユーティリティで作成可能
1. [アプリケーション]→[ユーティリティ]→[ディスクユーティリ]を開く
2. [ディスクを作成]をクリック
3. ダウンロードした[CentOS-6.1-x86_64-bin-DVD1.iso]を選択して[ディスクを作成]ボタンをクリック
4. DVD-Rをセットする
5. [ディスクを作成]ボタンをクリック

しばらく待てばできあがり。
必要であれば、[CentOS-6.1-x86_64-bin-DVD2.iso]も同様の手順で焼く



CentOS 6.1 インストール(最小構成)




▼インストールメディアから起動
1. サーバ電源ON
2. 先ほど焼いたメディア(DVD)をサーバにセットする
3. DVDから起動したら[Enter]キーを押す
※DVDで起動しない場合は、BIOSの設定変更が必要

4. Install or upgrade an existing systemを選択して[Enter]キーを押す
5. [SKIP]を選択して[Enter]キーを押す
※事前にDVDをチェック済みなので。メディアをチェックしたい場合はそのまま[OK]をクリック
6. [Next]を選択してクリック

▼インストールする言語の選択
7. [Japanese]を選択して[Next]をクリック
8. [日本語]を選択して[次へ]をクリック

▼インストールするストレージデバイスの選択
9. [基本ストレージデバイス]を選択して[次へ]をクリック
10. [新規インストール]を選択して[次へ]をクリック

▼ホスト名の設定(適宜変更してください)
11. ホスト名を入力して同じ画面の[ネットワークの設定]をクリック
例 sv.example.local

▼ネットワークの設定(適宜変更してください)
12. [有線]タブの[System eth0]を選択して[編集...]ボタンをクリック
13. [自動接続する]にチェックをつける

サーバ用途なのであまりないと思いますが、[DHCP]を使用する場合は14-16の手順は不要

14. [IPv4のセッティング]タブをクリックする
15. 方式を[自動(DHCP)]から[手動]に変更する
16. [追加]ボタンをクリックして次の項目を入力する


設定例 (環境にあわせて変更してください)
アドレス : 192.168.1.100
ネットマスク : 24 (または255.255.255.0)
ゲートウェイ : 192.168.1.1
DNSサーバ : 8.8.8.8 (例 Google Public DNS)
ドメインを検索:example.local


17. [適用]ボタンをクリック
18. [閉じる]ボタンをクリック
19. [次へ]をクリック

▼時間の設定(適宜変更してください)
20. [アジア/東京]を選択する
21. [システムクロックでUTCを使用]のチェックを外す
22. [次へ]をクリック

▼管理者パスワードの設定
23. [rootのパスワードと[確認]にパスワードを入力する
24. [次へ]をクリック

▼ディスク構成(適宜変更してください)
25. [すべての領域を使用する]を選択する
26. [パーティションのレイアウトをレビューまたは修正]を選択する
27. [次へ]をクリック
28. [lv_home]を選択して[削除]ボタンをクリック
29. [削除]ボタンをクリック
30. [lv_root]を選択して[編集]をクリック
31. サイズにし最大値を入力して[OK]ボタンをクリック
32. [次へ]ボタンをクリック
33. [変更をディスクに書き込む]ボタンをクリック
34. [次へ]をクリック

▼インストールオプションの選択(最小構成)
35. [Minimal]を選択して[次へ]をクリック
36. インストールが完了したら[再起動]ボタンをクリックする



よく使うコマンドのインストールと環境構築




ここからは外部(インターネットなど)からこのサーバへアクセスできない環境での作業を前提とする
▼セットアップ
ここからはリモートで作業する
ssh root@192.168.1.100
管理者用パスワードを入力してログインする

▼モジュールアップデート


yum -y update


▼SELinuxの無効化


setenforce 0

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

完全に無効化するには再起動が必要
reboot

再起動後にgetenforceコマンドでDisabledと表示されればOK


▼シェルをzshに変更する(zsh好きなら)


yum -y install zsh
chsh -s /bin/zsh

変更可能なシェル確認
chsh --list-shells


▼コピー関連コマンド(rsync, scp)のインストール


yum -y install \
rsync.x86_64 \
openssh-clients.x86_64


▼圧縮・解凍関連コマンド(unzip)のインストール


yum -y install \
unzip.x86_64


▼ネットワーク関連コマンド(dig, nslookup, whois, traceroute, tcpdump, telnet)のインストール


yum -y install \
bind-utils.x86_64 \
jwhois.x86_64 \
traceroute.x86_64 \
tcpdump.x86_64 \
telnet.x86_64


▼ソースのコンパイルに使用するモジュールのインストール


yum -y install \
autoconf.noarch \
automake.noarch \
cmake.x86_64 \
gcc.x86_64 \
gcc-c++.x86_64 \
make.x86_64 \
libtool.x86_64


あとはお好みで追加する。 wgetとか



sshの鍵作成




1. ssh-keygenコマンドを実行する
ssh-keygen -t rsa

下記のメッセージが表示される
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): [Enterキーを押す]
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): [パスフレーズを入力してEnterキーを押す]
Enter same passphrase again: [再度パスフレーズを入力してEnterキーを押す]
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

秘密鍵 : /root/.ssh/id_rsa
公開鍵 : /root/.ssh/id_rsa.pub

※scpコマンドなどで秘密鍵をリモートアクセスするPCに保存します。

3. 公開鍵authorized_keysに登録する
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

4. アクセス権を変更する
chmod -R 700 $HOME/.ssh
chmod -R 600 $HOME/.ssh/*

5. 鍵のみの認証に変更(パスワード認証を許可しない)
vi /etc/ssh/sshd_config
PasswordAuthentication no

6. sshdを再起動する
/etc/init.d/sshd restart

以後、秘密鍵を使用してログインします。



LAN以外からの22番ポート(ssh)へアクセスを不可にする




vi /etc/sysconfig/iptables

次のように修正して保存する
修正前
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

修正後
-A INPUT -s 192.168.1.0/24 -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

iptablesを再起動する
/etc/init.d/iptables restart



この手順でインストールしたモジュール(依存関係も含む)




▼シェルをzshに変更する(zsh好きなら)


  • zsh-4.3.10-4.1.el6.x86_64



▼コピー関連コマンド(rsync, scp)のインストール


  • libedit-2.11-4.20080712cvs.1.el6.x86_64

  • openssh-clients-5.3p1-52.el6_1.2.x86_64

  • rsync-3.0.6-5.el6_0.1.x86_64



▼圧縮・解凍関連コマンド(unzip)のインストール


  • unzip-6.0-1.el6.x86_64



▼ネットワーク関連コマンド(dig, nslookup, whois, traceroute, tcpdump, telnet)のインストール


  • libpcap-1.0.0-6.20091201git117cb5.el6.x86_64

  • bind-libs-9.7.3-2.el6_1.P3.3.x86_64

  • bind-utils-9.7.3-2.el6_1.P3.3.x86_64

  • tcpdump-4.0.0-3.20090921gitdf3cb4.1.el6.x86_64

  • traceroute-2.0.14-2.el6.x86_64

  • jwhois-4.0-19.el6.x86_64

  • telnet-0.17-47.el6.x86_64

▼ソースのコンパイルに使用するモジュールのインストール


  • xmlrpc-c-1.16.24-1200.1840.el6_1.4.x86_64

  • mpfr-2.4.1-6.el6.x86_64

  • cpp-4.4.5-6.el6.x86_64

  • xmlrpc-c-client-1.16.24-1200.1840.el6_1.4.x86_64

  • perl-Pod-Escapes-1.04-119.el6_1.1.x86_64

  • perl-libs-5.10.1-119.el6_1.1.x86_64

  • perl-Pod-Simple-3.13-119.el6_1.1.x86_64

  • perl-Module-Pluggable-3.90-119.el6_1.1.x86_64

  • perl-version-0.77-119.el6_1.1.x86_64

  • perl-5.10.1-119.el6_1.1.x86_64

  • autoconf-2.63-5.1.el6.noarch

  • automake-1.11.1-1.2.el6.noarch

  • libgomp-4.4.5-6.el6.x86_64

  • kernel-headers-2.6.32-131.21.1.el6.x86_64

  • glibc-headers-2.12-1.25.el6_1.3.x86_64

  • glibc-devel-2.12-1.25.el6_1.3.x86_64

  • ppl-0.10.2-11.el6.x86_64

  • cloog-ppl-0.15.7-1.2.el6.x86_64

  • gcc-4.4.5-6.el6.x86_64

  • libstdc++-devel-4.4.5-6.el6.x86_64

  • gcc-c++-4.4.5-6.el6.x86_64

  • libtool-2.2.6-15.5.el6.x86_64

  • cmake-2.6.4-5.el6.x86_64

  • make-3.81-19.el6.x86_64



次回は、MySQLをインストールします。




2011年11月12日土曜日

CentOS 6.1でまだまだLAMP環境 MySQL 5.5.19 インストール編



前回のCentOS 6.1のインストールに引き続き、
MySQL 5.5.19をインストールします。

今回のインストール手順と同じ処理を行うバッチを作成しました。
管理者権限があれば次の1行でインストールできます。
ご使用になられた場合の損害は一切責任を負いませんのでご了承ください。

curl http://dl.dropbox.com/u/30648910/install/mysql/mysql.sh | env MYSQL_VERSION=5.5.19 sh



MySQL 5.5.19をソースコードからインストール




▼インストールに必要なモジュール


yum -y install \
make.x86_64 \
cmake.x86_64 \
gcc.x86_64 \
gcc-c++.x86_64 \
ncurses.x86_64 \
ncurses-devel.x86_64 \
bison.x86_64 \
libaio-devel.x86_64

libaio-devel.x86_64を追加(2012/4/12)



▼mysqlアカウント追加


groupadd mysql
useradd -d /home/mysql -g mysql -r -s /sbin/nologin mysql


▼既存のファイルをリネーム


mv /etc/my.cnf /etc/my.cnf.bak
mv /usr/lib64/mysql /usr/lib64/mysql_bak


▼ソースコードをダウンロードして解凍


cd /usr/local/src
curl -o mysql-5.5.19.tar.gz http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.5/mysql-5.5.19.tar.gz
tar zxfv mysql-5.5.19.tar.gz
cd mysql-5.5.19


▼ビルドしてインストール(utf8mb4をDEFAULT_CHARSET)


cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
make
make install


▼MySQL初期化


mkdir /usr/local/mysql/etc
cd /usr/local/mysql
chown -R mysql:mysql .
./scripts/mysql_install_db --user=mysql --skip-name-resolve


▼my.cnf設置


cp /usr/local/src/mysql-5.5.19/support-files/my-medium.cnf /usr/local/mysql/etc/my.cnf
chown -R root .
chown -R mysql:mysql /usr/local/mysql/data
ln -s /usr/local/mysql/lib /usr/lib64/mysql
ldconfig


▼MySQL起動、停止、再起動


起動
/usr/local/mysql/support-files/mysql.server start
停止
/usr/local/mysql/support-files/mysql.server stop
再起動
/usr/local/mysql/support-files/mysql.server restart


▼パスの設定


bashの場合
vi $HOME/.bashrc
zshの場合
vi $HOME/.zshrc

次の2行を追記して保存する
PATH=$PATH:/usr/local/mysql/bin
export PATH

bashの場合
source $HOME/.bashrc

zshの場合
source $HOME/.zshrc
rehash

MySQLクライアントを起動して確認する
mysql


▼依存関係も含めインストールされるモジュール


make-3.81-19.el6.x86_64
cmake-2.6.4-5.el6.x86_64
gcc-4.4.5-6.el6.x86_64
gcc-c++-4.4.5-6.el6.x86_64
ncurses-5.7-3.20090208.el6.x86_64
pkgconfig-0.23-9.1.el6.x86_64
ncurses-devel-5.7-3.20090208.el6.x86_64
bison-2.4.1-5.el6.x86_64





2011年10月31日月曜日

東京node学園祭2011開催記念 node.jsのインストール(CentOS6.0 zsh環境)



東京node学園祭2011は、かつてない刺激的な1日で、
ものを作る人にとってすごくやる気のでる良い一日となったわけで、
その勢いで何か始めたいわけで・・・と思った人は多いはず!

関心があったけど、当日会場にこれなかった人にはぜひニコ動で見てはいかがでしょうか。
特にSocket.IOの作者Guillermo Rauch氏のライブコーディングは必見です。
もちろん他にも、基調講演(@ryahさん)、LiveCoding for beginner(@jxck_さん)やLTなどみどころ満載です。


東京node学園祭2011の資料


  • 基調講演 (@ryahさん)

http://nodejs.org/nodefest2011.pdf


  • LiveCoding for beginner (@jxck_さん)

http://www.slideshare.net/Jxck/nodefest2011live


  • 全部 coffee でスマートフォンアプリを作る (@naoya_itoさん)

http://speakerdeck.com/u/naoya/p/using-only-coffeescript-to-build-an-smartphone-application

【生中継】東京Node学園祭2011~サーバサイドJavaScriptプラットフォーム、Node.js開発者が語る (番組ID:lv68521775)
http://live.nicovideo.jp/watch/lv68521775?ref=ser
※ただし、プレミアム会員のみ2011/11/05(土) 23:59まで視聴可能


早速node.jsのインストールを!


  • nvmを使用したnode.jsのインストール(CentOS6.0 zsh環境)


ここでは、zsh環境+グローバル(root)でのインストール手順となるので、
標準的なインストール方法とは異なります。
標準的なnvmでのnode.jsインストールは次のURLを参照してください。
https://github.com/creationix/nvm/blob/master/README.markdown

▼nvmのインストール用シェルはzshでは動作しないでの一時的にbash切り替え
bash
git clone git://github.com/creationix/nvm.git /usr/local/nvm
source /usr/local/nvm/nvm.sh

▼安定板v0.4.12と最新版v0.5.10をインストールする
nvm install v0.4.12
nvm install v0.5.10

▼bashから抜ける
exit

▼nodeを起動するユーザーの環境変数を追加して保存する。
vi ~/.zshrc
NODE_VERSION='v0.5.10'
PATH=$PATH:/usr/local/nvm/$NODE_VERSION/bin
NODE_PATH=/usr/local/nvm/$NODE_VERSION:/usr/local/nvm/$NODE_VERSION/lib/node_modules
export PATH NODE_PATH

source ~/.zshrc

nvm useを使わないためパス固定で少し不便なので、
バージョン※の切り替えは変数NODE_VERSIONを書き換えで行う。

▼ライブラリのインストール
npm install -g express ejs socket.io cluster connect-memcached mysql mongodb canvas


node.jsのライブラリまとめサイト
http://toolbox.no.de/


※2011/10/30現在の最新版はv0.5.10、安定板はv0.4.12。
年内には安定板のv0.6が出るらしい。


東京node学園祭2011は、クリエイティブな刺激満載のエキサイティングな場であったと思います。
本当は、後夜祭で直接お礼を申し上げるべきなのですが、
諸事情により参加できませんでした。
学園祭 実行委員長の@mesoさんお疲れさまでした。
また、携わった皆様にすべてに感謝したいと思います。
ありがとうございました!




2011年10月23日日曜日

secureログに出力されるpam_fprintd.so



sudoコマンド実行すると下記のログ(/var/log/secure)が出力されるようになった。


CentOS6.0 /var/log/secure
Oct 22 22:58:09 [hostname] sudo: PAM adding faulty module: /lib64/security/pam_fprintd.so
Oct 22 22:58:14 [hostname] su: PAM unable to dlopen(/lib64/security/pam_fprintd.so): /lib64/security/pam_fprintd.so: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません


見慣れないログだが、
pma_frintd.soがないのかなと思い次のコマンドでインストールしたところ直った。

yum install fprintd-pam.x86_64

インストールしてしまった後に調べたところ、
どうも次のコマンドで直るらしいが、こちらは試していない。

authconfig --disablefingerprint --update

参考
https://bugzilla.redhat.com/show_bug.cgi?id=505266#c9

同じ症状っぽいからこれが原因かも。
https://bugzilla.redhat.com/show_bug.cgi?id=505266#c4
minimalインストールするときにこのパッケージが含まれないバグなのかな?




2011年10月22日土曜日

daemontoolsのliteな使い方 (起動・停止・削除・インストール)

たまに忘れるのでdaemontools関連情報をまとめてみた。
  • デーモンの起動・停止・削除コマンド
  • runファイルの作成
  • daemontoolsインストール(CentOS6.0)

参考

http://cr.yp.to/daemontools.html


デーモンの起動・停止・削除・確認コマンド

デーモン起動

svc -u /service/job_name

デーモン停止

svc -d /service/job_name

デーモンの削除

1. プロセス停止
svc -d /service/job_name

2. シンボリックリンク修正
mv /service/job_name /service/.job_name

3. superviseの停止
svc -x /service/.job_name

4. シンボリックリンク削除
rm -f /service/.job_name

デーモンの起動確認

svstat /service/job_name
次のようにpidと起動時間が表示される
/service/job_name: up (pid 1247) 2530292 seconds
サービスの起動に失敗している場合は、起動時間が0を繰り返すことがある


runファイル(起動スクリプト)

1. runファイルを作成する

例 runファイルのパス
/path/to/daemon/job_name/run
環境に応じて環境変数や必要なコマンドを追加してください。
runファイルの内容
#!/bin/sh

PATH=/usr/local/bin:/usr/bin:/bin
export PATH

sleep 1
exec env - PATH=$PATH \
/path/to/script/job_name.pl 2>&1

2. daemontoolへの登録

runファイルのあるディレクトリへのシンボリックリンクの作成
ln -s /path/to/daemon/job_name /service/job_name


daemontoolsインストール

mkdir -p /package
chmod 1755 /package
cd /usr/local/src
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
wget http://dl.dropbox.com/u/30648910/patch/daemontools/daemontools-0.76.errno.patch
cd /package
gzip -dc /usr/local/src/daemontools-0.76.tar.gz | tar xvf -
cd /package/admin/daemontools-0.76
patch -p1 < /usr/local/src/daemontools-0.76.errno.patch
./package/install

CentOS6.0の場合

vi /etc/inittab
次の1行をコメントアウトして保存
#SV:123456:respawn:/command/svscanboot

svscan.confを作成して保存

vi /etc/init/svscan.conf
start on runlevel [12345]
respawn
exec /command/svscanboot

次のコマンドでsvscanを起動する

initctl reload-configuration
initctl start svscan

2011年10月21日金曜日

CentOS 6.0のデフォルトパーティション



1TBのHDDにCentOS6.0をデフォルトでインストールしたところ、
/homeにほとんど割り当てられた。
抜かった・・・。
/home大好きなんだね。









FilesystemSizeUsedAvailUse%マウント位置
/dev/mapper/vg_sv1-lv_root50G13G35G27%/
tmpfs3.9G03.9G0%/dev/shm
/dev/sda1485M29M431M7%/boot
/dev/mapper/vg_sv1-lv_home858G200M814G1%/home




2011年10月20日木曜日

KyotoTycoon + KyotoCabinetのベンチマーク



KyotoTycoonが以前からすごく気になっていたのですが、
次の開発で導入すべく動作検証してみました。

まずは、KyotoTycoon + KyotoCabinet の気になるところを紹介すると。



  • DBがキャッシュ、B+ツリー、ハッシュなど選べる

  • ホットバックアップ

  • 非同期レプリケーション

  • デュアルマスタ

  • スナップショット これいいかも。lzo圧縮も効く。リカバリー用にも使える。

  • プラグインでmemcachedプロトコルが使える

  • lua拡張も使えるので、やろうと思えばなんでもあり。

  • noreplyを使うと何倍も速くなるらしい。

  • writebackで書き込むと何倍も速くなるらしい。

ブログがとても参考になります。
http://fallabs.com/blog-ja/promenade.cgi


テスト環境(DELL PowerEdge R200改)








CPUIntel Xeon CPU X3360 2.83GHz (4core)
メモリ8GB
HDD1TB (Hitachi HDT721010SLA360)
OSCentOS 6.0 (2.6.32-71.29.1.el6.x86_64)

KyotoCabinetインストール


yum install lzo-devel lzma-devel xz-devel
cd /usr/local/src
wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.70.tar.gz
tar zxfv kyotocabinet-1.2.70.tar.gz
cd kyotocabinet-1.2.70
./configure --prefix=/usr/local/kyotocabinet --enable-lzo --enable-lzma
make
make install
echo /usr/local/kyotocabinet/lib > /etc/ld.so.conf.d/kyotocabinet.conf
ldconfig


KyotoTycoonインストール


yum install lua-devel.x86_64
cd /usr/local/src
wget http://fallabs.com/kyototycoon/pkg/kyototycoon-0.9.51.tar.gz
tar zxfv kyototycoon-0.9.51.tar.gz
cd kyototycoon-0.9.51
./configure --prefix=/usr/local/kyototycoon --with-kc=/usr/local/kyotocabinet --enable-lua
make
make install
echo /usr/local/kyototycoon/lib > /etc/ld.so.conf.d/kyototycoon.conf
ldconfig


ktserver起動オプション


ktserver \
-port 11311 \
-tout 10 \
-th 16 \
-log /var/kt/log/ktserver.log -ls \
-ulog /var/kt/log/ulog -ulim 256m \
-sid 1 \
-bgs /var/kt/snapshot -bgsi 180 -bgsc lzo \
-pid /var/kt/log/kt.pid \
-cmd /var/kt/bin \
-plsv /usr/local/kyototycoon/libexec/ktplugservmemc.so \
-plex "port=11312#opts=f#tout=10" \
"/var/kt/db/casket.kch#opts=l#bnum=20000000#msiz=8g#dfunit=8"


性能評価は、使い慣れたPerlではなくあえてPHP。
daemontoolsでktserverを起動し、次のバッチを実行した。
PHPソースコード
<?php
$data = array(
    'name' => 'testname',
    'testdata' => 
        array(1,2,3,4,5,6,7,8,9,0,'abcdefghijklmnopqrstuvwxyz',
            'userid' => 'testuserid',
            'entry' => '2011-10-20 12:00:00'
        )
    );
$mem = new Memcached();
$mem->addServer('localhost',11312);
for ($i = 0; $i < 10000000; $i++) {
   $guid = md5(uniqid(mt_rand(),true)); 
   $guid = substr($guid,0,21);
   $mem->set($guid, $data);
}
※pecl memcached 2.0.0b2 (libmemcached 0.53)を使用。
perlならCache::Memcached::Fastで試しますね。

ベンチマーク結果




  • setの結果(1000万件登録)








使用メモリ2.0g
ファイルサイズ2.0g
スナップショット227M
性能12300qps


  • getの結果





性能15000qps

バッチ実行時はloadavgは常時1以下でかなり快適です。
チューニングの余地があるんでしょうが、
本番環境では常に負荷が低い方がよいこともあり、このままでも十分かも。
また、スナップショットのファイルサイズに感動ですね。
バックアップとか助かります。




2011年10月17日月曜日

CentOS 6.0 で daemontoolsが起動しない・・・、upstartでした



CentOS6では、daemontoolsの起動方法がupstartに変更になっていたのでメモ。

インストール直後は、svscanも起動せずsvcコマンドでエラーが出た。


svc -u /service/qmail
svc: warning: unable to control /service/qmail: file does not exist


しかし、svscanを直打ちすると起動するのでインストールは問題なさそう。


svscan /service &


よく見ると、upstartに関する記述がinittabにある・・・。


# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
----------- 途中 省略 -----------
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).


つまり、upstart使うようになったらしいので、再設定してみた。


コメントアウトする
vi /etc/inittab
#SV:123456:respawn:/command/svscanboot

vi /etc/init/svscan.conf


start on runlevel [12345]
respawn
exec /command/svscanboot


次のコマンドでsvscanを起動する
initctl reload-configuration
initctl start svscan


参考
http://upstart.ubuntu.com/cookbook/




2011年10月12日水曜日

TIME_WAITのチューニングとkernelリビルド for CentOS 6.0



久しぶりにSRPMからkernelリビルドしてみたので、
過去を振り返りつつ手順をメモ。

ソーシャルゲームや外部のAPIを使用するサービスなどにありがちなんですが、
Webサーバは、受けるHTTPリクエストが多くなると、
外部のWebサーバにHTTPリクエストを送る処理も多くなったりします。
その場合に問題となるのが、tcpのコネクションです。

TIME_WAIT状態のコネクションが多くなると、
接続できる数は上限があるので、接続できたりできなかったり不安定な状態になります。
そうなると、まあ担当者はかなりテンパってますね。
でも負荷的にはサーバはテンパってなかったりします。

TIME_WAIT多発対策はざっくり


  • サーバ増強

    • 緊急対応ということで、あくまで一時的な対応。富豪ならこれでよし。

  • 使用できるTCPポート番号を増やした

    • 増加量が上回る場合は、焼け石に水。

  • tcp_tw_recycleを有効にしてコネクションの再利用

    • パケットのタイムスタンプの影響で外部との通信で問題あり

  • TIME_WAITの値を60秒→15秒に変更

    • TIME_WAITが減り安定動作



そんなわけで、TIME_WAITのチューニングで落ち着きました。
CentOS 5.3でTIME_WAITを15秒にしたカーネルを数年利用していますが、
とくに問題もなく安定しています。

手間だったのは、
この設定変更をするためには、カーネルのリビルドが必要となるため、
全てのサーバに適用するため数台ずつ停止し少しずつ適用していきました。

以下、CentOS 6.0のTIME_WAIT 15秒版カーネルのリビルド手順です。
CentOS5.3の頃と手順はあまり変わらないですが、
少しパスの変更があったようです。


参考 centosとfedora projectのwiki
http://wiki.centos.org/HowTos/RebuildSRPM
http://fedoraproject.org/wiki/Building_a_custom_kernel


TIME_WAITのチューニングとkernelリビルド手順 for CentOS 6.0
1. rpmのビルドに必要なモジュールのインストール


yum install rpm-build.x86_64 \
redhat-rpm-config.noarch \
patchutils.x86_64 \
elfutils-libelf-devel.x86_64 \
binutils-devel.x86_64 \
hmaccalc.x86_64 \
rng-tools.x86_64

他にgccなども必要です


2. SRPM(カーネル)の入手と解凍


cd /usr/local/src
wget http://mirror.centos.org/centos/6.0/updates/SRPMS/kernel-2.6.32-71.29.1.el6.src.rpm
rpm -ivh kernel-2.6.32-71.29.1.el6.src.rpm


3. パッチの作成


■パッチ作成のためのソースをコピーする
cd ~/rpmbuild/SPECS
rpmbuild -bp kernel.spec
cd ~/rpmbuild/BUILD
cp -r ~/rpmbuild/BUILD/kernel-2.6.32-71.29.1.el6/linux-2.6.32-71.29.1.el6.x86_64 ~/rpmbuild/BUILD/kernel-2.6.32-71.29.1.el6.orig
cp -r ~/rpmbuild/BUILD/kernel-2.6.32-71.29.1.el6/linux-2.6.32-71.29.1.el6.x86_64 ~/rpmbuild/BUILD/kernel-2.6.32-71.29.1.el6.new


rpmbuild中にPGPの鍵作成に時間がかかりすぎる場合は、
次のコマンドを別コンソールで実行する。

rngd -r /dev/urandom

特にOS新規インストールのサーバは、この画面から進まない・・・。


### Now generating a PGP key pair to be used for signing modules.
### ---------------- 途中 省略 ---------------
### If one isn't available, the pseudo-random number generator can be used:
###
### rngd -r /dev/urandom
###
+ gpg --homedir . --batch --gen-key /root/rpmbuild/SOURCES/genkey
gpg: WARNING: unsafe permissions on homedir `.'




■tcp.hファイルを修正する
cd ~/rpmbuild/BUILD
vi kernel-2.6.32-71.29.1.el6.new/include/net/tcp.h

次の1行を修正する。(TIME_WAITを60秒→15秒)
修正前
#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
修正後
#define TCP_TIMEWAIT_LEN (15*HZ) /* how long to wait to destroy TIME-WAIT

■パッチを作成する
diff -uNrp kernel-2.6.32-71.29.1.el6.orig kernel-2.6.32-71.29.1.el6.new > ../SOURCES/tcph.patch


4. ビルドの準備


■パッチを適用するためkernel.specファイルを修正する
cd ~/rpmbuild/SPECS
vi kernel.spec

修正前
# % define buildid .local
修正後
%define buildid .tcp15

※新カーネルインストールの際にkernel-firmwareの同じbuildid版を要求されたのでやめました。

# empty final patch file to facilitate testing of kernel patches
Patch00: tcph.patch  ←追加
Patch999999: linux-kernel-test.patch

ApplyOptionalPatch tcph.patch  ←追加
ApplyOptionalPatch linux-kernel-test.patch

5. TIME_WAIT変更版カーネルのビルド


rpmbuild -ba kernel.spec


6. カーネルのアップデート


cd ~/rpmbuild/RPMS/x86_64
rpm -Uvh --force kernel-2.6.32-71.29.1.el6.x86_64.rpm kernel-2.6.32-71.29.1.el6.x86_64.rpm

再起動
reboot


7. TIME_WAITの確認


1秒間隔でウォッチ
watch -n 1 "netstat -a | grep http"

次のようにTIME_WAITになるので、
15秒後に消えたら動作しています。

Every 1.0s: netstat -a | grep http tcp 0 0 *:http *:* LISTEN
tcp 0 0 ::ffff:192.168.xxx.xxx:http ::ffff:192.168.xxx.xxx:30439 TIME_WAIT



以上、とくにかくリビルドに時間かかるので、時間に余裕があるときに放置しながらがよいかと思います。




2011年10月7日金曜日

bashのログインシェル



環境変数の設定の際、忘れていたのでメモ

bashのログインシェルは次の順序で読み込まれる
(CentOS 6.0のbash環境)


  1. /etc/profile

  2. /etc/profile.d/*.sh

  3. $HOME/.bash_profile

  4. $HOME/.bashrc

  5. /etc/bashrc



suやscreenを起動した場合


  1. $HOME/.bashrc

  2. /etc/bashrc

  3. /etc/profile.d/*.sh




同様の記事を見つけた。


bashが起動時に実行するファイル

http://www.itmedia.co.jp/enterprise/articles/0803/10/news012.html