pearコマンドが動かない時の復旧方法

たまたま古いサーバを触っている時に、pearコマンドが動かない事に気が付いた。

# pear upgrade-all
HTTP error, got response: HTTP/1.1 410 Gone
Didn't receive 200 OK from remote server. (HTTP/1.1 410 Gone)

以前も同じ事があって直したのだけど、ちょっと今回復旧方法を間違えたので、その方法も書いておく。


PEAR - PHP Extension and Application Repository
に書かれている通り、

pear upgrade --force PEAR-1.3.6 Archive_Tar-1.3.1 Console_Getopt-1.2
pear upgrade --force PEAR-1.4.11
pear upgrade PEAR

もしくは

pear upgrade --force http://pear.php.net/get/Archive_Tar http://pear.php.net/get/XML_Parser http://pear.php.net/get/Console_Getopt-1.2.2
pear upgrade --force http://pear.php.net/get/PEAR-1.3.3 (1.3.3より古いバージョンを使用している場合)
pear upgrade --force http://pear.php.net/get/PEAR-1.4.3.tar
pear upgrade PEAR

で最新版にアップグレードできる。

だけど、今回は忘れていた事もあり、PEAR-1.3.3を先にインストールしてしまった。
こうなるとpear upgrade --forceが以下の様に使えなくなる。

# pear upgrade --force http://pear.php.net/get/Archive_Tar-1.3.1

Fatal error: Call to undefined function:  getopt2() in /usr/share/pear/System.php on line 71

ので、

# pear download Console_Getopt-1.2.2

としてConsole_Getoptをダウンロード、解凍してGetopt.phpを現物のものに上書きする。
今回は/usr/share/pear/Consoleだった。

これでOK。あとは

pear upgrade --force http://pear.php.net/get/Archive_Tar http://pear.php.net/get/XML_Parser
pear upgrade --force http://pear.php.net/get/PEAR-1.4.3.tar
pear upgrade PEAR
pear upgrade-all

等々やって最新版にもっていくだけ。

via Bug #5906 :: Upgrading PEAR package removes pear command