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, os links relativos são fortemente recomendados. Use ${RLN}
para criar links simbólicos relativos. Ele usa o install(1) por baixo dos panos para descobrir automaticamente o link relativo a ser criado.
${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
${RLN} ${STAGEDIR}${PREFIX}/libexec/foo/bar
${STAGEDIR}${PREFIX}/bin/bar
${RLN} ${STAGEDIR}/var/cache/foo
${STAGEDIR}${PREFIX}/share/foo
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*%
ls -lF ${STAGEDIR}${PREFIX}/bin
lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 bar@ -> ../libexec/foo/bar%
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>.