我正在编写一个工具来验证 Python 中的 RPM 并打印出更改的文件中的实际差异。
我可以使用 .ftp 从 ftp 服务器获取 RPM ftplib。我正在考虑保存 rpm/tmp并使用subprocess模块来运行
rpm2cpio myrpmfile.rpm | cpio -idmv
Run Code Online (Sandbox Code Playgroud)
获取 RPM 中的文件,以便我可以比较这些文件。之后,我将删除临时文件。
这似乎有点 hacky,那么这是最好的方法,还是有更优雅的 Python 解决方案?
我正在尝试构建 RPM(rpmbuild -bb 规范文件)。安装 rpm 时,一些可执行 tcl 文件已损坏,并且所有文件都具有相同的大小。
在一个Java项目中,我使用matrix-toolkits-java (MTJ)来进行高效的矩阵乘法。这依赖于netlib-java,而 netlib-java 又依赖于计算机上安装的 BLAS 和 LAPACK 的优化实现。它专门寻找/usr/lib64/libblas.so.3并/usr/lib64/liblapack.so.3找到这些库。
blas通过Yum安装时lapack,我们会获得符号链接/usr/lib64/libblas.so.3并/usr/lib64/liblapack.so.3指向引用中的 .so 文件blas并lapack通过 Yum 安装。
现在我们想要使用比参考更快的实现,在我的例子中是OpenBLAS。无论我是自己编译还是通过 Yum 安装它,我最终都会得到/usr/lib64/libopenblas-r0.2.18.so.
现在,根据互联网上的任何指南,我应该用 OpenBLAS 实现的符号链接替换参考实现的符号链接,最终得到如下结果:
libblas.so.3 -> libopenblas-r0.2.18.so
liblapack.so.3 -> libopenblas-r0.2.18.so
Run Code Online (Sandbox Code Playgroud)
好吧,我能做到!我可以使用ln或 via 来做到这一点alternatives。如果我这样做,我的代码就会愉快地使用快速的 OpenBLAS。
然而,当ldconfig运行时,我很棒的符号链接消失了,它们被参考 BLAS 和 LAPACK 安装覆盖。然后我的软件又变得悲伤和缓慢。
所以我的问题是,如何在CentOS/Fedora上安装OpenBLAS,并且运行时ldconfig不会破坏它?我无法删除blas和lapack软件包,因为主机的其他客户端可能依赖它。blas相反,我会以某种方式让操作系统了解 OpenBLAS 是和的直接替代品lapack。
我是包装新手。
该网站指出升级过程中的步骤是:
因此,升级期间的操作顺序是:
关于第5步,它到底如何确定应该删除哪些文件?它是否只删除属于%install/%post旧版本步骤一部分的文件?或者安装目录中不属于新版本的任何文件(如果“安装目录”的概念有意义的话)是否会%install/%post被删除?
我正在尝试通过 Gradle 将项目中的 RPM 工件发布到 Nexus 上的 Yum Repo 中:
publishing {
repositories {
ivy {
url 'http://myrepo:8081/repository/myproject'
credentials {
username "aaa"
password "xxx"
}
layout "pattern", {
artifact "${buildRpm.outputs.getFiles().getSingleFile().getName()}"
}
}
publications {
rpm(IvyPublication) {
artifact buildRpm.outputs.getFiles().getSingleFile()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行./gradlew publish此任务时,它会启动并开始上传 90MB 的主要 .rpm 工件。然后它会失败并出现以下错误:
> Task :search:publishRpmPublicationToIvyRepository FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':search:publishRpmPublicationToIvyRepository'.
> Failed to publish publication 'rpm' to repository 'ivy'
> Could …Run Code Online (Sandbox Code Playgroud) 我需要一些帮助来调试我的rpm构建.任何时候它遇到%文件或%build或%install指令它给我一个错误,我无法弄清楚"[rpm] + $'\ r'"是什么意思
[rpm] Building the RPM based on the LBR.spec file
[rpm] Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.2932
[rpm] + umask 022
[rpm] + cd /home/user.username/workspace/LBR/dist/BUILD
[rpm] + LANG=C
[rpm] + export LANG
[rpm] + unset DISPLAY
[rpm] + $'\r'
[rpm] /var/tmp/rpm-tmp.2932: line 28:
[rpm] : command not founderror: Bad exit status from /var/tmp/rpm-tmp.2932 (%build)
[rpm] Bad exit status from /var/tmp/rpm-tmp.2932 (%build)
[rpm]
[rpm]
[rpm] RPM build errors:
Run Code Online (Sandbox Code Playgroud) 我需要在我的Centos6 EC2实例上构建一个RPM包,所以我认为最好使用amzn的"官方"规范.通常我这样做,yumdownloader --source xxx但在EC2实例上它找不到任何东西.
我查了一下/etc/yum.repo.d,似乎没有关于src的任何回购.
我有一个yum存储库,我已经设置了存储自定义rpms的地方.我在查找有关在此自定义仓库中构建和存储的其他软件包的信息时没有任何问题.
#yum --disablerepo=rhui-us-east-rhel-server-1y,epel,epel-testing --enablerepo=customrepo install php53-pecl-xdebug
php53-pecl-xdebug x86_64 2.2.1-2 customrepo 132 k
Run Code Online (Sandbox Code Playgroud)
没问题.
现在我将centrpm.rpm放在centos/repo/5/noarch中,运行createrepo --update.在此目录中并尝试相同的命令,但它没有显示任何结果.
我尝试在repo的根目录中运行createrepo --update,但这也不起作用(我实际上不确定在哪里运行它以及它是否需要每个子目录中的repodata目录).
[root@reposerver mnt]# ls -l /var/www/repo/
total 12
-rw-r--r-- 1 root root 203 Jun 8 00:13 REPO_README
drwxr-xr-x 3 root root 4096 Jun 10 2011 centos
drwxr-xr-x 2 root root 4096 Oct 18 20:02 repodata
[root@reposerver mnt]# ls -l /var/www/repo/centos/5/
SRPMS/ i386/ noarch/ repodata/ x86_64/
[root@reposerver mnt]# ls -l /var/www/repo/centos/5/noarch/
total 7324
-rw-r--r-- 1 root root 1622 Jun 28 2011 compat-php-5.1.6-1.noarch.rpm
drwxr-xr-x 2 root …Run Code Online (Sandbox Code Playgroud) 我试图使用rpm maven插件,我得到以下错误:
[错误]无法执行目标org.codehaus.mojo:rpm -maven-plugin:2.1.3:项目上的rpm(generate-rpm)TestRpmAndDocker:目标org.codehaus.mojo的参数'sourceEncoding':rpm-maven-插件:2.1.3:rpm丢失或无效 - > [帮助1] org.apache.maven.lifecycle.LifecycleExecutionException:无法执行目标org.codehaus.mojo:rpm -maven-plugin:2.1.3:rpm(生成-rpm)on project TestRpmAndDocker:目标org.codehaus.mojo的参数'sourceEncoding':rpm -maven-plugin:2.1.3:rpm在org.apache.maven.lifecycle.internal.MojoExecutor.execute中丢失或无效( MojoExecutor.java:220)org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)at org .apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:108)位于org.apache.mave的org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:76)n.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)org.apache.maven.life.internal.LifecycleStarter.execute(LifecycleStarter.java:116)atg.apache.maven.DefaultMaven. doOecute(DefaultMaven.java:361)org.apache.maven.maven.DefaultMaven.execute(DefaultMaven.java:155)org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)atg.apache.maven位于org.apache.maven.cli.MavenCli.main(mavenCli.java:157)的.cli.MavenCli.doMain(MavenCli.java:213)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl .invoke(NativeMethodAccessorImpl.java:62)位于org.codehaus.plexus.classworlds的java.lang.reflect.Method.invoke(Method.java:497)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43). launcher.Launcher.launchEnhanced(Launcher.java:289)org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)org.codehaus.plexus.classworlds.launcher.Launc her.mainWithExitCode(Launcher.java:415)at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)引起:org.apache.maven.plugin.PluginParameterException:参数'sourceEncoding'for目标org.codehaus.mojo:rpm -maven-plugin:2.1.3:在org.apache.maven的org.apache.maven.plugin.internal.DefaultMavenPluginManager.populatePluginFields(DefaultMavenPluginManager.java:584)中,rpm丢失或无效. plug.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:537)org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:120)org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor. java:208)......还有19个
这是我的pom:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>TestRpmAndDocker</groupId>
<artifactId>TestRpmAndDocker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>TestRpmAndDocker</name>
<description>TestRpmAndDocker</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>rpm-maven-plugin</artifactId>
<version>2.1.3</version>
<executions>
<execution>
<id>generate-rpm</id>
<goals>
<goal>rpm</goal>
</goals>
</execution>
</executions>
<configuration>
<license>GPL (c) 2005, SWWDC</license>
<distribution>Trash 2005</distribution>
<group>Application/Collectors</group>
<icon>src/main/resources/icon.gif</icon>
<packager>SWWDC</packager>
<prefix>/usr/local</prefix>
<changelogFile>src/changelog</changelogFile>
<defineStatements>
<defineStatement>_unpackaged_files_terminate_build 0</defineStatement>
</defineStatements>
<mappings>
<mapping>
<directory>/usr/local/bin/landfill</directory> …Run Code Online (Sandbox Code Playgroud) 我使用此spec文件来使用RPM文件
Name: pack-agent
Version: 1.0
Release: 1%{?dist}
Summary: Linux Agent installation script
Group: Utilities
License: license
Source0: pack-agent-1.0.tar.gz
BuildArch: x86_64
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description
%prep
%setup -q -n opt
%build
%install
#install -m 0755 -d $RPM_BUILD_ROOT/agent
#cp -ap agent/* $RPM_BUILD_ROOT/agent/
install -m 0755 -d %{buildroot}/opt
#cp -a * %{buildroot}/agent
cp -a * %{buildroot}/opt
%clean
rm -rf $RPM_BUILD_ROOT
%files
/opt
%defattr(-,root,root,-)
%attr(777, root, root) /opt/agent/bin/karaf
%doc
%changelog
Run Code Online (Sandbox Code Playgroud)
但安装后文件不可执行.我需要启动文件洞察目录树.反正有没有添加chmod命令洞察spec文件并在RPM安装后用它来设置权限?