CentOS7.3のApache 2.4をRPMでアップデートする方法(2)

# 前回のおさらい

1. RPMビルド環境の構築
2. アップデート先のSRPMファイルの取得と展開
3. SPECファイルの編集
4. rpmbuildでSRPMからRPMファイルを作成する　←　前回はここでエラー
5. RPMファイルでアップデートする

前回はApache2.4のアップデート先のspecファイルの修正まではできたものの、依存性のエラーでRPMファイル作成、インストールまで行き着きませんでした。
前回：[CentOS7.3のApache 2.4をRPMでアップデートする方法(1)](https://qiita.com/tomluck/items/373d61125bb6b7be9562)

# 今回の内容
前回の続きから始めて、最終的にApacheをアップデートするところまでです。

- 残りの依存性の解消(apr-develのアップデート)
- 5.RPMファイルでアップデートする


# apr-develのアップデート(依存性の解消)

CentOS標準リポジトリからインストールできるバージョンが1.5より低いため、httpdのバージョンと合わせることができません。(apr-devel >= 1.5.0)
そこで、apache本体と同様にFC25から持ってきてインストールします。

APRとは、OSとソフトウェアとの違いを吸収するソフトウェアです。
Apache本体と同様にFedoraProjectからSRPMファイル(apr-1.5.2-4.fc25.src.rpm)をダウンロードして展開します。

## SRPMファイルの取得と展開(APR編)

```console
 $ wget https://dl.fedoraproject.org/pub/fedora/linux/releases/25/Everything/source/tree/Packages/a/apr-1.5.2-4.fc25.src.rpm
 $ rpm -ivh apr-1.5.2-4.fc25.src.rpm
```
## SPECファイルの編集(APR編)

fc25用ではなくcentos用にするためにSPECファイルでリリース欄を修正します。
~/rpmbuild/SPECS/apr.specの編集例(ファイルの先頭部分のみ抜粋)

```diff:apr.spec
%define aprver 1

# Arches on which the multilib apr.h hack is needed:
%define multilib_arches %{ix86} ia64 ppc ppc64 s390 s390x x86_64

Summary: Apache Portable Runtime library
Name: apr
Version: 1.5.2
-Release: 4%{?dist}
+Release: 4.1.sample%{?dist}
```

## rpmbuildでSRPMからRPMファイルを作成する(APR編)

```shell-session
$ rpmbuild --bb --clean ~/rpmbuild/SPECS/apr.spec 
エラー: ビルド依存性の失敗:
        libuuid-devel は apr-1.5.2-4.el7.centos.x86_64 に必要とされています
        lksctp-tools-devel は apr-1.5.2-4.el7.centos.x86_64 に必要とされています

```

ビルドの依存性の失敗になったので、apache本体と同様に必要なものをyum installします。

```shell-session
$ sudo yum install libuuid-devel lksctp-tools-devel
（中略）
インストール:
  libuuid-devel.x86_64 0:2.23.2-33.el7_3.2                      lksctp-tools-devel.x86_64 0:1.0.17-2.el7                     

完了しました!
```

依存性を解消しているので、再度、apr.specをビルドすると成功するはずです。

```shell-session
$ rpmbuild --bb --clean ~/rpmbuild/SPECS/apr.spec 
```

## RPMファイルでアップデートする(APR編)
```shell-session
$ sudo yum install ~/rpmbuild/RPMS/apr-devel-1.5.2-4.1.sample.el7.centos.x86_64.rpm 
（中略）
インストール:
  apr-devel.x86_64 0:1.5.2-4.1.sample.el7.centos                                                                              

完了しました!
```
これでApache本体のrpmbuild時のビルド依存性を全て解消することができました。
依存性を解消しているので、再度、httpd.specをビルドすると成功するはずです。

```console
$ rpmbuild --bb --clean ~/rpmbuild/SPECS/httpd.spec 
```

これで、やっと、4. rpmbuildでSRPMからRPMファイルを作成するが完了しました。

# 5.RPMファイルでアップデートする(Apache本体)
いよいよ、Apache本体をアップデートします。

```shell-session
$ sudo yum install ~/rpmbuild/RPMS/httpd-2.4.23-4.1.sample.el7.centos.x86_64.rpm 
(中略)
インストール:
  httpd.x86_64 0:2.4.23-4.1.sample.el7.centos                                   
  httpd-debuginfo.x86_64 0:2.4.23-4.1.sample.el7.centos                         
  httpd-devel.x86_64 0:2.4.23-4.1.sample.el7.centos                             
  httpd-filesystem.noarch 0:2.4.23-4.1.sample.el7.centos                        
  httpd-manual.noarch 0:2.4.23-4.1.sample.el7.centos                            
  httpd-tools.x86_64 0:2.4.23-4.1.sample.el7.centos                             
  mod_ldap.x86_64 0:2.4.23-4.1.sample.el7.centos                                
  mod_proxy_html.x86_64 1:2.4.23-4.1.sample.el7.centos                          
  mod_session.x86_64 0:2.4.23-4.1.sample.el7.centos                             

依存性関連をインストールしました:
  apr-util-ldap.x86_64 0:1.5.2-6.el7        mailcap.noarch 0:2.1.41-2.el7       

完了しました!
```

依存性関連で追加のインストールがありましたが、無事にApache本体をアップデートすることができました。

確認のためバージョンを見てみると無事にバージョンアップされたことが分かると思います。

```shell-session
$ httpd -v
Server version: Apache/2.4.23 (centos)
```

# 動作確認

```shell-session
$ sudo httpd -k start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
```

エラーメッセージが出ていますが、httpd自体は立ち上がります。

```shell-session
$ ps aux | grep httpd
root      5545  0.0  0.0 289820  5108 ?        Ss   11:24   0:00 httpd -k start
apache    5549  0.0  0.0 505104  6608 ?        Sl   11:24   0:00 httpd -k start
apache    5550  0.0  0.0 308432  4328 ?        Sl   11:24   0:00 httpd -k start
apache    5551  0.0  0.0 308432  4328 ?        Sl   11:24   0:00 httpd -k start
apache    5552  0.0  0.0 308432  4328 ?        Sl   11:24   0:00 httpd -k start
apache    5553  0.0  0.0 308432  4328 ?        Sl   11:24   0:00 httpd -k start
```
エラーメッセージはServerNameディレクティブがないという内容です。
出さないようにしたい場合には、/etc/httpd/conf/httpd.confのどこかに下記のようにサーバー名(例ではlocalhost)を記述すれば、エラーメッセージを出さずに起動できます。

```apache
ServerName localhost
```

Apacheを起動しているマシンのIPアドレスを指定してブラウザでアクセスして、テストページが表示されていたら無事に起動しています。

![Apache_TestPage.png](https://qiita-image-store.s3.amazonaws.com/0/129853/98b35b74-4fdd-ee97-1b1c-9b2458e278a9.png)


# おわりに
今回はApacheのアップデートをテーマにしましたが、他のパッケージでも同様にアップデートできると思います。
会社などで開発者が同じOSの開発環境を使っている場合には、一人の開発者がRPMファイルを作成し、アップデート先のRPMファイルを配布すれば環境をそろえることもできるので、もしよければ、実践してみてください。