4.5. Usando a coleção de ports

A sessão abaixo fornecerá as instruções básicas sobre o uso da coleção de ports para instalar e remover programas do seu sistema.

4.5.1. Obtendo a coleção do ports

Antes que você possa instalar um port, você primeiro precisa obter a coleção de ports, a qual é basicamente um conjunto de arquivos Makefiles, patches, e arquivos de descrição colocados sob /usr/ports

Quando você está instalando o FreeBSD, o Sysinstall pergunta se você deseja instalar a árvore do ports, se você respondeu não naquela ocasião, você pode seguir as seguintes instruções para instalar a coleção de ports:

Via Sysinstall

Este método envolve novamente a utilização do sysinstall para instalar manualmente a coleção de ports.

  1. Estando ``logado'' como o usuário root, execute o comando /stand/sysinstall como mostrado abaixo:

    # /stand/sysinstall
    
  2. Utilize as setas direcionais de seu teclado e selecione a opção Configure, e pressione Enter .

  3. Selecione a opção Distributions, e pressione Enter.

  4. Selecione a opção ports, e pressione a barra de espaço para marcá-la.

  5. Selecione a opção Exit, e pressione Enter.

  6. Agora você deve escolher a mídia a partir da qual a coleção de ports será instalada, como por exemplo CDROM, FTP, etc. Selecione a opção desejada e pressione Enter para iniciar a instalação.

  7. Selecione a opção Exit e pressione Enter para voltar a tela inicial.

  8. Pressione X para sair do sysinstall.

Um método alternativo para obter e manter atualizada a coleção de ports é através da utilização do aplicativo CVSup . Dê uma olhada no arquivo de configuração do CVSup para o ports em /usr/share/examples/cvsup/ports-supfile. Consulte a sessão Utilizando o CVSup (Seção A.5) para maiores informações sobre a utilização do CVSup e deste arquivo.

Via CVSup

Este é um guia rápido sobre como obter a coleção de ports através do uso do CVSup. Se voce deseja manter a sua árvore do ports atualizada, ou então se desejar aprender mais sobre o CVSup, leia a sessão mencionada anteriormente.

  1. Instale o portnet/cvsup. Consulte a sessão Instalando o CVSup (Seção A.5.2) para maiores detalhes.

  2. Estando ``logado'' como o usuário root, copie o arquivo /usr/share/examples/cvsup/ports-supfile para um novo local, como por exemplo para o diretório /root ou então para o seu diretório home.

  3. Abra o arquivo ports-supfile com o seu editor de textos preferido.

  4. Altere a entrada CHANGE_THIS.FreeBSD.org para o endereço válido de um servidor CVSup perto de você. Consulte a sessão Espelhos CVSup (Seção A.5.7) para visualizar a lista completa com todos os servidores disponiveis.

  5. Execute o comando cvsup:

    # cvsup -g -L 2 /root/ports-supfile
    
  6. Ao executar este comando novamente no futuro, ele irá atualizar a sua árvore do ports, baixando todas as alterações que ocorreram na coleção desde a ultima vez em que ele foi executado.

4.5.2. Instalando um aplicativo via Ports

A primeira coisa que precisa ser explicada a alguém que está iniciando no uso do ports é que na verdade um port é composto por um ``conjunto de arquivos''. Em poucas palavras, um port é o conjunto mínimo de arquivos que diz ao sistema FreeBSD como compilar corretamente e como instalar um aplicativo. Cada port é composto por:

Alguns ports possuem outros arquivos, como por exemplo pkg-message. O sistema de ports utiliza estes arquivos para lidar com sistuações especiais. Se você desejar maiores detalhes sobre estes arquivos, e sobre o sistema de ports em geral, consulte o FreeBSD Porter's Handbook .

Agora que você tem bastante informação básica para saber para que a coleção de ports é utilizada, você está pronto para instalar seu primeiro aplicativo pelo sistema de ports. Existem duas formas como isto pode ser feito, e cada uma delas está detalhada abaixo.

No entanto antes de iniciarmos você precisará escolher um aplicativo para instalar. Existem algumas formas de fazer isso, mas a maneira mais facil é através da listagem de ports no web site do FreeBSD. No site você pode navegar pela árvore de ports ou então utilizar-se do mecanismo de busca. Cada port possui uma descrição da finalidade do aplicativo a que ele se refere, a leitura destas descrições vai ajudá-lo na escolha de qual port instalar.

