Sunday, July 29, 2007

RPM で screen をインストールするときに手間取った件

screen というのは、UNIX ライクな OS で動く仮想端末管理プログラム。SonicMQ をフォアグラウンドで起動してそのままにしておき、落としたいときに Ctl-C で終了させるということが仕事で必要になったので導入することにした。

まず、自宅の Ubuntsu に導入してみた。これは

# apt-get install screen

で一発。簡単に完了。

次に、本番環境となっているデータセンタの RedHat Linux へのインストールに取り掛かる。Web 上の RPM リポジトリ から screen-4.0.2-1.i686.rpm を取得して、rpm コマンドを下のように実行してインストールしたが、

# rpm -ivh screen-4.0.2-1.i686.rpm

これに対し、libelf と libtinfo というライブラリに依存しているというエラーメッセージが出た。Web 上の RPM リポジトリ でも依存しているパッケージがリストされており、そこにもこれらが表示されていた。そこから libelf-0.8.2-4.i686.rpm と ncurses-5.2-34.i686.rpm を取得して、rpm コマンドでインストールを試みた(libtinfo は ncurses パッケージに含まれるということだった)。

しかし、libelf の方はうまくいったが、ncurses の方は、もっと新しい ncurses パッケージがすでにインストールされているというエラーが出てしまった。

これには困った。問題は、なぜインストール済みの新しい ncurses パッケージには libtinfo が含まれていないのかということだ。先に screen をインストールした Ubuntsu マシンを調べてみると、libtinfo というライブラリは存在していない。

そこでもっと新しい screen のパッケージ screen-4.0.2-48.2.i586.rpm を取得して、

# rpm -ivh screen-4.0.2-48.2.i586.rpm

を実行すると、今度はうまくインストールできた。このパッケージは libtinfo にも libelf にも依存していないので、先にインストールした libelf も

# rpm -e libelf

で削除した。

おそらく古い screen では libtinfo ライブラリを使用しており、それが最新だった頃の ncurses パッケージにも libtinfo が含まれていたのだろう。しかし、新しい screen では libtinfo は必要なくなっており、ncurses パッケージにもそれは含まれなくなってしまった。そういうわけで、新しい ncurses パッケージがインストールしてあるマシンに古い screen をインストールしようとした結果、こういう問題がおきたということなのだろう。