Windows 7のPCでhhvm（CentOS7）開発環境を立ち上げるまでの話① 基礎環境整備

実行環境（CentOS）上にいらないパッケージを色々投入するのも・・・とおもい
※コード記述時：Windows7 上からファイル共有（samba）でCentOS上のファイルを操作
※実行環境（HHVM）：CentOS 7(VMでエミュレート）
という環境を構築しきるまでの道のりの記録です。

###必要ソフトを入手
・CentOS 7のディスクイメージ
　（実際にDVDに焼くか仮想ドライブでマウントするかは好みです）
　https://www.centos.org/
・Oracle VM VirtualBox（CentOS7の起動環境用VM）
　https://www.virtualbox.org/


###VirtualBOXにCentOS7をインストール
・メニュー：仮想マシン＞新規　を選択して　下記を入力して「次へ」
　名前：任意（自分でわかる名前を好きにつけて大丈夫）
　タイプ：Linux
　バージョン：Red Hat(64 bit)
・メモリーサイズは任意（自分のPCの搭載メモリ量と相談で）
・ハードドライブは「仮想ドライブを作成する(C)」をチェックし「作成」
　仮想ドライブの作成ウィザードが起動するのでファイルタイプ（任意）をチェックし
　「次へ」（私はVDI形式にしています）
・サイズ選択は可変でも固定任意で大丈夫
　（「固定」のほうがパフォーマンスはあがるそうですが制約もあります）
・ファイルの場所とサイズはフォルダアイコンで保存先を選び、
　作りたい仮想ドライブの大きさにサイズをセット
・「作成」ボタンで仮想ドライブが作成されます。

###nginxのインストール
・nginx をインストール

```bash:bash
[user@centos7 ~]$ vi /etc/yum.repos.d/nginx.repo
```

```bash:/etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
#baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=0
```

```bash:bash
[user@centos7 ~]$ yum -y --nogpgcheck insatall nginx
```

・nginx.conf をバックアップ

```bash:bash
[user@cetnso7 ~]# sudo cp /etc/nginx/nginx.conf /etc/nginx/.nginx.conf.org
[user@centos7 ~]$ sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.org
```

・ファイルを編集

```bash:/etc/nginx/nginx.conf
user  nginx;
worker_processes  1; # マシンのCPU数に合わせる

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
}
```

```bash:/etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  localhost;

    charset uft-8;

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
        try_files $uri $uri/ /index.php?$args;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9001;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}
```

・起動確認

```bash:bash
[user@centos7 ~]$ sudo systemctl start nginx
[user@centos7 ~]$ sudo systemctl enable nginx
```

##HHVMをインストール

```bash:bash
[user@centos7 ~]$ cd /etc/yum.repos.d/
[user@centos7 ~]$ sudo wget http:/www.hop5.in/yum/el6/hop5.repo
[user@centos7 ~]$ sudo yum -y --nogpgcheck install hhvm
[user@centos7 ~]$ hhvm --version
Compiler: tags/HHVM-3.1.0-0-
g71ecbd8fb5e94b2a008387a2b5e9a8df5c6f5c7b
Repo schema: 88ae0db264d72ec2e2eb22ab25d717214aee568b
(インストール成功すればこんなのが出力される)
```

##sambaのインストール
sambaのユーザーはcentos としています。

・sambaアクセス用ユーザー作成

```bash:bash
[user@centos7 ~]$ sudo yum -y install samba
[user@centos7 ~]$ sudo useradd centos
[user@centos7 ~]$ sudo passwd centos
Changing password for user centos.
New password: <- パスワード応答
Retype new password: <- パスワード応答（確認）
passwd: all authentucation tokens update successfully.

[user@centos7 ~]$ sudo pdbedit -a centos
new password: <- パスワード応答
retype new password: <- パスワード応答（確認）
startsmbfilepwent_internal: file /etc/samba/smbpasswd did not exist. File successfully created.
Unix username:        centos
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-1397570601-503051572-2212552623-2000
Primary Group SID:    S-1-5-21-1397570601-503051572-2212552623-2001
Full Name:
Home Directory:       \\linux\centos
HomeDir Drive:
Logon Script:
Profile Path:         \\linux\centos\profile
Domain:               LINUX
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          土, 14 12月 1901 05:45:51 GMT
Kickoff time:         土, 14 12月 1901 05:45:51 GMT
Password last set:    月, 13 12月 2004 16:06:00 GMT
Password can change:  月, 13 12月 2004 16:06:00 GMT
Password must change: 土, 14 12月 1901 05:45:51 GMT
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
```

・ホームディレクトリ設定

```bash:bash
[user@centos7 ~]$ mkdir /etc/skel/samba
[user@centos7 ~]$ vi mkhomedir.sh
#!/bin/bash

for user in `ls /home`
do
    id $user > /dev/null 2>&1
    [ $? -eq 0 ] && \
    [ ! -d /home/$user/samba ] && \
    mkdir /home/$user/samba && \
    chown $user:$user /home/$user/samba && \
    echo "/home/$user/samba create"
done
[user@centos7 ~]$ sh mkhomedir.sh
[user@centos7 ~]$ rm -f mkhomedir.sh

[user@centos7 ~]$ sudo mkdir /home/samba
[user@centos7 ~]$ sudo chown nobody:nobody /home/samba
```

・smb.conf 編集

```bash:bash
[user@centos7 ~]$ sudo vi /etc/samba/smb.conf
[global]
   unix charset = UTF-8　<-　追加(Linux側日本語文字コード)
   dos charset = CP932　<-　追加(Windows側日本語文字コード)

# workgroup = NT-Domain-Name or Workgroup-Name
   workgroup = MYGROUP
   ↓
   workgroup = WORKGROUP　<-　変更(Windowsのワークグループ名を指定)

;   hosts allow = 192.168.1. 192.168.2. 127.
   hosts allow = 192.168.1. 127.　<-　追加(内部からのみアクセスできるようにする)

# If you want to automatically load your printer list rather
# than setting them up individually then you'll need this
;   load printers = yes　<-　行頭に;を追加(プリンタ共有無効化)※Sambaでプリンタを共有しない場合
   load printers = no　<-　追加(プリンタ共有無効化)※Sambaでプリンタを共有しない場合
   disable spoolss = yes　<-　追加(プリンタ共有無効化)※Sambaでプリンタを共有しない場合

[homes]
   comment = Home Directories
   path = %H/samba　<-　追加(/home/ユーザー名/sambaをホームディレクトリにする)
   browseable = no
   writable = yes
   各ユーザ専用のごみ箱機能追加(ここから)
   ※ファイル削除時に自動的にごみ箱へ移動されるようにする
   vfs objects = recycle　<-　ごみ箱の有効化
   recycle:repository = .recycle　<-　ごみ箱のディレクトリ名(/home/ユーザ名/.recycle)
   recycle:keeptree = no　<-　ごみ箱へ移動時にディレクトリ構造を維持しない
   recycle:versions = yes　<-　同名のファイルがごみ箱にある場合に別名で移動
   recycle:touch = no　<-　ごみ箱へ移動時にタイムスタンプを更新しない
   recycle:maxsize = 0　<-　ごみ箱へ移動するファイルのサイズ上限(0:無制限)
   recycle:exclude = *.tmp ~$*　<-　ここで指定したファイルはごみ箱へ移動せずに即削除する

[public]
   comment = Public Stuff
   path = /home/samba
   public = yes
   writable = yes
   only guest = yes

   vfs objects = recycle　<-　ごみ箱の有効化
   recycle:repository = .recycle　<-　ごみ箱のディレクトリ名(/home/ユーザ名/.recycle)
   recycle:keeptree = no　<-　ごみ箱へ移動時にディレクトリ構造を維持しない
   recycle:versions = yes　<-　同名のファイルがごみ箱にある場合に別名で移動
   recycle:touch = no <- ごみ箱へ移動時にタイムスタンプを更新しない
   recycle:maxsize = 0 <- ごみ箱へ移動するファイルのサイズ上限(0:無制限)
   recycle:exclude = *.tmp ~$* <- ここで指定したファイルはごみ箱へ移動せずに即削除する
```

・samba 起動

```bash:bash
[user@centos7 ~]$ sudo systemctl start smb
[user@centos7 ~]$ sudo systemctl enable smb
[user@centos7 ~]$ sudo systemctl start nmb
[user@centos7 ~]$ sudo systemctl enable nmb
```

・SELinux が有効な場合ディフォルトのままでは、
　クライアント（Windows）側からアクセスできないのでSELinux の設定を変更する

```bash:bash
[user@centos7 ~]$ sudo setsebool -P allow_smbd_anon_write=on <- smbdデーモンによる書き込みを許可
[user@centos7 ~]$ sudo setsebool -P samba_enable_home_dirs=on <- ユーザー毎のホームディレクトリの共有を許可
[user@centos7 ~]$ sudo setsebool -P samba_share_nfs=on <- NFSで共有している場合設定が必要

[user@centos7 ~]$ sudo setsebool samba_export_all_rw=on <- smbdにてすべてのファイルの書き込み / 読み出しを許可する。
! セキュリティが低下するので、個別にディレクトリにラベルをつける方法
[user@centos7 ~]$ chcon -R -t public_content_rw_t /home/samba
[user@centos7 ~]$ chcon -R -t public_content_rw_t /home/centos/samba
```