RHEL6.8にアップグレード時にphp-mbstring依存エラーがでる時の対処

# １．はじめに

オンプレ環境で、RHEL6.7のサーバを6.8にアップグレードしました。
isoイメージを使ってアップグレードしたのですが、依存関係の問題でアップグレードが失敗しました。

### 〇注意点
今回のオンプレ環境は富士通製サーバです。RHELの更新はサポート提供のツールを利用している為、isoのメディアを使用した更新手順となっています。
（その他の更新選択肢がない）

# ２．アップデート失敗した

アップデート時に依存関係の確認でphp-commonにエラーが出て更新ができないようです。
どうやらphp-mbstring-5.3.3-47のrpmがメディアに収容されていないようでした。

```
Error: Package: php-mbstring-5.3.3-40.el6_6.x86_64 (installed)
           Requires: php-common(x86-64) = 5.3.3-40.el6_6
           Removing: php-common-5.3.3-40.el6_6.x86_64 (installed)
               php-common(x86-64) = 5.3.3-40.el6_6
           Updated By: php-common-5.3.3-47.el6.x86_64 (updates-server)
               php-common(x86-64) = 5.3.3-47.el6
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
```

※5.3.3-47にアップデートしたいが、php-mbstring-5.3.3-47がインストールできない為インストール失敗している。

# ３．原因の調査

yumでphp-mbstringのrpmバージョンを調べてみたら、5.3.3-40までした存在しませんでした。

```
# yum list php-mbstring
読み込んだプラグイン:product-id, refresh-packagekit, security, subscription-manager
インストール済みパッケージ
php-mbstring.x86_64
```


どうやらphp-mbstringは、rhel-6-server-optional-rpmsというオプションリポジトリの管理
になっているとの事。
参照するリポジトリを追加する必要がありました。

# ４．対応方法

## その１

RHNからダウンロードする。

![2017-03-29_184143.png](https://qiita-image-store.s3.amazonaws.com/0/149632/0b76ef9a-32f6-d6ff-e342-5ba90fb35b53.png)

rpmを検索すると出てくるので、対象バージョンとOSに該当するものをdownloadする。

## その２

yumを使ってインストールする
redhat.repoを編集してrhel-6-server-optional-rpmsリポジトリを有効（enabled = 1）にする

```
vi /etc/yum.repos.d/redhat.repo
[rhel-6-server-optional-rpms]
metadata_expire = 86400
sslclientcert = /etc/pki/entitlement/288980885924363250.pem
baseurl = https://cdn.redhat.com/content/dist/rhel/server/6/$releasever/$basearch/optional/os
ui_repoid_vars = releasever basearch
sslverify = 1
name = Red Hat Enterprise Linux 6 Server - Optional (RPMs)
sslclientkey = /etc/pki/entitlement/288980885924363250-key.pem
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
enabled = 1
sslcacert = /etc/rhsm/ca/redhat-uep.pem
gpgcheck = 1
```

入手可能なphp-mbstringのバージョンを確認してみる

```
# yum --showduplicate list php-mbstring
読み込んだプラグイン:product-id, refresh-packagekit, security, subscription-manager
インストール済みパッケージ
php-mbstring.x86_64                                                       5.3.3-40.el6_6                                                         installed
利用可能なパッケージ
php-mbstring.x86_64                                                       5.3.2-6.el6                                                            rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.2-6.el6_0.1                                                        rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-3.el6                                                            rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-3.el6_1.3                                                        rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-3.el6_2.5                                                        rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-3.el6_2.6                                                        rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-3.el6_2.8                                                        rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-14.el6_3                                                         rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-22.el6                                                           rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-23.el6_4                                                         rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-26.el6                                                           rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-27.el6_5                                                         rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-27.el6_5.1                                                       rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-27.el6_5.2                                                       rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-38.el6                                                           rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-40.el6_6                                                         rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-46.el6_6                                                         rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-46.el6_7.1                                                       rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-47.el6                                                           rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-48.el6_8                                                         rhel-6-server-optional-rpms
php-mbstring.x86_64                                                       5.3.3-49.el6                                                           rhel-6-server-optional-rpms
```

期待通り、5.3.3-47.el6の入手も可能となりました。

# ５．OSアップグレード前の事前作業

サーバがインターネット接続可能な環境で、yumが使えるのであれば、

```
# yum install php php-common
```

を行って、phpだけ先にアップグレードしておく。
その後にOSアップグレードを実施する。

インターネット環境が無い場合は、phpのrpmファイルをダウンロードしておき、転送する。
rpmコマンドでインストールした後にOSアップグレードを実施する。

```
# rpm -Uvh php*rpm
```

今回は、閉域の環境でしたのでダウンロードしたrpmファイルを転送してインストールしました。

# ６．最後に

RHEL6.6→6.7の時はphpの更新が無かった為、気付きませんでした。
データセンタでの作業の場合、後日仕切り直しとなるので辛い記憶が残りました。

作業が終わったら、enabled = **0** に戻すのを忘れずに！

* 参考にしたサイト

[Red Hat 6にphp-mbstringをインストール](https://siguniang.wordpress.com/2013/03/16/php-mbstring-missing-on-red-hat-enterprise-linux-6/)