2017-10-18 93 views
1

我的项目应该在其目录中有一个spec文件(因此它不在SPECS目录中),它可以用于从make rpm包中构建一个rpm包。使用PHP源代码创建一个rpm包

该项目本身是一个Symfony应用程序。安装软件包因此,当三件事情应该发生:

  • 应用程序复制到其目的地(最好是适当的Apache2目录)
  • 复制配置文件/etc/appname/
  • /var/log/appname
  • 创建日志文件的目录

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

据我了解rpmbuild它应该足以实现我的spec文件的%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应该是在这种情况下,与有关权限什么。

回答

1

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

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

+0

非常感谢这个答案,我会稍后再试。剩下的一个问题是:在'%files'中列出所有文件将是一个疯狂的长列表(由于供应商)。有没有办法递归列出所有文件? – nehalist

+0

是的,引用目录(您在'%install'中复制了一些文件的位置)就足够了。 – marbu

+0

使用'$ RPM_BUILD_ROOT'前缀我的dest路径导致“目录不存在”错误,因为像'$ RPM_BUILD_ROOT/var/www ...'这样的东西不存在。为什么我必须使用RPM_BUILD_ROOT呢? – nehalist

相关问题