PEAR：but it is not a valid package archiveとなってしまう時の対処

## 背景
pearでpackageをインストールしようと思ったらコケた

## 環境

```console
# cat /etc/system-release
CentOS release 6.6 (Final)
# pear version
PEAR Version: 1.9.4
PHP Version: 5.6.5
Zend Engine Version: 2.6.0
Running on: Linux xxx.yyy.zzz.jp.internal 2.6.32-504.1.3.el6.x86_64 #1 SMP Tue Nov 11 17:57:25 UTC 2014 x86_64
```

## 結果
アップグレード失敗するpearのArchive/Tar.phpを手動でコピーしたらupgrade、installできた

```console
# pear upgrade Archive_Tar
downloading Archive_Tar-1.3.13.tgz ...
Starting to download Archive_Tar-1.3.13.tgz (19,891 bytes)
.......done: 19,891 bytes
could not extract the package.xml file from "/tmp/pear/download/Archive_Tar-1.3.13.tgz"
Download of "pear/Archive_Tar" succeeded, but it is not a valid package archive
Error: cannot download "pear/Archive_Tar"
Download failed
upgrade failed
# cd /tmp/pear/download/
# tar -zxvf Archive_Tar-1.3.13.tgz
package.xml
Archive_Tar-1.3.13/Archive/Tar.php
Archive_Tar-1.3.13/docs/Archive_Tar.txt
# mv /usr/share/pear/Archive/Tar.php /usr/share/pear/Archive/Tar.php.org
# cp /tmp/pear/download/Archive_Tar-1.3.13/Archive/Tar.php /usr/share/pear/Archive/
```

## やったことの手順
### PHP_CodeSnifferのインストール

```console
# pear install PHP_CodeSniffer
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
downloading PHP_CodeSniffer-2.2.0.tgz ...
Starting to download PHP_CodeSniffer-2.2.0.tgz (460,611 bytes)
.............................................................................................done: 460,611 bytes
could not extract the package.xml file from "/tmp/pear/download/PHP_CodeSniffer-2.2.0.tgz"
Download of "pear/PHP_CodeSniffer" succeeded, but it is not a valid package archive
Error: cannot download "pear/PHP_CodeSniffer"
Download failed
install failed
```
ファイルはダウンロード出来たが、Archiveファイルの解凍？でこけてるっぽい  
ちなみにtarもzipもインストールされている

### pearを最新にしてみる
phpを5.6にしているせいかと思ってpearを更新してみる

```console
# yum update --enablerepo=remi-php56 php-pear
読み込んだプラグイン:fastestmirror, presto
更新処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: s3-mirror-ap-northeast-1.fedoraproject.org
 * extras: ftp.tsukuba.wide.ad.jp
 * remi-php56: remi.kazukioishi.net
 * updates: ftp.tsukuba.wide.ad.jp
更新と設定されたパッケージがありません。
```
はい。最新でした。

### pear の更新状況を確認する
```console
# pear list-upgrades
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
PEAR.PHP.NET AVAILABLE UPGRADES (STABLE):
=========================================
CHANNEL      PACKAGE        LOCAL          REMOTE          SIZE
pear.php.net Archive_Tar    1.3.7 (stable) 1.3.13 (stable) 19.5kB
pear.php.net Console_Getopt 1.2.3 (stable) 1.4.0 (stable)  4.5kB
pear.php.net PEAR           1.9.4 (stable) 1.9.5 (stable)  284kB
pear.php.net XML_RPC        1.5.4 (stable) 1.5.5 (stable)  32kB
pear.php.net XML_Util       1.2.1 (stable) 1.2.3 (stable)  16.8kB
```
いろいろアップデートがある！あやしいArchive_Tarも！！

### pearのpackageを全てアップグレードしてみる
```console
# pear upgrade
WARNING: "pear/XML_RPC" is deprecated in favor of "pear/XML_RPC2"
WARNING: "pear/Console_Getopt" is deprecated in favor of "pear/Console_GetoptPlus"
downloading XML_Util-1.2.3.tgz ...
Starting to download XML_Util-1.2.3.tgz (17,134 bytes)
......done: 17,134 bytes
could not extract the package.xml file from "/tmp/pear/download/XML_Util-1.2.3.tgz"
Download of "pear/xml_util" succeeded, but it is not a valid package archive
Error: cannot download "pear/XML_Util"
downloading Archive_Tar-1.3.13.tgz ...
Starting to download Archive_Tar-1.3.13.tgz (19,891 bytes)
...done: 19,891 bytes
could not extract the package.xml file from "/tmp/pear/download/Archive_Tar-1.3.13.tgz"
Download of "pear/archive_tar" succeeded, but it is not a valid package archive
Error: cannot download "pear/Archive_Tar"
downloading PEAR-1.9.5.tgz ...
Starting to download PEAR-1.9.5.tgz (290,006 bytes)
...done: 290,006 bytes
could not extract the package.xml file from "/tmp/pear/download/PEAR-1.9.5.tgz"
Download of "pear/pear" succeeded, but it is not a valid package archive
Error: cannot download "pear/PEAR"
downloading XML_RPC-1.5.5.tgz ...
Starting to download XML_RPC-1.5.5.tgz (31,862 bytes)
...done: 31,862 bytes
could not extract the package.xml file from "/tmp/pear/download/XML_RPC-1.5.5.tgz"
Download of "pear/xml_rpc" succeeded, but it is not a valid package archive
Error: cannot download "pear/XML_RPC"
downloading Console_Getopt-1.4.0.tgz ...
Starting to download Console_Getopt-1.4.0.tgz (4,534 bytes)
...done: 4,534 bytes
could not extract the package.xml file from "/tmp/pear/download/Console_Getopt-1.4.0.tgz"
Download of "pear/console_getopt" succeeded, but it is not a valid package archive
Error: cannot download "pear/Console_Getopt"
Download failed
upgrade failed
```
全てコケた。。。  PHP_CodeSnifferをインストールした時と同じエラー

