如何确定特定的RedHat版本(RHEL4,RHEL5 ...)是否包含某个包(或某个版本的包)?对于Debian和Ubuntu,有packages.debian.org和packages.ubuntu.com; RedHat有类似的网站吗?
注意:我不想安装所有版本只是为了查看一些软件包版本:-)
因为我必须在通过kickstart进程构建的多个Oracle Linux服务器上安装多个版本的Python,所以我想为yum存储库构建一个python rpm.我能够使用'make altinstall'手动构建Python,它不会安装在你的默认系统Python安装上,所以我认为这是要走的路.
经过多次试验和错误,我设法用.bz2 python 2.7软件包开始构建rpm - 但是现在当我尝试安装它时,我收到一个错误:
error: Failed dependencies:
/usr/local/bin/python is needed by Python-2.7.2-1.i386
Run Code Online (Sandbox Code Playgroud)
什么...... ??? Python是我正在尝试安装的!系统默认的Python(2.4)在/ usr/bin/python中!我的python目录的原型位置是/tmp/python2.7(可执行文件是/tmp/python2.7/bin/python2.7).那为什么要查看/ usr/local/bin?
这是我的RPM SPEC的核心:
%prep
%setup -q
%build
./configure --prefix=/tmp/python2.7
make
%install
make altinstall
Run Code Online (Sandbox Code Playgroud)
我仔细看看rpm构建日志,我看到:
Requires: /bin/sh /tmp/python2.7/bin/python2.7 /usr/bin/env /usr/local/bin/python libc.so.6 libc.so.6(GLIBC_2.0)...[a lot more...]
Run Code Online (Sandbox Code Playgroud)
好的,所以有/ usr/local/bin进来的地方......现在,问题是,它是如何确定这些要求的呢?我说错了吗?我需要覆盖一些东西吗?
像许多rpm新手一样,我得到了构建部分,但我并没有真正"理解"在rpmbuild结束时发生的事情以及实际放入rpm文件的内容(除了你在%files中指定的文件)然后是什么实际上在你进行rpm安装时会发生.
任何人都可以建议为什么我的安装失败或我可能会读到什么来理解为什么我的rpm构建需要我正在尝试构建的东西?
我正在使用distutils从我的项目中创建一个rpm.我有这个目录树:
project/
my_module/
data/file.dat
my_module1.py
my_module2.py
src/
header1.h
header2.h
ext_module1.cpp
ext_module2.cpp
swig_module.i
setup.py
MANIFEST.in
MANIFEST
Run Code Online (Sandbox Code Playgroud)
我的setup.py:
from distutils.core import setup, Extension
module1 = Extension('my_module._module',
sources=['src/ext_module1.cpp',
'src/ext_module2.cpp',
'src/swig_module.i'],
swig_opts=['-c++', '-py3'],
include_dirs=[...],
runtime_library_dirs=[...],
libraries=[...],
extra_compile_args=['-Wno-write-strings'])
setup( name = 'my_module',
version = '0.6',
author = 'microo8',
author_email = 'magyarvladimir@gmail.com',
description = '',
license = 'GPLv3',
url = '',
platforms = ['x86_64'],
ext_modules = [module1],
packages = ['my_module'],
package_dir = {'my_module': 'my_module'},
package_data = {'my_module': ['data/*.dat']} )
Run Code Online (Sandbox Code Playgroud)
我的MANIFEST.in档案:
include src/header1.h …Run Code Online (Sandbox Code Playgroud) 是否可以在Linux中使用RPM或YUM或任何其他软件包管理器(特别是CentOS)来安装已下载的软件包或从repo到没有admin/root访问权限的自定义位置?
我尝试从源代码构建,使用cmake,configure,make,make install等,但是,它最终依次拥有如此多的依赖项.
还是有更好的选择吗?
我有RHEL 5.2,安装了Boost 1.33.我下载了boost_1_44_0.tar.bz2.并建立它.完成后显示:
The Boost C++ Libraries were successfully built!
The following directory should be added to compiler include paths:
/home/dfe/Archive/boost_1_44_0
The following directory should be added to linker library paths:
/home/dfe/Archive/boost_1_44_0/stage/lib
Run Code Online (Sandbox Code Playgroud)
我有一个.spec依赖于一个名为的变量的文件_topdir.
现在当您从git签出SRPM源代码时,您必须更改_topdir指向的位置rpmbuild才能正常运行.
# We need the following line so that RPM can find the BUILD and SOURCES and RPMS dirs.
%define _topdir /root/projects/my-project/my-project-srpm/
Run Code Online (Sandbox Code Playgroud)
如何指定_topdir应该相对于.spec文件的位置,以便_topdir不进行硬编码?
我注意到rpmbuild(-bb和--buildroot选项)根据你使用的操作系统在不同的位置创建.rpm:
那么如何手动设置所有操作系统的目标文件夹?
当您.deb在Ubuntu上使用软件包安装编程时,可以使用Ubuntu软件包搜索来检查软件包的依赖关系.例如,我可以从这里看到Wireshark的依赖关系.如您所见,依赖项由红色子弹标记.如果您知道程序所依赖的所有程序包,则可以下载并安装dpkg.
是否有任何替代RPM包的网站?特别为RHEL?
我知道我可以通过其他方法获取这些软件包的名称,例如在安装RPM软件包时使用rpm -i,但它不是用户友好的,需要访问运行的linux.
在我的rpm规范文件的安装部分中,我有一堆mkdir来创建我需要的目录.那些没有安装任何文件的文件最终会被删除,最终不会被创建.如何在完成所有操作后确保创建空目录?
我有一个Java应用程序,我打包为RPM.理想情况下,我想将Java指定为依赖项.我需要在Fedora和RHEL环境中安装.问题是RHEL Java被称为'java',而Fedora不提供Oracle/Sun的发行版,而是从Oracle的网站手动下载.根据您选择的包,Oracle的Oracles分发称为"jre"或"jdk".
通常在RPM SPEC文件中我会写:
取决于:java> = 1.6
但是由于RHEL提供'java',并且Fedora通过Sun/Oracle提供'jre'或'jdk'(我不能使用OpenJDK),我有点绑定.到目前为止,文档还没有显示出'java> = 1.6 ||的方法 jre> = 1.6 || jdk> = 1.6'等因为Java包不在我的控制范围内,我不能只改变其中一个来指定'提供:Java'.
目前我只看到两个选择:
我不喜欢这两种选择.有没有其他方法可以实现Java依赖,其中提供者都有不同的名称?
编辑:第三个选项 - 为Fedora创建我自己的Java虚拟包,它依赖于Sun的JDK RPM.