gettext
iconv
rc
)Esta seção explica as coisas mais comuns a se considerar ao criar um port.
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
”).
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
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.
Ports que instalam módulos do kernel devem preceder a variável STAGEDIR
em seus destinos, padrão /boot/modules
.
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.
${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
${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>.