[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ próximo ]
Normalmente, os programa são instalados em subdiretórios em /usr/local , mas os
pacotes do Debian não devem utilizar esse diretório, uma vez que ele é
reservado ao uso privado dos administradores do sistema. Isto significa que
você terá de dar uma lhada no sistema de construção do seu programa,
normalmente começando com o Makefile. Este é o script make(1)
que
você irá utilizar para automatizar a compilação do seu programa. Para maiores
informações sobre Makefiles, leia O
arquivo `rules', Seção 4.4.
Note que se o seu programa utiliza o GNU automake(1)
e/ou
autoconf(1)
, o código-fonte incluirá os arquivos Makefile.am e/ou
Makefile.in, respectivamente, e você terá de modificar esses arquivos também.
Isto acontece pois cada execução do automake irá reescrever o makefile.in com
alguma informação gerada a partir do Makefile.am, e cada execução do
./configure irá fazer o mesmo com os Makefiles, com informações do Makefile.in.
Editando arquivos Makefile.am exigem algum conhecimento sobre o automake, que
você pode adquirir no info do automake; ao passo que editar arquivos
Makefile.in são mais ou menos a mesma coisa que editar Makefiles, tomando
cuidado com as variáveis (ex: qualquer string entre '@'s, como @CFLAGS@ ou
@LN_S@, que são substituídos com a informação propriamente dita de cada
execução do ./configure).
Note também que foge ao nosso escopo aqui descrever todos os detalhes sobre correção de códigos, mas existem alguns problemas que normalmente são encontrados.
A maioria dos programas tem algum modo de ser instalados na estrutura de diretório existente do seu sistema, de modo que seus binários são incluídos no seu $PATH e sua documentação se encontre em lugares comuns. Se você fizer isso, entretanto, seu programa será instalado junto com tudo o mais que já esteja no seu sistema. Isso tornaria difícil para que as ferramentas de empacotamento descobrissem quais arquivos pertencem ou não ao seu pacote.
Portanto você precisa fazer algo mais: instalar o programa dentro num subdiretório temporário de onde as ferramentas de mantenedor irão trabalhar no pacote .deb. Tudo que estiver nesse diretório irá ser instalado no sistema do usuário quando eles instalarem o pacote. A única diferença é que o dpkg vai estar instalando os arquivos no diretório raiz.
Este diretório temporário é normalmente criado dentro do seu diretório debian/,
na árvore de diretórios e código-fonte descompactada. Ele é normalmente
chamado debian/nome_do_pacote
.
Tenha em mente que mesmo que você tenha que fazer o programa ser instalado em debian/nome_do_pacote, ele ainda precisa se comportar corretamente quando colocado no diretório raiz (ex: quando instalado do pacote .deb. Logo, você não deve deixar que o sistema de construção utilize strings como /home/me/gentoo-0.9.12/usr/share/gentoo nos arquivos do pacote.
Com programas que utilizam o GNU autoconf, isto será bastante fácil. A maioria destes programas tem Makefiles que são como padrão definidos para permitir que a instalação seja feita num diretório aleatório, tendo em mente que /usr (por exemplo) é o prefixo canônico. O dh_make, quando detectar que seu programa utiliza o autoconf, irá definir os comandos para fazer tudo isso automaticamente, de forma que você pode inclusive saltar a leitura desta seção, mas com outros programas, você provavelmente terá de analisar e editar os Makefiles.
Eis a parte relevante do Makefile do gentoo:
# Onde colocar o binário durante o 'make install'? BIN = /usr/local/bin # Onde colocar os ícones durante o 'make install'? ICONS = /usr/local/share/gentoo
Nota-se que os arquivos estão definidos para serem instalados em
/usr/local
. Mude tais caminhos para:
# Onde colocar o binário durante o 'make install'? BIN = $(DESTDIR)/usr/bin # Onde colocar os ícones durante o 'make install'? ICONS = $(DESTDIR)/usr/share/gentoo
Mas porque em tal diretório, e não algum outro? Porque os pacotes debian nunca
instalam pacotes em /usr/local
-- essa árvore de diretórios é
reservada ao uso do administrados do sistema. Tais arquivos, no Debian, devem
ser colocados em /usr
.
A localização mais exata para binários, ícones, documentação, etc, é especificada na Hierarquia Padrão de Sistemas de Arquivos (Filesystem Hierarchy Stanrdart - FHS - veja /usr/share/doc/debian-policy/fhs). Eu recomendo que você procure e leia as seções que podem insteressar ao seu pacote.
Então nós devemos instalar o binário em /usr/bin no lugar de /usr/local/bin, os manuais em /usr/share/man/man1 ao invés de /usr/local/man/man1, etc. Note que, como o gentoo não fornece um manual em seu Makefile, e o Debian-Policy exige que todo programa tenha um, nós faremos um, mais tarde, e o instalaremos em/usr/share/man/man1.
Alguns programas não usam variáveis no Makefile para definir caminhos como estes. Isto significa que você talvez tenha de editar alguns arquivos-fonte em C para que eles utilizem os caminhos adequados. Mas onde procurar, e exatamente o que procurar? Você pode resolver isso executando:
grep -rn usr/local/lib *.[ch]
O Grep irá executar recursivamente por toda a árvore do código e dizer-lhe o nome e a linha do arquivo quando encontrar uma ocorrência.
Edite esses arquivos e substitua /usr/local/* com usr/* e pronto. Tome cuidado para não mexer no resto do código! :-)
Depois disso você deve encontrar o alvo de instalação (procure pela linha começa com 'install:', o que normalmente funciona) e renomeie todas as referências a diretórios que não aqueles definidos no topo do Makefile. Antes, o alvo de instalação do gentoo continha:
install: gentoo install ./gentoo $(BIN) install icons/* $(ICONS) install gentoorc-example $(HOME)/.gentoorc
Depois da mudança, passou a conter:
install: gentoo-target install -d $(BIN) $(ICONS) $(DESTDIR)/etc install ./gentoo $(BIN) install -m644 icons/* $(ICONS) install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
Você certamente notou que agora tem um comando install -d antes dos outros comandos semelhantes. O Makefile original não tinha isso porque normalmente o diretório /usr/local/bin e outros diretórios já existiam no sistema onde alguém executasse o 'make install'. Entretante, como nós vamos instalar o programa em nosso próprio diretório vazio (ou não existente), nós teremos de criar cada um desses diretórios.
Nós podemos inclusive adicionar outras coisas no final da regra, como a instalação de documentação adicional, que os autores algumas vezes omitem:
install -d $(DESTDIR)/usr/share/doc/gentoo/html cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
Um leitor atento notará que eu troquei 'gentoo' para 'gentoo-target' na linha de 'install:'. Isto é chamado de correção de bug não-relacionado. :-)
Sempre que você fizer mudanças que não são especificamente relacionado ao pacote Debian, certifique-se de manda-las para o mantenedor superior para que elas possam ser incluídas na próxima revisão do programa e serem úteis para todo mundo. Lembre-se também de fazer suas mudanças de modo não específico ao Debian ou Linux (ou até mesmo Unix!) antes de enviá-las -- faça-as portáveis. Isto tornará suas correções mais fáceis de serem aplicadas.
Note que você não tem de enviar os arquivos de debian/* ao mantenedor superior.
Existe um outro problema comum: bibliotecas muitas vezes variam de plataforma para plataforma. Por exemplo, um Makefile faz referência a uma biblioteca que não existe em sistemas Debian. Neste caso, nós precisamos muda-la para uma biblioteca que existe no Debian, e serve pra mesma coisa.
Assim sendo, se existe alguma linha no Makefile do seu programa (ou Makefile.in) que tenha algo como isto (e o seu programa não compile):
LIBS = -lcurses -lalgumacoisa -lalgumaoutracoisa
Mude-a para isso, e provavelmente funcionará:
LIBS = -lncurses -lalgumacoisa -lalgumaoutracoisa
(o autor percebe que este não é um bom exemplo, considerando que nosso pacote libncurses agora cria um symlink para libcurses.so, mas ele não pode encontrar nada melhor. Sugestões são muito bem vindas :-)
[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ próximo ]
Guia do Novo Mantenedor Debian
version 1.2, 6 April 2002.joy-mg@debian.org
mahdi@dcc.ufmg.br
priscilla@minaslivre.org