Nullyのぶろぐ

仙台で働くエンジニアの日記

MacでVirtualBOXを使ったLAPP環境を作った時のまとめ

あつはなついでんなぁ。

そうでんなぁ!

この暑い夏をコーディングで乗り切っちゃおう!というわけでMacに入れたVirtualBOXを使って、LAPP(Linux, Apache, PHP, PostgreSQL)環境をつくろう!という企画です。

MySQLでもよかったのですが、単に使いたかったRDBMSPostgreSQLだったので[wp_emoji2 code="d223" alt="冷や汗 (顔)"]

やること

  • VirtuaBOX上でCEntOSを走らせ、SSH(SFTPでなど)でログイン+コーディングを行う
  • PHPPostgreSQLを動かす
  • ブラウザからVirtualBOX上の実行結果を見る

以上簡単ですが、上記3つが出来れば最低限の開発環境が出来上がるのでこれを目処にします。

※今回は個人的な理由によりi386環境で作ります。

用意する物

  • CEntOS 5
  • VirtualBOX
  • (必要であれば)Transmission
  • ターミナル
  • 熱い気持ち

今回はさくらインターネットさんのさくらのVPS512程度の環境を作る予定です。

仮想環境の準備

CEntOSのインストール

まずはOSのDVDイメージを落とします。

transmission普通にHTTPから落としてもいいのですが、あまりにも時間がかかる!という場合は、TransmissionというMacTorrentを扱えるアプリを使って落とします。


今回はCEntOS5をいれるので、インスコする環境に併せてファイルを落とします。

torrent経由で落とす場合は拡張子が「.torrent」になっており物を落とし、Transmissionで落とします。

torrentを使って落とした方は「持ちつ持たれつ」を思い、自らもOSデータを共有してあげましょう。

※ずっと上げ続けるまではしなくていいです。

※ 本当はmd5でOSデータに破損が無いか調べる必要がありますが、今回は飛ばしています。

CEntOSのインストール

DVDイメージを落としたらVirtualBOXを起動し、「新規」から新しく仮想環境を作ります。

名前は好きな名前を入力し、続けるを押します。

使っているWebサービス名などを入れると後で分かりやすくなるかも知れません。

オペレーティングシステムは「Linux」を選択し、バージョンは「Linux 2.6」を選択します。

このバージョンは利用するOSのカーネルバージョン等に併せて変更し、続けるを押します。

 

メモリを512に設定し、続けるを押します。

 

仮想ハードディスクを新しく作成するため、「新規ハードディスクの作成」を選択し、続けるを押します。

ダイアログが立ち上がるので、続けるを押します。

ストレージタイプは固定でも可変でもどちらでも構いませんが、今回は可変ストレージを選択します。

保存場所は任意の場所に保存し、サイズは20Gに設定します。

作成するディスクに問題がなければ終了を押します。

概要を確認し、終了を押します。

作成した仮想環境がリストに表示されます。

次に、今作成した仮想環境を起動し、OSのインストールを開始します。

仮想環境を起動すると、インストールメディアの選択を促されるので、先ほど落としたDVDイメージを選択し、続けるを押します。

表示されたダイアログの終了を押し、インストールを行います。

今回は、GUIを使ったインストールを行うので画面内で「エンターキー」を押してインストールを開始します。

いろいろ黒字に白文字でずらずら出ますが、スルーしておきます。

今度は青い画面でDVDのテストを行いますか?というのが出ますが、任意で行います。

今回はスルーするのでSKIPを選択し、エンターを押します。

グラフィカルな物が表示されたら右下のNextを押し、言語環境を選択します。

今回は言語環境を日本語を選択し、Nextを押します。

次にキーボードの環境を問われますので、日本語を選択し、Nextを押します。

するとディスクの仮想フォーマットを行うダイアログが表示されるので、「はい」を選択します。

表示された画面の「選択したドライブ上のすべてのパーティションを削除〜〜〜」を選択し、次へを押し、表示されたダイアログの「はい」を押します。

次にネットへ接続する際に利用するネットワークデバイスを選択します。

特に何も問題なければDHCPによる自動設定を選択し、次へを押します。

時刻は東京を選択し、次へを押します。

rootのパスワードを設定しますが、ある程度難しい物を設定しておくようにします。

sudoする際にも必要になるので、設定したパスワードを覚えておきます。

インストールするソフトウェア一覧が表示されますが、「今すぐカスタマイズ」を選択し、インストールソフトウェアをカスタマイズしていきます。

デスクトップ環境はGNOMEのままで。

アプリケーションは全部いらないので全部消す!

開発では「開発ツール」を選択します。

サーバーは後から自前で最新を入れていくので全部チェックを外します。

最後に次へを押し、インストールの確認画面が表示されるので次へを押しインストールを開始します。

