Gerenciamento de pacotes no Ubuntu e Debian

Introdução

O gerenciamento de pacotes é um dos recursos fundamentais de um sistema Linux. O formato do pacote e as ferramentas de gerenciamento de pacotes diferem de distribuição para distribuição, mas a maioria das distribuições usa um dos dois conjuntos principais de ferramentas.

Para distribuições baseadas no Red Hat Enterprise Linux (como o próprio RHEL e Rocky Linux), o formato de empacotamento RPM e as ferramentas de empacotamento como rpmyum são comuns. A outra família principal, usada pelo Debian, Ubuntu e distribuições relacionadas, usa o formato de empacotamento .deb e ferramentas como apt e dpkg.

Nos últimos anos, tem havido mais gerenciadores de pacotes auxiliares projetados para serem executados em paralelo com o apt e dpkg: por exemplo, o snap fornece mais portabilidade e um sandbox, e o Homebrew , portado do macOS, fornece ferramentas de linha de comando que podem ser instaladas individualmente pelos usuários, para evitar conflitos com pacotes do sistema.

Neste guia, você aprenderá algumas das ferramentas de gerenciamento de pacotes mais comuns que os profissionais usam em sistemas Debian e Ubuntu. Isso pode ser usado como uma referência rápida quando você precisar saber como gerenciar os pacotes nesses sistemas.

Pré-requisitos

  • Uma máquina rodando Ubuntu ou Debian e um usuário comum com privilégios sudo.

Passo 1 – Visão geral das ferramentas de gerenciamento de pacotes Debian

O ecossistema Debian/Ubuntu emprega algumas ferramentas diferentes de gerenciamento de pacotes para gerenciar software no sistema.

A maioria dessas ferramentas estão inter-relacionadas e funcionam nos mesmos bancos de dados de pacotes. Algumas dessas ferramentas tentam fornecer interfaces de alto nível para o sistema de empacotamento, enquanto outros utilitários se concentram em fornecer funcionalidades de baixo nível.

apt

O comando apt é provavelmente o membro mais usado do conjunto de ferramentas apt de empacotamento. Seu principal objetivo é fazer interface com repositórios remotos mantidos pela equipe de empacotamento da distribuição do linux e realizar ações nos pacotes disponíveis.

As ferramentas apt em geral funcionam puxando informações de repositórios remotos para um cache mantido no sistema local. O comando apt é usado para atualizar o cache local. Também é usado para modificar o estado do pacote, ou seja, instalar ou remover um pacote do sistema.

Em geral, aptserá usado para atualizar o cache local e para fazer modificações no sistema ativo.

Nota: Nas versões anteriores do Ubuntu, o comando apt principal era conhecido como apt-get. Ele foi simplificado, mas você ainda pode chamá-lo por apt-get pelo hábito ou por compatibilidade com versões anteriores.

apt-cache

Outro membro importante do conjunto de ferramentas apt é o apt-cache. Este utilitário usa o cache local para consultar informações sobre os pacotes disponíveis e suas propriedades.

Por exemplo, sempre que você desejar pesquisar um pacote específico ou uma ferramenta que irá executar uma determinada função, apt-cache é um bom lugar para começar. Também pode ser informativo sobre qual versão exata do pacote será alvo de um procedimento. Informações sobre dependências e dependência reversa são outras funcões úteis do apt-cache.

dpkg

Embora as ferramentas anteriores se concentrassem no gerenciamento de pacotes mantidos em repositórios, o comando dpkg também pode ser usado para operar em pacotes individuais .deb. Na verdade, a ferramenta dpkg é responsável pela maior parte do trabalho de bastidores dos comandos acima; apt fornece uma forma de manutenção adicional enquanto dpkginterage com os próprios pacotes.

Ao contrário dos comandos apt, o dpkgnão tem a capacidade de resolver dependências automaticamente. Sua principal característica é a capacidade de trabalhar com pacotes .deb diretamente e de dissecar o pacote para descobrir mais sobre sua estrutura. Embora possa coletar algumas informações sobre os pacotes instalados no sistema, você não deve usá-lo como gerenciador de pacotes primário. Na próxima etapa, você aprenderá sobre as práticas recomendadas de atualização de pacotes.

Passo 2 – Atualizando o Cache de Pacotes e o Sistema

As ferramentas de gerenciamento de pacotes Debian e Ubuntu ajudam a manter atualizada a lista de pacotes disponíveis do seu sistema. Elas também fornecem vários métodos de atualização para os pacotes que você instalou em sua máquina.

Atualizando o cache de pacotes locais

Os repositórios remotos dos quais suas ferramentas de empacotamento dependem para obter informações de pacotes são atualizados o tempo todo. Entretanto, a maioria das ferramentas de gerenciamento de pacotes Linux são projetadas, por razões históricas, para trabalhar diretamente com um cache local dessas informações. Esse cache precisa ser atualizado periodicamente.

