Empacotamento Debian Básico

Embed Size (px)

Citation preview

Empacotamento Bsico

# Parte 1: Motivao

1. Importncia do Empacotamento (usar os slides da apresentaco do cincia livre) 2. Poltica de Empacotamento Debian - Alta qualidade dos pacotes

# Parte 2: Informao de Background

1. FHS - Filesystem Hierarchy Standard 2. Anatomia de Um pacote Debian 1. Dissecando: dpkg-info, dpkg-deb 2. Pacotes Binrios 3. Pacotes Source

# Parte 3: Criando Um Pacote Manualmente

1. criar rvore de diretrios 2. "instalar" contedos 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. ...

Licensing:

This image was created by Chris 73.

This file is licensed under the Creative Commons Attribution ShareAlike 2.5 License. In short: you are free to share and make derivative works of the file under the conditions that you appropriately attribute it, and that you distribute it only under a license identical to this one.

Fonte: http://commons.wikimedia.org/wiki/Image:Individually_wrapped_strawberries%2C_Japan.jpg

Importncia do Empacotamento

Vivendo Com
Um Sistema Operacional

Depois de instalado o sistema a tarefa de manuteno mais realizada pelo usurio a instalao e remoo de softwares

Tomemos outro SO como exemplo:

HiperDownloads, BaixaAcol

Next, Next, Next, Finish...

Duplicao de DLLs

Desinstaladores sebosos

As pessoas se acostumam com cada coisa...

Algum Quer Instalar Um Software Linux...

(...)char *category = libhal_device_get_property_string(ctx, udi, "info.category", NULL);if (category && (!strcmp (category, "net.80203") ||!strcmp (category, "net.80211"))){char *temp = libhal_device_get_property_string(ctx, udi, "net.interface", NULL);iface = g_strdup (temp);libhal_free_string (temp);}libhal_free_string (category);
(...)

Procura na internet e acha isso:

NumSeiQ.tar.gz

Aquele Amigo
Esquisito D A Dica...

s compilar... :P

$ ./configure

(texto rolando tela acima...)

$ make

(mais texto rolando tela acima...)
$ make install

(ainda mais texto rolando...)

O Inferno de Cabea Para Baixo das 666 Dependncias

Programa

Depende de

A

B

C

D

E

F

J

K

G

H

I

Esforos Duplicados

progama.tar.gz

Programador

Descompacta

Compila

Executvel

Executvel

Executvel

Executvel

Surge o Empacotador!

progama.tar.gz

Programador

Descompacta

Empacotador

Compila

Executvel

Menos trabalho pra muita gente.

Empacotadores Orgulhosos, Repositrios Cheios e Usurios Felizes

Repositrio
de Softwares
Pr-compilados

Pacotes no Debian

RepositrioDebian

Packages.gz

Lista de pacotes disponveis

apt-get updateapt-get install foo

foo_0.2.3-1_i386.deb

O Paraso das
Dependncias Satisfeitas

Programa

Depende de

A

B

C

D

E

F

J

K

G

H

I

Informaes Interessantes pra Quem Pretende Empacotar

FHS
Filesystem Hierarchy Standard

dev/

/usr/

etc/

tmp/

bin/

doc/

lib/

share/

home/

bin/

mednafen_0.6.5-1_i386.deb

Anatomia de Um Pacote Binrio

verso - reviso Debiannomearquiteturadebian-controlcontrol.tar.gzdata.tar.gz

Anatomia de Um Pacote Binrio

Estruturalmente, arquivos .deb nada mais so que arquivos compactados com o utilitrio ar, contendo:

debian-binary contm apenas a string 2.0 (verso do formato do pacote Debian)

data.tar.gz imagem do pacote instalado no sistema de arquivos

control.tar.gz informaes de controle para as ferramentas de manipulao de pacotes

data.tar.gz

Contedo de data.tar.gz para o pacote libmad0-dev

