我一直试图找出在rpm创建过程中设置固定文件名的最简单方法.它可以在.spec文件中设置或作为rpmbuild参数设置吗?默认名称取决于版本和版本号.我的rpm名称必须始终相同.
谢谢
同步
我试图找出如何比较2个RPMS列表(当前已安装)和(在本地存储库中可用)并查看哪个RPMS已过期.我一直在修补正则表达式,但RPMS有很多不同的命名标准,我无法获得一个好的列表.我的驱动器上没有实际的RPMS,所以我不能做rpm -qif.
pattern1 = re.compile(r'^([a-zA-Z0-9_\-\+]*)-([a-zA-Z0-9_\.]*)-([a-zA-Z0-9_\.]*)\.(.*)')
for rpm in listOfRpms:
packageInfo = pattern1.search(rpm[0]).groups()
print packageInfo
Run Code Online (Sandbox Code Playgroud)
这适用于绝大多数但不是全部(2300/2400)
yum-metadata-parser-1.1.2-2.el5
('yum-metadata-parser', '1.1.2', '2', 'el5') **What I need
Run Code Online (Sandbox Code Playgroud)
但是,除非我打破其他之前工作的其他人,否则这些都不起作用.
我正在制作RPM.此特定RPM的要求不能表示为RPM先决条件,我们可以将它们称为特定的文件系统/磁盘配置.目前,在安装后,在运行时,当不满足要求时,会发生故障.
我可以在我的脚本的%install部分中检查所需的先决条件.但是,如果满足某些条件,我无法弄清楚如何使安装失败.是否可以通过%install(或其他一些)部分中的某些触发器在运行时失败rpm安装?
在.spec文件中,示例看起来像这样:
%install
if [ -f /some/file ]
then
FAIL_RPM_INSTALL ## What is this command?
fi
Run Code Online (Sandbox Code Playgroud) 我有一个软件包,我为其创建了一个RPM.由于IP原因,我无法粘贴整个RPM,但这里是问题的要点:
%pre
/sbin/pidof program
if [ "$?" -eq "0" ]
then
/sbin/service program stop
fi
%post
/sbin/chkconfig program on
/sbin/service program start
%preun
/sbin/service program stop
/sbin/chkconfig program off
%postun
rm -rf /program_folder
Run Code Online (Sandbox Code Playgroud)
每次我尝试升级包时,它会停止程序服务,安装所有内容,启动服务,然后再次停止它并删除文件夹......任何想法?
对于我们的prod应用程序,我们以RPM为单位管理所有包.在一个完美的百胜世界,这很好.
但是,最近每种语言或框架都在部署自己的包管理器.例如,对于python,我几乎总是使用pip,然后在进入生产时再次为rpm构建包.同样适用于npm或宝石.
这是一个很多人遇到的问题吗?什么是避免这一切的最佳方法?人们是通过吮吸它并手动包装所有东西来处理这个问题,还是有一些自动化的方法来整合它们?
我很乐意听到这方面的想法.
RPM规范中是否有一种"包含"指令?我用谷歌搜索找不到答案.
动机:我有一个RPM规范模板,构建过程使用版本,修订版和其他特定于构建的数据进行修改.这是sed目前完成的.我认为如果规范是#include一个特定于构建的定义文件会更清晰,这个定义文件将由构建过程生成,所以我不需要在规范中搜索和替换.
如果没有include,是否有一种惯用的方法来做这个(相当常见,我相信)任务?
我有一个使用rpmbuild构建的rpm.让我们说它是sample.rpm.它成功构建.rpm具有可执行文件(让我们称之为init).
当我尝试使用rpm -ivh sample.rpm它安装它时显示我失败的依赖项.
假设错误是Failed dependency for: example.so指rpm无法找到此共享对象文件.(即使so文件存在于同一目录中).
所以,我安装rpm rpm -ivh sample.rpm --nodeps(因为我知道我有所需的so文件).
为什么rpm无法安装那些rpms呢?它在哪里寻找目标文件?(linux加载器是否会查找这些.so).我有LD_LIBRARY_PATH来包含这些.so的路径,所以当我从rpm运行已安装的文件(init)时,它运行.
那么为什么rpm无法安装sample.rpm(它究竟在哪里寻找依赖项)?是否需要在构建rpm时指定某些内容?
我目前正在使用厨师来安装RPM JDK软件包,但问题是即使已经下载并安装了软件包,它也会每次都这样做.我尝试在安装之前找到一个检查选项,但没有任何选项.有没有办法解决这个问题,以便我可以跳过已安装的软件包?Debian的软件包管理默认跳过已安装的软件包,但RPM软件包管理器似乎没有这样做.
[Tue, 23 Oct 2012 10:34:32 -0500] INFO: Processing remote_file[/var/chef/cache/jdk-1.6-u30-linux-amd64.rpm] action create_if_missing (sun_java::default line 18)
[Tue, 23 Oct 2012 10:34:36 -0500] INFO: Processing package[jdk-1.6-u30-linux-amd64.rpm] action upgrade (sun_java::default line 25)
[Tue, 23 Oct 2012 10:37:15 -0500] INFO: Processing bash[update-alternatives java] action nothing (sun_java::default line 40)
Run Code Online (Sandbox Code Playgroud)
配方如下所示:
urlVersion = "1."+node["sun_java"]["version"].sub(/[u]/, "-u")
node.default["sun_java"]["rpm_url"] = "http://***/#{urlVersion}/jdk-#{urlVersion}-linux-#{node["sun_java"]["arch"]}.rpm"
#Check that we are using the .rpm file because of the recent change
if File.extname(File.basename(node["sun_java"]["rpm_url"]))!=".rpm"
raise "You must use the jdk*.rpm file to install the Sun JDK. …Run Code Online (Sandbox Code Playgroud) 我刚刚安装了Centos 6.4,并使用Centos发行版附带的版本安装了MySQL.令我沮丧的是,MySQL 5.1.69与当前的5.6.12相比.如http://dev.mysql.com/doc/refman/5.5/en/linux-installation-native.html所述,"MySQL版本通常会落后于当前版本",但我没有期待那么久.
[root@centosBox ~]# rpm -qa | grep mysql
mysql-5.1.69-1.el6_4.x86_64
mysql-devel-5.1.69-1.el6_4.x86_64
mysql-server-5.1.69-1.el6_4.x86_64
mysql-libs-5.1.69-1.el6_4.x86_64
[root@centosBox ~]# whereis mysql
mysql: /usr/bin/mysql /usr/lib64/mysql /usr/include/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
[root@centosBox ~]#
Run Code Online (Sandbox Code Playgroud)
另一种方法是根据http://dev.mysql.com/doc/refman/5.5/en/linux-installation-rpm.html安装RPM软件包,这是"推荐安装MySQL的方法" .我已经这样做了,并没有过于复杂,但是,我担心,因为我经常被告知我应该总是按照yum安装.在文档的最后,它确实描述了使用yum非常短暂地这样做,然而,它是如此简短,我怀疑它是否是要走的路.
那么......对于不是大师的Linux用户来说,在Centos机器上安装/升级MySQL的最佳方法是什么?
我在linux上提出了一个集中式日志记录服务器.在这一点上,我正在努力巩固,使事情更容易加载到另一台机器上.我希望有一个RPM可以一次安装多个程序.我正在使用CentOS 7服务器.我想要打包到rpm的程序将是:
eventlog 2.12
libdbi 0.9.0
freetds 0.91
libdbi-drivers 0.9.0
json-c
syslog-ng 3.5.6
Run Code Online (Sandbox Code Playgroud)
我一直在做很多关于RPM的阅读,只是很难理解如何将多个源集成到一个RPM中.我安装这些的原因而不仅仅是yum安装它们是因为我需要在"./configure --enable-example"中调用配置.所以我有源在我的机器上安装了所有这些程序,然后我重新安装它们并尝试使用该文件作为源.任何能够指出我正确方向的想法或任何人都将不胜感激.