我正在尝试为我的使用创建一个自定义的 rhel5.5 存储库,但我很难验证我的存储库中是否拥有每个包的所有依赖项。
我想要做的是在我的存储库中的每个包上进行 yum 安装,以查看是否所有依赖项都可用。
有没有简单的方法来做到这一点?
编辑我找到了答案。下载 yum-utils
yum 安装 yum-utils
并做一个repoclosure
回购
它将找到您在 /etc/yum.repo.d/* 中设置的存储库的所有缺失依赖项
有下一种问题。想要重建垃圾收集器 (gc-7.1-10.el6.src.rpm) 并排除 ld-linux.so.2, ld-linux.so.2(GLIBC_2.3) & libpthread.so.0(GLIBC_2.3.2) ) 依赖项。我怎样才能得到我想要的类似的东西? (CentOS 6)
% rpm -qp -R rpmbuild/RPMS/i386/gc-7.1-10.el6.i386.rpm
/sbin/ldconfig
/sbin/ldconfig
ld-linux.so.2
ld-linux.so.2(GLIBC_2.3)
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
libc.so.6(GLIBC_2.1.3)
libc.so.6(GLIBC_2.2.4)
libc.so.6(GLIBC_2.3)
libcord.so.1
libdl.so.2
libdl.so.2(GLIBC_2.1)
libgc.so.1
libgcc_s.so.1
libgcc_s.so.1(GCC_3.0)
libgcc_s.so.1(GCC_3.3.1)
libgccpp.so.1
libm.so.6
libpthread.so.0
libpthread.so.0(GLIBC_2.0)
libpthread.so.0(GLIBC_2.1)
libpthread.so.0(GLIBC_2.2)
libpthread.so.0(GLIBC_2.2.3)
libpthread.so.0(GLIBC_2.3.2)
libstdc++.so.6
libstdc++.so.6(CXXABI_1.3)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(VersionedDependencies) <= 3.0.3-1
rtld(GNU_HASH)
Run Code Online (Sandbox Code Playgroud)
我需要编辑我的规范文件,或者更改和重建我的 tar.gz 档案吗?
如果某些条件为假,我正在寻找一种退出 rpm 安装的方法。我在 %pre 部分添加了一个小脚本,如果我的条件失败,它会退出安装。
我面临的问题是我看到 %pre scriptlet 已执行,并且 rpm 安装失败。然而,在它的最后,我得到了这 2 行我不想要的 - 已安装......然后是完成!
Downloading Packages:
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
missing file zyWhg1. exiting install..
error: %pre(tyr-3.2.1.x86_64) scriptlet failed, exit status 255
error: install: %pre scriptlet failed (2), skipping tyr-3.2.1
Installed: tyr-3.2.1.x86_64 0:3.2.1
Complete!
Run Code Online (Sandbox Code Playgroud) 我需要在 RPM 的 %post 部分以不同的用户身份运行命令。
目前我正在通过 python 使用一些 hack 但它不是最好的方法(它确实感觉有点脏)......
%post -p /usr/bin/python
import os, pwd, subprocess
os.setuid(pwd.getpwnam('apache')[2])
subprocess.call(['/usr/bin/something', 'an arg'])
Run Code Online (Sandbox Code Playgroud)
有没有合适的方法来做到这一点?
我在一个由 10 多名开发人员组成的团队中工作,我们将 RHEL 6.4 用于我们的开发机器和服务器(部署我们的软件)。
RHEL 6.4 带有 Boost 1.41,但我需要至少 1.47 的修复程序。我想升级到最新的(目前是 1.56)。
它不像下载源代码和构建/安装那么容易,因为:
更糟糕的是,RedHat 似乎有自己的专有方式将 Boost 软件/库捆绑/打包到 RPM 中。他们不是只有一个 RPM,而是一系列较小的 RPM:
$ yum list installed|grep boost
boost.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-date-time.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-devel.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-filesystem.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-graph.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-iostreams.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-program-options.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-python.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-regex.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-serialization.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-signals.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-system.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-test.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-thread.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-wave.x86_64 …Run Code Online (Sandbox Code Playgroud)
我在 Redhat Linux 上工作过,我有一个 tar.gz 文件。我想把这个 tar.gz 文件打包成一个 rpm 包文件。
在rpm包阶段,我只是想解压tar.gz文件,把所有的人员打包到rpm包中,当我在linux服务器上安装rpm包时,它只会简单地将所有文件复制到目标文件夹中.
我已经尝试了很多。这是我的 SPEC 文件的一些代码,但它有问题:
%prep
%build
pwd
%install
rm -rf /usr/local/sample
mkdir /usr/local/sample
cd %{_sourcedir}
tar -xzvf sample.tar.gz -C /usr/local/sample
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
%doc
%changelog
Run Code Online (Sandbox Code Playgroud)
我可以成功打包rpm文件,但是rpm包中没有tar.gz文件的内容。
如果我在其他服务器上安装 rpm 文件,它将失败。
我该如何解决这个问题?
我创建了一个新的 RPM 使用python bdist_rpm. 通常python setup.py install会安装 python 依赖项websocket-client或任何其他包。但是 RPM 只是拒绝安装任何东西。
显然,来自其他各种帖子的建议似乎只是要求在 setup.cfg 中将它们作为 rpm 包。这对我来说没有意义,因为大多数 rpm 包似乎都是旧版本,我不可能为我需要的所有 python 包创建 rpm。我需要一个更新的版本,yum 安装实际上没有安装软件包是没有意义的。
什么是正确的(干净和最简单的)方法?我相信如果 asetup.py有类似的东西
install_requires=[
"validictory",
"requests",
"netlogger>=4.3.0",
"netifaces",
"pyzmq",
"psutil",
"docopt"
],
Run Code Online (Sandbox Code Playgroud)
然后它应该尝试将它们包含在 rpm 中或尝试安装它。我正在使用 vagrant 尝试一个干净的 centos vm,我一直在破坏它,然后安装 rpm。
我有一个弹簧启动应用程序。今天maven从项目中创建了jar。下面是我的 pom.xml 的构建部分
<build>
<finalName>xsmartadapter</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
通过在上面的构建部分添加以下内容,我可以生成 rpm。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>rpm-maven-plugin</artifactId>
<version>2.1.5</version>
<extensions>true</extensions>
<executions>
<execution>
<id>generate-rpm</id>
<goals>
<goal>rpm</goal>
</goals>
<phase>prepare-package</phase>
</execution>
</executions>
<configuration>
<group>Application</group>
<packager>SWWDC</packager>
<mappings>
<mapping>
<directory>${basedir}/target</directory>
<sources>
<source>
<location>target/classes</location>
</source>
</sources>
</mapping>
</mappings>
<name>xsmartadapter</name>
<executable>rpmbuild</executable>
<workingDirectory>${basedir}</workingDirectory>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试安装并启动服务时sudo service 'name' start。说找不到服务。
但是当我创建一个tar.gz文件并生成一个rpmusing 时,rpmbuild -ba target/filename.spec我就可以启动该服务。
我的目标是生成一个rpm(来自 maven),安装它并启动服务。
请提供一些建议。
我需要将“构建主机”名称更改为其他实际主机名,fqdn(从 /etc/hosts 中选取)
在 rpm 生成过程中,我们通过 .spec 文件设置 rpm 属性,但我知道无法通过 .spec 文件设置“构建主机”值。
有没有办法在 rpm 中更改“构建主机”值而不实际更改 linux 机器的主机名。
即 /etc/sysconfig/network 或
https://www.onyxpoint.com/spoofing-the-build-hostname-in-mock/
我被这个错误困住了。无法安装任何 RPM。请帮忙
操作系统是 RHEL6.9 64 位
提前致谢。