Sistemas Operacionais - Gnu/Linux Instalando Programas
RPM Creation
1. Energia Open Source
Construir pacotes RPM:
arte e engenho
Flávio Moringa flavio.moringa@caixamagica.pt
2. Energia Open Source
Pacotes RPM
Tópicos a abordar
– Vantagens
– Arquitectura
– O RPM fonte
– Criar um src.rpm
– O ficheiro .spec em detalhe
– Exemplo “Hands-On”
– Documentação na rede
15.03.2010 Construir Pacotes RPM: arte e engenho 2
3. Energia Open Source
Vantagens
Instalação automática e “scriptable” de software;
Fácil de actualizar e remover software;
Fácil de descobrir onde estão os ficheiros de um
determinado software;
Garante que as dependências de outro software
necessárias à execução do actual estão instaladas;
Garante a autenticidade do software se assinado
digitalmente;
Fácil de instalar software (se necessário recorrendo a
meta-instaladores como o apt-rpm, yum, smart, urpmi,
zypper, etc.);
Usado por algumas das principais distribuições mundiais
(Red Hat/Fedora, openSUSE, Mandriva, etc.).
15.03.2010 Construir Pacotes RPM: arte e engenho 3
4. Energia Open Source
Arquitectura
O pacote RPM
O pacote Source RPM
Base de dados de RPM's
– /var/lib/rpm/
Utilitários RPM
– rpm
– rpmbuild
• essencial para construir pacotes, vem do pacote “rpm-
build”
– rpmsign
– rpm2cpio
Ficheiros de configuração
– /usr/lib/rpm/
– /etc/rpm/
15.03.2010 Construir Pacotes RPM: arte e engenho 4
5. Energia Open Source
Arquitectura
Nomes Convencionados
– nome-versão-revisão.arquitectura.rpm
Arquitecturas
– source (src.rpm)
– noarch (noarch.rpm)
– binário
• i386, i486, i586, i686 (compatíveis com intel/amd), x86_64,
ia64 (compatíveis com intel e/ou amd de 64bits), ppc,
ppc64 (powerpc), sparc64, etc...
Formato
– Ficheiro cpio + Cabeçalho binário
15.03.2010 Construir Pacotes RPM: arte e engenho 5
6. Energia Open Source
O RPM fonte
Source RPM (src.rpm)
– Permite gerar um ou mais pacotes binários (excepto se a
arquitectura for noarch) a partir do código fonte de um
determinado software.
Conteúdo
– Código fonte original (normalmente do repositório oficial do
software em formato tarball);
– Patches que sejam necessários para alterar o código fonte
original;
– Ficheiros adicionais (scripts de inicialização, entradas de
desktop, etc...);
– Um ficheiro que indique como deve ser compilado o software,
e como deve ser colocado no sistema – O ficheiro .spec.
15.03.2010 Construir Pacotes RPM: arte e engenho 6
7. Energia Open Source
Criar um src.rpm de raíz ou usar um existente
Criar de raíz
– Se não existe ainda nenhum src.rpm do software;
– Permite um maior controlo sobre todos os aspectos da
compilação e da instalação;
– Pode ser complicado, mas basta fazer uma vez.
Usar um já existente
– Usar uma versão antiga de um src.rpm para criar uma versão
mais nova;
– A maioria das distribuições disponibilizam os src.rpm de todo o
seu software;
– Pode ser complicado se temos de adaptar o src.rpm de outra
distribuição;
– Basta alterar o necessário e está feito.
15.03.2010 Construir Pacotes RPM: arte e engenho 7
8. Energia Open Source
Usar um src.rpm já existente
Instalar o src.rpm
– Como utilizador normal fazer: rpm -ivh xxx.src.rpm
Alterar os ficheiros fonte, patch's e ficheiros extra
– ~/rpmbuild/SOURCES/
Alterar o ficheiro .spec
– ~/rpmbuild/SPECS/
Criar o pacote
– rpmbuild -ba ~/rpmbuild/SPECS/xxx.spec
Ficheiros disponíveis
– ~/rpmbuild/RPMS/arquitectura/
– ~/rpmbuild/SRPMS/
15.03.2010 Construir Pacotes RPM: arte e engenho 8
9. Energia Open Source
Criar um src.rpm de raíz
Criar o ambiente
– mkdir -p ~/rpmbuild/{SPECS,SOURCES,SRPMS,BUILD,RPMS}
– mkdir -p ~/rpmbuild/RPMS/{athlon,i386,i486,i586,i686,noarch}
Preparar o código fonte
– Colocar o tarball oficial na directoria SOURCES
• cp less-378.tar.gz ~/rpmbuild/SOURCES/
– Criar os patches necessários
• tar xzvf less-378.tar.gz ; cd less-378
• cp edit.c edit.c.ori
• Alterar o ficheiro edit.c
• diff -Naur edit.c.ori edit.c > ~/rpmbuild/SOURCES/edit.patch
15.03.2010 Construir Pacotes RPM: arte e engenho 9
10. Energia Open Source
Criar um src.rpm de raíz
Preparar o código fonte (continuação)
– Colocar outros ficheiros necessários
• cp less.desktop less.png ~/rpmbuild/SOURCES/
15.03.2010 Construir Pacotes RPM: arte e engenho 10
11. Energia Open Source
Criar um src.rpm de raíz
Criar o ficheiro SPEC em ~/rpmbuild/SPECS/ – O cabeçalho
Summary: Descrição numa linha do software
Name: less
Version: 378
Release: 1.2
License: GPL
Group: System/Utilities
Source0: %{name}-%{version}.tar.gz
Source1: less.desktop
Source2: less.png
Patch0: edit.patch
BuildRoot: %{_tmppath}/%{name}-build
15.03.2010 Construir Pacotes RPM: arte e engenho 11
12. Energia Open Source
Criar um src.rpm de raíz
Criar o ficheiro SPEC – O corpo
%description
Este comando permite ver o conteúdo de um ficheiro e
navegar ao contrário dentro dele (o contrário do comando
more)
%prep
%setup -q
%patch0
%build
%configure
make
15.03.2010 Construir Pacotes RPM: arte e engenho 12
13. Energia Open Source
Criar um src.rpm de raíz
Criar o ficheiro SPEC – O corpo (continuação)
%install
rm -rf %{buildroot}
make install
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root)
%{_bindir}/less
/usr/share/man/man3/less.3pm.gz
15.03.2010 Construir Pacotes RPM: arte e engenho 13
14. Energia Open Source
Criar um src.rpm de raíz
Criar o ficheiro SPEC – O corpo (continuação)
%files devel
%defattr(-,root,root)
/usr/include/less.h
/usr/lib/less.a
%changelog
* Tue Nov 13 2007 Flavio Moringa
<flavio.moringa@caixamagica.pt> 378-1.0
- Primeira versão do pacote para Caixa Mágica
Fazer o pacote
– rpmbuild -ba ~/rpmbuild/SPECS/less.spec
15.03.2010 Construir Pacotes RPM: arte e engenho 14
15. Energia Open Source
Criar um src.rpm de raíz
O ficheiro .spec em detalhe
– Campos mais comuns do cabeçalho:
• Summary: Descrição curta da aplicação numa linha;
• Name: Nome da aplicação;
• Version: Versão da aplicação;
• Release: Revisão do pacote RPM;
• License: Licença da aplicação (licenças válidas disponíveis
em
http://wiki.mandriva.com/en/Development/Packaging/Licens
es);
• Group: Grupo a que pertence a aplicação grupos válidos em
/usr/share/doc/rpm/GROUPS);
• URL: Homepage da aplicação ou localização original dos
ficheiros fonte da aplicação;
15.03.2010 Construir Pacotes RPM: arte e engenho 15
16. Energia Open Source
Criar um src.rpm de raíz
– Campos mais comuns do cabeçalho (Continuação):
• Source : Nome do ficheiro com o código fonte da aplicação;
• Patch: Nome do ficheiro com o patch para o código fonte;
• Requires: Pacotes/bibliotecas que são necessárias estarem
instaladas previamente para a aplicação funcionar
(opcional porque o pacote ao ser criado adiciona em build
time os requisitos ao pacote automaticamente);
• Provides: O que o pacote dá (nome e nome = versão por
omissão, mas podemos pôr outros);
• BuildRequires: Pacotes que são necessários estar
instalados previamente para que seja possível
criar/compilar o pacote RPM binário a partir do pacote
source rpm (opcional mas facilita ao indicar algum requisito
para a compilação que pode não ser perceptível
facilmente);
15.03.2010 Construir Pacotes RPM: arte e engenho 16
17. Energia Open Source
Criar um src.rpm de raíz
– Campos mais comuns do cabeçalho (Continuação):
• BuildRoot: Directoria temporária onde a aplicação será
colocada após ser compilada e a partir da qual será
empacotada no RPM;
• BuildArch: Arquitectura a construir (Se não indicado é
usada a arquitectura do sistema, é obrigatório definir se
quiseremos fazer um pacote com arquitectura “noarch”)
• %description : Descrição pormenorizada da aplicação. Esta
descrição pode ter vários parágrafos;
– E se tivermos mais do que ficheiro Source e mais do que
um ficheiro Patch?
• Usa-se “Source:”, “Source1:”, “Source2:”,... “Patch:”,
“Patch1:”, “Patch2:”, ...);
15.03.2010 Construir Pacotes RPM: arte e engenho 17
18. Energia Open Source
Criar um src.rpm de raíz
– Opções comuns da secção %prep:
• %setup -q -n nome_directoria_codigo_fonte
Descompacta o código fonte e entra na directoria indicada
(se não colocarmos o -n tenta entrar numa directoria com o
nome-versão do pacote). A opção -q é para ser silencioso e
não mostrar output;
• %patch
Aplica o patch ao código fonte (se quisermos aplicar o
ficheiro associado ao Patch3 fazemos: “%patch3”, pode
receber argumentos do nível de directorias,
ex: “%patch3 -p1”);
• Podemos acrescentar outros comando necessários à
preparação da compilação. Por exemplo:
chmod -R a+w *
tar xzvf %{SOURCE2}
etc...
15.03.2010 Construir Pacotes RPM: arte e engenho 18
19. Energia Open Source
Criar um src.rpm de raíz
– Opções comuns da secção %build:
• %configure
Faz o comando “configure” já com as opções do autoconf
do nosso sistema (ex: prefixo padrão onde colocar os
binários)
• make
executa o comando make para compilar o código fonte.
Pode adicionar-se as opções de compilação que se
queiram.
15.03.2010 Construir Pacotes RPM: arte e engenho 19
20. Energia Open Source
Criar um src.rpm de raíz
– Opções comuns da secção %install:
• make DESTDIR=$RPM_BUILD_ROOT install
Instala os binários gerados pela compilação na directoria
definida pela variável BuildRoot;
• Para instalar ficheiros extra, não criados a partir da
compilação podemos fazer algo como:
mkdir -p $RPM_BUILD_ROOT/usr/share/applications
cp %{SOURCE1} $RPM_BUILD_ROOT/usr/share/applications
– Secção %clean:
• Normalmente só contém o comando:
rm -rf $RPM_BUILD_ROOT
para que da próxima vez que refizermos o build do RPM a
directoria associada a $RPM_BUILD_ROOT esteja vazia;
15.03.2010 Construir Pacotes RPM: arte e engenho 20
21. Energia Open Source
Criar um src.rpm de raíz
– A secção %files (continuação):
• %config(noreplace) caminho/para/o/ficheiro
– Indica um ficheiro de configuração que não deve ser
substituído no caso de uma futura actualização deste pacote;
• %attr(660,utilizador,dono) /usr/share/less.tgz
– Indica umas permissões especificas só para este ficheiro sem
alterar o %defattr actual para os outros ficheiros seguintes.
• Se a secção %files tiver um argumento (ex: %files devel),
isso indica que deve ser criado um outro pacote cujo nome
será o nome actual seguido de “-devel” com os ficheiros
indicados;
15.03.2010 Construir Pacotes RPM: arte e engenho 21
22. Energia Open Source
Criar um src.rpm de raíz
– Correr comandos na instalação ou remoção do próprio
pacote:
• %pre
Os comandos colocados nesta secção serão executados antes
de instalar o pacote;
• %post
Os comandos colocados nesta secção serão executados depois
de instalar o pacote;
• %preun
Os comandos colocados nesta secção serão executados antes
de remover o pacote;
• %postun
Os comandos colocados nesta secção serão executados depois
de remover o pacote;
15.03.2010 Construir Pacotes RPM: arte e engenho 22
23. Energia Open Source
Criar um src.rpm de raíz
– Correr comandos na instalação ou remoção de outros
pacotes que possam afectar este pacote:
• %triggerin -- nome_do_pacote
Os comandos colocados nesta secção serão executados
quando o pacote “nome_do_pacote” for instalado ou
actualizado;
• %triggerun -- nome_do_pacote
Os comandos colocados nesta secção serão executados
quando o pacote “nome_do_pacote” for removido;
http://www.rpm.org/api/4.4.2.2/triggers.html
15.03.2010 Construir Pacotes RPM: arte e engenho 23
24. Energia Open Source
Criar um src.rpm de raíz
– Histórico das alterações aos pacotes:
• %changelog
Última secção de um ficheiro .spec, permite indicar as
alterações feitas ao pacote e o que foi feito. Abaixo esta
secção deve ser colocada a informação da seguinte forma:
* Data empacotador <email do empacotador> versão-revisão
- Alteração efectuada
- Outra alteração efectuada
*Data_anterior empacotador <email do empacotador>
versãorevisão
- Alteração efectuada
…
• A data deve ter o formato “Tue Nov 13 2007”
15.03.2010 Construir Pacotes RPM: arte e engenho 24
25. Energia Open Source
Exemplo “Hands on”
– KeepassX – Gestor de senhas
• Já existe um src.rpm em:
ftp://ftp.caixamagica.pt/14/contribuicoes/SRPMS/contrib/kee
passx-0.4.1-4xcm14.src.rpm
• Vamos instalá-lo:
rpm -ivh
ftp://ftp.caixamagica.pt/14/contribuicoes/SRPMS/contrib/kee
passx-0.4.1-4xcm14.src.rpm
• Que ficheiro temos em ~/rpmbuild/SOURCES:
keepassx-0.4.1.tar.gz keepassx.desktop translation-cxm-
pt_PT.patch
• Vamos analisar o SPEC file que está em:
– ~/rpmbuild/SPECS/keepassx.spec
15.03.2010 Construir Pacotes RPM: arte e engenho 25
27. Energia Open Source
Exemplo “Hands on”
– ~/rpmbuild/SPECS/keepassx.spec:
Requires(postun): desktop-file-utils
BuildRequires: desktop-file-utils
BuildRequires: imagemagick
BuildRequires: libxtst-devel
BuildRequires: qt4-devel
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%description
KeePassX is a free/open-source password manager or safe which helps
you to manage your passwords in a secure way. You can put all your
passwords in one database, which is locked with one master key or a
key-disk. So you only have to remember one single master password or
insert the key-disk to unlock the whole database. The databases are
encrypted using the best and most secure encryption algorithms
currently known (AES and Twofish).
15.03.2010 Construir Pacotes RPM: arte e engenho 27
28. Energia Open Source
Exemplo “Hands on”
– ~/rpmbuild/SPECS/keepassx.spec:
%prep
%setup -q
%patch0 -p1
%build
PATH=$PATH:/usr/lib/qt4/bin/ ./translations_update.sh
PATH=$PATH:/usr/lib/qt4/bin/ ./translations_release.sh
%{qt4dir}/bin/qmake
%{make}
15.03.2010 Construir Pacotes RPM: arte e engenho 28
30. Energia Open Source
Exemplo “Hands on”
– ~/rpmbuild/SPECS/keepassx.spec:
%{_bindir}/convert -scale 64 share/keepassx/icons/keepassx.png %
{buildroot}%{_datadir}/icons/hicolor/64x64/apps/%{name}.png
%{__mkdir_p} %{buildroot}%{_datadir}/applications
%{_bindir}/desktop-file-install --vendor ""
--dir %{buildroot}%{_datadir}/applications
%{SOURCE1}
%clean
%{__rm} -rf %{buildroot}
15.03.2010 Construir Pacotes RPM: arte e engenho 30
31. Energia Open Source
Exemplo “Hands on”
– ~/rpmbuild/SPECS/keepassx.spec:
%post
%{update_desktop_database}
%update_icon_cache hicolor
%{update_mime_database}
%postun
%{clean_desktop_database}
%clean_icon_cache hicolor
%{clean_mime_database}
15.03.2010 Construir Pacotes RPM: arte e engenho 31
32. Energia Open Source
Exemplo “Hands on”
– ~/rpmbuild/SPECS/keepassx.spec:
%files
%defattr(0644,root,root,0755)
%doc changelog
%attr(0755,root,root) %{_bindir}/keepassx
%{_datadir}/keepassx
%{_datadir}/applications/%{name}.desktop
%{_datadir}/pixmaps/%{name}.png
%{_datadir}/pixmaps/keepassx.xpm
%{_datadir}/icons/hicolor/16x16/apps/%{name}.png
%{_datadir}/icons/hicolor/32x32/apps/%{name}.png
%{_datadir}/icons/hicolor/64x64/apps/%{name}.png
%{_datadir}/mime/packages/keepassx.xml
%{_datadir}/mimelnk/application/x-keepass.desktop
15.03.2010 Construir Pacotes RPM: arte e engenho 32
33. Energia Open Source
Exemplo “Hands on”
– ~/rpmbuild/SPECS/keepassx.spec:
%changelog
* Mon Mar 15 2010 Flávio Moringa <flavio.moringa@caixamagica.pt>
0.4.1-4xcm14
- First Caixa Mágica build
15.03.2010 Construir Pacotes RPM: arte e engenho 33
34. Energia Open Source
Exemplo “Hands on”
– E agora, vamos criar o pacote :
cd ~/rpmbuild/SPECS
rpmbuild -ba keepassx.spec
esperar....
• Os pacotes RPM devem ficar em ~/rpmbuild/RPMS/i586/
• O pacote SRPM deve ficar em ~/rpmbuild/SRPMS/
• E está feito...
15.03.2010 Construir Pacotes RPM: arte e engenho 34
35. Energia Open Source
Documentação na Rede
– http://www.gurulabs.com/GURULABS-RPMLAB/
– GURULABS-RPM-GUIDE-v1.0.PDF
– http://wiki.mandriva.com/en/Development/Howto/RPM
– http://developer.novell.com/wiki/index.php/SUSE_Packag
e_Conventions
– http://docs.fedoraproject.org/drafts/rpm-guide-en/
– http://www.novell.com/coolsolutions/feature/11793.html
– http://www.rpm.org/max-rpm/
– http://www.ibm.com/developerworks/library/l-rpm1/
15.03.2010 Construir Pacotes RPM: arte e engenho 35
36. Energia Open Source
Notas Finais
Obrigado
Flavio.Moringa@caixamagica.pt
15.03.2010 Construir Pacotes RPM: arte e engenho 36