rpm e defattr

0

Por que

%files ram
%defattr(-,root,root,644)
%dir %attr(755, root, root) /usr/lib/ram/postd
/usr/lib/ram/postd/about
/usr/lib/ram/postd/local.conf
/usr/lib/ram/postd/local.init.conf
/usr/lib/ram/postd/param
%attr(755, root, root) /usr/lib/ram/postd/apply
%attr(755, root, root) /usr/lib/ram/postd/input
%attr(755, root, root) /usr/lib/ram/postd/query

criar ALL os arquivos com 755?

-rwxr-xr-x. 1 kostyrev kostyrev   37 Aug 25 19:42 about
-rwxr-xr-x. 1 kostyrev kostyrev  160 Aug 25 19:42 apply
-rwxr-xr-x. 1 kostyrev kostyrev  548 Aug 25 19:42 input
-rwxr-xr-x. 1 kostyrev kostyrev 1178 Aug 25 19:42 local.conf
-rwxr-xr-x. 1 kostyrev kostyrev   61 Aug 25 19:42 local.init.conf
-rwxr-xr-x. 1 kostyrev kostyrev  183 Aug 25 19:42 param
-rwxr-xr-x. 1 kostyrev kostyrev    0 Aug 25 19:42 query

Não é suposto aplicar defattr a arquivos sem configuração attr explícita?

    
por Aleksandr Kostyrev 29.08.2015 / 21:24

1 resposta

2

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.

    
por 30.08.2015 / 02:27

Tags