PHPをバージョンアップする件。手始めに自分のPCでやったら、予想外に面倒な事態になってしまった。

僕のPCのLinux(のパッケージ)には最新のPHPが提供されていないので、PPA(昔流行った「ペン―」じゃないですw)という第三者のパッケージで手軽にバージョンアップしようとした。それを使ってPHP自体の更新はうまく行ったのだが、その後がいけなかった。そのPPAには、どういう訳かPHP以外のパッケージが山ほど入っていたのだ。PHPを入れて少しして、別のパッケージの更新の通知が大量に出て、不思議に思ってそれらの中身を調べたら分かった。

知らない(馴染みのない)パッケージが(通常はないほど)沢山出て来て嫌な感じがしたのだが、その時は少し迷ったものの、「まあいいか」と更新した(これが最悪の選択だった・・・)。が、あとで良く考えてたら、PHPだけでも第三者に依存するのはリスクがあるのに、他の多くのパッケージまで依存するのは危険なことに気付いた。例えば、更新されたパッケージには重要な通信モジュールである、OpenSSLが入っていたのだ。親切で入れたのか、パッケージを分けるのが面倒だったのか、PHPと依存関係があるのか分からないが(更新する前から問題なく動いていたし、依存関係があるなら最初から自動でインストールされるので、最後は理由ではなさそうだ)、さすがにちょっと怖い。今までのPPAではこんなことはなかったので、おかしいと思う。

それで、仕方ないのでPHPのバージョンアップはOSを更新して(OSの正式パッケージで)行うことにして、更新したばかりのPHPを戻した。OSのものはバージョンが一つ古いが、しばらくは使えるだろう。更に、さっき更新されたパッケージも戻そうとしたら、それが一筋縄では行かなかった。。。

パッケージを戻すには、一旦アンインストールして入れ直すか古いバージョンを指定してインストールする必要があるのだが、更新されたパッケージは既にいろいろな依存関係にはまっていて、素直にアンインストールできなくなっていた。いろいろ調べて四苦八苦して、多くは戻せたが、全部は無理だった。

OSを更新(バージョンアップ)すれば直る(リセットされる)可能性はあるが、直らない可能性もあるし、最悪の場合、OSの更新が失敗することもあり得るし、更新するまでおかしな状態のままなのは嫌なので、どうしても元に戻したい。

もう少し試行錯誤はするが(上書きインストールができないかなど)、今のところは、バックアップからリストアするしかなさそうな感じになっている。まったく溜息だ・・・ 手抜きや良く考えずに"OK"を押すのは良くないね。

(22:47) どうしてもリストアは気が進まなかったので(余計なものが残ったり、事態を更に悪化させる可能性があるため)、良く分からないなりにパッケージ管理コマンド(aptitude)を試行錯誤したら直った。基本的には、今までやったとおり、古いバージョンを指定してインストールするか不要パッケージを削除するので良かった。

ただ、ポイントは、それで問題が生じる場合に解決するための対処候補が出て、最初の候補は依存するいろいろなパッケージを削除するとか出て怖いのだが、何度か次候補を出して行くと、仕舞いには問題のパッケージをダウングレードする候補が出る(ことがある)ので、それを実行することだ。そうすると、依存関係がガチガチのものも、魔法のようにうまく直った。それでも駄目な時は、パッケージの依存関係を調べて、インストールや削除の順序を変えるといいようだ。

今日インストールしたパッケージのバージョンを調べた限り、元に戻せたようだが、まだ不安はあるし、とても疲れた。。。 変なPPAには充分注意する必要があるが、なかなかできない。

最後に書かなくてもいい一言: PPAは嫌いでも、Linuxは嫌いにならないで下さいw

 

PS. 最新のPHPにする方法を検索すると、このPPAを使う方法が当たり前のように出て来るが()、みんなこういうことは気にしないのだろうか(気付いていない?)。まあ、Linuxの正式なパッケージだって、信頼性は保証されていないが、どこの誰とも分からない第三者(個人)の作るものなので、そこには誤りや最悪の場合には(提供者が意図するかしないかに関わらず、)マルウェアなどの混入の可能性がある(今は問題なくても、将来の更新時におかしくなる可能性は0ではない)と思うのだが、そうでもないのだろうか。みんな、人柱になる気が充分なのか。

今回特に嫌だったのは、このPPAには目的のパッケージ(PHP)以外のものが多数入っており、目的のパッケージは確認したり使ったりするので問題ないことが分かるにしても、自分が使わない・意識していないパッケージが異常だとかマルウェアだったとしても気付かない可能性が高いことだ。

PS2. PHPを最新にするには、もう一つ方法がある。自分でソースをダウンロードして、ビルドするのだ(これをやった人がPPAを作って提供していることがある。だから、PPAを使うと楽になるのだ)。が、パッケージと違って、状態を最新に保つには、PHPが更新されるたびにビルド・インストールする必要があって、なかなか手間が掛かる。特に、マシンが何台もあると面倒だ。まあ、ビルド・インストールを自動化すればいいが、結構怖いものがある。 でも、それもいいかも知れないと、今思ったw いや、ちゃんとやるなら依存関係のあるモジュールも芋づる式に更新する必要が出て来るから、やっぱり現実的ではなさそうだ。 (12/15 8:13)

  •   0
  •   0

コメントを書く

名前    

メール 

URL