创建RPM包时,如何自动安装依赖
when creating RPM package, how to auto install dependencies
我的程序基本上是一个基于 C 的 MySQL 服务器,它需要 gcc、mysql-server、mysql-devel 才能 运行 成功。
现在我要把程序打包成RPM包,它应该可以自动安装依赖,这样RPM包就可以安装在干净的RHEL机器上,程序可以运行即时安装后。
问题是如果我在 SPEC 文件 %pre 部分中编写以下脚本,它会在 "transaction" 期间卡住。
sudo yum groupinstall "Development Tools" -y
sudo yum install mysql-server mysql-client -y
看来你不能在SPEC文件中使用其他rpm安装工具。
我该怎么做?
是:安装时有一个独占的 rpmdb 锁,防止所有在包脚本中使用 rpm 的尝试。
通常所做的是创建自定义 yum 存储库并调用 yum。
否则创建一个简短的 shell 脚本来调用 rpm/yum 来自动安装。
您不能直接这样做,您不能从您的 RPM 规范文件中安装另一个 RPM。
您应该遵循的正常方法是使您的 RPM 取决于它需要的其他 RPM,例如通过将其添加到您的 .spec 文件中:
Requires: gcc, mysql-server, mysql-devel
然后当您尝试使用 rpm 命令安装 rpm 时:
rpm -ivh yourrpm-1.0.0.rpm
它会失败并告诉你要安装哪些包,你必须先手动安装这些包。
或者您可以使用 yum 安装您的 rpm 文件:
yum install ./yourrpm.1.0.0.rpm
yum 将在安装您的 RPM 包之前下载并安装所需的依赖项。
我的程序基本上是一个基于 C 的 MySQL 服务器,它需要 gcc、mysql-server、mysql-devel 才能 运行 成功。
现在我要把程序打包成RPM包,它应该可以自动安装依赖,这样RPM包就可以安装在干净的RHEL机器上,程序可以运行即时安装后。
问题是如果我在 SPEC 文件 %pre 部分中编写以下脚本,它会在 "transaction" 期间卡住。
sudo yum groupinstall "Development Tools" -y
sudo yum install mysql-server mysql-client -y
看来你不能在SPEC文件中使用其他rpm安装工具。
我该怎么做?
是:安装时有一个独占的 rpmdb 锁,防止所有在包脚本中使用 rpm 的尝试。
通常所做的是创建自定义 yum 存储库并调用 yum。
否则创建一个简短的 shell 脚本来调用 rpm/yum 来自动安装。
您不能直接这样做,您不能从您的 RPM 规范文件中安装另一个 RPM。
您应该遵循的正常方法是使您的 RPM 取决于它需要的其他 RPM,例如通过将其添加到您的 .spec 文件中:
Requires: gcc, mysql-server, mysql-devel
然后当您尝试使用 rpm 命令安装 rpm 时:
rpm -ivh yourrpm-1.0.0.rpm
它会失败并告诉你要安装哪些包,你必须先手动安装这些包。
或者您可以使用 yum 安装您的 rpm 文件:
yum install ./yourrpm.1.0.0.rpm
yum 将在安装您的 RPM 包之前下载并安装所需的依赖项。