Uma outra opção é utilizar-se do utilitário whereis(1). Simplesmente execute whereis arquivo , onde arquivo é o programa que você deseja instalar. Se ele for encontrado em seu sistema, você será informado da sua localização, como mostrado abaixo:

# whereis lsof
lsof: /usr/ports/sysutils/lsof

A saida acima nos diz que o lsof (utilitário de sistema) pode ser encontrado no diretório /usr/ports/sysutils/lsof.

Outra forma de procurar um port em particular é através da utilização do mecanismo interno de busca disponibilizado pelo sistema de ports. Para usar o recurso de busca, você tem que estar dentro do diretório /usr/ports. Uma vez dentro do diretório, execute o comando make search name=nome_do_programa onde nome_do_programa é o nome do aplicativo que vc está procurando. Por exemplo, se você estiver procurando pelo lsof:

# cd /usr/ports
# make search name=lsof
Port:   lsof-4.56.4
Path:   /usr/ports/sysutils/lsof
Info:   Lists information about open files (similar to fstat(1))
Maint:  obrien@FreeBSD.org
Index:  sysutils
B-deps: 
R-deps:

A parte da saída na qual você deve prestar um atenção especial é a linha iniciada com ``Path:'', uma vez que é ela que diz onde encontrar o port. As outras informações exibidas não são necessárias para a instalação do aplicativo pelo ports, e portanto não serão comentadas aqui.

Para uma busca mais profunda voce pode utilizar make search key=string , onde string é a palavra chave que deseja procurar. Esta busca irá varrer os nomes dos ports, os comentários, as descrições, as dependências e pode pode ser utilizada para buscar um aplicativo que esteja relacionado a um assunto em particular caso você não saiba o nome do aplicativo pelo qual você está procurando.

Em ambos os casos descritos acima, o argumento da busca é case-insensitive. A busca por ``LSOF'' irá apresentar o mesmo resultado que uma busca por ``lsof ''.

Nota: Voce precisa estar ``logado'' como root para instalar um aplicativo pelo ports.

Agora que você ja encontrou um aplicativo que gostaria de instalar, você já está pronto para executar a instalação. O port inclui instruções sobre como compilar o código fonte, porém não inclui o código fonte propriamente dito. Você pode obter o código fonte a partir de um CDROM ou a partir da internet. O código fonte é distribuido da forma como o autor do software desejar, normalmente o formaro utilizado é um tarball compactado com o utilitário gzip, porém ele pode estar compactado com outro utilitário ou mesmo estar descompactado. O código fonte de um software, independente de como ele for distribuido, é chamado de ``distfile''. Voce pode obter o ``distfile'' a partir de um CDROM ou da internet.

4.5.2.1. Instalando um aplicativo através do ports via CDROM

Os ISOs oficiais distribuidos pelo projeto FreeBSD não incluem nenhum ``distfile''. Eles ocupariam muito espaço, o qual é melhor utilizado pelos pacotes pré-compilados. Os CDROMs da linha PowerPack incluem ``distifiles'', e voce pode comprar este conjunto de CDs em vendedores como a FreeBSD Mall. Esta seção assume que você possui este conjunto de CDs.

Insira o CDROM do FreeBSD no ``drive''. Monte-o como /cdrom. Se você utilizar um ponto de montagem diferente o processo de instalação não irá funcionar. Para iniciar, vá para o diretório do ports que você deseja instalar:

# cd /usr/ports/sysutils/lsof

Uma vez dentro do diretório lsof, você irá ver o esqueleto do port. O próximo passo é compilar, ou construir, o port. Isto é realizado pela simples execução do comando make. Ao executar o comando, você irá visualizar uma saida semelhante a esta:

# make
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from file:/cdrom/ports/distfiles/.
===>  Extracting for lsof-4.57
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===>  Patching for lsof-4.57
===>  Applying FreeBSD patches for lsof-4.57
===>  Configuring for lsof-4.57
...
[configure output snipped]
...
===>  Building for lsof-4.57
...
[compilation output snipped]
...
#

Observe que após completar o processo de compilação você irá voltar para o prompt. O próximo passo é instalar o port. Para instalá-lo, basta adicionar a palavra install ao comando make, como mostrado abaixo:

# make install
===>  Installing for lsof-4.57
...
[installation output snipped]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.57
===>   Registering installation for lsof-4.57
===>  SECURITY NOTE: 
      This port has installed the following binaries which execute with
      increased privileges.
#

Uma vez que você tenha retornado ao prompt, você já deve ser capaz de executar a aplicação que acabou de instalar. Como o aplicativo lsof executa com privilégios altos, um aviso de segurança é exibido. Durante o processo de compilação e de instalação, outros avisos podem ser exibidos.

