我正在开发一个项目,需要将所有第三方(读取:CPAN)perl模块安装在perforce存储库中,这样任何依赖于它们的代码都可以成功运行,而无需其他任何人需要手动安装他们。我在尝试安装XML :: Parser时遇到了一个问题。我使用cpanminus来安装我的CPAN模块,所以我在所需的目录中运行cpanm -L . XML::Parser
(之前已经使用过其他模块)并得到了错误:
Expat.xs:12:19: error: expat.h: No such file or directory
我习惯使用Ubuntu和apt-get,但在工作中我必须使用RedHat而且我不确定如何将expat安装到本地目录。我跑了yum search expat
并得到了
expat.i386 : A library for parsing XML.
expat.x86_64 : A library for parsing XML.
所以我尝试yum install --installroot=. expat.i386
并遇到以下错误:
Loaded plugins: rhnplugin, security
error: cannot open Packages index using db3 - No such file or directory (2)
error: cannot open Packages database in ./var/lib/rpm
Traceback (most recent call last):
File "/usr/bin/yum", line 29, in ?
yummain.user_main(sys.argv[1:], exit_code=True)
File "/usr/share/yum-cli/yummain.py", line 309, in user_main
errcode = main(args)
File "/usr/share/yum-cli/yummain.py", line 157, in main
base.getOptionsConfig(args)
File "/usr/share/yum-cli/cli.py", line 187, in getOptionsConfig
self.conf
File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 665, in <lambda>
conf = property(fget=lambda self: self._getConfig(),
File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 240, in _getConfig
self._conf = config.readMainConfig(startupconf)
File "/usr/lib/python2.4/site-packages/yum/config.py", line 804, in readMainConfig
yumvars['releasever'] = _getsysver(startupconf.installroot, startupconf.distroverpkg)
File "/usr/lib/python2.4/site-packages/yum/config.py", line 877, in _getsysver
idx = ts.dbMatch('provides', distroverpkg)
TypeError: rpmdb open failed
我做错了什么?此外,一旦我安装了expat,我不确定如何告诉cpanm在哪里找到它。
答案 0 :(得分:5)
我看到了一些可以帮助你走上正确道路的事情。首先,您想要的包称为expat-devel
。此外,我认为您需要提供--installroot选项的绝对路径,并且您可能不需要向yum提供包扩展,除非这与您构建这些模块的方式相关(即,您通常可以只做yum install expat-devel
)。
看起来你的rpmdb可能有问题,因为你得到了“rpmdb open failed”消息。您可以运行yum check
来查找rpmdb中的问题,但除此之外我不能说具体的包管理器。也许其他人可以在这方面提供更多帮助。
答案 1 :(得分:2)
只需从http://sourceforge.net/projects/expat/下载并安装expat即可 $ ./config $ make $ make install
答案 2 :(得分:1)
好吧,我找到了解决方法。我安装了XML :: Simple。起初它看起来像XML :: Simple需要XML :: Parser,但是在看了一些之后发现它需要XML :: Parser或XML :: SAX,所以我安装了XML :: SAX而得到了XML :: Simple工作。足够满足我的需求。