Entendendo os
  pacotes deb
   Fernando Mercês

#DebianDay Barra Mansa - RJ
   20 de agosto de 2011
$ whoami

Consultor de projetos com software livre na 4Linux,
bacharelando em Ciência da Computação, entusiasta
em segurança da informação, amante de Engenharia
Reversa, LPIC-2, A+, autor de artigos técnicos,
desenvolvedor "hobbysta" e colaborador do Debian
GNU/Linux.
Agenda

● Como são distribuídos os programas no mundo
  GNU/Linux

● O que é um pacote pré-compilado?

● Entendendo o tipo de arquivo deb

● Construindo um pacote "na unha"

● Ferramentas para gerência de pacotes

● Empacotando seus próprios programas
Como são distribuídos os
 programas no mundo GNU/Linux
  ● Código-fonte (.tgz, .tar.gz, tar.bzip2...)
      ○ Instalação
$ ./configure
$ make
# make install
      ○ Dependências - como fazer?

 ● Pacotes (.deb, .rpm, .pkg...)
    ○ Instalação
        ■ apt-get, aptitude, wajig, yum, dpkg, rpm,
          pacman, zypper, slackpkg...

 ● Binários estáticos
O que é um
       pacote pré-compilado?
● Um ou mais binários são compilados antes de
  serem empacotados.

● Contém informações sobre o programa
  empacotado, autor, dependências, documentação,
  changelogs etc.

● Fácil instalação.

● Pré-configurado.
Entendendo o
         tipo de arquivo deb
● Um arquivo deb consiste em vários
  arquivos agrupados com o ar (do conjunto
  binutils).

● $ ar t pev_0.40-1_amd64.deb
    ○ debian-binary
    ○ control.tar.gz
    ○ data.tar.gz
Entendendo o
                tipo de arquivo deb
$ cat debian-binary
2.0
$ cat md5sums
c7428a9504b8980e9c3fa52095ad4669      usr/bin/pev
cc13a88eec30886c8156c1a2ae860daa      usr/share/doc/pev/changelog.
Debian.gz
e5f6b9940645d82c1cfffb06d425d4ae          usr/share/doc/pev/changelog.gz
1aaf9ae37e73b95f2735d2a16e8c08ba          usr/share/doc/pev/copyright
d04afc14bb0f45430ecef7fd6655c214          usr/share/man/man1/pev.1.gz

$ tar tf data.tar.gz
./usr/share/man/man1/pev.1.gz
./usr/share/doc/pev/copyright
./usr/share/doc/pev/changelog.Debian.gz
./usr/share/doc/pev/changelog.gz
./usr/bin/
./usr/bin/pev
Entendendo o
             tipo de arquivo deb
$ cat control
Package: pev
Version: 0.40-1
Architecture: amd64
Maintainer: Fernando Mercês <fernando@mentebinaria.com.br>
Installed-Size: 72
Depends: libc6 (>= 2.2.5)
Section: utils
Priority: extra
Homepage: http://pev.sourceforge.net
Description: text-based tool to analyze PE files
 pev is a tool to get information of PE32/PE32+
 executables (EXE, DLL, OCX etc) like headers,
 sections, resources and more.
Construindo um
        pacote deb "na unha"
● Técnica útil somente para fins de aprendizagem.

● Não é a maneira correta de se fazer um pacote.

● Um pacote construído dessa forma nunca seria
  aceito nos repositórios oficiais do Debian e
  derivados (o que inclui o Ubuntu).

● Passo a passo em http://www.mentebinaria.com.
  br/textos#0x19
Ferramentas para
         gerência de pacotes
● DPKG
   ○ Ferramenta de baixo nível para gerência de
     pacotes (instala, remove, exibe informações,
     mantém uma lista de pacotes instalados etc).

● APT
   ○ Front-end de alto nível para o DPKG com
     muitos recursos adicionais. Um dos mais
     interessantes é a resolução automática de
     dependências.

● Aptitude
   ○ Front-end para o APT com ainda mais
     facilidades (inclusive tela interativa).
Ferramentas para
         gerência de pacotes
● Synaptic
   ○ Front-end gráfico (GTK+) para o APT.
Empacotando seus
           próprios programas
 ● Interessante fazer da maneira mais correta
   possível, mesmo que não vá para o repositório do
   Debian.

 ● Tutorial de introdução, baseado em sessão de IRC
   sobre o assunto: http://wiki.debian.
   org/IntroDebianPackaging

  ● Documentação oficial: http://www.debian.org/doc/
# apt-get install packaging-tutorial debian-policy
maint-guide
Créditos e licenças

● Conteúdo: Fernando Mercês (@MenteBinaria)
  http://www.mentebinaria.com.br
  Licença: CC BY 3.0
● Template do Google Docs por Nathan Handler
  Licença: GPL-2
● Template baseado no template para OpenOffice.org
  por Raphaël Hertzog
  http://raphaelhertzog.com/go/ooo-template
  Licença: GPL-2
● Imagem de fundo por Alexis Younes “ayo”
  http://www.73lab.com
  Licença: GPL-2

