我必须将一个 RPM(为 Fedora 制作)作为 deb 包移植到 Ubuntu。
在 RPM .spec 文件中,我使用几个变量 ( $RPM_BUILD_ROOT, %{_libdir}, %{name}, %{version}) 创建符号链接:
%install
...
(cd $RPM_BUILD_ROOT/%{_bindir}; ln -sf %{_libdir}/%{name}-%{version}/%{name} . )
Run Code Online (Sandbox Code Playgroud)
(禁止使用相对符号链接(请不要问为什么)——这就是为什么ln命令看起来很奇怪。)
那么,debian/rulesmakefile中这些变量的等价物是什么?
提前致谢。
这与这个问题有些相关.假设我有一个我想通过rpm部署的软件包,因为我需要在安装后进行一些文件复制,并且我有一些我想要声明的非python依赖项.但是我们还说我有一些python依赖项,可以在PyPI中轻松使用.好像我只是打包成一个鸡蛋,然后解压缩python setup.py install会自动处理我的python依赖关系,代价是丢失任何安装后功能和非python依赖项.
有没有推荐的方法呢?我想我可以在预安装脚本中指定它,但后来我进入信息重复,并没有真正使用setuptools的任何东西.
(我目前的设置是传递install_requires = ['dependency_name']到setup,它适用于python setup.py bdist_egg和unzip my_package.egg; python my_package/setup.py install,但不python setup.py bdist_rpm --post-install post-install.sh和rpm --install my_package.rpm.)
我想使用ssh在许多计算机上安装java,所以我想编写一个bash脚本(大致):
for c in computers
do
scp jre--.rpm $c
ssh $c 'sudu -s; chmod a+x jre--.rpm ; ./jre--.rpm; echo "success!"'
done
Run Code Online (Sandbox Code Playgroud)
问题是在java安装期间我需要"读取"通知并在结尾处输入"是".我该怎么做?有没有比"期待"更简单的方法?如果不是我如何在bash脚本中使用它?
非常感谢
我的Perl代码以root身份安装了几(4)个rpm文件.下一次安装会rpm -e在安装较新版本之前删除它们().一个不删除,rpm -e给出错误,它没有安装.但是,稍后在安装更新的文件时,会给出已安装的消息.
手动尝试删除会产生相同的结果.我的问题是如何强制从rpm数据库取出东西,为什么这contradication存在(不安装rpm -e和已安装的rpm -Uvh和rpm -ivh)?
我正在尝试在Fedora 15中创建一个安装我的软件的RPM,但是为了让我的软件在安装后正常工作,我还需要编辑系统上的其他(配置)文件,添加用户/组等.只有root用户才能执行其中一些任务.我知道永远不会以root用户身份创建RPM,我理解为什么这是一个糟糕的主意.但是,如果我将shell脚本语句添加到我的spec文件(%post,%prep ... any section)来编辑必要的文件,添加用户/组等,我的rpmbuild命令将失败并显示消息"Permission denied"(不出奇).
处理这个问题的最佳方法是什么?我是否必须先告诉我的用户安装我的软件包,然后以root身份运行shell脚本来配置它?这似乎并不优雅.我希望允许用户使用一个简单的命令来完成所有操作,例如"yum install mysoftware".
我的大部分研究表明,或许这甚至不应该通过RPM完成.我已经阅读了最大RPM的许多部分,以及许多其他好的资源,但还没有找到我正在寻找的东西.我是创建RPM的新手,但已经能够为我的软件成功创建一个简单的spec文件......在解压缩包并安装到正确的位置后,我无法正确配置所有内容.任何输入都非常感谢!
rpmbuild可以通过查找包中包含的二进制文件所需的共享库来自动检测依赖项,虽然这几乎是每次都很好的思考,但是有时候它是不受欢迎的,但仅限于某些特定的库.我指的是一些二进制文件需要通过其rpm包管理未提供给系统但由第三方安装程序直接安装的库的情况.
现在,问题是:有没有办法让自动检测功能保持活动状态(对于包中的其他二进制文件很方便)但是忽略/删除这些特定的库?
就像是
AutoReqIgnore : library1
AutoReqIgnore : library2
Run Code Online (Sandbox Code Playgroud) 我正在尝试pip在我的生产服务器上进行部署,但是有一个不合逻辑的错误,它试图在没有成功的情况下安装已安装的composent.
~> sudo zypper in python-pip
Loading repository data...
Reading installed packages...
Resolving package dependencies...
Problem: python-pip-1.0.2-3.1.2.noarch requires python = 2.7, but this requirement cannot be provided
uninstallable providers: python-2.7.2-7.10.1.i586[Updates-for-openSUSE-12.1-12.1-1.4]
python-2.7.2-7.17.1.i586[Updates-for-openSUSE-12.1-12.1-1.4]
python-2.7.2-7.10.1.x86_64[Updates-for-openSUSE-12.1-12.1-1.4]
python-2.7.2-7.17.1.x86_64[Updates-for-openSUSE-12.1-12.1-1.4]
python-2.7.2-7.1.3.x86_64[openSUSE-12.1-12.1-1.4]
python-2.7.2-7.1.3.i586[repo-oss]
python-2.7.2-7.1.3.x86_64[repo-oss]
Solution 1: deinstallation of patterns-openSUSE-minimal_base-conflicts 12.1-25.21.1.x86_64
Solution 2: do not install python-pip-1.0.2-3.1.2.noarch
Solution 3: do not install python-pip-1.0.2-3.1.2.noarch
Solution 4: break python-pip-1.0.2-3.1.2.noarch by ignoring some of its dependencies
Choose from above solutions by number or cancel [1/2/3/4/c] (c): c
Run Code Online (Sandbox Code Playgroud)
这是令人难以置信的,因为python-2.7.2-7.17.1安装好的平台(x86_64) …
已经为Redhat编写了一个安装脚本(适用于Microsoft®SQLServer®ODBCDriver 1.0 for Linux)
它使用此代码检查是否安装了某些软件包
req_libs=( glibc e2fsprogs krb5-libs openssl )
for lib in ${req_libs[@]}
do
local present=$(rpm -q -a $lib) >> $log_file 2>&1
if [ "$present" == "" ]; then
log "The $lib library was not found installed in the RPM database."
log "See README for which libraries are required for the $driver_name."
return 1;
fi
done
Run Code Online (Sandbox Code Playgroud)
我已经通过了解/信任库已安装并简单地删除测试来克服了这个问题,但我现在想整理一下.
我的spec文件的files部分如下所示:
%files
%{prefix}/htdocs/
%config %{prefix}/htdocs/share/settings/config.inc.php
Run Code Online (Sandbox Code Playgroud)
现在,由于配置文件已包含%{prefix}/htdocs/在行中,因此我收到警告"文件列出两次".
一种方法是列出%{prefix}/htdocs/除配置文件之外的每个文件.
但我的问题是:除了列出所有文件之外,还有更好的解决方法吗?
嗨,我是linux新手,任何人都可以解释我之间的区别
rpm -ivh
和
rpm -Uvh