Geralmente é uma boa ideia atualizar o cache de pacotes local a cada sessão antes de executar outros comandos de pacote. Isso garantirá que você esteja operando com as informações mais atualizadas sobre o software disponível. Alguns comandos de instalação falharão se você estiver operando com informações de pacote obsoletas.

Para atualizar o cache local, use o comando apt juntamente ao subcomando update:

				
					sudo apt update
				
			

Isso baixará uma lista atualizada dos pacotes disponíveis nos repositórios que você está rastreando.

Atualizando Pacotes

O comando apt distingue entre dois procedimentos de atualização diferentes. O primeiro procedimento de atualização (abordado nesta seção) pode ser usado para atualizar quaisquer componentes que não exijam remoção de componentes. Para saber como atualizar e permitir que o  apt remova e troque os pacotes conforme necessário, consulte a seção abaixo.

Isso pode ser muito importante quando você não deseja remover nenhum dos pacotes instalados sob nenhuma circunstância. No entanto, algumas atualizações envolvem a substituição de componentes do sistema ou a remoção de arquivos conflitantes. Este procedimento irá ignorar quaisquer atualizações que exijam a remoção do pacote:

				
					sudo apt upgrade
				
			

Este segundo procedimento atualizará todos os pacotes, mesmo aqueles que requerem remoção de pacotes. Isso geralmente é necessário à medida que as dependências dos pacotes mudam.

Normalmente, os pacotes removidos serão substituídos por equivalentes funcionais durante o procedimento de atualização, portanto isso geralmente é seguro. Porém, é aconselhável ficar de olho nos pacotes a serem removidos, caso alguns componentes essenciais estejam marcados para retirada. Para realizar esta ação, digite:

				
					sudo apt full-upgrade
				
			

Isso atualizará todos os pacotes em seu sistema. Na próxima etapa, você aprenderá como baixar e instalar novos pacotes.

Passo 3 – Baixando e Instalando Pacotes

Pesquisar Pacotes

O primeiro passo ao baixar e instalar pacotes é pesquisar nos repositórios da sua distribuição os pacotes que você está procurando.

A procura de pacotes é uma operação que visa obter informações utilizando o cache de pacotes. Para fazer isso, use apt-cache search. Lembre-se de que você deve garantir que seu cache local esteja atualizado usando sudo apt update antes de procurar pacotes:

				
					apt-cache search nome_do_pacote
				
			

Como este procedimento consiste apenas em consultar informações, não requer privilégios sudo. Qualquer pesquisa realizada examinará os nomes dos pacotes, bem como as descrições completas dos pacotes.

Por exemplo, se você pesquisar por htop, verá resultados como estes:

				
					apt-cache search htop
				
			
				
					htop - interactive processes viewer
aha - ANSI color to HTML converter
bashtop - Resource monitor that shows usage and stats
bpytop - Resource monitor that shows usage and stats
btop - Modern and colorful command line resource monitor that shows usage and stats
libauthen-oath-perl - Perl module for OATH One Time Passwords
pftools - build and search protein and DNA generalized profiles
				
			

Como você pode ver, você tem um pacote chamado htop, mas há também outros seis programas, cada um mencionando htop no campo de descrição completa do pacote (a descrição ao lado da saída é apenas um breve resumo).

Instale um pacote dos repositórios

Para instalar um pacote dos repositórios, bem como todas as dependências necessárias, você pode usar o aptcomando com o installargumento.

Os argumentos para este comando devem ser o nome ou nomes do pacote conforme estão rotulados no repositório:

				
					sudo apt install nome_do_pacote
				
			

Você pode instalar vários pacotes de uma vez, separados por um espaço:

				
					sudo apt install pacote1 pacote2 pacote3
				
			

Se o pacote solicitado exigir dependências adicionais, elas serão impressas na saída padrão e você será solicitado a confirmar o procedimento. Vai parecer algo assim:

				
					sudo apt install apache2
				
			
				
					[sudo] password for aptans:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.3-0 mailcap
  mime-support ssl-cert
Suggested packages:
  apache2-doc apache2-suexec-pristine | apache2-suexec-custom
The following NEW packages will be installed:
  apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.3-0 mailcap
  mime-support ssl-cert
0 upgraded, 12 newly installed, 0 to remove and 0 not upgraded.
Need to get 2104 kB of archives.
After this operation, 8401 kB of additional disk space will be used.
Do you want to continue? [Y/n]
				
			

Como você pode ver, mesmo que nosso alvo de instalação seja o pacote  apache2, o pacote apache2-data é necessário como uma dependência. Neste caso, você pode continuar pressionando Enter ou “Y”, ou cancelar digitando “n”.

Instale uma versão específica do pacote dos repositórios