### Archive/Tar.phpを手動でおきかえちゃう
アーカイブのダウンロードは成功しているので手動で解凍、配置しちゃう  
元のファイルは念のためバックアップしておく

```console
# cd /tmp/pear/download/
# tar -zxvf Archive_Tar-1.3.13.tgz
package.xml
Archive_Tar-1.3.13/Archive/Tar.php
Archive_Tar-1.3.13/docs/Archive_Tar.txt
# mv /usr/share/pear/Archive/Tar.php /usr/share/pear/Archive/Tar.php.org
# cp /tmp/pear/download/Archive_Tar-1.3.13/Archive/Tar.php /usr/share/pear/Archive/
```

### 再度pearのpackageをアップグレードしてみる
***
```console
# pear upgrade
WARNING: "pear/XML_RPC" is deprecated in favor of "pear/XML_RPC2"
WARNING: "pear/Console_Getopt" is deprecated in favor of "pear/Console_GetoptPlus"
downloading PEAR-1.9.5.tgz ...
Starting to download PEAR-1.9.5.tgz (290,006 bytes)
............................................................done: 290,006 bytes
downloading XML_RPC-1.5.5.tgz ...
Starting to download XML_RPC-1.5.5.tgz (31,862 bytes)
.........done: 31,862 bytes
downloading Archive_Tar-1.3.13.tgz ...
Starting to download Archive_Tar-1.3.13.tgz (19,891 bytes)
...done: 19,891 bytes
downloading Console_Getopt-1.4.0.tgz ...
Starting to download Console_Getopt-1.4.0.tgz (4,534 bytes)
...done: 4,534 bytes
downloading XML_Util-1.2.3.tgz ...
Starting to download XML_Util-1.2.3.tgz (17,134 bytes)
...done: 17,134 bytes
upgrade ok: channel://pear.php.net/Archive_Tar-1.3.13
upgrade ok: channel://pear.php.net/Console_Getopt-1.4.0
upgrade ok: channel://pear.php.net/XML_Util-1.2.3
upgrade ok: channel://pear.php.net/PEAR-1.9.5
upgrade ok: channel://pear.php.net/XML_RPC-1.5.5
PEAR: Optional feature webinstaller available (PEAR's web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)
PEAR: To install optional features use "pear install pear/PEAR#featurename"
```
アップグレード出来た！

### 再度PHP_CodeSnifferのインストール
```console
# pear install PHP_CodeSniffer
downloading PHP_CodeSniffer-2.2.0.tgz ...
Starting to download PHP_CodeSniffer-2.2.0.tgz (460,611 bytes)
.............................................................................................done: 460,611 bytes
install ok: channel://pear.php.net/PHP_CodeSniffer-2.2.0
```
インストールできた！  
  
根本の解決にはなっていないし   
他にいい方法があるかもしれないけど、そこはプロに任せます  
pearのアップグレード時にdeprecatedのworning出てたけど開発環境だし今回は無視  
気になる人はちゃんとインストールしよう

```console
# pear install XML_RPC2
downloading XML_RPC2-1.1.2.tgz ...
Starting to download XML_RPC2-1.1.2.tgz (67,331 bytes)
.................done: 67,331 bytes
downloading HTTP_Request2-2.2.1.tgz ...
Starting to download HTTP_Request2-2.2.1.tgz (107,339 bytes)
...done: 107,339 bytes
downloading Cache_Lite-1.7.16.tgz ...
Starting to download Cache_Lite-1.7.16.tgz (32,997 bytes)
...done: 32,997 bytes
downloading Net_URL2-2.1.1.tgz ...
Starting to download Net_URL2-2.1.1.tgz (19,848 bytes)
...done: 19,848 bytes
install ok: channel://pear.php.net/Cache_Lite-1.7.16
install ok: channel://pear.php.net/Net_URL2-2.1.1
install ok: channel://pear.php.net/HTTP_Request2-2.2.1
install ok: channel://pear.php.net/XML_RPC2-1.1.2

# pear install Console_GetoptPlus-1.0.0RC1
downloading Console_GetoptPlus-1.0.0RC1.tgz ...
Starting to download Console_GetoptPlus-1.0.0RC1.tgz (22,565 bytes)
........done: 22,565 bytes
install ok: channel://pear.php.net/Console_GetoptPlus-1.0.0RC1
```

### 参考にさせて頂いたURL
http://phpobenkyo.seesaa.net/article/410455059.html