Arquivo para abril \23\-03:00 2010

Criando pacotes Debian (.deb)

S.O: Ubuntu Linux Karmic

Esse pequeno artigo tem o intuito de ensinar a criar um pacote debian,
não entro em detalhes complexos do formato.

O que é um arquivo .deb?

Um pacote debian é um arquivo compactado em um formato específico (ar http://en.wikipedia.org/wiki/Ar_%28Unix%29), bastante similar a um tar.gz ou um .zip, resumindo podemos facilmente descompactá-lo.
dentro desse arquivo você encontra outros 3 arquivos, 2 deles compactados:
* debian-binary: um arquivo gerado automaticamente com o formato do deb.
* control.tar.gz: informações do pacote, como dependência, e scripts pré e pós instalação.
* data.tar ou data.tar.gz ou data.tar.bz2 ou data.tar.lzma: os arquivos da aplicação disponibilizados em endereço absoluto, exemplo: /etc/programa/arquivos/…

Exemplo prático:

Iremos criar um pacote .deb que instala um aplicação que simplesmente irá escrever “Hello World!” no nosso console ao digitarmos o comando exemplo.sh no console.
Para nosso exemplo criaremos a seguinte estrutura de pastas:
/ : pode ser criado em qualquer lugar do seu disco, não precisa ser na raiz do sistema de arquivos.
/source/
/source/usr/
/source/usr/bin/

/source/usr/bin/exemplo.sh : arquivo contendo o código da aplicação, não esqueça de dar direitos de execução nesse arquivo (chmod +x exemplo.sh)
/source/DEBIAN/
/source/DEBIAN/control : arquivo que conterá informações (metadados) sobre o nosso pacote Debian, dependências, etc.

Conteúdo de exemplo.sh:

#!/bin/sh
echo "Hello World!";

Conteúdo de control:

Package: exemplo
Priority: optional
Version: 0.1
Architecture: i386
Maintainer: Alan Daniel Weiss (webcentro)
Depends: dash
Description: Exemplo de criação de um pacote debian que irá instalar o aplicativo /usr/bin/exemplo.sh que escreve "Hello World!" no terminal.

O conteúdo do arquivo control é auto explicativo,
nele estão as informações necessárias para efetuar a instalação do seu pacote,
observe que o campo Depends irá informar as dependências desse pacote, caso possua várias dependecias essas deverão ser separadas com virgula (,).

Criar o pacote

Agora que temos a estrutura do nosso pacote completa devemos executar o comando que irá empacotar tudo isso em um archive .deb,
vá nas raiz do projeto (pasta que contém o diretório source) e digite o seguinte comando:

$ dpkg-deb -b ./source/ .

será criado um arquivo com o nome exemplo_0.1_i386.deb, se quiser você pode abrir esse arquivo com o Gerenciador de Pacotes (compactados) e verificar a estrutura que foi criada.

Instalando, Usando e Removendo a Aplicação

Para instalar seu pacote você pode usar a aplicação gráfica GDEB, ou então executar o comando a seguir:

$ sudo dpkg -i exemplo_0.1_i386.deb

Agora teste a aplicação executando o comando no console em qualquer diretório do seu sistema de arquivos o comando a seguir:

$ exemplo.sh

Para remover use o apt:

$ sudo apt-get remove exemplo

Conclusão:

Criar pacotes debian é muito simples e versátil,
Empacotar um programa torna muito fácil para o usuário final instalá-lo.

Existem outras funcionalidades, como por exemplo scripts de pré instalação e pós, que ficam para um post futuro.

Caso tenha dúvidas fique a vontade em postar comentários, tentarei disponibilizar o código do exemplo caso o wordpress permitir.

ps: Aviso que somente tenho conhecimento do funcionamento de tudo que explico aqui na distribuição Ubuntu, desconheço as características das demais.

No space left bug?

Hoje me deparei com um problema nada agradavel. Meu sistema acusa que eu não tenho mais espaço livre na partição /
porém rodando um df mostra que ainda sobram 25%.

Estou rodando a distro Ubuntu Karmic e minha partição raiz está em ext4.

resultado de df:

alandaniel@sefa56866:~$ df
Sist. Arq.           1K-blocos      Usad Dispon.   Uso% Montado em
/dev/sda5             48062440  34035024  11585940  75% /

o engraçado é que criei um arquivo de 10GB usando o comando:

dd if=/dev/zero of=file_to-create bs=1k count=10000000

e esse foi criado perfeitamente, ocupou o restante do espaço sem problemas.

Li o seguinte post http://bbs.archlinux.org/viewtopic.php?id=62958 , e parece que o EXT4 ainda não está 100% estável.

A causa pode ser uma queda na luz que ocorreu ontem 12/04/2010, irei executar o comando:

fsck.ext4 -f /dev/sda5

porém esse diz que podem ocorrer problemas caso executado em uma partição montada,
conforme os resultados irei reportar aqui.