Se precisar instalar uma versão específica de um pacote, você pode fornecer a versão que deseja da seguinte forma:

				
					sudo apt install nome_do_pacote=numero_da_versao
				
			

A versão, neste caso, deve corresponder a um dos números de versão do pacote disponíveis no repositório. Isso significa utilizar o esquema de versionamento empregado pela sua distribuição. Você pode encontrar as versões disponíveis usando apt-cache policy nome_do_pacote:

				
					apt-cache policy nginx
				
			
				
					nginx:
  Installed: (none)
  Candidate: 1.18.0-6ubuntu14.4
  Version table:
     1.18.0-6ubuntu14.4 500
        500 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
     1.18.0-6ubuntu14.3 500
        500 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages
     1.18.0-6ubuntu14 500
        500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
				
			

Reconfigurar pacotes

Muitos pacotes incluem scripts de configuração pós-instalação que são executados automaticamente após a conclusão da instalação. Geralmente incluem avisos para o administrador fazer escolhas de configuração.

Se precisar executar essas (e outras) etapas de configuração posteriormente, você poderá usar o comando dpkg-reconfigure. Este comando analisa o pacote passado para ele e executa novamente quaisquer comandos pós-configuração incluídos na especificação do pacote:

				
					sudo dpkg-reconfigure nome_do_pacote
				
			

Isso permitirá que você acesse os mesmos prompts que você recebeu durante a instalação.

Execute uma simulação de ações do pacote

Muitas vezes, você desejará ver os efeitos colaterais de um procedimento sem que haja a execução do comando. O comando apt permite adicionar a flag -s para “simular” a execução.

Por exemplo, para ver o que seria feito se você escolhesse instalar um pacote, você pode digitar:

				
					apt install -s nome_do_pacote
				
			

Isso permitirá que você veja todas as dependências e as alterações em seu sistema que ocorrerão se você remover a flag -s. Um benefício disso é que você pode ver os resultados de um processo que normalmente exigiria privilégios de root, sem usar o sudo.

Por exemplo, se quiser avaliar o que seria instalado com o pacote apache2, você pode digitar:

				
					apt install -s apache2
				
			
				
					NOTE: This is only a simulation!
      apt needs root privileges for real execution.
      Keep also in mind that locking is deactivated,
      so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.3-0 mailcap
  mime-support ssl-cert
Suggested packages:
  apache2-doc apache2-suexec-pristine | apache2-suexec-custom
The following NEW packages will be installed:
  apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.3-0 mailcap
  mime-support ssl-cert
0 upgraded, 12 newly installed, 0 to remove and 0 not upgraded.
Inst libapr1 (1.7.0-8ubuntu0.22.04.1 Ubuntu:22.04/jammy-updates, Ubuntu:22.04/jammy-security [amd64])
Inst libaprutil1 (1.6.1-5ubuntu4.22.04.2 Ubuntu:22.04/jammy-updates, Ubuntu:22.04/jammy-security [amd64])
Inst libaprutil1-dbd-sqlite3 (1.6.1-5ubuntu4.22.04.2 Ubuntu:22.04/jammy-updates, Ubuntu:22.04/jammy-security [amd64])
Inst libaprutil1-ldap (1.6.1-5ubuntu4.22.04.2 Ubuntu:22.04/jammy-updates, Ubuntu:22.04/jammy-security [amd64])
Inst liblua5.3-0 (5.3.6-1build1 Ubuntu:22.04/jammy [amd64])
Inst apache2-bin (2.4.52-1ubuntu4.7 Ubuntu:22.04/jammy-updates, Ubuntu:22.04/jammy-security [amd64])
...
				
			

Você obtém todas as informações sobre os pacotes e versões que seriam instaladas, sem precisar concluir o processo propriamente dito.

Isso também funciona com outros procedimentos, como fazer atualizações do sistema:

				
					apt -s dist-upgrade
				
			

Por padrão, o comando apt solicitará a confirmação do usuário para muitos processos. Isso inclui instalações que exigem dependências adicionais e atualizações de pacotes. Para ignorar esses prompts e aceitar qualquer um desses prompts por padrão, você pode passar a flag -y ao executar estas operações:

				
					sudo apt install -y nome_do_pacote
				
			

Isso instalará o pacote e quaisquer dependências sem qualquer solicitação adicional ao usuário. Isso também pode ser usado para procedimentos de atualização e também para a maioria dos comandos que solicitam confirmação:

				
					sudo apt dist-upgrade -y
				
			

Corrigir dependências e pacotes quebrados

Há momentos em que uma instalação pode não ser concluída com êxito devido a dependências ou outros problemas. Um cenário comum em que isso pode acontecer é ao instalar um pacote .deb utilizando o dpkg, que não resolve dependências.

