【问题标题】:Creating a rpm package with make from PHP source使用 make 从 PHP 源创建一个 rpm 包
【发布时间】:2017-10-18 15:36:22
【问题描述】:

我的项目应该在其目录中有一个规范文件(因此它不在SPECS 目录中),该文件可用于从带有make rpm 的包中构建一个rpm 包。

项目本身是一个 Symfony 应用程序。因此,在安装包时应该发生 3 件事:

  • 将应用程序复制到其目的地(最好是正确的 apache2 目录)
  • 将配置文件复制到/etc/appname/
  • /var/log/appname中的日志文件创建一个目录

可以使用make dist 构建应用程序,它会构建应用程序并在之后创建一个dist.tar.gz 文件。

据我了解rpmbuild 应该足以实现我的规范文件的%install 部分。但我的问题是,在本节中,我位于~/rpmbuild 目录中,我的压缩应用程序和源代码都不存在于该目录中。只需 cd 到另一个目录是行不通的,因为我不知道规范文件的调用位置(以及项目的其余部分)。

我想要的是这样的:

Name: appname
# rest of the header (group, summary, ...)

Source: dist.tar.gz

Requires: php >= 7.0, apache2

%description
important words

%install
cp * /var/www/appname # copy the application to its destination
cp docs/config/example /etc/appname/ # copy config to its destination
mkdir -p /var/log/appname # create log directory

此外,我不确定我的%files 在这种情况下应该是什么以及权限。

【问题讨论】:

    标签: php rpm


    【解决方案1】:

    请参阅Creating RPM Packages with Fedora,在那里您可以看到对 rpmbuild 各个阶段的详细描述(即使您不为 Fedora 打包,这种理解也很有用)。

    也就是说,快速回答是:您需要一个%prep 部分,您可以在其中通过%setpu -q 宏提取源压缩包(压缩包在Source: dist.tar.gz 中引用)。看来您可以跳过%build 部分。在%install 部分,您需要先创建所有需要的目录,然后将所有文件复制(安装)到适当的位置(您需要在目标路径中使用$RPM_BUILD_ROOT 前缀而不是您的绝对路径在您的示例中使用)。最后但最重要的是,在%files 中,您需要列出您在%install 部分中安装的所有文件,您希望这些文件成为rpm 包的一部分。

    【讨论】:

    • 非常感谢您的回答,我稍后再试。剩下的一个问题:列出%files 中的所有文件将是一个疯狂的长列表(由于供应商)。有没有办法递归列出所有文件?
    • 是的,引用目录(您在%install 中复制了一些文件的位置)就足够了。
    • $RPM_BUILD_ROOT 前缀我的目标路径会导致“目录不存在”错误,因为像$RPM_BUILD_ROOT/var/www... 这样的东西不存在。那为什么我必须使用 RPM_BUILD_ROOT?
    • 您需要使用RPM_BUILD_ROOT,因为您不以root 身份构建RPM。安装后,位于那里的内容最终将与系统的根目录相关。
    猜你喜欢
    • 2021-12-29
    • 2015-09-12
    • 1970-01-01
    • 2012-12-11
    • 2021-10-05
    • 2011-09-12
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多