CentOS7.3のインストールメモ (2017/4)


以前、7.0が出たときに[まとめた](http://qiita.com/zaburo/items/c07a7fa6fa82e97f6b10)のですが少々古くなってきたり、余計な記述もあるので改めてまとめ。
2017年4月の時点ではバージョンは7.3。

## CentOS7.0と7.3の違い（気づいた範囲）

* ifconfigがまさかの復活。
* visudoでwheelが最初からコメントインされている。

## 検証環境

* MacのVMWare Fusion 8.5.x上にインストール。
* インストール方法は他のコンテンツに譲ります。

## VMWare Fusion独自問題

インストール時にネットワークをONにすればいいのですが、忘れた場合は、

/etc/sysconfig/network-scripts/ifcfg-ens***

を編集して、ONBOOT=yesとします。

>***は環境依存。ifconfig等（復活してる）で確認します。

## 基本設定

### yum update

何はなくともひとまずyum update

```bash
yum update -y
```

### SELinuxの無効化

標準ではSELinuxが有効化されていますので無効化します。

```
getenforce
Enforcing
```

/etc/sysconfig/selinuxを編集します。

```
#SELINUX=enforcing
SELINUX=disabled
```

そしてrebootします。

### 作業ユーザーの追加

作業ユーザーを追加し、パスワードを設定します。

```bash
useradd hoge
passwd hoge
```

### sudoできるようにする

必要に応じてユーザーがsudoを利用できるようにします。

```bash
visudo
```

どうやら7.3では標準でWheelグループがsudoできるようになっているようです（コメントインされている）。

```
%wheel  ALL=(ALL)       ALL
```

では、作業ユーザーをwheelに追加しましょう。

```bash
gpasswd -a hoge wheel
```


### 証明書でログインできるようにする

ここからは作成したユーザーでの操作を想定しています（必要に応じてsudoします）。
sshdは標準でインストール・起動されておりrootでのログインも許可状態になっているため、一般ユーザーが証明書のみでログインできるように設定を変更します。

#### 鍵の置き場所を作る

鍵を置く場所を作成しておきます。

```bash
mkdir ~/.ssh
chmod 700 .ssh
```

### 鍵を生成（ローカルでの作業）

鍵はどこでも作れますが、まあ、ローカルで作ります。既に鍵がある場合は省略して下さい。

```bash
mkdir ~/.ssh
chmod 700 ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa
```

とすると、id_rsa（秘密鍵）とid_rsa.pu（公開鍵）が生成されます。
パーミッションを変更しておきます。

```bash
chmod 600 ~/.ssh/*
```

#### 公開鍵の転送（ローカルでの作業）

ローカルの公開鍵をリモートにコピーします。

```bash
scp ~/.ssh/id_rsa.pub username@192.168.0.100:~/.ssh/authorized_keys
```

### sshd_configの設定

標準ではrootによるログイン、パスワードによるログインなどが許可されているため禁止します。
必要に応じてポート番号なども変更してもいいでしょう。

```diff:/etc/ssh/sshd_config
-PasswordAuthentication yes
+PasswordAuthentication no

-#PermitRootLogin yes
+PermitRootLogin no
```

設定が完了したらsshdを再起動しておきます。

```bash
sudo systemctl restart sshd.service
```

rootでログインできないか確認しておきましょう。

最低限の設定は以上です。

## LAMP環境のセットアップ

ここからはLAMP環境のセットアップをしていきます。なお、私はLaravel(5.4以上)を利用するので、そのための設定を行います。

## httpd

まずはApacheから。操作は基本sudoで。

### インストールと永続化

```bash
sudo yum install httpd -y
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
```

サービスの永続化が有効になっているかは

```bash
sudo systemctl list-unit-files  -t service | grep httpd
```

で確認できます（めんどくさい）。

### 最低限の設定

CentOS7.xで普通にyum install httpdとするとApache2.4.xがインストールされます（6.xで2.2.x)。2.4.xと2.2.xでは若干設定の書き方が違うので注意が必要です。

#### Index表示の不許可と.htaccessの許可

\<Directory "/var/www/html">の内部を編集します。
2.2.xの様に-Indexesという表現は使えないようで、Indexesを削除します。

