eclipseからVirtualBoxの環境でXdebugを行う

最初、VirtualBoxの共有フォルダー機能を利用してリモートがローカルのファイルを参照していた。
ただ、リモートでのファイル操作に時間がかかってしまうため、リモートにSamba環境を構築しローカルからファイルを参照するように変更した。


# 環境
* VirtualBox
* CentOS 6.7
 * Apache
* SELinux



# 準備
* [プロキシの指定方法](http://qiita.com/tunepolo/items/296c2639e0b750de41c6)
* Remi 導入
 * [CentOS6.x yum外部リポジトリまとめ](http://qiita.com/m2wasabi/items/6d6a68da2e9dada92369)

説明のために、リモートマシンの設定とeclipseのプロジェクトは以下の通りとする

* リモートマシン
 * IPアドレス  
  192.168.56.1
 * Samba 公開ディレクトリ  
  /var/www
 * Apache ドキュメントルート  
  /var/www/html
* PHPプロジェクト名  
  `site`
 * リモートパス  
  /var/www/html/site
 * ローカルパス  
  \\\192.168.56.1\www\html\site



# iptables

> [iptablesで、httpとhttpsの接続を許可する設定 - 作業ノート](http://te2u.hatenablog.jp/entry/2013/09/12/215031)

デフォルトだと5番目のルールでREJECTが適用されているので、それ以前にhttpとSambaをACCEPTするルールを作成する

<!--- iptables -I INPUT 5 -p tcp -m tcp --dport http -j ACCEPT --->
```bash
service iptables stop
vi /etc/sysconfig/iptables
```
`-A INPUT -j REJECT --reject-with icmp-host-prohibited`行より前に以下を追記する

```/etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport http -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport netbios-ssn -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport netbios-ssn -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport microsoft-ds -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport microsoft-ds -j ACCEPT
```

## iptablesの再起動

```bash
service iptables restart
```



# Xdebug

## インストール

```bash
yum install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sed -ie "s/enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo

yum --enablerepo=remi,remi-php56 install php php-pecl-xdebug
```

## xdebug.ini

`xdebug.ini`を編集する

```bash
cp -ip /etc/php.d/15-xdebug.ini{,.org}
vi /etc/php.d/15-xdebug.ini
```

`; see http://xdebug.org/docs/all_settings`行の後に以下を追記する

```/etc/php.d/15-xdebug.ini
; see http://xdebug.org/docs/all_settings
xdebug.default_enable=On
xdebug.remote_autostart=On
xdebug.remote_connect_back=On
xdebug.remote_enable=On
```

## Apacheの再起動

```bash
service httpd restart
```



# Samba

## インストール

```bash
yum install samba
```

## smb.conf

`smb.conf`を編集する

```bash
cp -ip /etc/samba/smb.conf{,.org}
vi /etc/samba/smb.conf
```

```/etc/samba/smb.conf
[global]
	workgroup = WORKGROUP
	hosts allow = 192.168.
	
	max protocol = SMB2
	
	#SWAT
	display charset = UTF-8
	#Samaba
	unix charset = UTF-8
	
	#Windows
	dos charset = CP932
	dos filemode = yes
	dos filetime resolution = yes
	dos filetimes = yes
	
	security = user
	passdb backend = tdbsam
	
	printing = bsd

[www]
	path = /var/www
	writable = yes
```

必要最低限の設定なので詳細は他を参考にしてください

> [smb.conf | Samba ドキュメント翻訳プロジェクト](http://www.samba.gr.jp/project/translation/3.6/htmldocs/manpages-3/smb.conf.5.html)

## ユーザーの追加

ユーザー`apache`をSambaユーザーに追加する

```bash
pdbedit -a apache
```

## Sambaの起動

```bash
service smb start
chkconfig smb on
```



# SELinux 対策

`/var/www`以下のディレクトリ・ファイルには`httpd_sys_content_t`又は`httpd_sys_script_exec_t`タイプのラベルを付けられており、`Samba`からアクセスはできません。
そのため、`samba_share_t`タイプのラベルが付いていないファイルやディレクトリを`Samba`でエクスポートできるようにします。

```bash
setsebool -P samba_export_all_rw on
```

> [4.3. Boolean | Red Hat Enterprise Linux > 6 > 制限のあるサービスの管理](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/sect-Managing_Confined_Services-Samba-Booleans.html)


# eclipse
<!--
- dropins\MergeDoc フォルダー用意
- eclipse.ini

```
-Xverify:none
-javaagent:dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
```
-->

* ワークスペース  
 \\\192.168.56.1\www\html

`\\192.168.56.1`へはユーザー`apache`でアクセス可能


## 設定
* PHP
 * PHP サーバー
     * サーバー  
       ベース URL ： http://192.168.56.1
     * デバッガー  
       Debugger ： XDebug
     * パス・マッピング（不要かも）  
       サーバー上のパス ： /var/www/html/site  
       ローカル・パス ： /site
* デバッグ
 * CLI設定  
   CLIデバッグを使用可能に`しない`