【问题标题】:Where in the spec file can I put instructions to install/move around files when I run the install command?当我运行安装命令时,我可以在规范文件的哪个位置放置安装/移动文件的说明?
【发布时间】:2016-05-03 09:33:19
【问题描述】:

当我运行安装命令时,我可以在规范文件中的哪个位置放置安装/移动文件的说明?

rpm -ivh myrpm-1.0-12.rpm

在我的 RPM 中,我有一个装满文件(php 文件)的 tar 球,我想将它们放在我的服务器上的一个设置目录中。

我跑。

rpmbuild -ba   

这会执行下面的命令,我现在不想执行。

%install
mkdir -p $RPM_BUILD_ROOT/usr/local/mypath/here
cp -r . $RPM_BUILD_ROOT/usr/local/mypath/here

我希望最终用户在安装时执行这些命令

rpm -ivh myrpm-1.0-12.rpm

在 RPM 文档中,它说安装 RPM 的步骤之一是... "从包中解压文件并将它们放在适当的位置:"

这是大多数人在考虑安装软件时想到的步骤。每个软件包文件都包含要安装的文件列表,以及它们在系统上的目标位置。此外,RPM 正确设置了许多其他文件属性,例如权限和所有权。

我不知道把这些命令放在哪里。

我也尝试将命令放在%build 中,它的作用相同。

【问题讨论】:

    标签: rpm rpmbuild rpm-spec


    【解决方案1】:

    RPM 构建时间是提取这些文件的确切时间。

    原始的 tar 球应该是“源 RPM 文件”的一部分,而“二进制 RPM 文件”(错误的措辞;在这种情况下应该是“安装 RPM 文件”更好)应该包含确切的RPM 负责的目标文件系统的布局。

    此布局在%install 部分中定义。通常,您有序列%prep%build%install%prep 将您的源代码解压到工作目录中,%build 构建它们并 %install 将 stoff 移动到定义应该存在的文件的“构建根目录”。如果你没有任何东西要构建,就像你的情况一样,你可以省略 %build 并且可能只是在 %install 部分解压缩。

    这也是 RPM 系统知道文件名称的唯一方法,因此您可以使用 rpm -qf $FILENAME 查询它们的包。 (除了ghost文件,但这不是很优雅)。

    您可以添加一个 %post 脚本,它在安装时解压缩一个 tarball,但是,如前所述,这远非优雅。

    【讨论】:

    • 谢谢,这有帮助。因此,如果我有一个想要解压缩的文件夹,例如 mydir/index.php 并且我希望文件的确切布局是机器上的 /usr/local/mypath/here/mydir/index.php,我在哪里指定?您说,[.rpm 文件] 应该包含 RPM 负责的目标文件系统的确切布局。我在哪里指定该布局?
    • @Eddie 在%install 部分。这就是$RPM_BUILD_ROOT 部分的全部内容。您在目标系统上以$RPM_BUILD_ROOT 前缀创建所需的精确 布局,然后rpmbuild 将该目录下的所有内容打包为您的包。
    • @EtanReisner 所以当我运行 'rpm -ivh myrpm...' 时 %install 运行?我放了一个回声语句,我没有看到它?我在构建 rpm (rpmbuild -ba myrpm....) 时确实看到了它
    • @Eddie No. %install 在您 build 包时运行。 %pre%post 在安装 RPM 时运行。不过,您 不想 想要提取任何东西。这不是你包装东西的方式。就像我说的那样,您在%install 期间准确地设置了您希望目标 系统在$RPM_BUILD_ROOT 下的目录结构,然后rpmbuild 将所有这些文件打包到rpm 包并在安装时将其解压缩到正确的位置。此外,您通常不想使用rpm -i,使用rpm -U 通常表现得更好。
    猜你喜欢
    • 2015-03-20
    • 1970-01-01
    • 2018-09-07
    • 2021-05-30
    • 2018-05-16
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多