Sua sintaxe está desativada. A macro %defattr
é semelhante a:
%defattr(<file mode>, <user>, <group>, <dir mode>)
Então:
%defattr(-,root,root,644)
Significa: manter o modo de arquivo do arquivo como ele foi instalado, definir o proprietário como root
, agrupar como root
e definir a permissão de diretórios como 644
. Você provavelmente quer:
%defattr(0644,root,root)
Atualizar
Aqui está um exemplo. É mais curto do que o que você está usando, o que faz
é mais fácil discutir aqui, mas acho que demonstra como as coisas
trabalhos. Se começarmos com os seguintes arquivos em um arquivo sotest-1.0.0.tar.gz
:
drwxrwxr-x lars/lars 0 2015-08-30 15:51 sotest-1.0.0/
-rwxr-xr-x lars/lars 28 2015-08-30 09:36 sotest-1.0.0/script1
-rw-rw-r-- lars/lars 16 2015-08-30 09:36 sotest-1.0.0/file1
-rw-rw-r-- lars/lars 14 2015-08-30 15:51 sotest-1.0.0/file2
E o seguinte arquivo de especificações:
Name: sotest
Version: 1.0.0
Release: 1%{?dist}
Summary: A test for StackOverflow
BuildArch: noarch
License: GPL
Source0: %{name}-%{version}.tar.gz
%description
%{summary}
%package subpackage
Summary: A test subpackage
%description subpackage
A test subpackage
%prep
%setup -q
%build
%install
install -Dp -m 755 file1 %{buildroot}%{_libdir}/%{name}/file1
install -Dp -m 755 file2 %{buildroot}%{_sysconfdir}/%{name}
install -Dp -m 755 script1 %{buildroot}%{_bindir}/%{name}
%files
%defattr(0644, root, root)
%{_sysconfdir}/%{name}
%files subpackage
%defattr(0644, root, root)
%{_bindir}/%{name}
%{_libdir}/%{name}/file1
Acho que esse exemplo é basicamente simples para o que você está usando.
Quando instalado, tudo terá o modo 0644
, mesmo que o
arquivos foram instalados com o modo 0755
. Isso é porque o
%defattr
macro está dizendo ao rpmbuild para usar essas permissões para todos
arquivos que não fornecemos uma permissão explícita.
Se eu adicionar:
%attr(0755, root, root) %{_bindir}/%{name}
Então eu recebo o modo 0755 para esse arquivo como esperado. No entanto, o outro
Uma maneira de corrigir isso é modificar nossa seção %install
para simplesmente
instalar coisas com as permissões corretas, assim:
install -Dp -m 644 file1 %{buildroot}%{_libdir}/%{name}/file1
install -Dp -m 644 file2 %{buildroot}%{_sysconfdir}/%{name}
install -Dp -m 755 script1 %{buildroot}%{_bindir}/%{name}
E então eu posso usar isso:
%files
%defattr(-, root, root)
%{_sysconfdir}/%{name}
%files subpackage
%defattr(-, root, root)
%{_bindir}/%{name}
%{_libdir}/%{name}/file1
Que diz ao rpm para simplesmente usar o modo no arquivo quando ele foi instalado
(mas modifique o proprietário e o grupo). Isso torna a seção %files
muito mais simples, já que você não precisa sobrecarregar as macros %attr
explícitas para arquivos individuais.