Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux rpmbuild规范文件%install节错误_Linux_Rpmbuild_Rpm Spec - Fatal编程技术网

Linux rpmbuild规范文件%install节错误

Linux rpmbuild规范文件%install节错误,linux,rpmbuild,rpm-spec,Linux,Rpmbuild,Rpm Spec,我有一个规范文件,类似于: BuildRoot: /tmp/build_%{name}-%{version}-%{release} %prep ... ... %install # Directories install -m 755 -d %{buildroot}/usr/app/mypackage/config install -m 755 -d %{buildroot}/usr/app/mypackage/src .... # Bash script install -m 755 s

我有一个规范文件,类似于:

BuildRoot: /tmp/build_%{name}-%{version}-%{release}

%prep
...
...

%install
# Directories
install -m 755 -d %{buildroot}/usr/app/mypackage/config
install -m 755 -d %{buildroot}/usr/app/mypackage/src
....

# Bash script
install -m 755 script/script1.sh %{buildroot}/usr/app/mypackage/config/script1.sh
install -m 755 script/script2.sh %{buildroot}/usr/app/mypackage/config/script2.sh
install -m 755 script/myapp-log %{buildroot}/etc/logrotate.d/myapp-log
当我运行rpmbuild时,我得到一个错误:

install: cannot create regular file `/tmp/build_my_app-1.0-2/etc/logrotate.d/myapp-log'
我可以通过手动创建
/etc/
,然后在
/tmp/build_my_app-1.0-2/
目录中创建
/etc/logrotate.d
目录来解决这个问题

当我重新连接rpmbuild时,它会起作用

我想这是因为我没有在安装部分创建这个目录,但因为它与我的应用程序没有直接关系,所以我不想把它放进去

我的猜测是,我可以使用一些聪明的标记来修复这个问题,这样构建就可以在没有任何手动干预的情况下工作

我的问题:
有人能为我建议一种实现这一点的方法(假设可能)吗?或者我是否需要在rpmbuild周围编写一个脚本来首先进行设置。

您缺少在%install部分中创建安装目录的步骤。请记住,由于可以在“不同”的根中构建,因此不能期望存在某些目录(如${buildroot}/etc)

尝试添加

 mkdir -p ${buildroot}/etc/logrotate.d

在将文件复制到
${buildroot}/etc/logrotate.d

的install命令之前,您缺少在%install节中创建安装目录的步骤。请记住,由于可以在“不同”的根中构建,因此不能期望存在某些目录(如${buildroot}/etc)

尝试添加

 mkdir -p ${buildroot}/etc/logrotate.d

在将文件复制到
${buildroot}/etc/logrotate.d

的install命令之前,这是有意义的。
install-d${buildroot}/etc/logrotate.d
mkdir
更好吗?我只是想知道,大多数linux系统似乎已经安装了logrotate,我不希望在构建或安装时出现任何错误time@ghostJago,安装命令不在部署时安装到操作系统,而是安装到${buildroot}因此,%文件部分可以开始验证生成是否正确地将所有预期文件放置在其预期位置。您可以使用
install-d
mkdir-p
,这并不重要,当您执行
rpm--install-package.rpm
时,这些命令都不会运行,这很有意义。
install-d${buildroot}/etc/logrotate.d
mkdir
更好吗?我只是想知道,大多数linux系统似乎已经安装了logrotate,我不希望在构建或安装时出现任何错误time@ghostJago,安装命令不在部署时安装到操作系统,而是安装到${buildroot}因此,%文件部分可以开始验证生成是否正确地将所有预期文件放置在其预期位置。您可以使用
install-d
mkdir-p
,这并不重要,当您执行
rpm--install-package.rpm时,这些命令都不会运行