4.4. Usando o pkg para o gerenciamento de pacotes binários

O pkg é o substituto da próxima geração para as tradicionais ferramentas de gerenciamento de pacotes do FreeBSD, oferecendo muitos recursos que tornam o processamento de pacotes binários mais rápido e fácil.

Para sites que desejam apenas usar pacotes binários pré-construídos a partir dos espelhos do FreeBSD, o gerenciamento de pacotes com pkg pode ser suficiente.

No entanto, para aqueles que optarem por compilar suas aplicações a partir do código-fonte ou que utilizarem seus próprios repositórios, será necessária uma ferramenta de gerenciamento de ports separada.

Como o pkg só funciona com pacotes binários, ele não é um substituto para tais ferramentas. Estas ferramentas podem ser usadas para instalar o software a partir de pacotes binários e da Coleção do Ports, enquanto o pkg instala apenas pacotes binários.

4.4.1. Introdução ao pkg

O FreeBSD inclui um utilitário de bootstrap que pode ser usado para baixar e instalar o pkg e suas páginas de manual. Este utilitário foi projetado para funcionar com versões do FreeBSD começando com 10.X.

Nota:

Nem todas as versões e arquiteturas do FreeBSD suportam este processo de bootstrap. A lista atual está em https://pkg.freebsd.org/. Para outros casos, o pkg deve ser instalado a partir da coleção de ports ou como um pacote binário.

Para inicializar o sistema, execute:

# /usr/sbin/pkg

Você deve ter uma conexão com a Internet para que o processo de inicialização seja bem-sucedido.

Caso contrário, para instalar o port, execute:

# cd /usr/ports/ports-mgmt/pkg
# make
# make install clean

Ao atualizar um sistema existente que usava originalmente as ferramentas pkg_ * mais antigas, o banco de dados deve ser convertido para o novo formato, para que as novas ferramentas estejam cientes dos pacotes já instalados. Uma vez que o pkg tenha sido instalado, o banco de dados de pacotes deve ser convertido do formato tradicional para o novo formato, executando este comando:

# pkg2ng

Nota:

Esta etapa não é necessária para novas instalações que ainda não possuem nenhum software de terceiros instalado.

Importante:

Este passo não é reversível. Uma vez que o banco de dados de pacotes tenha sido convertido para o formato pkg, as ferramentas tradicionais pkg _ * não devem mais ser usadas.

Nota:

A conversão do banco de dados de pacotes pode emitir erros conforme o conteúdo é convertido para a nova versão. Geralmente, esses erros podem ser ignorados com segurança. No entanto, uma lista com os softwares que não foram convertidos com sucesso é mostrada após o pkg2ng terminar. Esses aplicativos devem ser reinstalados manualmente.

Para garantir que a Coleção de Ports registre novos softwares com o pkg ao invés do tradicional banco de dados de pacotes, versões do FreeBSD anteriores a 10.X requerem esta linha em /etc/make.conf:

WITH_PKGNG=	yes

Por padrão, o pkg usa os pacotes binários dos espelhos de pacotes do FreeBSD (o repositório). Para obter informações sobre como criar um repositório de pacotes personalizados, consulte Seção 4.6, “Compilando Pacotes com o Poudriere.

Opções adicionais de configuração do pkg são descritas em pkg.conf(5).

As informações de uso do pkg estão disponíveis na página de manual pkg(8) ou executando o pkg sem argumentos adicionais.

Cada argumento do comando pkg é documentado em uma página de manual específica do comando. Para ler a página de manual do pkg install, por exemplo, execute um destes comandos:

# pkg help install
# man pkg-install

O restante desta seção demonstra tarefas comuns de gerenciamento de pacotes binários que podem ser executadas usando o pkg. Cada comando demonstrado fornece muitos switches para personalizar seu uso. Consulte a ajuda de um comando ou a página do manual para obter detalhes e mais exemplos.

4.4.2. Branches Ports Trimestrais e Mais Recentes

