• Like
  • Save
RPM Creation
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

RPM Creation

  • 1,193 views
Published

Presentation made for Caixa Mágica workshop on the creation of RPM packages

Presentation made for Caixa Mágica workshop on the creation of RPM packages

Published in Technology , News & Politics
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,193
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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
  • 26. Energia Open Source Exemplo “Hands on” – ~/rpmbuild/SPECS/keepassx.spec: Name: keepassx Version: 0.4.1 Release: %mkrel 4 Epoch: 0 Summary: Cross Platform Password Manager License: GPLv2+ Group: File tools URL: http://www.keepassx.org/ Source0: http://downloads.sourceforge.net/keepassx/keepassx-% {version}.tar.gz Source1: %{name}.desktop Patch0: translation-cxm-pt_PT.patch Provides: keepass = %{epoch}%{version}-%{release} Provides: KeePassX = %{epoch}%{version}-%{release} Requires(post): desktop-file-utils 15.03.2010 Construir Pacotes RPM: arte e engenho 26
  • 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
  • 29. Energia Open Source Exemplo “Hands on” – ~/rpmbuild/SPECS/keepassx.spec: %install %{__rm} -rf %{buildroot} %{makeinstall_std} INSTALL_ROOT=%{buildroot} %{__mkdir_p} %{buildroot}%{_datadir}/pixmaps %{__mkdir_p} %{buildroot}%{_datadir}/icons/hicolor/16x16/apps %{__mkdir_p} %{buildroot}%{_datadir}/icons/hicolor/32x32/apps %{__mkdir_p} %{buildroot}%{_datadir}/icons/hicolor/64x64/apps %{_bindir}/convert -scale 32 share/keepassx/icons/keepassx.png % {buildroot}%{_datadir}/pixmaps/%{name}.png %{_bindir}/convert -scale 16 share/keepassx/icons/keepassx.png % {buildroot}%{_datadir}/icons/hicolor/16x16/apps/%{name}.png %{_bindir}/convert -scale 32 share/keepassx/icons/keepassx.png % {buildroot}%{_datadir}/icons/hicolor/32x32/apps/%{name}.png 15.03.2010 Construir Pacotes RPM: arte e engenho 29
  • 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