Extrair isso na raiz do sistema quase o mesmo que instalar o pacote.

./usr/

./usr/lib/

./usr/lib/libmad.a

./usr/lib/libmad.la

./usr/lib/pkgconfig/

./usr/lib/pkgconfig/mad.pc

./usr/include/

./usr/include/mad.h

./usr/share/

./usr/share/doc/

./usr/share/doc/libmad0-dev/

./usr/share/doc/libmad0-dev/changelog.Debian.gz

./usr/share/doc/libmad0-dev/TODO

./usr/share/doc/libmad0-dev/copyright

./usr/share/doc/libmad0-dev/examples/

./usr/share/doc/libmad0-dev/examples/minimad.c.gz

./usr/share/doc/libmad0-dev/changelog.gz

./usr/share/doc/libmad0-dev/CREDITS.gz

./usr/share/doc/libmad0-dev/README.gz

./usr/lib/libmad.so

control.tar.gz

Contedo de control.tar.gz para o pacote libmad0-dev

control, md5sums

Pouca coisa. Vejamos outro:
mozilla-thunderbird

conffiles, config, control, md5sums, postinst, postrm, preinst, prerm, templates

control.tar.gz

conffiles

config

control

md5sums

postinst

postrm

preinst

prerm

templates

shlibs

Dissecando Um Pacote Binrio

Os pacotes baixados pelo apt-get so guardados em /var/cache/apt/archives

Vamos copiar algum .deb para uma mesa de cirurgia em /tmp/lab

Dissecando Um Pacote Binrio

file pacote.deb

ar -t pacote.deb

dpkg-deb --info pacote.deb

dpkg-deb --contents pacote.deb

dpkg-deb --field pacote.deb depends

ar x pacote.deb

dpkg-deb --control pacote.deb

dpkg-deb --extract pacote.deb ./data

Criando Um Pacote Manualmente

Tema Para O Desktop

Vamos criar um pacote simples um tema para o Desktop, contendo:

Papel de Parede:
/usr/share/backgrounds/diad-background.png

Tema GDM:
/usr/share/gdm/themes/diad/*

Splash Screen:
/usr/share/pixmaps/splash/diad-splash.png

Criando Um Pacote Manualmente (1)

Crie a estrutura de diretrios

$ 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

Copie contedo
$ 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

Criando Um Pacote Manualmente (2)

Estrutura de diretrios

diad-artwork/
|-- DEBIAN
`-- usr `-- share |-- backgrounds |-- doc | `-- diad-artwork |-- gdm | `-- themes | `-- diad `-- pixmaps `-- splash

Documentao (1)

diad-artwork/usr/share/doc/diad-artwork/copyright

This package was manually created by James Bond
on Mon, 30 Jul 2007, 08:25:00 +0000

It was downloaded from ...

Upstream Author: James Bond


Copyright:
[...]

Documentao (2)

diad-artwork/usr/share/doc/diad-artwork/changelog.Debian.gz

diad-artwork (1.0-1) unstable; urgency=low

* "License to Kill" release.

-- James Bond Mon, 30 Jul 2007 08:28:00 +0000

DEBIAN/control

Package: diad-artwork

Section: misc

Priority: extra

Maintainer: James Bond

Architecture: all

Version: 1.0-1

Description: theme artwork for the Debian D, 2007

Includes background and splash screen images, and GDM theme.

DEBIAN/md5sums

$ find usr -type f -exec md5sum {} \; > DEBIAN/md5sums

3a3346e545ad9d1058fa5a48ceada9e5 usr/share/backgrounds/diad-background.png

93171425730b46aa4debbaa58568402f usr/share/doc/diad-artwork/copyright

e1cce7981a1dfd51f518f1c15e7a87cc usr/share/doc/diad-artwork/changelog.Debian.gz

8f45891b27c85f01fd40bac603883650 usr/share/pixmaps/splash/diad-splash.png

7f2d2f712840525f75ab34ecf540cd9f usr/share/gdm/themes/diad/GdmGreeterTheme.desktop

eafe4de8c42ef34de37ec0b9a2f05d57 usr/share/gdm/themes/diad/background.svg

a826c77b077e0b782914f32ad5e5ddab usr/share/gdm/themes/diad/debsmith.png

84513d7282b4cfc745c63d2b8ae971a7 usr/share/gdm/themes/diad/diad.xml

adcc7b98011b1ed7f00695fbdb2afa86 usr/share/gdm/themes/diad/help.png

dba080eb88405fdd911b5cfb3b8d2bc0 usr/share/gdm/themes/diad/options.png

c588c56e88007469e55e0c084e830cd4 usr/share/gdm/themes/diad/screenshot.png

0960f0c80ff0e503288d2ea5e704fbe8 usr/share/gdm/themes/diad/debsmiths.png

diad-artwork_1.0-1_all.deb

$ echo 2.0 > debian-binary


$ fakeroot
# tar cz -C diad-artwork/DEBIAN -f control.tar.gz .
# tar cz --exclude=DEBIAN -C diad-artwork -f data.tar.gz .

# ar rcu diad-artwork.deb \
> debian-binary control.tar.gz data.tar.gz

# exit

$ file diad-artwork.deb

$ dpkg-name diad-artwork.deb

Instalando e Removendo
Seu Novo Pacote

Instalando

$ 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) ...

Verificando se est instalado
$ aptitude search python

Instalando e Removendo
Seu Novo Pacote

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 ...

Debianizando Pacotes Existentes

Debianizando

./DEBIAN./usr./usr/share...cdigo fonte
debianizado

./pacote-0.1./pacote-0.1/src/*./pacote-0.1/debian/*./pacote-0.1/*

pacote-0.1-1_i386.deb

Debianizando

Vamos obter o cdigo fonte de uma aplicao 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

dh_make

Poderamos criar na mo todos os arquivos necessrios para criao do deb

Mas o dh_make (pacote: dh-make) poderia fazer isso por ns... :)
$ cd logicparser-0.7.2
$ DEBFULLNAME="Marcelo Lira dos Santos" \
> DEBEMAIL="[email protected]" \
> dh_make --file ../logicparser-0.7.2.tar.gz \
> --single -c gpl

Sero criados o diretrio logicparser_0.7.2/debian e o arquivo logicparser_0.7.2.orig.tar.gz

Modificando os Arquivos em debian/*

O dh_make cria vrios arquivos, muitos dos quais no precisaremos. Vamos apag-los:
$ rm debian/*.ex debian/*.EX README.Debian

Vejamos o que sobrou
$ ls debian
changelog compat control copyright dirs docs rules

Invoca o MakefileVoc j conhece esse.

debian/control

Source: logicparser
Section: misc
Priority: optional
Maintainer: Marcelo Lira dos Santos
Build-Depends: debhelper (>= 5), autotools-dev
Standards-Version: 3.7.2

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.

Criando o Pacote Binrio

fakeroot

usado para simular privilgios de root

a princpio no serve pra exploitar
(to pensando que o cu perto)

Usamos o rules para criar o pacote
$ fakeroot debian/rules binary

Fora do diretrio do cdigo fonte estar o arquivo logicparser_0.7.2-1_i386.deb

Pacotes Fonte

Fatos:

Alm de pacotes binrios o Debian possui pacotes fonte.

Pacotes binrios so criados a partir de pacotes fonte.

Pacotes fonte podem gerar mltiplos pacotes binrios.

Exemplo:
o pacote fonte de uma biblioteca pode gerar pacotes binrios runtime, desenvolvimento e documentao

Anatomia de Um Pacote Fonte

Um pacote fonte no um arquivo, mas 3:

foo_1.0-1.orig.tar.gz cdigo fonte original

foo_1.0-1.diff.gz mudanas feitas no cdigo fonte original; pode ser o acrscimo do diretrio debian, ou mudanas na prpria aplicao para se adequar s polticas do Debian.

foo_1.0-1.dsc descrio do pacote fonte.

Criando o Pacote Fonte

Devemos ter no presente diretrio, o arquivo orig do cdigo fonte, mais o diretrio com o cdigo 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

Criando o Pacote Fonte

Vamos copiar o pacote fonte para outro lugar onde podemos brincar em paz:
$ mkdir playground
$ cp logicparser_0.7.2* playground
$ cd playground

Usamos o comando dpkg-source para aplicar as diferenas no pacote fonte original segundo as informaes 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

Criando o Pacote Fonte

Finalmente construmos o pacote binrio:
$ 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

u = unsigned
no faz uso de assinaturas criptogrficas

Resumo Visual do
Processo de Empacotamento

foo-1.0.tar.gzfoo-1.0foo-1.0/debian/*foo_1.0-1_i386.debfoo_1.0-1.orig.tar.gz

foo_1.0-1.diff.gzfoo_1.0-1.dscUpstream 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

Autor: Marcelo Lira dos Santos

Chefe, posso usar algumas horas de trabalho pra fazer os slides do Dia D?Pro Dia D?
Claro que pode!

[meu chefe no INdT]

Referncias

Referncias

KRAFFT, Martin F. The Debian System

The Debian GNU/Linux FAQ
Chapter 6 - Basics of the Debian package management system

http://www.debian.org/doc/FAQ/ch-pkg_basics.en.html

Debian Policy Manual

http://www.debian.org/doc/debian-policy/

Debian Packaging School: Lesson 1

http://liw.iki.fi/liw/talks/debian-packaging-tutorial.pdf

Atribuio-Compartilhamento pela mesma licena 2.5
(http://creativecommons.org/licenses/by-sa/2.5/deed.pt)

Voc pode:

copiar, distribuir, exibir e executar a obra

criar obras derivadas

fazer uso comercial da obra

Sob as seguintes condies:

Atribuio. Voc deve dar crdito ao autor original, da forma especificada pelo autor ou licenciante.

Compartilhamento pela mesma Licena. Se voc alterar, transformar, ou criar outra obra com base nesta, voc somente poder distribuir a obra resultante sob uma licena idntica a esta.

Para cada novo uso ou distribuio, voc deve deixar claro para outros os termos da licena desta obra.

Qualquer uma destas condies podem ser renunciadas, desde que Voc obtenha permisso do autor.

Qualquer direito de uso legtimo (ou "fair use") concedido por lei, ou qualquer outro direito protegido pela legislao local, no so em hiptese alguma afetados pelo disposto acima.

Este um sumrio para leigos da Licena Jurdica
(na ntegra: http://creativecommons.org/licenses/by-sa/2.5/br/legalcode).
Termo de exonerao de responsabilidade: http://creativecommons.org/licenses/disclaimer-popup?lang=pt

Click to edit the title text format

Click to edit the title text format

Clique para editar o formato do texto em estrutura de tpicos

Segundo Nvel da Estrutura de Tpicos

Terceiro Nvel da Estrutura de Tpicos

Quarto Nvel da Estrutura de Tpicos

Quinto Nvel da Estrutura de Tpicos

Sexto Nvel da Estrutura de Tpicos

Stimo Nvel da Estrutura de Tpicos

Oitavo Nvel da Estrutura de Tpicos

Nono Nvel da Estrutura de Tpicos

Clique para editar o formato do ttulo de texto

Clique para editar o formato do ttulo de texto

Clique para editar o formato do ttulo de texto

Click to edit the title text format

Click to edit the outline text format

Second Outline Level

Third Outline Level

Fourth Outline Level

Fifth Outline Level

Sixth Outline Level

Seventh Outline Level

Eighth Outline Level

Ninth Outline Level