As branches Quarterly(trimestrais) provê aos usuários uma experiência mais estável e previsível para instalação e upgrade de ports e pacotes. Isto é feito essencialmente permitindo apenas atualizações que não contém novas features (non-features updates). Branches trimestrais visam receber correções se segurança (que talvez sejam atualizações de versão, ou commits de backports), correções de bugs e compliance de ports ou alterações de frameworks. A branch trimestral é baseada (anualmente) na HEAD no início de Janeiro, Abril, Julho e Outubro. As branches são nomeadas de acordo com o ano (YYYY) e o quarter (Q1-4) em que são criadas. Por exemplo, a branch trimestral criada em Janeiro de 2016, é nomeada 2016Q1. E a branch Latest provê as últimas versões dos pacotes para os usuários.

Para alternar de trimestral para latest execute os seguintes comandos:

# cp /etc/pkg/FreeBSD.conf /usr/local/etc/pkg/repos/FreeBSD.conf

Edite o arquivo /usr/local/etc/pkg/repos/FreeBSD.conf and change the string quarterly to latest in the url: line.

O resultado deve ser semelhante ao seguinte:

FreeBSD: {
  url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}

E finalmente rode este comando para atualizar do novo (ultimo) meta dado do repositório.

# pkg update -f

4.4.3. Obtendo informações sobre os pacotes instalados

Informações sobre os pacotes instalados em um sistema podem ser visualizadas executando pkg info que, quando executado sem qualquer opção, listará a versão do pacote para todos os pacotes instalados ou para o pacote especificado.

Por exemplo, para ver qual versão do pkg está instalada, execute:

# pkg info pkg
pkg-1.1.4_1

4.4.4. Instalando e removendo pacotes

Para instalar um pacote binário, use o seguinte comando, em que packagename é o nome do pacote a ser instalado:

# pkg install packagename

Esse comando usa os dados do repositório para determinar qual versão do software instalar e se ele possui alguma dependência faltando. Por exemplo, para instalar o curl:

# pkg install curl
Updating repository catalogue
/usr/local/tmp/All/curl-7.31.0_1.txz          100% of 1181 kB 1380 kBps 00m01s

/usr/local/tmp/All/ca_root_nss-3.15.1_1.txz   100% of  288 kB 1700 kBps 00m00s

Updating repository catalogue
The following 2 packages will be installed:

        Installing ca_root_nss: 3.15.1_1
        Installing curl: 7.31.0_1

The installation will require 3 MB more space

0 B to be downloaded

Proceed with installing packages [y/N]: y
Checking integrity... done
[1/2] Installing ca_root_nss-3.15.1_1... done
[2/2] Installing curl-7.31.0_1... done
Cleaning up cache files...Done

O novo pacote e quaisquer pacotes adicionais que foram instalados como dependências podem ser vistos na lista de pacotes instalados:

# pkg info
ca_root_nss-3.15.1_1	The root certificate bundle from the Mozilla Project
curl-7.31.0_1	Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
pkg-1.1.4_6	New generation package manager

Pacotes que não são mais necessários podem ser removidos com pkg delete. Por exemplo:

# pkg delete curl
The following packages will be deleted:

	curl-7.31.0_1

The deletion will free 3 MB

Proceed with deleting packages [y/N]: y
[1/1] Deleting curl-7.31.0_1... done

4.4.5. Atualizando os Pacotes Instalados

Os pacotes instalados podem ser atualizados para as versões mais recentes executando:

# pkg upgrade

Este comando irá comparar as versões instaladas com as disponíveis no catálogo do repositório e atualizá-las a partir do repositório.

4.4.6. Auditando os Pacotes Instalados

Vulnerabilidades de software são regularmente descobertas em aplicativos de terceiros. Para resolver isso, o pkg inclui um mecanismo de auditoria integrado. Para determinar se há alguma vulnerabilidade conhecida para o software instalado no sistema, execute:

# pkg audit -F

4.4.7. Removendo Pacotes Não Utilizados Automaticamente