O comando apt pode tentar resolver esta situação passando a flag -f.

				
					sudo apt install -f
				
			

Isso procurará quaisquer dependências que não foram satisfeitas e tentará instalá-las para corrigir a árvore de dependências. Se a sua instalação acusou um problema de dependência, este deve ser o primeiro passo para tentar resolvê-lo. Se você não conseguir resolver um problema dessa maneira e tiver instalado um pacote de terceiros, deverá removê-lo e procurar uma versão mais recente com uma manutenção mais ativa.

Baixe o pacote dos repositórios

Existem casos principais em que pode ser útil baixar um pacote dos repositórios sem realmente instalá-lo. Você pode fazer isso executando  o comando apt com o argumento download.

Como isso serve apenas para realizar o download de um arquivo e não afeta o sistema real, nenhum privilégio sudo é necessário:

				
					apt download nome_do_pacote
				
			

Isso fará o download dos pacotes especificados para o diretório atual.

Instale um pacote .deb

Embora a maioria das distribuições recomende a instalação de software a partir de seus repositórios mantidos, alguns fornecedores fornecem  arquivos .deb brutos para que você pode instalá-los em seu sistema.

Para fazer isso, você usa o comando dpkg. O dpkg é usado principalmente para trabalhar com pacotes individuais. Ele não tenta realizar instalações a partir do repositório, em vez disso, procura pacotes .deb no diretório atual ou no caminho fornecido:

				
					sudo dpkg --install nome_do_arquivo.deb
				
			

É importante observar que a ferramenta pkg não implementa nenhum tratamento de dependências. Isso significa que se houver alguma dependência não atendida, a instalação falhará. No entanto, ele marca as dependências necessárias, portanto, se todas as dependências estiverem disponíveis nos repositórios, você poderá satisfazê-las utilizando o apt:

				
					sudo apt install -f
				
			

Isso instalará todas as dependências não atendidas, incluindo aquelas marcadas pelo dpkg. Na próxima etapa, você aprenderá como remover alguns dos pacotes instalados.

Passo 4 – Removendo Pacotes e Excluindo Arquivos

Esta seção discutirá como desinstalar pacotes e limpar os arquivos que podem ser deixados pelas operações de gerenciamento de pacotes.

Desinstalar um pacote

Para remover um pacote instalado, você usa o comando apt remove. Isso removerá a maioria dos arquivos que o pacote instalou no sistema, com uma exceção notável.

Este comando deixa os arquivos de configuração no lugar para que sua configuração permaneça disponível se você precisar reinstalar o aplicativo posteriormente. Isso é útil porque significa que quaisquer arquivos de configuração personalizados não serão removidos se você acidentalmente se livrar de um pacote.

Para concluir esta operação, você precisa fornecer o nome do pacote que deseja desinstalar:

				
					sudo apt remove nome_do_pacote
				
			

O pacote será desinstalado, exceto seus arquivos de configuração.

Desinstalar um pacote e todos os arquivos de configuração associados

Se desejar remover um pacote e todos os arquivos associados do seu sistema, incluindo arquivos de configuração, você pode usar o comando apt purge.

Ao contrário do comando apt remove mencionado acima, o apt purge remove tudo. Isso é útil se você não quiser salvar os arquivos de configuração ou se estiver tendo problemas e quiser começar do zero.

Lembre-se de que depois que seus arquivos de configuração forem removidos, você não poderá recuperá-los:

				
					sudo apt purge nome_do_pacote
				
			

Agora, se você precisar reinstalar esse pacote, a configuração padrão será usada.

Remova quaisquer dependências automáticas que não sejam mais necessárias

Ao utilizar apt remove ou apt purge o pacote indicado será removido do seu sistema. No entanto, quaisquer dependências que foram instaladas automaticamente para cumprir os requisitos de instalação permanecerão instaladas.

Para remover automaticamente quaisquer pacotes que foram instalados como dependências que não são mais exigidos por nenhum pacote, você pode usar o comando apt autoremove:

				
					sudo apt autoremove
				
			

Se desejar remover todos os arquivos de configuração associados às dependências que estão sendo removidas, você precisará adicionar a flag --purge ao comando apt autoremove. Isso também limpará os arquivos de configuração, assim como o comando apt purge faz para uma remoção comum:

				
					sudo apt --purge autoremove
				
			

Limpe arquivos de pacotes obsoletos

À medida que os pacotes são adicionados e removidos dos repositórios pelos mantenedores de pacotes de uma distribuição, alguns pacotes se tornarão obsoletos.

A ferramenta apt pode remover quaisquer arquivos de pacote no sistema local que estejam associados a  outros pacotes que não estão mais disponíveis nos repositórios usando o comando apt autoclean.

Isso liberará espaço em sua máquina e removerá quaisquer pacotes potencialmente desatualizados de seu cache local.

				
					sudo apt autoclean
				
			