インストールには時間がかかるので、完了までしばらく待ちます。

その間にVirtualBOXの「デバイス」メニューからCD/DVDデバイスから、仮想ドライブからディスクを除去を押してディスクをアンマウントしておきます。

インストール完了後は再起動を要求されるので再起動をかけます。

再起動完了後、セットアップを開始する旨が表示されるので、素直に進むを押します。

ファイアウォールの設定では、信頼できるものとして

の2つをチェックし、進むを押します。

設定を上書きしてもいい?と聞かれますが、颯爽とはいを押します。

SELinuxは後々手間が掛かるので無効に設定し、進むを押します。

※ 無効化しなくともDBなどのアクセス設定を行うことは出来ますが、今回は端折っています。

すると「設定後に再起動します」というのが表示されますので、「はい」を押します。

時刻回りは適当に。

ユーザーの作成は、自分の覚えやすく分かりやすいユーザーを追加します。

サウンドカードは無視!

追加のCDでは、追加インストールするソフトウェアなどを追加できるのですが、今回はスルーし、終了ボタンを押して初回設定を終了します。

すると「再起動します」のダイアログが表示されますのではいを押します。

再起動完了後、初回設定で作成したユーザーでログインします。

ログインすると

わぁ、きれい[wp_emoji2 code="d139" alt="ハートたち (複数ハート)"]

これでOSのインストールが完了しました。

先にsudoコマンドを使えるようにしてしまいます。

sudoコマンドの設定に関してはこちらの記事を参考に設定します。

ポートフォワーディングを設定する

SSHMacから仮想環境へログインするにはポートフォワーディングということを行わなければなりません。

簡単に説明すると、localhost:50080などでアクセスした場合は「仮想環境のlocalhostにアクセスするんだよ!」という道しるべを立ててあげることです。

設定は簡単なので、ざざっと!

まずは立ち上がっている仮想環境を一旦落とします。

次にVirtualBOXの初期画面(仮想環境の一覧)で、ポートフォワーディングをする仮想環境を選択し、設定を押します。

開いたダイアログの「ネットワーク」にある「高度」を押すとびろんっと「ポートフォワーディング」というボタンが現れるので押します。

表示された画面の右のプラスアイコンを押し、行を2つ追加します。

名前は上から順に「Remote SSH」「Remote HTTP」とでも付けます。

今回利用するポートは60000番台をベースに設定します。

今回は画像のようにポートを設定しました。

これでポートフォワーディングの設定は完了なので、OKを押しまくり、設定画面を閉じます。

SSHでログイン

ポートフォワーディングも設定したので、せっかくなのでSSHでこれ以降設定を行っていきます。

もちろん、OSを起動しておかないとログイン出来ないので、起動します。

次にMac側でターミナル.app(iTerm.appなどでもOK)を開いて、次のように入力します。

ssh -l [ユーザー名] -p 60022 localhost

[ユーザー名]は作成したユーザー名に置き換えてください。

すると「RSA key fingerprint is〜〜〜〜」と表示されますが、yesと颯爽に押してあげます。

するとパスワードの入力が求められますので、ログインユーザーで設定したパスワードを入力します。

成功すると

[ユーザー名@localhost] $

のような表記になります。

RPMの追加・設定

Linuxはパッケージという概念でアプリケーションのインストール・削除を行うことが出来ますが、新しくリポジトリを追加し、使えるものを増やしてあげます。

sshでログインしているので、ログインユーザーのホームディレクトリに以下のコマンドでダウンロード専用ディレクトリみたいなのを作ってあげます。

mkdir Downloads

で、作ったディレクトリに入ります。

cd Downloads

で、以下の3つのコマンドを1個1個コピペで実行します。

wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

wget http://rpms.famillecollet.com/el5.i386/remi-release-5-8.el5.remi.noarch.rpm

wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm

3つのコマンドを実行したら、またさらに以下をコピペ。

sudo rpm -Uvh epel-release-5-4.noarch.rpm remi-release-5-8.el5.remi.noarch.rpm rpmforge-release-0.5.2-2.el5.rf.i386.rpm

これを実行すると

警告: epel-release-5-4.noarch.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 217521f6

警告: remi-release-5-8.el5.remi.noarch.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 00f97f56

警告: rpmforge-release-0.5.2-2.el5.rf.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 6b8d79e6

準備中... ########################################### [100%]

1:epel-release ########################################### [ 33%]

2:remi-release ########################################### [ 67%]

3:rpmforge-release ########################################### [100%]

と表示され、操作が完了します。

さて次にやっとApache,PHP,PostgreSQLのインストールです。

必要なパッケージを入れる

今回必要なパッケージは

ApachePHPは以下のコマンドで一発で終ります。

sudo yum install httpd-devel php-devel php-pear php-mbstring php-xml php-pdo php-pgsql

