Normalmente, os programas se instalam nos subdiretórios de /usr/local/. Mas os
pacotes Debian não devem usar esse diretório, já que ele é reservado ao uso
privado dos administradores de sistema (ou usuários). Isso significa que você
tem que dar uma olhada no sistema de construção do programa, normalmente
começando pelo Makefile. Esse script é o que é usado pelo make(1)
para automatizar a construção do programa. Para mais detalhes sobre Makefiles,
olhe em o arquivo `rules', Seção 4.4.
Note que se seu programa usa o automake(1)
e/ou
autoconf(1)
do GNU, significa que os fontes incluem os arquivos
Makefile.am e/ou Makefile.in, respectivamente, você irá precisar de modificar
esses arquivos, porque cada chamada ao automake irá rescrever o Makefile.in com
informação gerada do Makefile.am e cada chamada ao ./configure irá fazer o
mesmo com os Makefile's, com dados do Makefile.in. Editar arquivos Makefile.am
requer um pouco de conhecimento sobre o automake, sobre o qual você pode ler na
entrada info do automake, como escrever arquivos Makefile.in é quase a mesma
coisa que escrever arquivos Makefile, apenas preste atenção às variáveis, por
exemplo, qualquer string rodeada de `@'s, por exemplo @CFLAGS@ ou @LN_S@, que
são trocadas com coisas atuais em cada chamada a ./configure.
Note também que aqui não há espaço para nos aprofundarmos em todos os detalhes de consertos mas aqui vão alguns poucos problemas encontrados freqüentemente pelas pessoas.
A maioria dos programas têm algum jeito de instalar a si mesmo na estrutura de diretórios existente, fazendo com que seus binários estejam incluídos no seu $PATH, e que você encontre sua documentação e páginas de manual (man pages) nos lugares comuns. Você deve ter certeza de que eles o fazem corretamente, mas você tem de instalá-los num subdiretório temporário que vai ser criado dentro do seu diretório debian/, usualmente chamado debian/tmp, do qual as ferramentas do mantenedor irão construir um pacote .deb que funciona. Tudo que está contido nesse diretório será instalado no sistema do usuário quando ele instala o pacote, a única diferença é que o dpkg vai instalar os arquivos no diretório raiz.
Basicamente, você precisa fazer o programa se instalar em debian/tmp, mas tem de fazê-lo se comportar corretamente quando colocado no diretório raiz, exemplo: quando instalado do pacote .deb. Com programas que usam o autoconf do GNU, isso será muito fácil, porque o dh_make irá configurar comandos para fazê-lo automaticamente, então você pode saltar essa seção. Mas com outros programas, você irá mais provavelmente ter de examinar e editar os Makefiles.
Aqui está a parte relevante do Makefile do gentoo:
# Where to put binary on 'make install'? BIN = /usr/local/bin # Where to put icons on 'make install'? Note: if you change this, # gentoo will not find the icons as it starts up. You're going to # have to alter gentoo's icon path (in the config window, "Paths" # tab) to get it work. ICONS = /usr/local/lib/gentoo/
Antes disso você deve inserir duas novas linhas dizendo:
# Edited for Debian GNU/Linux. DESTDIR =
porque o processo de construção requer isso (será explicado mais tarde, em o arquivo `rules', Seção 4.4).
Então o Makefile menciona a localização do binário final. Apenas mude para isso:
# Where to put binary on 'make install'? BIN = $(DESTDIR)/usr/X11R6/bin
Mas por que nesse diretório e não em outro? Porque o Debian definiu algumas regras sobre onde colocar os programas a serem instalados. Isso está especificado no Filesystem Hierarchy Standard (Padrão de Hierarquia no Sistema de Arquivos) (veja /usr/share/doc/debian-policy/fhs/). Então, nós devemos instalar o binário em /usr/X11R6/bin ao invés de /usr/local/bin, e a página de manual (não existe aqui, mas quase todo programa tem uma, então faremos uma mais tarde) no /usr/share/man/man1 ao invés de /usr/local/man/man1.
Depois disso temos uma situação um pouco mais complicada. Se você mudar uma linha para:
ICONS = $(DESTDIR)/usr/share/gentoo/
que entra em conformidade com a política do Debian, você precisará de editar alguns códigos fonte reais em C. Mas onde e o quê procurar? Você pode procurar por isso digitando:
grep -n usr/local/lib *.[ch]
(em cada subdiretório que contém arquivos .c e .h). O grep irá dizer o nome do arquivos e a linha nele, quando ele achar uma ocorrência. Agora edite aqueles arquivos e troque usr/local/lib com usr/share - e é isso. Apenas troque o usr/local/lib pela sua localização, e fique atento para não atrapalhar o resto do código, se você não sabe muito de programação em C. =)
Depois disso você deve achar o alvo de instalação (procure pela linha que começa com `install:') e renomeie todas as referências a diretórios diferentes dos definidos no Makefile principal. Anteriormente, o alvo de instalação do gentoo era:
# ----------------------------------------- Installation # You're going to have to be root to do this! install: gentoo install ./gentoo $(BIN) install icons $(ICONS) install gentoorc-example $(HOME)/.gentoorc
Depois das modificações:
# ----------------------------------------- Installation # You're going to have to be root to do this! install: gentoo-target install -d $(BIN) $(ICONS) $(DESTDIR)/etc install ./gentoo $(BIN) install -m644 icons/* $(ICONS) install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc install -d $(DESTDIR)/usr/share/doc/gentoo/html cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
Um leitor cuidadoso notará que eu mudei `gentoo' para `gentoo-target' na linha `install:'. Isso se chama conserto de erro =)
Sempre que você fizer mudanças que não são específicas do pacote Debian, esteja certo de mandá-las ao mantenedor externo para que elas possam ser incluídas na próxima revisão do programa. Note que você não tem que mandar os arquivos debian/*, mas deve fazer isso com qualquer outro conserto. E tente ser legal ao enviar consertos externos, não os fazendo específicos para o Debian ou para Linux (ou mesmo Unix) antes de enviá-los.
Há um outro problema comum: bibliotecas são freqüentemente diferentes de plataforma para plataforma. Por exemplo, Makefile pode conter uma referência a uma biblioteca que não existe no Debian, ou mesmo no Linux. Nesse caso, nós temos de mudar isso para uma biblioteca que existe no Debian, e serve ao mesmo propósito. O melhor jeito é comentar as linhas porque podem haver outros que irão tentar compilar em plataformas diferentes, assim, eles terão algumas dicas de qual pode ser o problema.
Então, se há uma linha no Makefile do seu programa (ou no Makefile.in) que diz algo como isso (e seu programa não compila):
LIBS = -lcurses -lalgumacoisa -lalgumaoutracoisa
Mude-as para isso, e provavelmente irá funcionar:
LIBS = -lncurses -lalgumacoisa -lalgumaoutracoisa #LIBS = -lcurses -lalgumacoisa -lalgumaoutracoisa
Guia dos Novos Mantenedores Debian
versão 1.0.2, 10 de junho de 2001.joy-mg@debian.org
dockov@zaz.com.br
hellblade@linuxbr.com.br