Na próxima etapa, você aprenderá outras maneiras de consultar pacotes sem necessariamente instalá-los.

Passo 5 – Obtendo Informações sobre Pacotes

Cada pacote contém uma grande quantidade de metadados que podem ser acessados ​​usando as ferramentas de gerenciamento de pacotes. Esta seção demonstrará algumas maneiras comuns de obter informações sobre pacotes disponíveis e instalados.

Para mostrar informações detalhadas sobre um pacote nos repositórios da sua distribuição, você pode usar o comando apt-cache show. Este comando precisa de um nome de pacote do repositório como argumento, então usaremos aqui o nginx como exemplo:

				
					apt-cache show nginx
				
			

Isso exibirá informações sobre quaisquer candidatos à instalação do pacote em questão. Cada candidato terá informações sobre suas dependências, versão, arquitetura, conflitos, o nome real do arquivo do pacote, o tamanho do pacote e da instalação, uma descrição detalhada e vários outros detalhes.

				
					Package: nginx
Architecture: amd64
Version: 1.18.0-6ubuntu14.4
Priority: optional
Section: web
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Nginx Maintainers <pkg-nginx-maintainers@alioth-lists.debian.net>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 49
Depends: nginx-core (<< 1.18.0-6ubuntu14.4.1~) | nginx-full (<< 1.18.0-6ubuntu14.4.1~) | nginx-light (<< 1.18.0-6ubuntu14.4.1~) | nginx-extras (<< 1.18.0-6ubuntu14.4.1~), nginx-core (>= 1.18.0-6ubuntu14.4) | nginx-full (>= 1.18.0-6ubuntu14.4) | nginx-light (>= 1.18.0-6ubuntu14.4) | nginx-extras (>= 1.18.0-6ubuntu14.4)
Breaks: libnginx-mod-http-lua (<< 1.18.0-6ubuntu5)
Filename: pool/main/n/nginx/nginx_1.18.0-6ubuntu14.4_amd64.deb
Size: 3872
MD5sum: c50a1bfb0a399eeda5a918bad2b7826c
 ...
				
			

Para mostrar informações adicionais sobre cada um dos candidatos, incluindo uma lista completa de dependências reversas (uma lista de pacotes que dependem do pacote consultado), use o comando showpkg. Isso incluirá informações sobre o relacionamento deste pacote com outros pacotes:

				
					apt-cache showpkg nome_do_pacote
				
			

Mostrar informações sobre um pacote .deb

Para mostrar detalhes sobre um arquivo .deb, você pode usar a flag --info com o comando dpkg. O argumento deste comando deve ser o caminho para um  arquivo .deb:

				
					dpkg --info nome_do_arquivo.deb
				
			

Isso mostrará alguns metadados sobre o pacote em questão. Isso inclui o nome e a versão do pacote, a arquitetura para a qual foi construído, o tamanho e as dependências necessárias, uma descrição e seus conflitos.

Para listar especificamente as dependências (pacotes dos quais este pacote depende) e as dependências reversas (os pacotes que dependem deste pacote), você pode usar o apt-cache.

Para informações convencionais de dependência, você pode usar o subcomando depends:

				
					apt-cache depends nginx
				
			
				
					nginx
 |Depends: nginx-core
 |Depends: nginx-full
 |Depends: nginx-light
  Depends: nginx-extras
 |Depends: nginx-core
 |Depends: nginx-full
 |Depends: nginx-light
  Depends: nginx-extras
  Breaks: <libnginx-mod-http-lua>
				
			

Isso mostrará informações sobre cada pacote listado como dependência, sugestão, recomendação ou conflito.

Se você precisar descobrir quais pacotes dependem de um determinado pacote, você pode utilizar apt-cache rdepends:

				
					apt-cache rdepends nome_do_pacote
				
			

Mostrar versões de pacotes instalados e disponíveis

Muitas vezes, existem várias versões de um pacote nos repositórios, com um único pacote padrão. Para ver as versões disponíveis de um pacote, você pode usar apt-cache policy:

				
					apt-cache policy nome_do_pacote
				
			

Isso mostrará qual versão está instalada (se houver), o pacote que será instalado por padrão se você não especificar uma versão com o comando de instalação e uma tabela de versões de pacotes, completa com o peso que indica a prioridade de cada versão.

Isto pode ser usado para determinar qual versão será instalada e quais alternativas estão disponíveis. Como isso também lista os repositórios onde cada versão está localizada, pode ser usado para determinar se algum repositório extra está substituindo os pacotes dos repositórios padrão.

Mostrar pacotes instalados com dpkg -l

Para mostrar os pacotes instalados em seu sistema, você tem algumas opções separadas, que variam em formato e detalhamento da saída.