```diff:/etc/httpd/conf/httpd.conf
-Options Indexes FollowSymLinks
+Options FollowSymLinks

AllowOverride None
AllowOverride All
```

設定が完了したらhttpdを再起動しておきます。

```bash
sudo systemctl restart httpd.service
```

### Firewallの設定

Webを公開するために80番ポートを開放します。なお、CentOS7.xでは6.xのiptalbesに変わりfirewalldが利用されています。
なお、firewalldの詳細について[こちら](http://www.kakiro-web.com/linux/firewalld.html)が参考になります。

#### 80ポートの開放

80番ポートを開放します。設定したらreloadして設定内容を反映させます。

```bash
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload
```

>サービス名でも追加できるようです。

#### 設定の確認

設定の確認は下記のように行います。

```bash
sudo firewall-cmd --list-all
```

portのところに80/tcpが追加されています。

```diff
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: dhcpv6-client ssh
+ ports: 80/tcp
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
```

#### ルールの削除

ルールの削除は下記のように行います。

```bash
sudo firewall-cmd --permanent --remove-port=80/tcp
```

httpdの設定は以上です。

## PHP

Laravel5.5からはPHP7.0以上が稼働条件になるようですので、ここではPHP7.0をインストールしておきます。

### remiレポジトリのインストール

なお、標準でインストールされるPHPは5.4.16のようなので、PHP7をインストールするためにremiリポジトリを追加します。

```bash
sudo yum install epel-release
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

>remiに先立ち、epelが必要！と起こられるのでまずはepleを入れています。

### 各モジュールのインストール

```php
sudo yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-xml php-zip
```

Apacheを再起動しておきます。

```bash
sudo systemctl restart httpd.service
```

## MySQLのインストール

CentOS7.xでは基本的にMariaDBがインストールされてます。が、ここではMySQLをインストールしたいと思います。

### リポジトリの追加

```bash
sudo rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
```

最新のURLは[ここ](https://dev.mysql.com/downloads/repo/yum/)からたどれます。

### インストール

```bash
sudo yum install mysql-community-server
```

### （暫定）パスワードの確認

#### 初回起動

```bash
sudo systemctl start mysqld.service
```

確認

```bash
sudo cat /var/log/mysqld.log | grep 'temporary password'
2017-04-05T05:59:22.232627Z 1 [Note] A temporary password is generated for root@localhost: pf4:x&+oMHes
```

>pf4:x&+oMHesというのが暫定パスワード。

#### mysql_secure_installationの実行

```bash
mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: #取得したパワードを入れる
```

いろいろ聞いてきますが、基本的にはYes！で。パスワードは単純だと怒られます。

### my.cnfの設定

いじればきりがないのですが、とりあえず下記の2つを追加。

* パスワードの有効期限をOFF
* 文字コードをUTF8に

MySQL5.7.xからパスワードの有効期限が標準で1年に設定されているので1年後の突然のサービス停止とならないように有効期限をOFF(0）にしておきます。文字コードの変更はお決まりで。

```diff:/etc/my.cnf
[mysqld]

+default_password_lifetime = 0
+character-set-server = utf8
```

#### 再起動して永続化

my.cnfの設定を反映させるためにMySQLを再起動します。そして、サービスを永続化させておきます。

```bash
sudo systemctl restart mysqld.service
sudo systemctl enable mysqld.service
```

## Composerのインストール

近代PHPに必須のComposerをインストールします。
取得して、/usr/local/bin以下にリネームしてコピーします。

```bash
cd
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
```

## Laravelの動作確認

Laravelをダウンロードして動作を確認しておきます。確認時のLaravelのバージョンは5.4.16でした。
今回はApacheのドキュメントルート以下にダウンロードしとりあえず動くかどうか見ておきます。

### /var/www/htmlのパーミッション変更（任意）

composerはroot権限では実行できないため、利用ユーザーに書込み権限を与えます（ここではオーナーを変更してます）。

```bash
cd /var/www
sudo chown -R user:user user:user #userは操作するユーザー
```

html内でcreate-projectをしています。

```bash
cd html
composer create-project laravel/laravel laravel
```

storageディレクトリにパーミッションを与えます（これをしないとエラーとなります）。

```bash
cd laravel
chmod -R 777 storage
```

設定ができたら http://servername/laravel/public にアクセスしてみて下さい。例の画面が出ていればOKです。