2011/05/23

SVN (Subversion)インストール

5/23の内容

・今日は、昨日と違って寒い。
・今日の授業は、久々に課題以外の話題。
開発の現場にてソースの管理に利用されているSubversion( サブバージョン) の
環境設定と使い方について。

(1)SVNのインストールと環境設定

(2)windowsからSVNを参照するためのソフトTortoiseSVNをインストール

(3)SVNを使って開発環境から本番環境へソースを移行するための
擬似環境を設定。

(4)擬似環境を使って、変更の手順をシミュレーション

(5)最後の1時間は、環境をクリアして、本日の作業を再度実行。


以下詳細手順、Webテキスト参照。(2,4,5は別に記述する予定)

(1)SVNのインストールと環境設定
(A)CentOSサーバにsvnをインストール
rootユーザにて作業(コマンドの先頭に#があるものはrootユーザにて実行)
# yum -y install subversion mod_dav_svn
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: centos.tt.co.kr
 * base: centos.tt.co.kr
 * extras: centos.tt.co.kr
 * updates: centos.tt.co.kr
addons                                                   |  951 B     00:00
base                                                     | 1.1 kB     00:00
extras                                                   | 2.1 kB     00:00
updates                                                  | 1.9 kB     00:00
utterramblings                                           |  951 B     00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package mod_dav_svn.i386 0:1.6.11-7.el5_6.3 set to be updated
---> Package subversion.i386 0:1.6.11-7.el5_6.3 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package            Arch        Version                    Repository      Size
================================================================================
Installing:
 mod_dav_svn        i386        1.6.11-7.el5_6.3           updates         78 k
Updating:
 subversion         i386        1.6.11-7.el5_6.3           updates        3.1 M

Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       1 Package(s)

Total download size: 3.2 M
Downloading Packages:
(1/2): mod_dav_svn-1.6.11-7.el5_6.3.i386.rpm             |  78 kB     00:00
(2/2): subversion-1.6.11-7.el5_6.3.i386.rpm              | 3.1 MB     00:05
--------------------------------------------------------------------------------
Total                                           525 kB/s | 3.2 MB     00:06
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating       : subversion                                               1/3
  Installing     : mod_dav_svn                                              2/3
  Cleanup        : subversion                                               3/3

Installed:
  mod_dav_svn.i386 0:1.6.11-7.el5_6.3

Updated:
  subversion.i386 0:1.6.11-7.el5_6.3

Complete!


(B)リポジトリの作成
リポジトリは、ソースを管理するための書庫のことです。
今回は、/var/www/svn/shonanbbsにリポジトリを作成します。
# cd /var/www/svn
(svnディレクトリがなければ作る)
・リポジトリ作成
# svnadmin create shonanbbs
・ディレクトリ所有者の変更
# chown -R apache:apache shonanbbs

(C)設定ファイル(svnserve.conf)修正、その1
# cd /var/www/svn/shonanbbs/conf
# vi svnserve.conf
・設定ファイル(svnserve.conf)は以下のように修正
[general]
anon-access = none
auth-access = write
password-db = passwd

(D)設定ファイル(svnserve.conf)修正、その2
svnを使用するユーザの設定
# vi /var/www/svn/shonanbbs/conf/passwd
・設定内容を追加
[users]
ユーザー名1 = パスワード1

(E)svnを使用するユーザに環境変数を追加
SVNを使用するとき、使用するエディタ(vi)をユーザの環境変数に設定する。
一般ユーザにて(コマンドの先頭に$があるものは一般ユーザにて実行)自分のhomeディレクトリに移動
$ cd ~
$ pwd
/home/user
$ ls -la
...(途中省略)
-rw-r--r--  1 user user  199  5月 23 22:14 .bash_profile
...(このあとも省略)
$ vi .bash_profile
・ファイルの最後に追加(svnを使用するエディタの指定)
export SVN_EDITOR="vi"
・設定を有効化
$ source .bash_profile
・有効化を確認
$ env
...(途中省略)
SVN_EDITOR=vi
...(このあとも省略)

(F)SVNサーバをrootユーザで起動
# svnserve -d -r /var/www/svn
・プロセスが起動されたか確認
# ps -ef | grep svn
root     14662     1  0 11:44 ?        00:00:00 svnserve -d -r /var/www/svn
root     14664 14633  0 11:44 pts/0    00:00:00 grep svn
svnサーバの起動を一般ユーザでも出来るみたいだけど、
今回はrootユーザにて起動する。

(G)リポジトリの内容を作成するため、まずCentOS上のlinuxのIPアドレスを確認する。
(rootユーザでも一般ユーザに戻って作業してもいい)
$ /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:03:CE:E1
          inet addr:192.168.47.128  Bcast:192.168.47.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe03:cee1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          ... (以下省略)
・IPアドレスは、「192.168.47.128」

これから、リポジトリの内容を設定
・本番環境側 trunk
・開発環境側 branches

(H)trunk作成
(ここからは一般ユーザで作業)
$ svn mkdir svn://192.168.47.128/shonanbbs/trunk
viが立ち上がるので、コメントはcreate ripositoryを入力
create ripository

-- この行以下は無視されます --

A    svn://192.168.47.128/shonanbbs/trunk

・保存したあと、認証を求められることがあります。先ほど(D)で設定した
パスワードを入力
認証領域: <svn://192.168.47.128:3690> 99a5f541-...
'user' のパスワード:


(I)trunkにソースの情報をインポート(あくまでも管理情報をインポートするだけ?)
今回は「/home/user/bbs2」が管理対象ディレクトリ。
$ svn import /home/user/bbs2 svn://192.168.47.128/shonanbbs/trunk
コメントは、import bbs2を入力、テキストを保存するとインポートが始まり、「追加しています」のメッセージが表示されます。
> リビジョン 2 をコミットしました。
インポート対象(管理対象)に日本語のファイル名を使っているとインポートできないとのこと。

(J)tagsを作成(リリース後のバージョンを保存しておく場所)
$ svn mkdir svn://192.168.47.128/shonanbbs/tags
コメントは、create tagsを入力
> リビジョン 3 をコミットしました。

(K)trunkをbranchesにコピー(本番環境から開発環境にSVNの情報をコピー)
$ svn cp svn://192.168.47.128/shonanbbs/trunk svn://192.168.47.128/shonanbbs/branches
コメントは、create branches
> リビジョン 4 をコミットしました。


(3)SVNを使って開発環境から本番環境へソースを移行するための
擬似環境を設定。

(L)ディレクトリを準備
このディレクトリに、php(symfony)のソースコードが入ります。
・開発環境
$ mkdir /home/user/dev
・staging環境(検証環境?)
$ mkdir /home/user/staging
・本番環境
$ mkdir /home/user/real

(M)apacheの設定ファイルにドメインを割り当てる (この作業はrootユーザで)
# vi /etc/httpd/conf/httpd.conf
・vhostの設定は、それぞれ以下のとおり
www.dev.com         /home/user/dev/web
www.staging.com     /home/user/staging/web
www.rl.com        /home/user/real/web
(ms securityでwww.real.comがセキュリティの警告を受けたので変更しました)
なお、授業と同じ環境にしたければ以下の通り。
dev.shonanbbs.com     /home/user/dev/web
staging.shonanbbs.com /home/user/staging/web
www.shonanbbs.com     /home/user/real/web(本番はbbs2から変更する)

・vhostの内容は以下の通り(staging,realも作成)
<VirtualHost *:80>
    DocumentRoot /home/user/dev/web
    ServerName www.dev.com
    ErrorLog logs/dev.com-error_log
    CustomLog logs/dev.com-access_log common
    Alias /sf "/usr/share/pear/data/symfony/web/sf"
    <Directory "/home/user/dev/web">
      Allowoverride All
      Options -Includes -ExecCGI
    userDirectory>
userVirtualHost>
・apache再起動
# /etc/rc.d/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中: Warning: DocumentRoot [/home/user/dev/web] does not exist
Warning: DocumentRoot [/home/user/staging/web] does not exist
Warning: DocumentRoot [/home/user/real/web] does not exist
                                                           [  OK  ]
・まだphp(symfony)のソースコードとフォルダの環境を設定していないので、apache上ではワーニングが表示されます。

(N)windowsのhostsファイルも更新する。
・hostsファイルの内容は省略します。
・この時点では、ブラウザからdev、staging、realにアクセスしても、
ソースがないのでエラーが出る。
Not Found

The requested URL / was not found on this server.

(O)ソースコードのチェックアウト(co) (コピー)
$ svn co svn://192.168.47.128/shonanbbs/branches ~/dev
$ svn co svn://192.168.47.128/shonanbbs/trunk ~/staging
$ svn co svn://192.168.47.128/shonanbbs/trunk ~/real

> リビジョン 4 をチェックアウトしました。
これで、各環境にWebでアクセスすれば、bbs2が表示される。

(P)権限設定を各環境で実施
各環境では、symfonyのディレクトリ所有者がuserなので、apacheからアクセスした場合、エラーが出る。
(キャッシュに残っているデータで表示が可能な場合はエラーが出ないかも)
このため、各環境で権限設定を変更する。
$ symfony fix-perms

(Q)svnで管理されているフォルダは「.svn」がある
$ cd ~/dev
$ ls -la
合計 64
drwxrwxr-x 14 user user 4096  5月 23 14:30 .
drwxr-xr-x 19 user user 4096  5月 23 14:15 ..
drwxrwxr-x  6 user user 4096  5月 23 14:30 .svn
drwxrwxr-x  6 user user 4096  5月 23 14:30 apps
以下略
・確認
$ svn info
パス: .
URL: svn://192.168.47.128/shonanbbs/branches
リポジトリのルート: svn://192.168.47.128/shonanbbs
リポジトリ UUID: 64e80751-e84d-4801-8776-33d37fbd49db
リビジョン: 4
ノード種別: ディレクトリ
準備中の処理: 特になし
最終変更者: user
最終変更リビジョン: 4
最終変更日時: 2011-05-23 13:17:17 +0900 (月, 23  5月 2011)

以上、ここまでインストールと環境設定。
さすがに長くなったので、以降は別にします。

2011/05/17

php講習 5/17

・本日は、室内の掃除当番でした。

・昨日に引き続き最終課題の6日目

<本日の作業>
・マンション一覧の項目調整。項目が多い。
設計書と、テーブル定義で項目の並びが揃っていない。
設計書には日本語表記の項目名のみ、テーブル定義のカラム名が入っていない。

・プロジェクトをコピーしたとき、権限でエラーになるときの対処
$ symfony fix-perms
しかし、今日は何故か一部のイメージファイルがないとのエラーになる。
昨日までうまく動いていたのに不思議。
aparcheを再起動したらファイルがないとのエラーが出なくなった。
aparcheが何かを憶えているのか、それとも、タイミングの問題か。

・問い合わせで、物件情報の表示項目が区分により異なる処理を作成。

・問い合わせのパンくずリストで、戻り先を区分で判定。

・マンションの明細を作成。項目が多いので見直しが大変。

・レイアウト調整、見本のWebページを見ながらCSSの指定を作成。
土地明細の問い合わせ先の下部分をテーブルタグからDIVタグに修正。
追加CSSの設定をview.ymlに設定

・見本のイメージファイルは、/imgの指定。しかし、デフォルトのsymfonyでは
  /imagesなので、cssの該当部分を修正

明日はお休み。
木曜日でレイアウト調整が終わるだろうか?

2011/05/12

php講習 5/12

・本日も雨のため、掃除は中止

・最終課題3日目
・明細ページの作成(2日目)
出力項目が多いのと、仕様書とテストデータが合っていない部分がある。
データの検証にも時間がかかる。
・社名の表示は固定項目にした。

・お問い合わせページ作成
入力項目で、タグにする部分の調整に時間がかかる。
内容のバリデーションは、必須項目のみ
詳細はあとで追加予定



・確認画面の調整が終わり、登録のアクションで時間切れ。
ラジオボタンのデータ保存と、表示の処理を残した。
・そのあと、メール送信処理あり。

・細かい設定内容は、あとで追記するかもしれません。

2011/05/11

php講習 5/11

今日は雨で外の掃除はなし。

・最終課題2日目
<環境準備>
・vmware上のCentOSをあげるのに15分かかった。
1分程度で上がるときもあれば、時間がかかるときもある。
違いがわからない。

<土地の一覧表>
・一覧表検索条件ラジオボタンの配列作成
後から気が付いたが、参考にもらったファイルに、setting.ymlファイルがあり、
設定があった。
自分で作らなくてもよかったが、練習なので自分で作るようにとの指導とのこと。
・画像種別1 - 6
1:間取 2:外観 3:地図 4:周辺 5:内装 9:その他画像 10:玄関 11:居間 12:キッチン 13:寝室 14:子供部屋 15:風呂
「土地」には、種別4,6しかなかった。また、種別がセットされていないものもあり。

・検索条件
(1)図面の有無1、外観画像
(2)図面の有無2、区画画像
(3)図面の有無3、外観・区画以外

・ラジオボタンの書き方
    <?php foreach ($gaikan_sitei as $k => $v): ?>
    <?php echo radiobutton_tag("sort", $k, $gaikan_sitei==$k); ?>
    <?php echo $v.' '; ?>
    <?php endforeach; ?>

・検索条件をcriteriaで判断するのに、種別の項目が1-6まであるので
andとorの条件を設定するのに半日かかった。

・午後から土地詳細画面作成
表示項目が多いので時間がかかる。
カラム名が日本語の資料しかないため、DB上のカラム名を探すにに時間がかかる。
その上、データが入っていないものもある。1項目設定するのに10-15分かかる。

・レイアウト調整しながら作成。
今日は、物件番号まで、情報更新日以降は明日。

・ちなみに、情報更新日は、mysql上のdateタイプデフォルト表示と、phpの日付が
異なるため、調整が必要。

2011/05/10

symfony最終課題

php講習  5/10

今日は、認定日のため2時間目からの出席でした。
それにしても、今日は暑かった。

本日から、最終課題。

作業手順は以下の通り。

(1)データベース(realestate)作成
> create database realestate;
作ったら確認
> show databases;

(2)データベースユーザ作成
> GRANT ALL ON realestate.* TO realestate@"localhost" IDENTIFIED BY "xxxx";
> flush privileges;
作ったら確認
> select host,user from mysql.user;

(3)DBのdumpファイルをデータベースにインポート
・Webテキストから落とすとき、エラーが出ないのに、一部しか落ちないときがあった。
6回目でようやくファイルが得られる。79Mありました。
データをインポート
$ mysql -u root realestate <dump.sql
作ったらmysqlで確認
> use realestate;
> show tables;


(4)プロジェクト(realestate)作成
> symfony init-project realestate

(5)ドメイン設定(www.shonan-realestate.com)
<VirtualHost *:80>
    DocumentRoot /home/user/realestate/web
    ServerName www.shonan-realestate.com
    ErrorLog logs/rst.com-error_log
    CustomLog logs/rst.com-access_log common

    alias  /sf /usr/share/pear/data/symfony/web/sf

    <Directory "/home/user/realestate/web">
       AllowOverride All
       Options -Includes -ExecCGI
    </Directory>
</VirtualHost>
・ローカルPCのhostsファイル設定

(6)環境設定
db接続,schema,model,sfPageFlow,task追加など
imgファイルセットアップ
・基本モジュール設定
$ symfony init-app front
$ symfony init-app backend
$ symfony init-module front default
$ symfony init-module backend default
・DB接続環境設定
$ symfony propel-build-schema
$ symfony propel-build-model
$ symfony cc
・ページャは独自のツールなので記述は省略します。

(7)スタート

・本日は、frontで(土地の)一覧表と、検索条件を1項目(価格)作ったところで終了。
同一カラムのand条件検索は、以下のページを参照しました。
同じカラムのAND条件を作る場合
 

・予定では、作業時間2週間だそうです。

2011/05/09

php講習 5/9

本日のメモはあとで更新します。

GW明けなので、先月の復習と、コメント欄のテキストエディタ適用

2011/05/05

root権限でコマンド実行(sudoの設定)

symfonyでときどき、root権限のコマンドを実行する必要に迫られます。
そのたびにrootに切り替えるのも手間なので、sudoコマンドを実行すると簡単です。
そのためには、設定が必要です。

<一般ユーザでsudoを実行できるようにする設定>
一度、rootユーザに切り替えて作業します。

$ su -
# visudo
ここで、パスが通っていなければ、/usr/bin/visudoで試して下さい。

viが起動されるので、以下の記述まで進めて下さい。
## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
この行を有効に
%wheel        ALL=(ALL)       ALL

あとは、viと同様に保存して終了して下さい。

次に、 ユーザの確認
# id  user
uid=501(user) gid=501(user) 所属グループ=501(user)

ユーザにグループwheelを追加
# usermod --groups wheel user

グループが追加されたか確認
# id  user
uid=501(user) gid=501(user) 所属グループ=501(user),10(wheel)

これで、root権限でコマンドが実行できるようになります。
・コマンド
$ sudo tail /var/log/httpd/mysyte.com-error_log

2011/05/04

symfonyでエラーとなったときのapacheログの表示

ローカルで開発環境を作っているとき、symfonyの開発環境で
デバックモードをfalseにしたままで、エラーが出るとデバックモードを
trueに設定しなおして(または、_devで)、再実行しています。

これって面倒なので、apacheのログを見て判る範囲であれば、
エラーが確認出来ます。

(1)rootでapacheのエラーログを確認する。
・apacheのログの指定は、以下の設定ファイルに記述されています。
/etc/httpd/conf/httpd.confにVirtualHostの設定をしています。
>    ErrorLog logs/mysyte.com-error_log
>    CustomLog logs/mysyte.com-access_log common

・「ErrorLog」がエラーログの記述です。
「logs/mysyte.com-error_log」は「/var/log/httpd/mysyte.com-error_log」
のことです。

・ログの最後をrootユーザで確認する。
# tail /var/log/httpd/mysyte.com-error_log


・一般ユーザでは、権限がないので(おそらく)見れません。
どうしても見たければ、rootユーザにて以下のコマンドで権限を変更して下さい。
# chmod +rx /var/log/httpd/

(2)telnetでログインしているときはsymfonyのコマンドを入力するために一般ユーザになっています。このため、上記の権限設定がなければ、毎回rootユーザに切り替えるのも手間がかかります。
決まった作業なので、sudoを使えば一般ユーザでもログを確認出来ます。
ちなみに、sudoについて徹底攻略では、p.303に記述があります。
sudoの設定はこちら)