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