Nota: Voce pode economizar um passo executando diretamente o comando make install, ao invés de executar o comando make seguido do comando make install como duas etapas separadas.

Nota: Alguns shells mantém um cache dos comandos disponíveis nos diretórios listados na variável de ambiente PATH, com o objetivo de agilizar o processo de busca para a execução desdes comandos. Se voce estiver utilizando um destes shells, você terá que executar o comando rehash logo após a instalação do ports, antes que voce possa utilizar o aplicativo recém instalado. Esta operação é necessária com todos os shells disponibilizados na base do sistema (como por exemplo o tcsh) e com alguns dos disponibilizados no ports (por exemplo, shells/zsh).

Nota: Por favor, esteja ciente de que a licença de alguns aplicativos não permite a inclusão dos mesmos em um CDROM. Isto pode ocorrer devido a necessidade de se preencher algum formulário antes de se fazer o download ou então porque a redistribuição não é permitida, ou por qualquer outra razão. Se você deseja instalar um ports cujo ``distfile'' não esteja presente no CDROM, você terá que estar online para instalá-lo (consulte a próxima seção).

4.5.2.2. Instalando um aplicativo através do ports via Internet

Como na última seção, está seção assume que você possui uma conexão internet funcional. Se você não possuir, você terá que executar a instalação apartir do CDROM, ou então colocar manualmente uma cópia do ``distifile'' do port desejado no diretório /usr/ports/distfiles.

A instalação de um port a partir da internet é realizada de forma idêntica a instalação a partir do CDROM, a única diferença entre as duas é que agora o ``distfile'' será obtido da internet ao invés de ser lido do CDROM.

Os passos envolvidos são idênticos:

# make install
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
439860 bytes transferred in 18.0 seconds (23.90 kBps)
===>  Extracting for lsof-4.57
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===>  Patching for lsof-4.57
===>  Applying FreeBSD patches for lsof-4.57
===>  Configuring for lsof-4.57
...
[configure output snipped]
...
===>  Building for lsof-4.57
...
[compilation output snipped]
...
===>  Installing for lsof-4.57
...
[installation output snipped]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.57
===>   Registering installation for lsof-4.57
===>  SECURITY NOTE: 
      This port has installed the following binaries which execute with
      increased privileges.
#

Como voce pode ver a única diferença é a linha que informa que o sistema esta baixando o ``distfile''.

O sistema de ports utiliza o fetch(1) para baixar os arquivos, o qual considera várias variáveis de ambiente, incluindo FTP_PASSIVE_MODE, FTP_PROXY, e FTP_PASSWORD. Você pode precisar definir uma ou mais delas caso esteja atrás de um firewall, ou mesmo fazer uso de um proxy FTP/HTTP, consulte fetch(3) para visualizar a lista de todas as variáveis.

Para os usuários que não podem ficar conectados o tempo todo, é oferecido o comando make fetch como opção. Ao executar este comando na raiz da árvore do ports (/usr/ports), ele irá baixar todos os ``distifiles'' necessários para o uso do ports para você. Este comando também funciona para as demais categorias do segundo nível (por exemplo, /usr/ports/net). Observe que se um port depender de uma biblioteca ou de outros ports para funcionar, o comando acima não irá baixar os ``distifiles'' destes ports. Se você desejar que sejam baixadas todas as dependencias, substitua a opção fetch por fetch-recursive.

Nota: Você pode compilar todos os ports de uma determinada categoria, ou mesmo todos os ports, executando o comando make na raiz da árvore do ports, exatamente como mencionado acima para o make fetch. Isto é perigoso, pois alguns ports não podem co-existir no mesmo sistema. Em outros casos, alguns ports podem instalar 2 arquivos diferentes com o mesmo nome, um sobrescrevendo o arquivo do outro.



Em alguns casos raros, os usuários podem precisar obter os tarballs, a partir de um sítio diferente do especificado no MASTER_SITES (local de onde os ``distfiles'' são obtidos). Voce pode sobrescrever o valor da opção MASTER_SITES com o seguinte comando:

# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
    ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch

No exemplo acima, nós alteramos a opção MASTER_SITES para ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.

Nota: Alguns ports permitem (ou mesmo precisam) que você forneça algumas opções no momento da compilação, com o objetivo de habilitar ou desabilitar partes da aplicação que não são necessárias, opções de segurança e outras customizações. Alguns ports onde ocorrem isso, e que vem a mente no momento são www/mozilla, security/gpgme, e mail/sylpheed-claws. Uma mensagem é exibida quando este tipo de opções estiverem disponíveis.

4.5.2.3. Sobrescrevendo o diretório default do Ports

Algumas vezes é útil (ou obrigatório) utilizar diferentes ``distfiles'' e diretórios de ports. As variáveis PORTSDIR e PREFIX podem sobrescrever os diretórios default. Por exemplo:

# make PORTSDIR=/usr/home/example/ports install

Irá compilar o port disponível no diretório /usr/home/example/ports e instalar tudo sob o diretório /usr/local.

# make PREFIX=/usr/home/example/local install

Irá compilar o port em /usr/ports e instalar tudo em /usr/home/example/local.

E é claro,

# make PORTSDIR=../ports PREFIX=../local install

Irá combinar os dois (é muito longo para escrever nesta pagina, mas já deu para você ter uma idéia geral de como isso funciona).

Alternativamente, estas variáveis podem fazer parte do seu ambiente. Leia o manual do seu shell para ver instruções de como fazer desta forma.

4.5.2.4. Lidando com o imake

Alguns ports que fazem uso do imake (uma parte do Sistema X Windows) não fucionam bem com a variável PREFIX, e irão insistir em instalar o aplicativo sob /usr/X11R6. De forma semelhante, alguns ports Perl ignoram a variável PREFIX e se instalam sob a árvore do Perl. Fazer estes ports respeitarem a variável PREFIX é um trabalho difícil, senão impossível.

4.5.3. Desinstalando um Ports

Agora que você sabe como instalar um ports, você provávelmente está se perguntando como remove-lo do sistema, apenas para o caso de você instalar um e mais tarde descobrir que instalou o port errado. Nós iremos remover o nosso exemplo anterior (era o lsof caso não tenha prestado atenção). Assim como na instalação, você primeiro deve entrar no diretório do port, no nosso caso /usr/ports/sysutils/lsof. Depois que você tiver entrado no diretório, você estará pronto para desinstalar o lsof. O que é feito através do comando make deinstall:

# cd /usr/ports/sysutils/lsof
# make deinstall
===>  Deinstalling for lsof-4.57

Simples assim, você já removeu o lsof do seu sistema. Se você desejar reinstalá-lo, basta executar o comando make reinstall dentro do diretório /usr/ports/sysutils/lsof.

Os comandos make deinstall e make reinstall, não irão funcionar depois que voce executar o comando make clean. Se voce desejar desinstalar um ports depois de ter limpado o diretório de trabalho, utilize o comando pkg_delete(1) como mostrado na Sessão sobre pacotes do Handbook.

4.5.4. Ports e espaço em disco

Utilizar a coleção de ports pode definitivamente devorar espaço do seu HD. Por esta razão você precisa se lembrar de limpar o diretório de trabalho utilizando o comando make clean. Ao executá-lo ele irá remover o diretório work depois do port ter sido compilado e instalado. Você também pode remover os arquivos tarballs do diretório distfiles, além de remover os aplicativos instalados quando eles não tiverem mais utilidade.

Alguns usuários preferem limitar as categorias do port, colocando uma entrada no arquivo refuse. Desta forma quando eles executam o CVSup, ele não irá baixar nenhum arquivo desta categoria.

4.5.5. Atualizando um aplicativo instalado via Ports

Manter um aplicativo atualizado pode ser uma tarefa tediosa. Pois para atualizar um aplicativo você precisa ir ao diretório do ports, compilar o port, desinstalar a versão antiga do port, instalar a nova versão e então limpar o diretório de trabalho após a compilação. Imagine fazer isso para 5 aplicativos, entediante certo ? Este é um dos grandes problemas com que um administrador de sistema tem que lidar, mas agora temos um utilitário para fazer este trabalho para nós. Por exemplo o utilitário sysutils/portupgrade irá fazer tudo para você. Instale-o da mesma forma como faz com qualquer outro port, usando o comando make install clean.

Agora crie o banco de dados com o comando pkgdb -F. Este comando irá ler a lista de ports instalados em seu sistema e irá criar um banco de dados com informações dos mesmos no diretório /var/db/pkg. Agora quando você executar portupgrade -a, ele irá ler este banco de dados e o arquivo INDEX na raiz da árvore do ports. Em seguida o portupgrade irá iniciar o processo de download, compilação, backup, instalação e limpeza dos aplicativos que precisarem de atualização. Existem outros utilitários que fazem um trabalho semelhante, verifique as demais opções no diretório ports/sysutils.

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.