Empacotamento Debian Básico

5,612 views

Published on

Empacotamento Debian Básico

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,612
On SlideShare
0
From Embeds
0
Number of Embeds
98
Actions
Shares
0
Downloads
185
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide
  • # Parte 1: Motivação 1. Importância do Empacotamento (usar os slides da apresentacão do ciência livre) 2. Política de Empacotamento Debian - Alta qualidade dos pacotes # Parte 2: Informação de Background 1. FHS - Filesystem Hierarchy Standard 2. Anatomia de Um pacote Debian 1. Dissecando: dpkg-info, dpkg-deb 2. Pacotes Binários 3. Pacotes Source # Parte 3: Criando Um Pacote Manualmente 1. criar árvore de diretórios 2. "instalar" conteúdos na árvore 3. arquivo "copyright" 4. arquivo "changelog" 5. DEBIAN/control 6. DEBIAN/md5sums 7. Empacotar: control.tar.gz + data.tar.gz + debian-binary = pacote.deb 8. Instalar, Verificar, Remover # Parte 4: Debianizando pacotes 1. ... 2. dh_make 3. ...
  • Empacotamento Debian Básico

    1. 1. Empacotamento Básico
    2. 3. Importância do Empacotamento
    3. 4. Vivendo Com Um Sistema Operacional <ul><li>Depois de instalado o sistema a tarefa de manutenção mais realizada pelo usuário é a instalação e remoção de softwares </li></ul><ul><li>Tomemos outro SO como exemplo: </li></ul><ul><ul><li>HiperDownloads, BaixaAcolá </li></ul></ul><ul><ul><li>Next, Next, Next, Finish... </li></ul></ul><ul><ul><li>Duplicação de DLLs </li></ul></ul><ul><ul><li>Desinstaladores sebosos </li></ul></ul><ul><ul><li>As pessoas se acostumam com cada coisa... </li></ul></ul>
    4. 5. Alguém Quer Instalar Um Software Linux... <ul><li>Procura na internet e acha isso: </li></ul><ul><ul><li>NumSeiQ.tar.gz </li></ul></ul>(...) char *category = libhal_device_get_property_string (ctx, udi, &quot;info.category&quot; , NULL); if (category && (!strcmp (category, &quot;net.80203&quot; ) || !strcmp (category, &quot;net.80211&quot; ))) { char *temp = libhal_device_get_property_string (ctx, udi, &quot;net.interface&quot; , NULL); iface = g_strdup (temp); libhal_free_string (temp); } libhal_free_string (category); (...)
    5. 6. Aquele Amigo Esquisito Dá A Dica... <ul><li>É “só” compilar... :P </li></ul>$ ./configure (texto rolando tela acima...) $ make (mais texto rolando tela acima...) $ make install (ainda mais texto rolando...)
    6. 7. O Inferno de Cabeça Para Baixo das 666 Dependências Programa Depende de A B C D E F J K G H I
    7. 8. Esforços Duplicados progama.tar.gz Programador Descompacta Compila Executável Executável Executável Executável
    8. 9. Surge o Empacotador! progama.tar.gz Programador Descompacta Empacotador Compila Executável Menos trabalho pra muita gente.
    9. 10. Empacotadores Orgulhosos, Repositórios Cheios e Usuários Felizes Repositório de Softwares Pré-compilados
    10. 11. Pacotes no Debian Repositório Debian Lista de pacotes disponíveis apt-get update apt-get install foo Packages.gz foo_0.2.3-1_i386.deb
    11. 12. O Paraíso das Dependências Satisfeitas Programa Depende de A B C D E F J K G H I
    12. 13. Informações Interessantes pra Quem Pretende Empacotar
    13. 14. FHS Filesystem Hierarchy Standard dev/ / usr/ etc/ tmp/ bin/ doc/ lib/ share/ home/ bin/
    14. 15. Anatomia de Um Pacote Binário <ul><ul><li>mednafen_0.6.5-1_i386.deb </li></ul></ul>versão - revisão Debian nome arquitetura debian-control control.tar.gz data.tar.gz
    15. 16. Anatomia de Um Pacote Binário <ul><li>Estruturalmente, arquivos .deb nada mais são que arquivos compactados com o utilitário ar , contendo: </li></ul><ul><ul><li>debian-binary – contém apenas a string “2.0” (versão do formato do pacote Debian) </li></ul></ul><ul><ul><li>data.tar.gz – “imagem” do pacote instalado no sistema de arquivos </li></ul></ul><ul><ul><li>control.tar.gz – informações de controle para as ferramentas de manipulação de pacotes </li></ul></ul>
    16. 17. data.tar.gz <ul><li>Conteúdo de data.tar.gz para o pacote libmad0-dev </li></ul><ul><li>Extrair isso na raiz do sistema é quase o mesmo que instalar o pacote. </li></ul><ul><li>./usr/ </li></ul><ul><li>./usr/lib/ </li></ul><ul><li>./usr/lib/libmad.a </li></ul><ul><li>./usr/lib/libmad.la </li></ul><ul><li>./usr/lib/pkgconfig/ </li></ul><ul><li>./usr/lib/pkgconfig/mad.pc </li></ul><ul><li>./usr/include/ </li></ul><ul><li>./usr/include/mad.h </li></ul><ul><li>./usr/share/ </li></ul><ul><li>./usr/share/doc/ </li></ul><ul><li>./usr/share/doc/libmad0-dev/ </li></ul><ul><li>./usr/share/doc/libmad0-dev/changelog.Debian.gz </li></ul><ul><li>./usr/share/doc/libmad0-dev/TODO </li></ul><ul><li>./usr/share/doc/libmad0-dev/copyright </li></ul><ul><li>./usr/share/doc/libmad0-dev/examples/ </li></ul><ul><li>./usr/share/doc/libmad0-dev/examples/minimad.c.gz </li></ul><ul><li>./usr/share/doc/libmad0-dev/changelog.gz </li></ul><ul><li>./usr/share/doc/libmad0-dev/CREDITS.gz </li></ul><ul><li>./usr/share/doc/libmad0-dev/README.gz </li></ul><ul><li>./usr/lib/libmad.so </li></ul>
    17. 18. control.tar.gz <ul><li>Conteúdo de control.tar.gz para o pacote libmad0-dev </li></ul><ul><ul><li>control, md5sums </li></ul></ul><ul><li>Pouca coisa. Vejamos outro: mozilla-thunderbird </li></ul><ul><ul><li>conffiles, config, control, md5sums, postinst, postrm, preinst, prerm, templates </li></ul></ul>
    18. 19. control.tar.gz <ul><li>conffiles </li></ul><ul><li>config </li></ul><ul><li>control </li></ul><ul><li>md5sums </li></ul><ul><li>postinst </li></ul><ul><li>postrm </li></ul><ul><li>preinst </li></ul><ul><li>prerm </li></ul><ul><li>templates </li></ul><ul><li>shlibs </li></ul>
    19. 20. Dissecando Um Pacote Binário <ul><li>Os pacotes baixados pelo apt-get são guardados em /var/cache/apt/archives </li></ul><ul><li>Vamos copiar algum .deb para uma mesa de cirurgia em /tmp/lab </li></ul>
    20. 21. Dissecando Um Pacote Binário <ul><li>file pacote.deb </li></ul><ul><li>ar -t pacote.deb </li></ul><ul><li>dpkg-deb --info pacote.deb </li></ul><ul><li>dpkg-deb --contents pacote.deb </li></ul><ul><li>dpkg-deb --field pacote.deb depends </li></ul><ul><li>ar x pacote.deb </li></ul><ul><li>dpkg-deb --control pacote.deb </li></ul><ul><li>dpkg-deb --extract pacote.deb ./data </li></ul>
    21. 22. Criando Um Pacote Manualmente
    22. 23. Tema Para O Desktop <ul><li>Vamos criar um pacote simples – um tema para o Desktop, contendo: </li></ul><ul><ul><ul><li>Papel de Parede: /usr/share/backgrounds/diad-background.png </li></ul></ul></ul><ul><ul><ul><li>Tema GDM: /usr/share/gdm/themes/diad/* </li></ul></ul></ul><ul><ul><ul><li>Splash Screen: /usr/share/pixmaps/splash/diad-splash.png </li></ul></ul></ul>
    23. 24. Criando Um Pacote Manualmente (1) <ul><li>Crie a estrutura de diretórios </li></ul><ul><ul><li>$ mkdir -p diad-artwork/usr/share/backgrounds $ mkdir -p diad-artwork/usr/share/pixmaps/splash $ mkdir -p diad-artwork/usr/share/gdm/themes/diad $ mkdir -p diad-artwork/usr/share/doc/diad-artwork $ mkdir diad-artwork/ DEBIAN </li></ul></ul><ul><li>Copie conteúdo $ cp diad-splash.png diad-artwork/usr/share/pixmaps/splash $ cp diad-background.png diad-artwork/usr/share/backgrounds $ cp diad diad-artwork/usr/share/gdm/themes/diad-artwork -r $ chmod 644 diad-artwork/* -R </li></ul>
    24. 25. Criando Um Pacote Manualmente (2) <ul><li>Estrutura de diretórios </li></ul>diad-artwork/ |-- DEBIAN `-- usr `-- share |-- backgrounds |-- doc | `-- diad-artwork |-- gdm | `-- themes | `-- diad `-- pixmaps `-- splash
    25. 26. Documentação (1) <ul><li>diad-artwork/usr/share/doc/diad-artwork/copyright </li></ul><ul><ul><ul><li>This package was manually created by James Bond <007@england.go.uk> on Mon, 30 Jul 2007, 08:25:00 +0000 It was downloaded from ... Upstream Author: James Bond < [email_address] > </li></ul></ul></ul><ul><ul><ul><li>Copyright: [...] </li></ul></ul></ul>
    26. 27. Documentação (2) <ul><li>diad-artwork/usr/share/doc/diad-artwork/changelog.Debian.gz </li></ul><ul><ul><ul><li>diad-artwork (1.0-1) unstable; urgency=low </li></ul></ul></ul><ul><ul><ul><li>* &quot;License to Kill&quot; release. </li></ul></ul></ul><ul><ul><ul><li>-- James Bond <007@england.go.uk> Mon, 30 Jul 2007 08:28:00 +0000 </li></ul></ul></ul>
    27. 28. DEBIAN/control <ul><ul><ul><li>Package: diad-artwork </li></ul></ul></ul><ul><ul><ul><li>Section: misc </li></ul></ul></ul><ul><ul><ul><li>Priority: extra </li></ul></ul></ul><ul><ul><ul><li>Maintainer: James Bond <007@england.co.uk> </li></ul></ul></ul><ul><ul><ul><li>Architecture: all </li></ul></ul></ul><ul><ul><ul><li>Version: 1.0-1 </li></ul></ul></ul><ul><ul><ul><li>Description: theme artwork for the Debian D, 2007 </li></ul></ul></ul><ul><ul><ul><li>Includes background and splash screen images, and GDM theme. </li></ul></ul></ul>
    28. 29. DEBIAN/md5sums <ul><li>$ find usr -type f -exec md5sum {} ; > DEBIAN/md5sums </li></ul><ul><ul><ul><li>3a3346e545ad9d1058fa5a48ceada9e5 usr/share/backgrounds/diad-background.png </li></ul></ul></ul><ul><ul><ul><li>93171425730b46aa4debbaa58568402f usr/share/doc/diad-artwork/copyright </li></ul></ul></ul><ul><ul><ul><li>e1cce7981a1dfd51f518f1c15e7a87cc usr/share/doc/diad-artwork/changelog.Debian.gz </li></ul></ul></ul><ul><ul><ul><li>8f45891b27c85f01fd40bac603883650 usr/share/pixmaps/splash/diad-splash.png </li></ul></ul></ul><ul><ul><ul><li>7f2d2f712840525f75ab34ecf540cd9f usr/share/gdm/themes/diad/GdmGreeterTheme.desktop </li></ul></ul></ul><ul><ul><ul><li>eafe4de8c42ef34de37ec0b9a2f05d57 usr/share/gdm/themes/diad/background.svg </li></ul></ul></ul><ul><ul><ul><li>a826c77b077e0b782914f32ad5e5ddab usr/share/gdm/themes/diad/debsmith.png </li></ul></ul></ul><ul><ul><ul><li>84513d7282b4cfc745c63d2b8ae971a7 usr/share/gdm/themes/diad/diad.xml </li></ul></ul></ul><ul><ul><ul><li>adcc7b98011b1ed7f00695fbdb2afa86 usr/share/gdm/themes/diad/help.png </li></ul></ul></ul><ul><ul><ul><li>dba080eb88405fdd911b5cfb3b8d2bc0 usr/share/gdm/themes/diad/options.png </li></ul></ul></ul><ul><ul><ul><li>c588c56e88007469e55e0c084e830cd4 usr/share/gdm/themes/diad/screenshot.png </li></ul></ul></ul><ul><ul><ul><li>0960f0c80ff0e503288d2ea5e704fbe8 usr/share/gdm/themes/diad/debsmiths.png </li></ul></ul></ul>
    29. 30. diad-artwork_1.0-1_all.deb <ul><li>$ echo 2.0 > debian-binary </li></ul><ul><li>$ fakeroot # tar cz -C diad-artwork/DEBIAN -f control.tar.gz . # tar cz --exclude=DEBIAN -C diad-artwork -f data.tar.gz . </li></ul><ul><ul><li># ar rcu diad-artwork.deb > debian-binary control.tar.gz data.tar.gz </li></ul></ul><ul><ul><li># exit </li></ul></ul><ul><ul><li>$ file diad-artwork.deb </li></ul></ul><ul><ul><li>$ dpkg-name diad-artwork.deb </li></ul></ul>
    30. 31. Instalando e Removendo Seu Novo Pacote <ul><li>Instalando </li></ul><ul><ul><li>$ sudo dpkg -i diad-artwork_1.0-1_all.deb Selecting previously deselected package diad-artwork. (Reading database ... 221664 files and directories currently installed.) Unpacking diad-artwork (from diad-artwork_1.0-1_all.deb) ... Setting up diad-artwork (1.0-1) ... </li></ul></ul><ul><li>Verificando se está instalado $ aptitude search python </li></ul>
    31. 32. Instalando e Removendo Seu Novo Pacote <ul><li>Removendo $ sudo apt-get remove diad-artwork Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: diad-artwork 0 upgraded, 0 newly installed, 1 to remove and 40 not upgraded. Need to get 0B of archives. After unpacking 0B of additional disk space will be used. Do you want to continue [Y/n]? y (Reading database ... 221677 files and directories currently installed.) Removing diad-artwork ... </li></ul>
    32. 33. Debianizando Pacotes Existentes
    33. 34. Debianizando ./DEBIAN ./usr ./usr/share ... <ul><ul><li>pacote-0.1-1_i386.deb </li></ul></ul><ul><ul><li>código fonte debianizado </li></ul></ul>./pacote-0.1 ./pacote-0.1/src/* ./pacote-0.1/ debian/* ./pacote-0.1/*
    34. 35. Debianizando <ul><li>Vamos obter o código fonte de uma aplicação qualquer $ wget http://logicparser.googlecode.com/files/logicparser-0.7.2.tar.gz $ tar -xvzf logicparser-0.7.2.tar.gz $ cd logicparser-0.7.2 </li></ul>
    35. 36. dh_make <ul><li>Poderíamos criar “na mão” todos os arquivos necessários para criação do deb </li></ul><ul><li>Mas o dh_make ( pacote: dh-make ) poderia fazer isso por nós... :) $ cd logicparser-0.7.2 $ DEBFULLNAME=&quot;Marcelo Lira dos Santos&quot; > DEBEMAIL=&quot;setanta@gmail.com&quot; > dh_make --file ../logicparser-0.7.2.tar.gz > --single -c gpl </li></ul><ul><li>Serão criados o diretório logicparser_0.7.2/ debian e o arquivo logicparser_0.7.2.orig.tar.gz </li></ul>
    36. 37. Modificando os Arquivos em debian/* <ul><li>O dh_make cria vários arquivos, muitos dos quais não precisaremos. Vamos apagá-los: $ rm debian/*.ex debian/*.EX README.Debian </li></ul><ul><li>Vejamos o que sobrou $ ls debian changelog compat control copyright dirs docs rules </li></ul>Invoca o Makefile Você já conhece esse.
    37. 38. debian/control <ul><ul><li>Source: logicparser Section: misc Priority: optional Maintainer: Marcelo Lira dos Santos <meuemail@email.com> Build-Depends: debhelper (>= 5), autotools-dev Standards-Version: 3.7.2 </li></ul></ul><ul><ul><li>Package: logicparser Architecture: i386 Depends: ${shlibs:Depends}, ${misc:Depends} Description: Simple parser for logical expressions. Parser of logical propositions. It generates a parsed tree, a graph in DOT format, and renders it in PNG if GraphViz is available. It also calculates the expression based in values given by the user. </li></ul></ul>
    38. 39. Criando o Pacote Binário <ul><li>fakeroot </li></ul><ul><ul><li>usado para simular privilégios de root </li></ul></ul><ul><ul><li>a princípio não serve pra exploitar (tão pensando que o céu é perto) </li></ul></ul><ul><li>Usamos o rules para criar o pacote $ fakeroot debian/rules binary </li></ul><ul><li>Fora do diretório do código fonte estará o arquivo logicparser_0.7.2-1_i386.deb </li></ul>
    39. 40. Pacotes Fonte <ul><li>Fatos: </li></ul><ul><ul><li>Além de pacotes binários o Debian possui pacotes fonte. </li></ul></ul><ul><ul><li>Pacotes binários são criados a partir de pacotes fonte. </li></ul></ul><ul><ul><li>Pacotes fonte podem gerar múltiplos pacotes binários. </li></ul></ul><ul><ul><ul><li>Exemplo: o pacote fonte de uma biblioteca pode gerar pacotes binários runtime , desenvolvimento e documentação </li></ul></ul></ul>
    40. 41. Anatomia de Um Pacote Fonte <ul><li>Um pacote fonte não é um arquivo, mas 3: </li></ul><ul><ul><li>foo_1.0-1.orig.tar.gz – código fonte original </li></ul></ul><ul><ul><li>foo_1.0-1.diff.gz – mudanças feitas no código fonte original; pode ser o acréscimo do diretório debian , ou mudanças na própria aplicação para se adequar às políticas do Debian. </li></ul></ul><ul><ul><li>foo_1.0-1.dsc – descrição do pacote fonte. </li></ul></ul>
    41. 42. Criando o Pacote Fonte <ul><li>Devemos ter no presente diretório, o arquivo orig do código fonte, mais o diretório com o código fonte alterado ( debian/* e outras coisas): $ ls logicparser-0.7.2 logicparser_0.7.2.orig.tar.gz $ dpkg-source -b logicparser-0.7.2 $ ls logicparser-0.7.2 logicparser_0.7.2.orig.tar.gz logicparser_0.7.2-1.diff.gz logicparser_0.7.2-1.dsc </li></ul>
    42. 43. Criando o Pacote Fonte <ul><li>Vamos copiar o pacote fonte para outro lugar onde podemos brincar em paz: $ mkdir playground $ cp logicparser_0.7.2* playground $ cd playground </li></ul><ul><li>Usamos o comando dpkg-source para aplicar as diferen ç as no pacote fonte original segundo as informa ções em dsc $ dpkg-source -x logicparser_0.7.2-1.dsc $ ls logicparser-0.7.2 logicparser_0.7.2-1.diff.gz logicparser_0.7.2-1.dsc logicparser_0.7.2.orig.tar.gz </li></ul>
    43. 44. Criando o Pacote Fonte <ul><li>Finalmente construímos o pacote binário: $ cd logicparser-0.7.2 $ dpkg-buildpackage -rfakeroot -b -us -uc $ cd .. $ ls logicparser-0.7.2 logicparser_0.7.2-1.dsc logicparser_0.7.2-1_i386.deb logicparser_0.7.2-1.diff.gz logicparser_0.7.2-1_i386.changes logicparser_0.7.2.orig.tar.gz </li></ul>u = unsigned não faz uso de assinaturas criptográficas
    44. 45. Resumo Visual do Processo de Empacotamento Upstream Source Rename Unpack Build Build Create Working Files Debian packaging files and changes Debian binary package Debian source package Descaradamente copiado de: http://liw.iki.fi/liw/talks/debian-packaging-tutorial.pdf foo-1.0.tar.gz foo-1.0 foo-1.0/debian/* foo_1.0-1_i386.deb foo_1.0-1.orig.tar.gz foo_1.0-1.diff.gz foo_1.0-1.dsc
    45. 46. Autor: Marcelo Lira dos Santos <setanta@gmail.com> Chefe, posso usar algumas horas de trabalho pra fazer os slides do Dia D ? Pro Dia D ? Claro que pode! [meu chefe no INdT]
    46. 47. Referências
    47. 48. Referências <ul><li>KRAFFT, Martin F. The Debian System </li></ul><ul><li>The Debian GNU/Linux FAQ Chapter 6 - Basics of the Debian package management system </li></ul><ul><ul><li>http://www.debian.org/doc/FAQ/ch-pkg_basics.en.html </li></ul></ul><ul><li>Debian Policy Manual </li></ul><ul><ul><li>http://www.debian.org/doc/debian-policy/ </li></ul></ul><ul><li>Debian Packaging School: Lesson 1 </li></ul><ul><ul><li>http://liw.iki.fi/liw/talks/debian-packaging-tutorial.pdf </li></ul></ul>
    48. 49. <ul><li>Atribuição-Compartilhamento pela mesma licença 2.5 ( http://creativecommons.org/licenses/by-sa/2.5/deed.pt ) </li></ul><ul><li>Você pode: </li></ul><ul><ul><li>copiar, distribuir, exibir e executar a obra </li></ul></ul><ul><ul><li>criar obras derivadas </li></ul></ul><ul><ul><li>fazer uso comercial da obra </li></ul></ul><ul><li>Sob as seguintes condições: </li></ul><ul><li>Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante. </li></ul><ul><li>Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta. </li></ul><ul><ul><li>Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra. </li></ul></ul><ul><ul><li>Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor. </li></ul></ul><ul><li>Qualquer direito de uso legítimo (ou &quot;fair use&quot;) concedido por lei, ou qualquer outro direito protegido pela legislação local, não são em hipótese alguma afetados pelo disposto acima. </li></ul><ul><li>Este é um sumário para leigos da Licença Jurídica (na íntegra: http://creativecommons.org/licenses/by-sa/2.5/br/legalcode ). Termo de exoneração de responsabilidade: http://creativecommons.org/licenses/disclaimer-popup?lang=pt </li></ul>

    ×