Entendendo os pacotes DEB

  • 1.
    Entendendo os pacotes deb Fernando Mercês #DebianDay Barra Mansa - RJ 20 de agosto de 2011
  • 2.
    $ whoami Consultor deprojetos com software livre na 4Linux, bacharelando em Ciência da Computação, entusiasta em segurança da informação, amante de Engenharia Reversa, LPIC-2, A+, autor de artigos técnicos, desenvolvedor "hobbysta" e colaborador do Debian GNU/Linux.
  • 3.
    Agenda ● Como sãodistribuídos os programas no mundo GNU/Linux ● O que é um pacote pré-compilado? ● Entendendo o tipo de arquivo deb ● Construindo um pacote "na unha" ● Ferramentas para gerência de pacotes ● Empacotando seus próprios programas
  • 4.
    Como são distribuídosos programas no mundo GNU/Linux ● Código-fonte (.tgz, .tar.gz, tar.bzip2...) ○ Instalação $ ./configure $ make # make install ○ Dependências - como fazer? ● Pacotes (.deb, .rpm, .pkg...) ○ Instalação ■ apt-get, aptitude, wajig, yum, dpkg, rpm, pacman, zypper, slackpkg... ● Binários estáticos
  • 5.
    O que éum pacote pré-compilado? ● Um ou mais binários são compilados antes de serem empacotados. ● Contém informações sobre o programa empacotado, autor, dependências, documentação, changelogs etc. ● Fácil instalação. ● Pré-configurado.
  • 6.
    Entendendo o tipo de arquivo deb ● Um arquivo deb consiste em vários arquivos agrupados com o ar (do conjunto binutils). ● $ ar t pev_0.40-1_amd64.deb ○ debian-binary ○ control.tar.gz ○ data.tar.gz
  • 7.
    Entendendo o tipo de arquivo deb $ cat debian-binary 2.0 $ cat md5sums c7428a9504b8980e9c3fa52095ad4669 usr/bin/pev cc13a88eec30886c8156c1a2ae860daa usr/share/doc/pev/changelog. Debian.gz e5f6b9940645d82c1cfffb06d425d4ae usr/share/doc/pev/changelog.gz 1aaf9ae37e73b95f2735d2a16e8c08ba usr/share/doc/pev/copyright d04afc14bb0f45430ecef7fd6655c214 usr/share/man/man1/pev.1.gz $ tar tf data.tar.gz ./usr/share/man/man1/pev.1.gz ./usr/share/doc/pev/copyright ./usr/share/doc/pev/changelog.Debian.gz ./usr/share/doc/pev/changelog.gz ./usr/bin/ ./usr/bin/pev
  • 8.
    Entendendo o tipo de arquivo deb $ cat control Package: pev Version: 0.40-1 Architecture: amd64 Maintainer: Fernando Mercês <fernando@mentebinaria.com.br> Installed-Size: 72 Depends: libc6 (>= 2.2.5) Section: utils Priority: extra Homepage: http://pev.sourceforge.net Description: text-based tool to analyze PE files pev is a tool to get information of PE32/PE32+ executables (EXE, DLL, OCX etc) like headers, sections, resources and more.
  • 9.
    Construindo um pacote deb "na unha" ● Técnica útil somente para fins de aprendizagem. ● Não é a maneira correta de se fazer um pacote. ● Um pacote construído dessa forma nunca seria aceito nos repositórios oficiais do Debian e derivados (o que inclui o Ubuntu). ● Passo a passo em http://www.mentebinaria.com. br/textos#0x19
  • 10.
    Ferramentas para gerência de pacotes ● DPKG ○ Ferramenta de baixo nível para gerência de pacotes (instala, remove, exibe informações, mantém uma lista de pacotes instalados etc). ● APT ○ Front-end de alto nível para o DPKG com muitos recursos adicionais. Um dos mais interessantes é a resolução automática de dependências. ● Aptitude ○ Front-end para o APT com ainda mais facilidades (inclusive tela interativa).
  • 11.
    Ferramentas para gerência de pacotes ● Synaptic ○ Front-end gráfico (GTK+) para o APT.
  • 12.
    Empacotando seus próprios programas ● Interessante fazer da maneira mais correta possível, mesmo que não vá para o repositório do Debian. ● Tutorial de introdução, baseado em sessão de IRC sobre o assunto: http://wiki.debian. org/IntroDebianPackaging ● Documentação oficial: http://www.debian.org/doc/ # apt-get install packaging-tutorial debian-policy maint-guide
  • 13.
    Créditos e licenças ●Conteúdo: Fernando Mercês (@MenteBinaria) http://www.mentebinaria.com.br Licença: CC BY 3.0 ● Template do Google Docs por Nathan Handler Licença: GPL-2 ● Template baseado no template para OpenOffice.org por Raphaël Hertzog http://raphaelhertzog.com/go/ooo-template Licença: GPL-2 ● Imagem de fundo por Alexis Younes “ayo” http://www.73lab.com Licença: GPL-2