O primeiro método envolve o uso do comando dpkgou do dpkg-query com a flag -l. A saída de ambos os comandos é idêntica. Sem argumentos, fornecem uma lista de todos os pacotes instalados ou parcialmente instalados no sistema. A saída ficará assim:

				
					dpkg -l
				
			
				
					Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                              Version                                 Architecture Description
+++-=================================-=======================================-============-================================================================================
ii  adduser                           3.118ubuntu5                            all          add and remove users and groups
ii  alsa-topology-conf                1.2.5.1-2                               all          ALSA topology configuration files
ii  alsa-ucm-conf                     1.2.6.3-1ubuntu1.9                      all          ALSA Use Case Manager configuration files
ii  apparmor                          3.0.4-2ubuntu2.3                        amd64        user-space parser utility for AppArmor
ii  apport                            2.20.11-0ubuntu82.5                     all          automatically generate crash reports for debugging
ii  apport-symptoms                   0.24                                    all          symptom scripts for apport
ii  apt                               2.4.11                                  amd64        commandline package manager
...
				
			

A saída continua para cada pacote no sistema. Na parte superior da saída, você pode ver o significado dos três primeiros caracteres de cada linha. O primeiro caractere indica o estado desejado do pacote. Pode ser:

  • u: Unknown (desconhecido)
  • i: Installed (instalado)
  • r: Removed (removido)
  • p: Purged (purgado)
  • h: Version held (versão retida)

O segundo caractere indica o status real do pacote, conforme conhecido pelo sistema de empacotamento. Estes podem ser:

  • n: Not installed (não instalado)
  • i: Installed (instalado)
  • c: Configuration files are present, but the application is uninstalled. (arquivos de configuração presentes, mas a aplicação está desinstalada)
  • u: Unpacked. The files are unpacked, but not configured yet. (desempacotado, mas ainda não foi configurado)
  • f: The package is half installed, meaning that there was a failure part way through an installation that halted the operation. (o pacote está parcialmente instalado, indicando que houve uma falha no meio da operação que interrompeu a instalação)
  • w: The package is waiting for a trigger from a separate package (o pacote está aguardando um gatilho de um pacote separado)
  • p: The package has been triggered by another package. (o gatilho do pacote foi acionado por outro pacote)

O terceiro caractere, que será um espaço em branco para a maioria dos pacotes, só tem uma outra opção em potencial:

  • r: This indicates that a re-installation is required. This usually means that the package is broken and in a non-functional state. (Isso indica que uma reinstalação é necessária. Isso geralmente significa que o pacote está quebrado e em estado não funcional.)

O restante das colunas contém o nome do pacote, versão, arquitetura e uma descrição.

Mostrar estados de instalação de pacotes filtrados

Se você adicionar um padrão para pesquisa após a flag -l, o dpkg listará todos os pacotes (instalados ou não) que contêm esse padrão. Por exemplo, você pode pesquisar bibliotecas de processamento YAML assim:

				
					dpkg -l libyaml*
				
			
				
					Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name            Version      Architecture Description
+++-===============-============-============-===================================
ii  libyaml-0-2:amd 0.1.4-2ubunt amd64        Fast YAML 1.1 parser and emitter li
ii  libyaml-dev:amd 0.1.4-2ubunt amd64        Fast YAML 1.1 parser and emitter li
un  libyaml-perl    <none>                    (no description available)
un  libyaml-syck-pe <none>                    (no description available)
ii  libyaml-tiny-pe 1.51-2       all          Perl module for reading and writing
				
			

Isso fornece todos os pacotes que correspondem ao padrão de pesquisa, bem como seus estados atuais e desejados. Como você pode ver na primeira coluna, o terceiro e o quarto resultados não estão instalados.

Uma forma alternativa de exibir os pacotes instalados em seu sistema é com o comando dpkg –get-selections.

Isso fornece uma lista de todos os pacotes instalados ou removidos, mas não eliminados:

				
					dpkg --get-selections
				
			

Para diferenciar esses dois estados, você pode canalizar a saída do dpkg para o comando awk para filtrar por estado. Para ver apenas os pacotes instalados, digite:

				
					dpkg --get-selections | awk '$2 ~ /^install/'
				
			

Para obter uma lista de pacotes removidos que não tiveram seus arquivos de configuração eliminados, você pode digitar:

				
					dpkg --get-selections | awk '$2 !~ /^install/'
				
			

Você pode querer aprender mais sobre o comando awk para manipulação de saídas utilizando o pipe (|) para canalizar.

Pesquisar pacotes instalados

Para pesquisar um pacote específico em sua base de pacotes instalados, você pode adicionar uma string de filtro de pacote após a flag --get-selections. Isso oferece suporte à correspondência com curingas (*). Novamente, isso mostrará todos os pacotes que estão instalados ou que ainda possuem arquivos de configuração no sistema:

				
					dpkg --get-selections nome_parcial*
				
			

