Capítulo 6. Considerações Especiais

Índice
6.1. Staging
6.2. Bibliotecas Empacotadas (Bundled)
6.3. Bibliotecas Compartilhadas
6.4. Ports com Restrições de Distribuição ou Preocupações Legais
6.5. Mecanismos de Compilação
6.6. Usando o GNU Autotools
6.7. Usando o GNU gettext
6.8. Usando Perl
6.9. Usando o X11
6.10. Usando o GNOME
6.11. Componentes GNOME
6.12. Usando o Qt
6.13. Usando o KDE
6.14. Usando o LXQt
6.15. Usando Java
6.16. Aplicações Web, Apache e PHP
6.17. Usando Python
6.18. Usando Tcl/Tk
6.19. Usando Ruby
6.20. Usando SDL
6.21. Usando wxWidgets
6.22. Usando Lua
6.23. Usando iconv
6.24. Usando o Xfce
6.25. Usando Bancos de Dados
6.26. Iniciando e Parando Serviços (com scripts rc)
6.27. Adicionando Usuários e Grupos
6.28. Ports que Dependem dos Fontes do kernel
6.29. Bibliotecas Go
6.30. Bibliotecas Haskell
6.31. Arquivos Shell Completion

Esta seção explica as coisas mais comuns a se considerar ao criar um port.

6.1. Staging

bsd.port.mk espera que os ports trabalhem com um stage directory. Isso significa que um port não deve instalar arquivos diretamente nos diretórios de destino regulares (isto é, sob o PREFIX, por exemplo), mas em um diretório separado a partir do qual o pacote será construído. Em muitos casos, isso não requer privilégios de root, tornando possível criar pacotes como um usuário não privilegiado. Com o staging, o port é compilado e instalado no diretório sde estágio, STAGEDIR. Um pacote é criado a partir do diretório de estágio e, em seguida, instalado no sistema. As ferramentas Automake referem-se a este conceito como DESTDIR, mas no FreeBSD, DESTDIR tem um significado diferente (veja Seção 10.4, “PREFIX e DESTDIR).

Nota:

Nenhum port realmente precisa de root. Ele pode ser evitado principalmente usando USES=uidfix. Se o port ainda executa comandos como chown(8), chgrp(1) ou força o proprietário ou grupo com install(1) então use USES=fakeroot para enganar essas chamadas. Algumas modificações no Makefile do port serão necessárias.

Os meta ports, ou ports que não instalam arquivos por si mesmos e apenas dependem de outros ports, devem evitar extrair desnecessariamente mtree(8) para o diretório de estágio. Este é o layout básico do diretório do pacote, e estes diretórios vazios serão vistos como órfãos. Para prevenir extração do mtree(8), adicione esta linha:

NO_MTREE=	yes

Dica:

Metaports devem usar USES=metaport. Ele configura padrões para ports que não baixam, criam ou instalam nada.

Staging é ativado pré-fixando a variável STAGEDIR para caminhos usados ​​nos targets pre-install, do-install e post-install (veja os exemplos no livro). Normalmente, isso inclui as variáveis PREFIX, ETCDIR, DATADIR, EXEMPLESDIR, MANPREFIX, DOCSDIR, e assim por diante. Os diretórios devem ser criados como parte do target post-install. Evite usar caminhos absolutos sempre que possível.

Dica:

Ports que instalam módulos do kernel devem preceder a variável STAGEDIR em seus destinos, padrão /boot/modules.

6.1.1. Lidando com Links Simbólicos

Ao criar um link simbólico, há dois casos, tanto a origem quanto o destino estão dentro de ${PREFIX}. Nesse caso, use ${RLN}. No outro caso, se um ou ambos os caminhos estiverem fora de ${PREFIX} use ${LN} -s e apenas prefixe ${STAGEDIR} para o caminho de destino.

Exemplo 6.1. Criar Links Simbólicos Relativos, Dentro de ${PREFIX}

${RLN} usa o recurso simbólico relativo do install(1) que libera o mantenedor do port de computar o caminho relativo.

${RLN} ${STAGEDIR}${PREFIX}/lib/libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so

Irá gerar:

% ls -lF ${STAGEDIR}${PREFIX}/lib
  lrwxr-xr-x  1 nobody  nobody    181 Aug  3 11:27 libfoo.so@ -> libfoo.so.42
  -rwxr-xr-x  1 nobody  nobody     15 Aug  3 11:24 libfoo.so.42*

Quando usado com caminhos que não estão no mesmo diretório:

${RLN} ${STAGEDIR}${PREFIX}/libexec/foo/bar ${STAGEDIR}${PREFIX}/bin/bar

Irá gerar automaticamente os links simbólicos relativos:

% ls -lF ${STAGEDIR}${PREFIX}/bin
  lrwxr-xr-x  1 nobody  nobody    181 Aug  3 11:27 bar@ -> ../libexec/foo/bar

Exemplo 6.2. Criar Links Simbólicos Absolutos, Fora de ${PREFIX}

Ao criar um link simbólico fora de ${PREFIX}, a origem não deve conter ${STAGEDIR}, o destino no entanto, deve:

${LN} -sf /var/cache/${PORTNAME} ${STAGEDIR}${PREFIX}/share/${PORTNAME}

Irá gerar:

% ls -lF ${STAGEDIRDIR}${PREFIX}/share
  lrwxr-xr-x  1 nobody  nobody    181 Aug  3 11:27 foo@ -> /var/cache/foo

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.