我有一个'exec'rpmbuild的tcl脚本.这样做时,rpmbuild使用的'topdir'是错误的.我的主目录中有一个.rpmmacros文件,如果我手动调用rpmbuild,它工作正常,即.'topdir'不是默认值.
我在tcl脚本中添加了[exec rpmbuild"--showrc"]以检查topdir的值,它显示'-14:_topdir%{_ usrsrc}/redhat'这是默认值.
有人能解释我为什么会出现这种情况以及如何解决这个问题?
我宁愿不用--define指定它,因为它实际上是在makefile中完成的,我不想触摸它(如果没有其他选择,我会这样做).
我正在尝试%{dist}
在我的RPM规范文件中使用标记来提供Fedora Core(例如fc12
),CentOS 5(例如el5
)和亚马逊的Linux AMI 之间的特定于分发的依赖关系:
Release: %_svn_revision%{?dist}
Run Code Online (Sandbox Code Playgroud)
和
# Depencencies
%{?rhel:Requires: ...}
%{?fedora:Requires: ...}
Run Code Online (Sandbox Code Playgroud)
不幸的是,%{dist}
似乎没有在CentOS 5.5中定义,并且我没有找到与CentOS 5.5匹配的特定于发行版的条件(我认为el5
匹配,但似乎没有).这张票据报告了%{dist}
2008年CentOS 的遗失,但自2009年以来一直没有更新.
我如何%{dist}
在CentOS中定义以及我应该使用什么条件来匹配CentOS 5?任何RPM大师能指出我正确的方向吗?
我有几个应用程序,我希望使用rpm部署.我的应用程序部署中的某些文件会覆盖其他已部署软件包中的文件.简单地在部署包中包含新文件将导致rpm冲突.
我正在寻找使用rpm来更新/替换已安装文件的正确方法.
我已经提出了一些解决方案,但似乎没有什么是正确的.
这似乎是一项相对较小的奖励的大量工作,即使它感觉不像一个黑客比一些其他可能的解决方案.
这可行,但意味着乱丢系统的多个副本.此外,它还意味着每个文件的rpm构建规范中的额外维护.
这与复制技术类似,但文件甚至不会存在于rpm中.这可能就像一个不错的中央配置权限.
这也类似于复制技术,但杂乱程度较低.这里的问题是一些文件表现不如符号链接.
我最近发现了cpio的存在以及如何使用它,以及如何使用rpm和RPM2cpio工具从rpm中提取单个文件,如下所示:
rpm2cpio mypackage.rpm | cpio -idmv ./path/to/individual/file/inside/the/rpm/filename.txt
Run Code Online (Sandbox Code Playgroud)
问题是该命令将创建与rpm内部文件位置匹配的目录,即/path/to/individual/file/inside/the/rpm/
在实际提取文件之前,它将在当前目录中创建目录.
有没有办法将文件解压缩到当前目录而不创建整个目录结构?
提前致谢!!
我需要在cPanel上安装git,但我发现很多信息表明这不是一个简单的过程.
我在CentOS发行版上有一个cPanel/WHM实例,我试图在不破坏cPanel的情况下安装git.我发现的信息说,由于Perl依赖性,安装git会破坏cPanel.
cPanel论坛上的这个页面建议不要安装git:
http://forums.cpanel.net/f391/installing-git-294411.html
但是,cPanel功能下的这个页面说明已经为git发布了一个RMP:
http://features.cpanel.net/responses/possibility-to-install-git-on-cpanel-server-without-breaking-it
我请求cPanel的支持并得到了这个回复:
我们实际上不建议安装GIT,除非你对它的安装非常有经验,因为它有可能破坏perl.
我们确实在安装过程中分发了git RPM,但是,它没有设置或支持 - 它只是为了方便而添加,需要手动安装其他软件包和配置.
我们为git提供的RPM会将二进制文件安装到/ usr/local/cpanel/3rdparty/bin,因此您需要在此处运行它.它不是完整的工具集,因此系统管理员需要安装任何其他工具.
有没有人建议如何最好地在cPanel上安装git,这样所有cPanel用户帐户都可以使用git,确保安装不会破坏Perl,以及cPanel根据语句提供的RPM中缺少的内容在上面引用的最后一段?
在创建RPM时,RPM规范文件有一个指令%defattr
.我知道它定义了该RPM安装的文件的默认属性.如果我写%defattr
下面的内容,那是什么意思?
%defattr(-testuser, testuser)
Run Code Online (Sandbox Code Playgroud) 我正在使用rpm -upgrade命令,并注意到rpm有不同的方法来处理修改后的配置文件,因此在升级过程中不会丢失.根据我的理解,如果修改了配置文件并使用rpm -U升级了包,则rpm会将原始属性文件重命名为{file} .rpmsave,并使用原始文件名{file}安装新配置文件.
但是,当我尝试使用我创建的包运行rpm -U时,我实际看到的是原始配置文件被删除,新配置文件被重命名为{file} .rpmsave.这是预期的行为吗?在我的安装脚本中,我还使用"sed"修改配置文件中的一些文本.这会干扰rpm在升级过程中处理配置文件的方式吗?
具体的例子是我有很多specfiles Source0
:或其他Source
包含宏的行.如何在不实际启动specfile构建或编写自己的解析器的情况下扩展这些宏?
我尝试在内部rpm包中为我们的地理服务器打包一些地图文件.对于构建部分,这只是复制文件.我认为这可以按预期工作.但要打包这些20GB的图像需要花费很长时间.
我已经读过rpm内部压缩数据,这可以通过几种不同的压缩算法来完成.但是,我不知道我的转速选择哪种压缩以及如何影响它.我找不到rpmbuild命令的任何选项,也没有为specfile找到任何选项,也没有找到我可以列出的常规rpm选项rpmbuild --showrc
我对rpmbuild和specfiles不是很有经验,但在阅读了很多关于rpm.org的手册和教程后,我没有进一步的想法.
我使用的specfile看起来像:
%define debug_package %{nil}
%global mapsversion 0.9
# If this is a snapshot, put the date here and uncomment
#global snapshot_version 20100519
# This is the version in a form acceptable
# an an RPM version string (i.e. no '-')
# Hier werden die Makros definiert.
%global rpmversion %(echo %{mapsversion} | tr '-' '_')
%global pkgversion %{mapsversion}%{?snapshot_version:-SNAPSHOT}
%global pkgname %{name}
Name: geoserver-maps-part2
Version: %{rpmversion}
Release: 1%{?dist}
Summary: Swiss Maps for GeoServer
Group: Application/ourApp
License: Copyright …
Run Code Online (Sandbox Code Playgroud) 我正在使用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) rpm ×10
rpm-spec ×3
rpmbuild ×2
c++ ×1
centos5 ×1
compression ×1
config ×1
cpanel ×1
deployment ×1
distutils ×1
extraction ×1
git ×1
install ×1
lamp ×1
permissions ×1
python ×1
swig ×1
tcl ×1
upgrade ×1
whm ×1