Você pode, mais uma vez, filtrar usando as expressões awk da última seção.

Listar arquivos instalados por um pacote

Para descobrir por quais arquivos um pacote é responsável, você pode usar a flag -L com o comando dpkg:

				
					dpkg -L nome_do_pacote
				
			

Isso mostrará o caminho absoluto de cada arquivo controlado pelo pacote. Isso não incluirá nenhum arquivo de configuração gerado por processos dentro do pacote.

Para descobrir qual pacote é responsável por um determinado arquivo em seu sistema de arquivos, você pode passar o caminho absoluto para o dpkg com a flag -S.

Isso imprimirá o pacote que instalou o arquivo em questão:

				
					dpkg -S /caminho/do/arquivo
				
			

Tenha em mente que quaisquer arquivos movidos por scripts pós-instalação não podem ser vinculados ao pacote com esta técnica.

Descubra qual pacote fornece um arquivo sem instalá-lo

Usando dpkg, você pode descobrir qual pacote possui um arquivo usando a flag -S. No entanto, há momentos em que você pode precisar saber qual pacote fornece um arquivo ou comando, mesmo que você não tenha o pacote associado instalado.

Para fazer isso, você precisará instalar um utilitário chamado apt-file. Ele mantém seu próprio banco de dados de informações, que inclui o caminho de instalação de cada arquivo controlado por um pacote no banco de dados.

Instale o pacote apt-file normalmente:

				
					sudo apt update
sudo apt install apt-file
				
			

Agora, atualize o banco de dados da ferramenta e procure um arquivo digitando:

				
					sudo apt-file update
sudo apt-file search /caminho/do/arquivo
				
			

Isso funcionará apenas para locais de arquivos instalados diretamente por um pacote. Qualquer arquivo criado por meio de scripts pós-instalação não pode ser consultado. Na próxima etapa, você aprenderá como importar e exportar listas de pacotes instalados.

Passo 6 – Transferindo listas de pacotes entre sistemas

Muitas vezes, você pode precisar fazer backup da lista de pacotes instalados em um sistema e usá-la para instalar um conjunto idêntico de pacotes em um sistema diferente. Isso também é útil para fins de backup. Esta seção demonstrará como exportar e importar listas de pacotes.

Se precisar replicar o conjunto de pacotes instalados em um sistema para outro, primeiro você precisará exportar sua lista de pacotes.

Você pode exportar a lista de pacotes instalados para um arquivo redirecionando a saída dpkg --get-selections para um arquivo de texto:

				
					dpkg --get-selections > ~/packagelist.txt
				
			

Você também pode querer aprender mais sobre redirecionamento de entrada e saída.

Esta lista pode então ser copiada para a segunda máquina e importada.

Você também pode precisar fazer backup de suas listas de fontes de dados e de sua lista de chaves confiáveis. Você pode fazer backup de suas fontes criando um novo diretório e copiando-as da configuração do sistema em /etc/apt/:

				
					mkdir ~/sources
cp -R /etc/apt/sources.list* ~/sources
				
			

Quaisquer chaves que você adicionou para instalar pacotes de repositórios de terceiros podem ser exportadas usando apt-key exportall:

				
					apt-key exportall > ~/trusted_keys.txt
				
			

Agora você pode transferir o arquivo packagelist.txt, o diretório sources e o arquivo trusted_keys.txt para outro computador para importação.

Lista de pacotes de importação

Se você criou uma lista de pacotes conforme demonstrado anteriormente, você agora pode importar os pacotes em outro computador usando o  comando dpkg também.

Primeiro, você precisa adicionar as chaves confiáveis ​​e implementar as listas de fontes de dados copiadas do primeiro ambiente. Supondo que todos os dados dos quais você fez backup foram copiados para o diretório inicial do novo computador, você pode digitar:

				
					sudo apt-key add ~/trusted_keys.txt
