2018年8月8日水曜日

FreeBSD xorg の proto 関連で遭遇したトラブルの話

 すごく久しぶりの書き込みかもしれない…。
別に書き込みたいネタがなかったからなのだが…。

 で,今回は,これまた久しぶりに FreeBSD に関することを書いてみよう。
今回は,FreeBSD のアプリケーションのアップデートの話である。 最初に何が問題だったかを書いておこう。 問題の発端は,FreeBSD の ports のアップデートを行った際,xorg の XXXXproto (XXXXはいろいろな名前) という名前の ports が xorgproto という ports に統合されたことにある。 それに対応して正しい処理ができていればよかったのだが,そこでテキトーに対応したためにハマってしまった,というのが今回の話である。

 まず,何をしてしまったかというと,2018/8 に
# portsnap fetch upadte
と ports の更新を行った。 その後,portmaster を行ったのだが,xorg の XXXXproto 関連で15〜20個も更新できないと出てきた。 portupgrade なら,エラーを起こしてないアプリケーションをアップデートしてくれるので,とりあえず portupgade しておいた。

 しかし,そのままだと気持ち悪いので,
/usr/ports/UPDATING
を見てみた。 UPDATING はいろいろ気をつけた方がよいアップデート情報が書いてあったりする。

 そこで,xorg で検索してみると,2018/7/31 付で以下のような文章が書いてあった。
20180731:
  AFFECTS: users of x11/xorg and all ports with USE_XORG=*proto
  AUTHOR: zeising@FreeBSD.org

  The xorg *proto packages have all been merged into one package,
  x11/xorgproto.  This might cause issues with upgrading.  If you
  get conflicts between xorgproto and old *proto packages, please
  remove the old package and install xorgproto again.

  In order to remove all orphaned ports, including all *proto port,
  the following can be used after the ports tree has been updated:
  pkg version -l \? | cut -f 1 -w | grep -v compat | xargs pkg delete -fy

 何が書いてあるかというと,x11/xorg で XXXXproto というのは,すべて x11/xortproto に統合されたので,xorgproto と古い XXXXproto は衝突が起こる。 なので,古いパッケージ(アプリケーション)は消して,xorgproto をインストールし直しなさい,と書いてある。
 しかし,何を思ったか,私は古い XXXXproto というアプリケーションを消しただけにしてしまった。 それがすべての始まりだった。

 とりあえずはそれで portupgrade できたので,見た目はよさげだった。 しかし,xorgproto をインストールしてないので,x-windows に関係するアプリケーションの更新やインストールの際に困ったことが起こる。 それが顕在化したのが,ImageMagick のバージョンを 6.9.9 から 7.0.7 にあげようとした時だった。

 ImageMagick は,いろんな画像の処理をするのに,特にデジカメの写真の処理をするのに使っている。 今までは ver 6 だったのだが,そろそろ世の中 ver 7 になっているので,わがサーバーでも ImageMagick 7 にしようと思ったのだった。 FreeBSD の場合,アプリケーションはバイナリーをそのままインストールする手もあるが,若干更新が遅れるので,私は ports を使ってインストール/更新を行っている。 そこで,今回も /usr/ports/graphics/ImageMagick7/ からインストールしようと思ったのだった。 しかし,既に ImageMagick は ver 6 (ve 6.9) がインストールされていた。 となると,まずはこの ver 6.9 を deinstall しないといけない。 FreeBSD の ports では,ImageMagick ver 6 と ver 7 は,別のアプリとして登録されている。 同じアプリとして登録されていれば,単にアップグレードすればいいのだが,ver 6 と ver 7 ではコマンド名が違うなどがあり,全くの別のソフトという扱いになっている。 しかし,同じ場所にインストールされるので衝突 (conflict) が起こるので,一度古い方を消さないといけないのだった。

 そこで,pkg delete で ver 6 を消そうと思った。 しかし,ここで問題が起こった。 なぜか emacs まで消そうとするのだった。 なんでやろ?と思ったが,とりあえずは
# pkg delete -fy ImageMagick-6.6.9....
として ImageMagick 6 のみを消しておいた。 「-fy」オプションをつけると,依存関係にあるアプリは消さずに,対象となるアプリケーションのみ削除してくれる。

 そして,ImageMagick7 (ほんとは ImageMagick7-nox11) をインストールしてみた。これは特に問題なくインストールできた(make install clean)。 しかし,その後,エラーが出た。エラーが出たのは,emacs を起動した時だった。なんでも「libMagick...」みたいなファイルがないから起動できない,と出た。 困ってしまった。editor は主に emacs を使っているので,emacs が使えないとかなり辛い。vi も使えないことはないが,慣れてないのでいまいちだし…。

 そこで,emacs を強制 portupgrade してみることにした。理由は,pkg delete の際に,emacs が ImageMagick に依存しているみたいなので,ImageMagick を ver6 から ver7 にしたために,うまくいってないんだと思ったから。しかし,emacs を入れ直そうとすると,何故か ImageMagick 6.6.9... を入れようとする。 それって,せっかく入れた ImageMagick7 と干渉するやん…。で,はたと困ってしまった。しかし,emacs がないと困るので,ImageMagick7 を消して,ImageMagick6 を入れ直して emacs を使えるようにしよう,と思った。

 しかし,そこで問題が発生した。なぜかエラーで ImageMagick がインストールできない。 インストールしようとすると,X.h というファイルがないだの,Xmd.h がないだの,Xosdefs.h がないだの,と文句を垂れまくった。 仕方ないので,別マシンの
/usr/local/incluce/X11/
の中にあるファイルをコピーして持ってきたおいた。すると,なんとか ImageMagick 6 がインストールされた。 そして,emacs も復活したのだった。

 しかし,なんで emacs が ImageMagick に依存するんだろう?と思って,
/usr/ports/editor/emacs/
で,
make config
としてみた。 すると,emacs の設定の Graphics support の中に
MAGICK   ImageMagick image processing support
という項目があり,チェックされていた。 だから,emacs なのに ImageMagick に依存してたんだ,とわかった。

 そこで,make config でこのチェックを外してから emacs を入れ直した。 それから ImageMagick を ver 7.0.7 に上げておいた。 これで,emacs も ImageMagick もうまく働いて言うことなし,になった。

 しかし,やはり問題は残っていた。 どれかのアプリのアップデートの際に,やはり X.h がないとか言われてインストールできなかった。 これは問題が直ってない,と考えて,もう一度 /usr/ports/UPDATING を見直してみた。 そしたら,なんのことはない,/usr/ports/X11/xorgproto/ を入れ直せ,と書いてあるじゃないか…。 ということで,/usr/ports/X11/xorgproto/ を入れ直したら,何も問題はなくなった…。 あの時間は何だったんだろう…。と思った,週末でした。

0 件のコメント: