Você está na página 1de 49

Empacotamento

Bsico

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...
Procura na internet e acha isso:
NumSeiQ.tar.gz
(...)
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);
(...)

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

C
H
D

Esforos Duplicados
progama.tar.gz
Programador

Descompacta

Compila

Executvel

Executvel

Executvel

Executvel

Surge o Empacotador!
progama.tar.gz
Programador
Empacotador

Descompacta

Compila

Executvel

Menos
trabalho
pra muita
gente.

Empacotadores Orgulhosos,
Repositrios Cheios e Usurios Felizes
Repositrio
de Softwares

Pr-compilados

Pacotes no Debian
Repositrio
Debian

Lista de pacotes
disponveis
apt-get update
Packages.gz

foo_0.2.3-1_i386.deb

apt-get install foo

O Paraso das
Dependncias Satisfeitas
Programa
Depende de

C
H
D

Informaes
Interessantes pra
Quem Pretende
Empacotar

FHS
Filesystem Hierarchy Standard
bin/
dev/

etc/
home/
tmp/
usr/

bin/
doc/
lib/
share/

Anatomia de Um Pacote Binrio


verso reviso
Debian

arquitetura

nome
mednafen_0.6.5-1_i386.deb
control.tar.gz

data.tar.gz

debian-control

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

postrm

config

preinst

control

prerm

md5sums

templates

postinst

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

-p diad-artwork/usr/share/backgrounds
-p diad-artwork/usr/share/pixmaps/splash
-p diad-artwork/usr/share/gdm/themes/diad
-p diad-artwork/usr/share/doc/diad-artwork
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


<007@england.go.uk>
on Mon, 30 Jul 2007, 08:25:00 +0000
It was downloaded from ...
Upstream Author: James Bond <007@england.go.uk>
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 <007@england.go.uk> Mon, 30 Jul 2007 08:28:00 +0000

DEBIAN/control

Package: diad-artwork
Section: misc
Priority: extra
Maintainer: James Bond <007@england.co.uk>
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
93171425730b46aa4debbaa58568402f
e1cce7981a1dfd51f518f1c15e7a87cc
8f45891b27c85f01fd40bac603883650
7f2d2f712840525f75ab34ecf540cd9f
eafe4de8c42ef34de37ec0b9a2f05d57
a826c77b077e0b782914f32ad5e5ddab
84513d7282b4cfc745c63d2b8ae971a7
adcc7b98011b1ed7f00695fbdb2afa86
dba080eb88405fdd911b5cfb3b8d2bc0
c588c56e88007469e55e0c084e830cd4
0960f0c80ff0e503288d2ea5e704fbe8

usr/share/backgrounds/diad-background.png
usr/share/doc/diad-artwork/copyright
usr/share/doc/diad-artwork/changelog.Debian.gz
usr/share/pixmaps/splash/diad-splash.png
usr/share/gdm/themes/diad/GdmGreeterTheme.desktop
usr/share/gdm/themes/diad/background.svg
usr/share/gdm/themes/diad/debsmith.png
usr/share/gdm/themes/diad/diad.xml
usr/share/gdm/themes/diad/help.png
usr/share/gdm/themes/diad/options.png
usr/share/gdm/themes/diad/screenshot.png
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
cdigo fonte
debianizado
./pacote-0.1
./pacote-0.1/src/*
./pacote-0.1/debian/*
./pacote-0.1/*

./DEBIAN
./usr
./usr/share
...

pacote-0.1-1_i386.deb

Debianizando
Vamos obter o cdigo fonte de uma
aplicao qualquer
$ wget
http://logicparser.googlecode.com/files/logicparser0.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="setanta@gmail.com" \
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 apaglos:
$ rm debian/*.ex debian/*.EX README.Debian

Vejamos o que sobrou


$ ls debian
changelog compat

Voc j
conhece esse.

control

copyright

dirs

docs

Invoca o
Makefile

rules

debian/control
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
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
Debian packaging files and changes
foo-1.0/debian/*

Upstream Source
foo-1.0.tar.gz

Unpack

Working
Files

Create

Rename

Debian binary package


foo-1.0

foo_1.0-1.orig.tar.gz

Build

foo_1.0-1_i386.deb

Build

foo_1.0-1.diff.gz
foo_1.0-1.dsc
Debian source package
Descaradamente copiado de: http://liw.iki.fi/liw/talks/debian-packaging-tutorial.pdf

Chefe, posso usar algumas


horas de trabalho pra fazer
os slides do Dia D?

Pro Dia D?
Claro que
pode!

[meu chefe no INdT]

Autor: Marcelo Lira dos Santos


<setanta@gmail.com>

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/chpkg_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-packagingtutorial.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

Você também pode gostar