![rpm - 如何在 %post rpm 中执行 php 文件](https://linux22.com/image/656470/rpm%20-%20%E5%A6%82%E4%BD%95%E5%9C%A8%20%25post%20rpm%20%E4%B8%AD%E6%89%A7%E8%A1%8C%20php%20%E6%96%87%E4%BB%B6.png)
我正在为 php web 应用程序创建 rpm 安装程序。其中一个要求是运行 php 脚本,这是一个将更新源、数据库并执行修复脚本的入口脚本。
为了满足此要求,我创建了一个 tar 文件,其中包含 php 脚本和更新所需的其他文件,并将其存储在源目录中。我只需要在 %post 上调用 php 脚本。
%post
cd $RPM_BUILD_ROOT
gunzip %{name}-%{version}.tar
tar -xvf %{name}-%{version}.tar
php install.php
我首先将目录更改为 build,因为我认为那是 tar 文件的位置。然后解压缩文件并执行 php 脚本。但我收到以下错误:
gunzip: can't stat: webapp-1.0.tar (webapp-1.0.tar.gz): No such file or directory
tar: Error opening archive: Failed to open 'webapp-1.0.tar'
Could not open input file: install.php
我应该如何执行 php 脚本?这可能吗?
另外,我应该使用哪个 rpm 文件来安装最终发行版,是目录 rpms/i386 中的那个还是 srpms 中的那个?我仍在开发 rpm。
任何帮助都将受到赞赏。
[编辑] 我尝试使用%setup -c -n %{name}
%post 而不是 tar 命令。然后我收到此消息Could not open input file: install.php
答案1
如果这是 .spec 文件,请使用 %{buildroot} 而不是 $RPM_BUILD_ROOT。请参阅此处的“宏”章节:https://fedoraproject.org/wiki/How_to_create_an_RPM_package
还请尝试echo %{buildroot} > /tmp/dbg.txt
检查 /tmp/dbg.txt 内容以查看它尝试 cd 到哪里。
我建议尝试使用平均流量它能够构建所有类型的软件包。只需将安装前安装后脚本作为参数与其余部分一起提供即可。无需 rpm 规范文件或 deb 规则文件。