sudo cp -R ~sources/* /etc/apt/
				
			

Em seguida, limpe o estado de todos os pacotes não essenciais do novo computador. Isso garantirá que você esteja aplicando as alterações a uma lousa em branco. Isso deve ser feito com a conta root ou privilégios sudo:

				
					sudo dpkg --clear-selections
				
			

Isso marcará todos os pacotes não essenciais para desinstalação. Você deve atualizar a lista de pacotes locais para que sua instalação tenha registros de todos os softwares que você planeja instalar. O procedimento real de instalação e atualização será feito por uma ferramenta chamada dselect.

Você deve garantir que a ferramenta dselect esteja instalada. Esta ferramenta mantém seu próprio banco de dados, então você também precisa atualizá-lo antes de continuar:

				
					sudo apt update
sudo apt install dselect
sudo dselect update
				
			

A seguir, você pode aplicar a sua lista de pacotes sobre lista atual para configurar quais pacotes devem ser mantidos ou baixados:

				
					sudo dpkg --set-selections < packagelist.txt
				
			

Isso define os estados corretos dos pacotes. Para aplicar as alterações, execute o comando apt dselect-upgrade:

				
					sudo apt dselect-upgrade
				
			

Isso baixará e instalará todos os pacotes necessários. Também removerá quaisquer pacotes marcados para desinstalação. No final, sua lista de pacotes deverá corresponder à do computador anterior, embora os arquivos de configuração ainda precisem ser copiados ou modificados. Você pode querer usar uma ferramenta como etckeeper para migrar arquivos de configuração do diretório /etc.

Na próxima e última etapa, você aprenderá como trabalhar com repositórios de pacotes de terceiros.

Passo 7 – Adicionando Repositórios e PPAs

Embora o conjunto padrão de repositórios fornecido pela maioria das distribuições seja geralmente o mais fácil de manter, há momentos em que fontes adicionais podem ser úteis. Nesta seção, você aprenderá como configurar suas ferramentas de empacotamento para consultar fontes adicionais.

Uma alternativa aos repositórios tradicionais no Ubuntu são os PPAs, ou personal package archives (arquivos de pacotes pessoais) . Outras versões do Linux normalmente usam conceitos diferentes, mas semelhantes, de repositórios de terceiros. Normalmente, os PPAs têm um escopo menor que os repositórios e contêm conjuntos focados de aplicativos mantidos pelo proprietário do PPA.

Adicionar PPAs ao seu sistema permite que você gerencie os pacotes que eles contêm com suas ferramentas usuais de gerenciamento de pacotes. Isso pode ser usado para fornecer pacotes mais atualizados que não estão incluídos nos repositórios da distribuição. Tome cuidado para adicionar apenas PPAs em que você confia, pois você estará permitindo que um mantenedor não padrão construa pacotes para o seu sistema.

Para adicionar um PPA, você pode usar o comando add-apt-repository. O argumento desse comando deve incluir o rótulo ppa:, seguido do nome do proprietário do PPA no Launchpad , uma barra e o nome do PPA:

				
					sudo add-apt-repository ppa:nome_do_proprietario/nome_do_ppa
				
			

Você pode ser solicitado a aceitar a chave do empacotador. Posteriormente, o PPA será adicionado ao seu sistema, permitindo a instalação dos pacotes com os comandos apt normais. Antes de procurar ou instalar pacotes, atualize seu cache local com as informações sobre seu novo PPA:

				
					sudo apt update
				
			

Você também pode editar a configuração do seu repositório diretamente. Você pode editar o arquivo /etc/apt/sources.list ou colocar uma nova lista no diretório /etc/apt/sources.list.d. Se você seguir esse último caminho, o nome do arquivo criado deverá terminar em .list:

				
					sudo nano /etc/apt/sources.list.d/nome_do_repositorio.list
				
			

Dentro do arquivo, você pode adicionar o local do novo repositório usando o seguinte formato:

				
					deb_or_deb-src url_of_repo release_code_name_or_suite component_names
				
			

As diferentes partes da especificação do repositório são:

  • deb ou deb-src : identifica o tipo de repositório. Os repositórios convencionais são marcados com deb, enquanto os repositórios de origem começam com deb-src.
  • url : A URL principal do repositório. Este deve ser o local onde o repositório pode ser encontrado.
  • nome do código de lançamento ou suíte : Geralmente é o nome de código do lançamento da sua distribuição, mas pode ser qualquer nome usado para identificar um conjunto específico de pacotes criados para a sua versão da distribuição.
  • nomes dos componentes : os rótulos para a seleção de pacotes que você deseja disponibilizar. Esta é frequentemente uma distinção fornecida pelo mantenedor do repositório para expressar algo sobre a confiabilidade ou restrições de licenciamento do software que ele contém.

Você pode adicionar essas linhas ao arquivo. A maioria dos repositórios conterá informações sobre o formato exato que deve ser usado. Em algumas outras distribuições Linux, você pode adicionar fontes de repositório adicionais instalando pacotes que contêm apenas um arquivo de configuração para esse repositório – o que é consistente com a forma como os gerenciadores de pacotes são projetados para funcionar.

Conclusão

O gerenciamento de pacotes é talvez o aspecto mais importante da administração de um sistema Linux. Existem muitas outras operações de gerenciamento de pacotes que você pode realizar, mas este tutorial forneceu uma linha de base dos fundamentos do Ubuntu, muitos dos quais podem ser generalizados para outras distribuições com pequenas alterações.

A seguir, você pode querer aprender mais sobre gerenciamento de pacotes em outras plataformas .

Este artigo foi traduzido e adaptado para o Português pelo autor do post. O artigo original pode ser lido aqui.

Compartilhe: