Como você descobriu, pkg_add não pode atualizar as portas normalmente. O pacote portupgrade faz isso muito bem, e é o método que eu uso e recomendo (há outros disponíveis se você não gostar desse método).
Quando a porta estiver instalada, você pode simplesmente executar portupgrade -aPP e atualizará todas as portas instaladas no sistema usando pacotes. Se você não quiser atualizar a porta, poderá executar portupgrade -RPP [category/port] para atualizar uma porta específica e as portas das quais ela depende. Executar o programa sem argumentos atualizará a porta pertencente ao diretório atual (por exemplo, cd /usr/ports/security/openssl ; portupgrade atualizará openssl , sem a opção -PP que construirá a porta a partir da origem); e se você não estiver em um diretório de portas, ele mostrará a ajuda (igual à opção -h ).
Editar:
Por padrão, o portupgrade instalará pacotes se eles existirem no diretório definido pela variável PKG_PATH environmental (o padrão é $PACKAGES/All , $PACKAGES é padronizado como $PORTSDIR/packages ; portanto, o caminho padrão é /usr/ports/packages/All ).
Se eles não existirem lá, ele fará o download dos pacotes (por preferência) de $PKG_SITES (recebe um URI com subpastas Latest e All ; nenhum valor padrão) ou $PACKAGEROOT (leva um URI com o caminho do espelho normal abaixo dele; o padrão é "ftp://ftp.freebsd.org" ).
Uma maneira fácil de fazer isso é usar uma máquina para criar / armazenar em cache os pacotes que serão instalados em outra máquina.
- Você pode criar pacotes a partir da árvore de portes com
make packageno diretório da porta (que também instalará a porta). - Você pode usar
portupgradepara atualizar uma máquina e armazenar em cache os arquivos do pacote para uso em outras máquinas, os comandos mencionados anteriormente armazenarão em cache os arquivos de pacote no diretório padrão (veja acima). - Você pode usar o portupgrade para buscar somente os pacotes e não instalá-los, com
portupgrade -aPPFouportupgrade -RPPF [category/port].
Depois de ter os arquivos do pacote em cache, você pode compartilhar o diretório via NFS, FTP, HTTP, etc; desde que os arquivos estejam acessíveis nas outras máquinas. Defina o PACKAGES ou PKG_SITE com os valores apropriados para apontar para o servidor de armazenamento em cache. Execute o comando típico portupgrade , ele deve extrair os pacotes do servidor de armazenamento em cache e instalá-los.
Nota: A árvore de portas precisa estar atualizada em todos os servidores para que portupgrade funcione corretamente (ela tentará atualizar para qualquer versão que esteja na árvore de ports locais). Se você vai ter as mesmas portas / pacotes instalados em todos os computadores, pode ser mais fácil compartilhar um diretório /usr/ports de servidores (digamos sobre NFS) e montá-lo em todos os outros servidores.