以下のような表示がされるかとおもいますが、RPMの更新が行われているのであせらずに。

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

* base: ftp.riken.jp

* epel: ftp.riken.jp

* extras: ftp.riken.jp

* rpmforge: apt.sw.be

* updates: ftp.riken.jp

epel | 3.7 kB 00:00

epel/primary_db | 3.0 MB 00:01

rpmforge | 975 B 00:00

rpmforge/primary | 2.3 MB 00:11

rpmforge 10807/10807

しばらくすると以下のように表示されますので、yと入力し、エンターを押します。

Transaction Summary

================================================================================

Install 16 Package(s)

Upgrade 3 Package(s)

Total download size: 14 M

Is this ok [y/N]: y

途中、以下のように聞かれますが、yを押してエンターを押します。

otal                                           1.0 MB/s |  14 MB     00:13

警告: rpmts_HdrFromFdno: ヘッダ V3 DSA signature: NOKEY, key ID e8562897

base/gpgkey | 1.5 kB 00:00

Importing GPG key 0xE8562897 "CentOS-5 Key (CentOS 5 Official Signing Key) <centos-5-key@centos.org>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

Is this ok [y/N]: y

Complete!と表示されれば指定したパッケージのインストールは完了です。

試しにちゃんとインストールされているかを確認するために、以下のコマンドをコピペで1個ずつ実行してみます。

sudo /etc/rc.d/init.d/httpd stop

php -v

httpdのコマンドはパスワードを聞かれますので、ユーザーの設定したパスワードを入力しエンターを押します。

httpdの実行結果は「失敗」と帰ってくればOK!

phpコマンドは「Zend Engine〜〜〜」と表示されればOK!

ゲストOS(CEntOS)のlocalhostにアクセスするには「http://localhost:60080」としてアクセスします。

※ 初期状態だと、CEntOSのデフォルトページが表示されます。

PostgreSQLをインストールする

続きまして、PostgreSQLのインストールです。

OSにもともと入ってる物もありますが、バージョンが少し古めなので、rpmを追加し、yumでインストールするようにしてみます。

まずは必要なrpmを拾ってきます。

先ほど作ったDownloadsディレクトリに移動し、同じようにコピペ!

wget http://yum.pgrpms.org/9.0/redhat/rhel-5-i386/postgresql90-9.0.4-1PGDG.rhel5.i386.rpm

wget http://yum.pgrpms.org/9.0/redhat/rhel-5-i386/postgresql90-server-9.0.4-1PGDG.rhel5.i386.rpm

wget http://yum.pgrpms.org/9.0/redhat/rhel-5-i386/postgresql90-libs-9.0.4-1PGDG.rhel5.i386.rpm

同じように以下をコピペして、PostgreSQLをインストールします。

sudo rpm -ivh postgresql90-*

ちゃんとインストールされたかを確かめるため、以下のコマンドをコピペで実行します。

yum list installed | grep postgre

ちゃんとインストールされていれば、以下のように表示されます。

postgresql90.i386                         9.0.4-1PGDG.rhel5            installed

postgresql90-libs.i386 9.0.4-1PGDG.rhel5 installed

postgresql90-server.i386 9.0.4-1PGDG.rhel5 installed

PostgreSQLデータベースの初期化

一旦rootユーザーになります。

su

# root パスワードを入力

まずはデータベースの実態を格納するためのディレクトリを指定する環境変数を指定するため、以下のように設定します。

vi /etc/bashrc

# 以下viエディタで開いた内容

# /etc/bashrc

# System wide functions and aliases

# Environment stuff goes in /etc/profile

# By default, we want this to get set.

# Even for non-interactive, non-login shells.

if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then

umask 002

else

umask 022

fi

:

: 結構続く

:

: 一番下に以下を追加

PGDATA=/var/lib/pgsql/9.0/data

次に、postgresユーザーになるため以下をコピペして実行します。

su - postgres

すると、表記が「-bash-3.2$ 」となりますので、さらに以下をコピペして実行し、先ほど指定したPGDATAが正しく「/var/lib/pgsql/9.0/data」と表示されるかを確認します。

echo $PGDATA

正しく表示されていれば、以下のコマンドを実行します。

/usr/pgsql-9.0/bin/initdb --no-locale -E UTF8

今回はUTF8のデータベースをつくっていますが、環境に併せて変更することも可能です。

実行すると、「成功しました。以下を使用してデータベースサーバを起動することができます。」と表示されれば成功です。

次に、OSを起動した際に自動で起動するようにしたいので、以下のコマンドを実行して上げます。

/sbin/chkconfig postgresql-9.0 on

登録されたかの確認は以下のコマンドで、3番目がonになっていればOKです。

/sbin/chkconfig --list postgresql-9.0

postgresql-9.0 	0:off	1:off	2:on	3:on	4:on	5:on	6:off

これで次回以降OSを起動すれば、PostgreSQLが自動で起動するようになります。

PostgreSQLに接続してみる

まずはPostgreSQLのサービスを起動します。

/sbin/service postgresql-9.0 start

OKと表示されたら次に、以下のコマンドを実行します。

psql -U postgres

ちゃんとログインできれば、「postgres=#」と表示されます。

ログイン状態でテーブルが作れるかなどを見ます。

postgres=# \d

リレーションがありません。

postgres=# create table test (id char(1));

CREATE TABLE

postgres=# \d

リレーションの一覧

スキーマ | 名前 | 型 | 所有者

----------+------+----------+----------

public | test | テーブル | postgres

(1 行)

postgres=# drop tabel test;

ERROR: syntax error at or near "tabel"

行 1: drop tabel test; // ミスったw

^

postgres=# drop table test;

DROP TABLE

postgres=#

上記のように作成・削除が出来れば問題なくPostgreSQLが動いています。

postgresユーザーにパスワードを設定するため以下のクエリを実行します。

alter user postgres password 'パスワード';

実行後は「ALTER ROLE」と表示されます。

最後に「¥q」と入力し、プロンプトから抜けます。

ユーザー・データベースを追加する

自分専用のユーザー及びデータベースを追加するため、以下のコマンドを実行します。

createuser -U postgres -P ユーザー名

すると以下のような質問が何回かありますので、それぞれ入力します。

新しいロールのためのパスワード:

もう一度入力してください:

新しいロールをスーパーユーザにしますか? (y/n)n

新しいロールに対してデータベースを作成する権限を与えますか? (y/n)n

新しいロールに対して別のロールを作成する権限を与えますか? (y/n)n

今回は特別なロールは与えていません。

次にユーザー用のデータベースを作ります。

createdb -U postgres -O ユーザー名 -W -E UTF-8 データベース名

ユーザー名は先ほど作ったユーザー名を入力します。

データベース名は好きな名前を設定することが出来ます。

その他多用なオプションはこちらのページを参照して下さい。

最後にpsqlコマンドでさくせいしたユーザーで作成したデータベースにログイン出来るかを確認します。

psql -U ユーザー名 データベース名

これで全ての設定が完了し、ベースとなる開発環境作成が完了しました!

これではれて仮想人(?)!

終りに

仮想化しておくことで開発環境がそれ1つで独立し、汚染されてもいい環境となるので、テストで何かを動かしたりとかする際にはとても重宝します。

また、既に作ったベースのCEntOSを「VBoxManag clonehd」を実行することでベースシステムを複製して利用することも可能です。

WordPressなどのような小さなソフトウェアを動かす場合などは、MAMPやXAMPPがお手軽でおすすめです。

おまけ

phpPgAdminをいれよう!

CLIベースだと面倒だし、いろいろ手間ですので、phpMyAdminににた管理ツールphpPgAdminをいれちゃいましょう。

以下のようにコマンドで取得し、展開しちゃいます。

sudo wget http://downloads.sourceforge.net/phppgadmin/phpPgAdmin-5.0.2.tar.gz?download

展開

sudo tar zxvf phpPgAdmin-5.0.2.tar.gz

リネーム

sudo mv phpPgAdmin-5.0.2 pga

後は設定したURL(今回はポート番号が60080なので、http://localhost:60080/pga/)にアクセスすると、phpPgAdminのページが表示されます。

さらにおまけ

NetBeansをつかってSFTP経由で編集

NetBeansなどのIDEFTPクライアントも持っており、この中のSFTPを使って仮想サーバー上のファイルを編集していきます。

SSHでvi使うことが出来ない方でも簡単に行えます。

まずはプロジェクトグループを作成します。

「次にリモートサーバーからのPHPアプリケーション〜〜」を選択し、次へを押します。

「プロジェクト名」、「ソースフォルダ」、「PHPのバージョン」、「デフォルトのエンコーディング」などを全て入力します。

「リモート構成」ウィンドウが開いたら、「管理」ボタンを押します。

次に「追加」ボタンを押し、FTPの名前とFTPの種類(SFTP)を選択し、了解ボタンを押します。

後はホスト名、ポート、ユーザー名、パスワードなどをFTPの設定と同じように入力していきます。

最後にプロジェクトURLや、アップロード先を設定し、次へボタンを押します。

するとローカルに引っ張ってくるファイルはどれですか?というのが表示されますので、ほしいファイルのみをローカルに落としてきます。

これで仮想サーバーのファイルをローカルの素敵なIDEから編集し、アップすることが可能になります。

アップロードはデフォルトで保存されたタイミングでアップされるようになっています。

これでみんなで暑い夏を乗り切ろう!

最後の最後に

自分で書いておいてなんですがこの環境作るのめちゃくちゃめんどくさくて話にならない...w