Segundo o Handbook oficial do
FreeBSD "O sistema de Ports consiste em uma coleção de arquivos destinados a automatizar o processo de compilação da aplicação a partir do seu código fonte." Isso significa que cada port é instalado a partir do seu código fonte, que precisa necessariamente ser compilado após o download e posteriormente instalado. Porém este processo é automatizado e simplificado por meio de comandos básicos.
Na prática todo o código fonte da aplicação é baixado, compilado e instalado, tudo isso de forma automática. Para que todo este processo possa ser realizado, cada port possui uma série de arquivos contendo as instruções para realizar o download, compilação e instalação. Dessa forma basta descobrir qual o Port corresponde ao software desejado e digitar os comando necessários à instalação.
A finalidade central é prover uma gigantesca biblioteca de programas devidamente disponíveis para o FreeBSD de forma simples e automatizada e realmente segura. Para isso todo o desenvolvimento e gerenciamento é centralizado em um comitê específico para isso. Assim, todos os Ports lançados ou atualizados são devidamente auditados por uma equipe responsável por sua segurança. Dessa forma ao ser lançado, um port já possui uma garantia de segurança, pois este comitê é responsável por verificar possíveis vulnerabilidades.
Embora exista um comitê desenvolvendo e aprovando Ports, qualquer pessoa pode desenvolver desenvolvê-los e submetê-los para esta equipe e até mesmo fazer parte dela, basta para isso entrar em contato através das listas de discussões relacionadas ao desenvolvimento.
Todo este sistema está à disposição por meio de uma relação de sites FTP que ficam espalhados ao redor do mundo e armazenam o código-fonte das aplicações aprovadas pelo comitê de segurança para fazer parte dos Ports do FreeBSD. Para o usuário do sistema, esta coleção de softwares, é disponibilizada através da árvore de diretórios presentes em "/usr/ports". A Figura 1 mostra o conteúdo deste diretório:
Vemos nesta imagem os diretórios principais, que organizam os aplicativos em categorias, dentro destes diretórios estão os diretórios dos aplicativos. Por exemplo, o servidor apache está disponível dentro do diretório "www", assim como centenas de outros aplicativos relacionados a serviços de internet.
É dentro de cada diretório que realizamos os comandos responsáveis por realizar o download, compilação e instalação do aplicativo. Por exemplo, para instalar o apache seria necessário acessar o diretório referente ao Port e digitar o comando "make install". Este comando fará tudo o que precisa ser feito para a instalação. De um modo geral, basta acessar o diretório do port correspondente e digitar o comando específico para instalação.
Como já mencionado, cada Port possui dentro de si arquivos responsáveis por especificar onde está o arquivo com o fonte e realizar seu download e de suas dependências, instruções sobre a compilação e instalação destes, assim como informações sobre a configuração default de cada aplicativo.
Na figura 2 podemos visualizar o conteúdo do Port Apache24, ou seja, a versão 2.4 do servidor Apache:
Os arquivos presentes dentro de cada Port pode variar, dependendo do aplicativo, porém os arquivos básicos dos Ports são:
- Makefile: arquivo que declara como o aplicativo deve ser compilado e onde seus componentes devem ser instalados.
- Distiinfo: contem os nomes e meios para verificação dos arquivos que precisam ser obtidos para construir o port, ou seja, as dependências.
- Files/: diretório que contem todos os patches necessários para o programa ser compilado e instalado.
- pkg-descr: possui uma descrição detalhada do programa.
- pkg-plist: lista de todos os arquivos que serão instalados pelo port.
Alguns ports podem possuir arquivos específicos para situações especiais. Para mais detalhes consulte o manual dos Ports em
freebsd.org.
Como veremos na próxima parte deste artigo, a manipulação de Ports é muito simples de ser realizada. Veremos como instalar e desinstalar Ports, atualizar a coleção completa de Ports, atualizar um aplicativo por meio do Port correspondente, além de outras opções.