我试图构建一个rpm包,它给了我以下错误
如显示rpm -qi package?
我真的不想解析输出rpm -qi.我更愿意使用rpm -q --qf,我可以控制格式,并且不会受到未来版本的美学异想天开.
但是我在手册页中找到的唯一有用的标签是SIGPGP,它为我提供了整个签名,而不仅仅是短密钥ID.看到不同:
$ rpm -qi coreutils
Name : coreutils Relocations: (not relocatable)
Version : 8.4 Vendor: Fedora Project
Release : 8.fc13 Build Date: Tue 20 Jul 2010 05:21:15 AM BRT
Install Date: Tue 03 Aug 2010 01:58:53 PM BRT Build Host: x86-17.phx2.fedoraproject.org
Group : System Environment/Base Source RPM: coreutils-8.4-8.fc13.src.rpm
Size : 12659257 License: GPLv3+
Signature : RSA/SHA256, Tue 20 Jul 2010 03:14:09 PM BRT, Key ID 7edc6ad6e8e40fde
Packager …Run Code Online (Sandbox Code Playgroud) 我们有一个通过RPM分发的产品.我们创建了SUSE SLES10 SP1 RPM和RedHat 5.5 RPM.两者之间存在差异,如果在RedHat机器上安装SUSE RPM,反之亦然,事情将无法正常工作(通常是神秘的).
有没有办法阻止RedHay RPM安装在SUSE系统上,反之亦然?我搜索了这个并找到了http://www.rpm.org/max-rpm/ch-rpm-multi.html,但这里的所有约束似乎都是基于命令的输出uname而不是告诉你是否你正在运行RedHat或Suse.操作系统是Linux,架构是一样的.
我们有想法在安装脚本中添加检查,可以在/ etc/issue文件中查找"Red Hat"或"SUSE",但我真的希望有比这更好的选项.
我正在寻找一种在java运行时读取RPM内容的方法.
有人建议使用7zip在运行时解压缩和/或提取RPM,使用7zip的系统命令.
该解决方案有两个缺点:
有任何想法吗?
编辑:
我正试着走下罗伯特的道路.这是我的代码:
String file = "MyRpm.rpm";
CpioArchiveInputStream cpioIn =
new CpioArchiveInputStream( new FileInputStream(new File(file)) );
CpioArchiveEntry cpioEntry;
while ((cpioEntry = cpioIn.getNextEntry()) != null)
{
System.out.println(cpioEntry.getName());
int tmp;
StringBuffer buf = new StringBuffer();
while ((tmp = cpioIn.read()) != -1)
{
buf.append((char) tmp);
}
System.out.println(buf.toString());
}
cpioIn.close();
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:( java.io.IOException: Unknown magic [????有趣的字符来自原始的错误消息).
我试图使用"yum install my.rpm"来解决问题.
问题是我得到了
TypeError: an integer is required
error: python callback <bound method RPMTransaction.callback of <yum.rpmtrans.RPMTransaction instance at 0x013e3f8>> failed, aborting!
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我打开了yum install的冗长,无法解决任何问题.这是RHEL 6.1
谢谢
我们正在将我们的服务器从CentOS迁移到ubuntu.对于自编写的应用程序,我们创建了一个spec文件来创建RPM,以便在CentOS上轻松安装.现在我们想将它转换为debian格式.最简单的方法是什么?我不是指从rpm创建.deb文件,而是将spec文件转换为ubuntu控制文件.
我看到两个在线的引用,但无法找出原因.有区别吗?如果是这样,怎么样?
我负责构建多个RPM.我为每个RPM包提供了pristine SPEC文件,我有BASH脚本,它们设置了必要的环境并构建了RPM.
我想使用实际的构建工具(如make)来构建这些RPM.通过这样做,我希望消除对自定义,混淆BASH脚本的需求,转而使用清晰,可维护的配置文件(类似于make的Makefile).但是,使用POSIX制作和保持make文件集是最新的可能与维护我目前用于构建RPM包的BASH脚本一样多.像cmake和automake这样的程序包含make命令的功能是有原因的 - 这些工具更具表现力,允许更小,更清晰的配置文件.
但是,使用autoconf/automake似乎也是一个糟糕的选择,因为它们似乎专门为C和C++开发而构建.有人建议我使用scons,但是这似乎是最好的选择(由于它的配置文件是实际的python脚本),它也适用于特定的语言.
使用我的SPEC文件作为"源代码"和环境作为"依赖项"(例如设置制作RPM所需的rpmbuild目录树结构),是否有一个很好的构建工具可以用来替换我的BASH脚本以获得更清洁,更多可维护的RPM构建解决方案?
编辑:当我说"构建工具"时,我似乎不清楚我需要什么.我已经使用rpmbuild作为'编译器',我使用SPEC文件(以及二进制文件的相关源代码)'编译'RPMs作为'源代码'.我要求一个可以协调这个过程的工具.
我正在尝试测试我在CentOS上为Jmeter编写的RPM.我在线跟踪了一些指南,当我做'sudo rpm --install jmeter.i386.rpm'时,它说已经安装了包.但是,当我做'sudo rpm --erase jmeter.i386.rpm'时,它表示没有安装包.我该如何解决这个问题?
我需要安装ansible 2.1.0.0-1.el7.我的安装程序不适用于我安装的最新版本的ansible:
yum -y --enablerepo=epel install ansible
Run Code Online (Sandbox Code Playgroud)
这给了我ansible-2.2.0.0-3.el7.noarch.所以我试着列出旧版本,但我找不到它们:
# yum -y --enablerepo=epel --showduplicates list ansible
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror2.hs-esslingen.de
* epel: epel.mirrors.ovh.net
* extras: it.centos.contactlab.it
* updates: mirror.netcologne.de
Available Packages
ansible.noarch 2.2.0.0-3.el7 epel
Run Code Online (Sandbox Code Playgroud)
有人可以帮我安装我需要的Ansible版本吗?