【问题标题】:rpmbuild install: cannot create directoryrpmbuild install:无法创建目录
【发布时间】:2013-05-15 07:59:26
【问题描述】:

我正在创建一个 RPM 文件,但在使用 install 时出现一些权限错误。

这是我的规范文件:

%define buildroot %{_tmppath}/nagios-1-1-root-%(%{__id_u} -n)

Summary: Nagios blabla
Name: nagios
Version: 1
Release: 1
License: PROPRIETARY
Group: Applications/Accessories
Source: nagios-1.tar.gz
Packager: Nicholas Lievens <lievens.nicholas@gmail.com>
AutoReqProv: no
Requires: gcc gcc-c++ glibc glibc-common glibc-devel gd gd-devel php53 php53-cli php53-mysql php53-gd php53-pdo graphviz httpd libdbi-dbd-mysql libdbi-devel mysql mysql-server mysql-devel git

%description
Nagios!
%prep
%setup

%build
./configure --with-init-dir=/etc/init.d --with-nagios-user=nagios --with-nagios-group=nagios
make all

%install
make install DESTDIR=${RPM_BUILD_ROOT}
make install-init DESTDIR=${RPM_BUILD_ROOT} 
make install-config DESTDIR=${RPM_BUILD_ROOT}
make install-commandmode DESTDIR=${RPM_BUILD_ROOT}
make install-webconf DESTDIR=${RPM_BUILD_ROOT}
make install-devel DESTDIR=${RPM_BUILD_ROOT}

#htpasswd -b -c /usr/local/nagios/etc/htpasswd.users nagiosadmin nagiosadmin
%files
%defattr(755,root,root)
/etc/init.d/nagios
%{_prefix}/var
%{_prefix}/var/spool/checkresults
%{_prefix}/var/rw
%{_prefix}/etc
%{_prefix}/bin
%{_prefix}/sbin
%{_prefix}/libexec
%{_prefix}/lib
%{_prefix}/include/nagios
%{_prefix}/share
%{_prefix}/etc
%defattr(644,root,root)
%config(noreplace) %{_prefix}/etc/*.cfg
%defattr(750,root,nagios)
/etc/nagios
/etc/nagios/objects
%defattr(755,nagios,nagios)
/var/log/nagios
/var/log/nagios/archives
%defattr(2775,nagios,nagios)
/var/spool/nagios
###%files www
%defattr(755,root,root)
%{_prefix}/sbin
%{_prefix}/sbin/*
%{_prefix}/share/nagios
%defattr(-,root,root)
%{_prefix}/share/nagios/*
%config(noreplace) /etc/httpd/conf.d/nagios.conf
%defattr(-,root,root)
%{_prefix}/include/nagios
%{_prefix}/include/nagios/locations.h

有些东西只是出于调试原因而被注释掉。谁能告诉我为什么得到输出:

安装:无法创建目录`/var/spool/nagios':权限 拒绝错误:来自 /var/tmp/rpm-tmp.80635 (%install) 的错误退出状态

【问题讨论】:

  • 你为什么要覆盖%{_prefix}?安装您的软件包的用户最终会在/home/mockbuild/.local/usr/local/nagios安装 nagios。除了一半的文件实际上会在你所属的地方结束,因为你只是在其他定义中使用 /usr 而不是 %{_prefix}

标签: packaging rpm


【解决方案1】:

您是否尝试在 RHEL 5 上构建它?如果是这样,您需要在标题中的某处添加此行:

BuildRoot:  %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

否则$RPM_BUILD_ROOT 将不会被填充。

【讨论】:

  • 感谢您的评论。我更新了开始帖子中的代码。目前我正在努力运行 make install-init。我认为这需要root(给出错误无法更改/var/tmp/nagios-1-1-root-nagios/etc/init.d/nagios的所有权)
  • 我现在编辑了 Makefile.in 并将 INIT OPTIONS 从 root 更改为 nagios。现在它继续并且所有的 make 安装都成功了,但是在那之后我得到了大量 RPM Builder 错误:安装(但找到未打包的文件:...这是否意味着我的源文件中缺少文件?
猜你喜欢
  • 2019-07-02
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多