[centos-users 1134] Re: libexpat.so.1の作り方について

Takeshi Kusune kusune @ sfc.wide.ad.jp
2009年 5月 10日 (日) 10:55:32 JST


楠根です。

(2009/05/09 18:21), Tomoyuki Tago さんは書きました:
> # rpm -ivh avast4workstation-1.3.0-1.i586.rpm 
> するのですが、
> エラー: 依存性の欠如:
>         libexpat.so.1 は avast4workstation-1.3.0-1.i586 に必要とされています
> といわれてしまい、インストールすることができません。

こうした場合、大きくわけて以下の二つの課題が存在します。
 - 必要な library を利用できるようにすること
 - library が利用できることを RPM の database に登録すること

必要な library の入っている RPM package を rpm コマンド等で install すれば、
RPM の database への登録も自動で行なわれますから、普通はそうすべきです。

RPM を使用せずに別の手段で library を install したとしても、
RPM の database に登録されていない限り、
RPM 系のコマンドからは依存関係が解決できないと言われてしまいます。


という前提で。

> 自分のCentOS5.3内にlibexpatの名を持つファイルとして
> /lib、/lib64以下にlibexpat.so.0.5.0が、/usr/lib、/usr/lib64には前記ディレクトリの
> libexpat.so.0.5.0へのシンボリックリンクlibexpat.soがあったので、
> 素人なりに
> /lib、/lib64にはlibexpat.so.0.5.0へのシンボリックリンクlibexpat.so.1を、
> /usr/lib、/usr/lib64にはlibexpat.soへのシンボリックリンクlibexpat.so.1を
> それぞれ作成し、

基本的には soname が違うものは互換性がないものと考えるべきなので、
libexpat.so.0.x.x を libexpat.so.1 として利用するのは無理があります。

configure への記述(LIBCURRENT/LIBREVISION/LIBAGE)から見ると、
interface 自体(関数や変数等)の追加・削除などはないようですが、
library の動作として何らかの仕様変更が入っているように見えます。

expat の最近の各 version の source を調べてみましたが、
1.95.x までが libexpat.so.0 で 2.0.x が libexpat.so.1 のようですから、
libexpat.so.1 が必要なら expat-2.0.x を install すべきです。

CentOS 5.3 までは expat-2.0.x は入っていないようですから、
他から持ってくるしかないと思います。



とはいうものの、avast4workstation の package を install して、
それぞれの file に対し ldd をかけて library の link 状況を見たところ、
実際には libexpat.so.1 を link している binary はないようです。
ですから、本物の libexpat.so.1 を用意する必要はないようにも見えます。

ということで、あまりおすすめはしませんが、
 - 依存関係を無視して install してしまう
 - libexpat.so.1 が install されているように RPM database をごまかす
という方法があるにはあります。

前者は rpm コマンドでの install 時に --nodeps をつけるだけです。
依存関係を完全に無視しますので、他の必要な package は自分で install して下さい。
また、ことあるごとに warning が出たり upgrade に失敗したり、といった、
運用上の不都合が発生する可能性はあります。

後者は dummy package を install する方法です。
例として spec file をつけておきます。これを build したものが使えると思います。
もし今後本物を install する時には消すことになると思います。
--
Takeshi Kusune <kusune @ sfc.wide.ad.jp>

<<expat2-dummy.spec>>
--------------------------------------------------------------------
Summary: Dummy package for libexpat.so.1
Name: expat2
Version: 1.99
Release: 0.5
License: GPL
Group: System Environment/Libraries
Requires: libexpat.so.0
Provides: libexpat.so.1
Conflicts: expat >= 2.0
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
Packager: Takeshi Kusune <kusune @ sfc.wide.ad.jp>
BuildArch: noarch

%description
This package provides dummy symlink for libexpat.so.0 as libexpat.so.1.

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{_libdir}
ln -s libexpat.so.0 $RPM_BUILD_ROOT%{_libdir}/libexpat.so.1

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%{_libdir}/libexpat.so.1
--------------------------------------------------------------------


centos-users メーリングリストの案内