FreeBSD: perl モジュール、インストールディレクトリ変更

FreeBSD OS をアップデートしたため、その作業に影響され perl もマイナーバージョンアップしてしまったところ、とても重宝している dropbox-api コマンドが動かなくなってしまいました。

> dropbox-api help
Can't locate DateTime.pm in @INC (@INC contains: /usr/local/lib/perl5/5.12/BSDPAN /usr/local/lib/perl5/site_perl/5.12/mach /usr/local/lib/perl5/site_perl/5.12 /usr/local/lib/perl5/5.12/mach /usr/local/lib/perl5/5.12 .) at /usr/local/bin/dropbox-api line 9.
BEGIN failed--compilation aborted at /usr/local/bin/dropbox-api line 9.

/usr/ports/UPDATING を読んでみると、perl モジュールインストールディレクトリ構成が変更になったみたいです。

20130612:
 AFFECTS: users of lang/perl* and any port that depends on it
 AUTHOR: az@FreeBSD.org
 lang/perl5.12 upgrade from version 5.12.4 to 5.12.5
 lang/perl5.14 upgrade from version 5.14.2 to 5.14.4
 lang/perl5.16 upgrade from version 5.16.2 to 5.16.3
 Also was modification to directory structure where
 is perl installed. Instead major.minor.patchlevel now only major.minor.
 The "perl-after-upgrade" script is removed.
 Please rebuild all perl ports and all ports that
 depend in it:
 # portmaster -r perl
 or
 # portupgrade -rf perl
 or
 # pkg install -fR perl

dropbox-api コマンドだけは、/usr/ports からインストールされるパッケージのバージョンが古いため、github からインストールしています。そのための現象だと思いますが、現在 dropbox-api コマンドが使えない状況!

これだから正常に動作しているアプリケーションを更新するのは嫌いだ!

さて、原因は dropbox-api が必要とする perl モジュールが、新しくなった /usr/local/lib/perl5/site_perl/5.12 ではなく、 /usr/local/lib/perl5/site_perl/5.12.4 に残ったままになっているためだと判明しました。 /usr/local/lib/perl5/site_perl/5.12.4 の下のパッケージだけ一括して、アンインストールし、再インストールできれば簡単なのですが、どうやればそれが出来るのかがわからない! 思いつくのは、一つずつパッケージ名を調べて、ports ディレクトリの下で、make deinatall reinstall clean を繰り返すこと。かなり面倒くさい作業になりそうですが、やるしかない。少しでも効率化するために、次のようにします。

  1. cd /var/db/pkg
    grep site_perl */+CONTENTS | grep “5.12.4” | more
    これで、/usr/local/lib/perl5/site_perl/5.12.4 にインストールされているモジュールがどのパッケージに含まれているのかリストアップできます。
  2. cd /usr/ports
    make search key=”p5-libwww” | grep “Path:” | grep “p5-libwww”
    という感じで、パッケージ名の一部を検索し、grep でフィルタリングします。こんな感じでパッケージ名が表示されます。
    「Path:   /usr/ports/www/p5-libwww」
  3. このディレクトリに移動して、
    # make deinstall reinstall clean
    を延々と繰り返します。
  4. /usr/local/lib/perl5/site_perl/5.12.4 の下がほぼ空っぽになれば終了。ディレクトリだけ残る場合がありますが、それは無視していいでしょう。
  5. この後で、dropbox-api コマンドを発行して、動作すれば解決。

なんだかんだで 2時間くらい作業して、ようやく元に戻りました。

> dropbox-api help
Usage: dropbox-api <command> [args] [options]
 Available commands:
 setup get access_key and access_secret
 ls list directory contents
 find walk a file hierarchy
 cp copy file or directory
 mv move file or directory
 mkdir make directory (Create intermediate directories as required)
 rm remove file or directory (Attempt to remove the file hierarchy rooted in each file argument)
 put upload file
 get download file
 sync sync directory (local => dropbox or dropbox => local)
 uid get accound uid
Common Options
 -e enable env_proxy ( HTTP_PROXY, NO_PROXY )
 -D enable debug
See 'dropbox-api help <command>' for more information on a specific command.

あとは、実際に Dropbox サーバーと同期して、以前のように使えるかどうかを確認する予定です。

コメントを残す