Remover um pacote pode deixar dependências que não são mais necessárias. Pacotes desnecessários que foram instalados como dependências podem ser automaticamente detectados e removidos usando:

# pkg autoremove
Packages to be autoremoved:
	ca_root_nss-3.15.1_1

The autoremoval will free 723 kB

Proceed with autoremoval of packages [y/N]: y
Deinstalling ca_root_nss-3.15.1_1... done

Os pacotes instalados como dependências são chamados de pacotes automáticos. Pacotes não automáticos, ou seja, os pacotes que não foram instalados como uma dependência para outro pacote, podem ser listados usando:

# pkg prime-list
nginx
openvpn
sudo

O pkg prime-list é um alias de comando declarado no /usr/local/etc/pkg.conf. Existem muitos outros que podem ser usados para consultar o banco de dados de pacotes do sistema. Por exemplo, o comando pkg prime-origins pode ser usado para obter o diretório de origem dos ports da lista mencionada acima:

# pkg prime-origins
www/nginx
security/openvpn
security/sudo

Esta lista pode ser usada para recompilar todos os pacotes instalados em um sistema usando ferramentas de compilação como o ports-mgmt/poudriere ou o ports-mgmt/synth.

Marcar um pacote instalado como automático pode ser feito usando:

# pkg set -A 1 devel/cmake

Uma vez que um pacote é um pacote orfão e está marcado como automático, ele será selecionado por pkg autoremove.

Marcar um pacote instalado como não automático pode ser feito usando:

# pkg set -A 0 devel/cmake

4.4.8. Restaurando o banco de dados de pacotes

Ao contrário do sistema tradicional de gerenciamento de pacotes, o pkg inclui seu próprio mecanismo de backup de banco de dados de pacotes. Essa funcionalidade é habilitada por padrão.

Dica:

Para desabilitar o script que faz o backup periódico do banco de dados de pacotes, defina daily_backup_pkgdb_enable="NO" no periodic.conf(5).

Para restaurar o conteúdo de um backup anterior do banco de dados de pacotes, execute o seguinte comando substituindo /path/to/pkg.sql pelo local do backup:

# pkg backup -r /path/to/pkg.sql

Nota:

Se estiver restaurando um backup feito pelo script periódico, ele deve ser descompactado antes de ser restaurado.

Para executar um backup manual do banco de dados pkg, execute o seguinte comando, substituindo /path/to/pkg.sql por um nome de arquivo e local adequados:

# pkg backup -d /path/to/pkg.sql

4.4.9. Removendo Pacotes Obsoletos

Por padrão, o pkg armazena pacotes binários em um diretório de cache definido por PKG_CACHEDIR no pkg.conf(5). Somente cópias dos últimos pacotes instalados são mantidas. Versões mais antigas do pkg mantinham todos os pacotes anteriores. Para remover esses pacotes binários desatualizados, execute:

# pkg clean

O cache inteiro pode ser limpo executando:

# pkg clean -a

4.4.10. Modificando Metadados de Pacotes

Os softwares dentro da Coleção de Ports do FreeBSD podem passar por grandes mudanças no número de versão. Para resolver isso, o pkg possui um comando interno para atualizar as origens do pacote. Isto pode ser útil, por exemplo, se lang/php5 for renomeado para lang/php53 para que lang/php5 possa agora representar a versão 5.4.

Para alterar a origem do pacote para o exemplo acima, execute:

# pkg set -o lang/php5:lang/php53

Como outro exemplo, para atualizar lang/ruby18 para lang/ruby19, execute:

# pkg set -o lang/ruby18:lang/ruby19

Como um exemplo final, para alterar a origem das bibliotecas compartilhadas libglut de graphics/libglut para graphics/freeglut, execute:

# pkg set -o graphics/libglut:graphics/freeglut

Nota:

Ao alterar as origens do pacote, é importante reinstalar os pacotes que dependem do pacote com a origem modificada. Para forçar uma reinstalação dos pacotes dependentes, execute:

# pkg install -Rf graphics/freeglut

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>.