Nos tempos mais antigos, o modo de ter um programa Linux era por meio de arquivos compactados/comprimidos em formato, geralmente, tar.gz. Esse arquivo possuía o código fonte e o usuário teria que compilar.
Compilar é um tanto trabalhoso e demorado, então, a distribuição de softwares pré-compilados veio à tona para facilitar o processo.
Nascem primeiros gerenciadores de pacotes. Um desses gerenciadores de pacotes é o dpkg do Debian e, consequentemente, derivados que instalam pacotes pré-compilados terminados em .deb
Um outro gerenciador de pacotes do Debian, Ubuntu e derivados é o apt (Advanced Package Tool); ele é muito mais avançado que o dpkg.
Veja uma lista de termos que usaremos no decorrer desse artigo:
Arquivo/Comando | Descrição | Exemplo de Uso |
---|---|---|
/etc/apt/sources.list | Arquivo de configuração que lista os repositórios de pacotes que o APT deve usar para buscar e instalar softwares. | Editar o arquivo para adicionar um novo repositório:sudo nano /etc/apt/sources.list |
dpkg | Gerenciador de pacotes de baixo nível no Debian e derivados. Permite instalar, remover e gerenciar pacotes .deb. | Instalar um pacote local:sudo dpkg -i pacote.deb |
dpkg-reconfigure | Reconfigura pacotes instalados, permitindo alterar as configurações iniciais dos pacotes. | Reconfigurar o timezone:sudo dpkg-reconfigure tzdata |
apt-get | Ferramenta de linha de comando para gerenciar pacotes, que permite instalar, atualizar e remover pacotes. | Atualizar a lista de pacotes:sudo apt-get update Instalar um pacote: sudo apt-get install nome_do_pacote |
apt-cache | Ferramenta de linha de comando usada para buscar e exibir informações sobre pacotes disponíveis no repositório. | Buscar por um pacote:apt-cache search nome_do_pacote Exibir informações de um pacote: apt-cache show nome_do_pacote |
Tabela com definição e exemplos de comandos que iremos usar neste artigo:
Comando | Descrição | Exemplo de Uso |
---|---|---|
dpkg -i | Instala um único pacote ou uma lista de pacotes separados por espaço. | dpkg -i pacote.deb |
dpkg -r | Remove um pacote ou uma lista de pacotes separados por espaço. | dpkg -r pacote1 pacote2 |
dpkg -I | Inspeciona um pacote, fornecendo detalhes sobre o software instalado e todas as dependências necessárias. | dpkg -I pacote.deb |
dpkg –get-selections | Lista todos os pacotes que o dpkg instalou no sistema. | dpkg --get-selections |
dpkg -L | Imprime uma lista de todos os arquivos instalados por um pacote específico. | dpkg -L pacote |
dpkg-query | Com um nome de arquivo especificado, este comando imprimirá o pacote que instalou o arquivo. | dpkg-query -S /usr/bin/comando |
dpkg-reconfigure | Reexecuta um script pós-instalação de pacotes para que um administrador possa fazer ajustes de configuração. | dpkg-reconfigure pacote |
apt-get update | Atualiza o índice do pacote local de acordo com o que está disponível nos repositórios configurados. | apt-get update |
apt-get install | Baixa um pacote de um repositório remoto e o instala junto com suas dependências. | apt-get install pacote |
apt-get remove | Desinstala o(s) pacote(s) especificado(s) do sistema. | apt-get remove pacote |
apt-cache show | Exibe os detalhes de um pacote específico. | apt-cache show pacote |
apt-cache search | Procura um pacote específico no banco de dados em cache local do APT. | apt-cache search termo_de_busca |
apt-file update | Atualiza o cache do pacote para que o apt-file possa consultar seu conteúdo. | apt-file update |
apt-file search | Procura em qual pacote um arquivo está incluído e retorna uma lista de todos os pacotes que contêm o padrão. | apt-file search /usr/bin/comando |
apt-file list | Lista o conteúdo de um pacote, semelhante ao comando dpkg -L . | apt-file list pacote |
A ferramenta de pacotes do Debian (dpkg)
dpkg
é o gerenciador de pacotes de baixo nível utilizado em sistemas baseados no Debian, como o Ubuntu. Ele permite a instalação, remoção, consulta e gestão de pacotes de software no formato .deb
.
Ao contrário de ferramentas como apt-get
ou apt, que gerenciam dependências automaticamente, dpkg
trabalha diretamente com pacotes individuais. Mas, o que são dependências? Dependências são outros pacotes que um software precisa para funcionar corretamente.
EXEMPLOS DE USO
Seguem exemplos de uso da ferramenta dpkg
- Instalar Pacotes:
sudo dpkg -i pacote.deb
- Remover Pacotes:
sudo dpkg -r nome_do_pacote
- Listar Pacotes Instalados:
dpkg -l
- Consultar Detalhes de um Pacote:
dpkg -s nome_do_pacote
Se o pacote já está instalado, dpkg irá atualizá-lo, se a versão a ser instalada for mais recente.
Como o dpkg não instala dependências, se o pacote depender de outro, ele não será instalado e o dpkg irá listar quais são esses pacotes dependentes.
Exemplo de dependências que precisam ser resolvidas,
# dpkg -i openshot-qt_2.4.3+dfsg1-1_all.deb
Unpacking openshot-qt (2.4.3+dfsg1-1) over (2.4.3+dfsg1-1) ...
dpkg: dependency problems prevent configuration of openshot-qt:
openshot-qt depends on fonts-cantarell; however:
Package fonts-cantarell is not installed.
Acima openshot-qt depende de fonts-cantarell;
REMOVENDO PACOTES
Com dpkg, diferente de apt, a remoção também executa uma verificação de dependências. Um pacote não pode ser removido, a menos que todos os outros pacotes que dependem dele também o sejam.
# dpkg -r p7zip
dpkg: dependency problems prevent removal of p7zip:
winetricks depends on p7zip; however:
Package p7zip is to be removed.
p7zip-full depends on p7zip (= 16.02+dfsg-6).
dpkg: error processing package p7zip (--remove):
dependency problems - not removing
Errors were encountered while processing:
p7zip
Assim como para dpkg -i, é possível passar vários nomes de pacotes para o dpkg -r para serem removidos de uma só vez.
Quando um pacote é removido, os arquivos de configuração correspondentes são deixados no sistema. S. Você poderá usar -P para apagar esses arquivos de configuração.
# dpkg -P p7zip
OBTENDO INFORMAÇÕES DO PACOTE
Usamos o parâmetro -I para obtermos informações sobre um pacote.
Para esse exemplo, baixe um .deb de algum site ou consulte a pasta /var/cache/apt/archives/, nessa pasta pode haver dezenas de pacotes .deb em cache.
elder@debian12:~$ dpkg -I /var/cache/apt/archives/pkgconf_1.8.1-1_amd64.deb novo pacote Debian, versão 2.0. 25892 bytes de tamanho: arquivo de controle=1304 bytes. 59 bytes, 1 linhas conffiles 627 bytes, 19 linhas control 707 bytes, 10 linhas md5sums 807 bytes, 28 linhas * preinst #!/bin/sh Package: pkgconf Version: 1.8.1-1 Architecture: amd64 Maintainer: Andrej Shadura <andrewsh@debian.org> Installed-Size: 65 Depends: pkgconf-bin Breaks: pkg-config (<< 1.8) Replaces: pkg-config (<< 1.8) Provides: pkg-config (= 1.8.1-1) Section: devel Priority: optional Multi-Arch: same Homepage: http://pkgconf.org/ Description: manage compile and link flags for libraries pkgconf is an implementation of the pkg-config system, which helps to configure compiler and linker flags for development frameworks. . pkgconf is a replacement for pkg-config, providing additional functionality while also maintaining compatibility.
LISTANDO PACOTES INSTALADOS
Se executarmos apenas dpkg -l será exibida uma imensa lista. Podemos colocar um nome de pacote na frente do comando para listar apenas ele
elder@debian12:~$ dpkg -l automake 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) ||/ Nome Versão Arquitectura Descrição +++-==============-============-============-===================================================== ii automake 1:1.16.5-1.3 all Tool for generating GNU Standards-compliant Makefiles
ARQUIVOS DE UM PACOTE
Às vezes, podemos precisar descobrir qual pacote possui um arquivo específico no sistema. Para descobrir usamos o utilitário dpkg-query, seguido pelo parâmetro-S
e o caminho para o arquivo desejado.
O parâmetro -S encontrar pacote(s) dono(s) do(s) ficheiro(s).
elder@debian12:~$ dpkg-query -S /usr/bin/python python-is-python3: /usr/bin/python
RECONFIGURANDO PACOTES INSTALADOS
Durante a instalação de um pacote, há uma etapa chamada de pós-instalação onde um script é executado para definir tudo o que é necessário para a execução do software, como permissões, local dos arquivos de configuração etc. ou ainda realizar algumas perguntas para o usuário
Se quiser alterar as respostas que deu às questões da configuração inicial ou mudar as configurações de um pacote para o estado “novo” poderá executar dpkg-reconfigure.
# dpkg-reconfigure tzdata
apt – Advanced Package Tool
apt
é uma ferramenta de linha de comando usada em distribuições baseadas no Debian, como o Ubuntu, para gerenciar pacotes de software.
apt combina funcionalidades de ferramentas mais antigas como apt-get
e apt-cache
, tornando a gestão de pacotes mais simples e unificada.
Com apt
, você pode:
- Atualizar a lista de pacotes:
sudo apt update
- Instalar pacotes:
sudo apt install nome_do_pacote
- Remover pacotes:
sudo apt remove nome_do_pacote
- Atualizar pacotes instalados:
sudo apt upgrade
apt trabalha com repositório que é um servidor local ou, maioria das vezes, remoto onde ficam armazenados pacotes/programas de software disponíveis para download e instalação.
As distribuições Linux, como Debian e Ubuntu, mantêm seus próprios repositórios.
Existem muitos utilitários que interagem com o APT, sendo os principais:
- apt-get: Ferramenta de linha de comando para instalar, atualizar e remover pacotes no Linux. Também gerencia automaticamente dependências.
- apt-cache: usado para executar operações, como pesquisas, no índice do pacote. para buscar e exibir informações sobre pacotes disponíveis nos repositórios, como descrições, dependências e versões.
- apt-file: Comando que permite procurar por arquivos específicos dentro dos pacotes, mesmo que esses pacotes não estejam instalados no sistema.
A diferença principal entre apt
e apt-get
é que apt
é uma interface mais moderna e simplificada, combinando as funcionalidades de apt-get
e outras ferramentas (apt-cache
, apt-config
), tornando o gerenciamento de pacotes mais intuitivo. Enquanto apt-get
é mais antigo e oferece opções mais avançadas, apt
é projetado para ser mais amigável e conveniente para o uso diário.
Por mais que seja possível usar apt ou apt-get para baixar pacotes de um servidor montado localmente, é recomendado baixar os pacotes de servidor remoto.
Atualizando o índice do pacote
apt-get update
é usado para atualizar a lista de pacotes disponíveis nos repositórios configurados. Ele baixa as informações mais recentes sobre os pacotes, como versões e dependências, mas não instala ou atualiza nenhum software. É um passo essencial antes de instalar ou atualizar pacotes para garantir que você tenha acesso às versões mais recentes.
Ao executar apt update (ou apt-get update), antes de instalar ou atualizar o software com o APT, teremos o índice atualizado, assim, o sistema recupera informações sobre pacotes novos e atualizados.
# apt update
Agora podemos instalar um programa
# apt install xournal
ou removê-lo
# apt remove xournal
quando um pacote é removido, os arquivos de configuração correspondentes são deixados no sistema. Para remover o pacote e todos os arquivos de configuração, use o parâmetro purge em vez de remove, ou o parâmetro remove com a opção –purge:
# apt purge p7zip
Corrigindo dependências quebradas
dependências quebradas significa que um ou mais dos pacotes instalados dependem de outros pacotes que não foram instalados ou não estão mais presentes. Isso pode ocorrer devido a um erro do APT ou a um pacote instalado manualmente.
Para resolver use apt install -f.
apt install -f.
Esse comando procurar corrigir pacotes quebrados instalando as dependências ausentes, garantindo que todos os pacotes voltem a ficar consistentes.
Atualizando pacotes
Podemos usar apt para atualizar pacotes para as versões mais recentes disponíveis nos repositórios. para isso, usamos apt upgrade.
Atualize o índice do pacote
# apt-get update
Agora execute o upgrade
# apt-get upgrade
Cada comando acima, você será solicitado a responder se deseja instalar “dependências” automaticamente, basta digita Y e teclar Enter. Como dica, podemos usar -y ao final de cada comando. Isso fará com que as perguntas sejam respondidas automaticamente com “sim”.
# apt-get update -y
# apt-get upgrade -y
Agora, o pacote estará atualizado para a versão mais recente disponível no repositório.
cache local
A palavra Cache significa um armazenamento temporário de dados que permite acesso rápido a informações frequentemente usadas.
Quando usamos apt ele faz download do pacote .deb em background. Esses pacotes ficam armazenados temporariamente em:
- /var/cache/apt/archives APT armazena os pacotes
.deb
baixados antes de serem instalados no sistema. Esses arquivos são mantidos em cache para que possam ser reutilizados sem precisar baixá-los novamente. - /var/cache/apt/archives/partial/ é usado para armazenar pacotes que estão sendo baixados, mas que ainda não foram completamente baixados. Se o download for interrompido, o arquivo incompleto ficará nesse diretório até ser concluído ou removido.
Podemos usar apt-get clean ou apt clean para obtermos espaço em disco. Esse comando remove o conteúdo das duas pastas de cache acima.
apt-get clean
Buscando pacotes com “apt cache”
apt-cache
é usada para buscar e exibir informações sobre pacotes de software disponíveis nos repositórios do sistema. Ela permite pesquisar pacotes, verificar dependências, listar pacotes instalados e exibir detalhes como versões e descrições.
apt-cache pode ser usado para executar operações no índice dos pacotes, como buscar um pacote específico ou listar quais pacotes contêm um arquivo determinado.
Use apt-cache search nome_pacote para procurar no repositório por pacotes por nome ou descrição que contenha “nome_pacote“
elder@debian12:~$ sudo apt-cache search p7zip liblzma5 - biblioteca de compressão para formato XZ p7zip - compactador de arquivos 7zr com alta taxa de compressão p7zip-full - Compactadores de arquivos 7z e 7za com alta taxa de compressão forensics-extra - Forensics Environment - extra console components (metapackage) python3-ppmd - PPMd compression/decompression library liblzma-dev - XZ-format compression library - development files
No exemplo acima liblzma5 parece não ter nada a ver com p7zip que foi pesquisado. Mas use apt-cache show liblzma5 e verá que o termo aparece na descrição.
elder@debian12:~$ sudo apt-cache show liblzma5 Package: liblzma5 Source: xz-utils Version: 5.4.1-0.2 Installed-Size: 333 Maintainer: Jonathan Nieder <jrnieder@gmail.com> Architecture: amd64 Depends: libc6 (>= 2.34) Breaks: liblzma2 (<< 5.1.1alpha+20110809-3~) Description-pt_BR: biblioteca de compressão para formato XZ XZ é o sucessor do algoritmo de compressão de arquivos Lempel-Ziv/"Cadeia de Markov", que consome muita memória mas que oferece recursos poderosos de compressão (frequentemente melhor que o bzip2) e descompressão rápida e fácil. . O formato nativo da liblzma é o XZ; ele também dá suporte a streams não processados (sem cabeçalho) e ao antigo formato LZMA usado pela lzma. (Para o formato relacionado ao 7-Zip, use o pacote p7zip).
Podemos usar expressões regulares. Uma expressão regular, ou regex, é como uma fórmula que você cria para encontrar padrões específicos em textos. É usada para pesquisar textos de maneira mais inteligente, procurando por combinações de caracteres, palavras, ou números.
Veja alguns exemplos,
#1 Procurar pacotes que começam com “python3”. Aqui, o ^
indica que estamos procurando por pacotes que começam com “python3”.
apt-cache search '^python3'
#2 Procurar pacotes que terminam com “-dev”. O $
indica que queremos pacotes que terminam com “-dev”.
apt-cache search '-dev$'
#3 Procurar pacotes que contêm a palavra “lib” em qualquer lugar no nome. Neste caso, não usamos ^
ou $
, então a busca é feita por qualquer pacote que tenha “lib” em qualquer parte do nome.
apt-cache search 'lib'
A lista de fontes em /etc/apt/sources.list
O arquivo /etc/apt/sources.list
contém uma lista de repositórios de software que o sistema APT usa para buscar, baixar e instalar pacotes no Linux. O conteúdo de /etc/apt/sources.list
é URLs dos servidores onde os pacotes estão disponíveis e as distribuições ou seções desses pacotes. Modificar esse arquivo permite adicionar, remover ou alterar as fontes de software que o sistema pode acessar. Sim, esse arquivo pode ser editado diretamente com um editor de texto, como vi, pico ou nano, ou com editor com interface gráfica como aptitude ou synaptic.
Um exemplo comum de linha dentro de /etc/apt/sources.list
é:
deb http://us.archive.ubuntu.com/ubuntu/ disco main restricted universe multiverse
Onde,
- Tipo de arquivo = deb. Um repositório pode conter pacotes com software pronto para execução (pacotes binários, do tipo deb) ou com o código fonte desse software (pacotes de origem, do tipo deb-src).
- URL = http://us.archive.ubuntu.com/ubuntu/ aqui temos a A URL do repositório.
- Distribuição = disco. O nome (ou codinome) da distribuição para a qual os pacotes são fornecidos. No exemplo acima, disco é o codinome do Ubuntu 19.04, Disco Dingo.
- Componentes Cada componente representa um conjunto de pacotes. Esses componentes podem ser diferentes nas diversas distribuições Linux. Por exemplo, no Ubuntu e derivados, eles são:
Componentes do Ubuntu e Derivados:
- main:
- Descrição: Contém o software livre suportado oficialmente pela Canonical e pela comunidade Ubuntu. Inclui pacotes essenciais e de alta qualidade.
- Exemplo: O kernel do Linux, drivers de hardware livres, e outros pacotes principais.
- restricted:
- Descrição: Inclui drivers e outros pacotes que, embora sejam necessários para o funcionamento de alguns hardwares, não são totalmente livres (algumas partes podem ser proprietárias).
- Exemplo: Drivers proprietários de placas de vídeo Nvidia.
- universe:
- Descrição: Repositório mantido pela comunidade que inclui software livre não oficialmente suportado pela Canonical. É uma grande fonte de pacotes adicionais.
- Exemplo: Aplicativos como GIMP e VLC, que são populares mas não são suportados diretamente pela Canonical.
- multiverse:
- Descrição: Contém software que não é livre, ou seja, que possui restrições de uso, distribuição, ou modificações. Inclui também software que pode ter problemas legais em algumas jurisdições. contém software não suportado, de código fechado ou protegido por patente.
- Exemplo: Codecs de mídia com patentes e softwares como o Adobe Flash Player.
Componentes do Debian:
- main:
- Descrição: Similar ao Ubuntu, contém software livre que é oficialmente suportado pelo projeto Debian.
- Exemplo: Programas que seguem as diretrizes de software livre do Debian.
- contrib:
- Descrição: Contém software livre que depende de pacotes não livres ou de software não incluído na seção
main
. O próprio software é livre, mas pode precisar de algo que não é. - Exemplo: Pacotes que dependem de drivers proprietários ou que precisam de arquivos que estão em
non-free
.
- Descrição: Contém software livre que depende de pacotes não livres ou de software não incluído na seção
- non-free:
- Descrição: Inclui software que não é livre, ou seja, que não segue as diretrizes de software livre do Debian. Pode ter restrições em termos de uso, modificação, ou distribuição.
- Exemplo: Drivers de hardware proprietários, software de licenças restritivas, e firmware proprietário.
Componentes Adicionais:
- security:
- Descrição: Repositório específico para atualizações de segurança. Fornece patches de segurança para pacotes já instalados, ajudando a proteger o sistema contra vulnerabilidades conhecidas.
- Exemplo: Correções rápidas para vulnerabilidades críticas no kernel ou em aplicativos populares.
- backports:
- Descrição: versões mais recentes dos pacotes que estão em main. Contém versões mais recentes de software que foram adaptadas para funcionarem em versões estáveis mais antigas do sistema, oferecendo novos recursos sem a necessidade de atualizar toda a distribuição ou modificar o repositório main principal.
- Exemplo: Novas versões do LibreOffice ou do Firefox que são disponibilizadas para uma versão anterior do Debian ou Ubuntu.
Veja outros exemplos no source.list do Debian 12 bookworm. As linhas que começam com o caractere # são consideradas comentários ignoradas.
deb http://deb.debian.org/debian/ bookworm main non-free-firmware deb-src http://deb.debian.org/debian/ bookworm main non-free-firmware deb http://security.debian.org/debian-security bookworm-security main non-free-firmware deb-src http://security.debian.org/debian-security bookworm-security main non-free-firmware # bookworm-updates, to get updates before a point release is made; # see https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_updates_and_backports deb http://deb.debian.org/debian/ bookworm-updates main non-free-firmware deb-src http://deb.debian.org/debian/ bookworm-updates main non-free-firmware
#1 Essas linhas são, geralmente, fornecida pelo mantenedor do repositório. Para acrescentar uma nova linha fornecida por um mantenedor basta colocá-la ao final do /etc/apt/source.list. Essas linhas são cadastradas quando desejamos instalar um novo programa não disponíveis nas linhas existentes.
#2 Após isso, execute apt update
# apt update
#3 daí basta apenas instalar o programa desejado.
/etc/apt/sources.list.d
Dentro do diretório /etc/apt/sources.list.d, podemos adicionar arquivos com repositórios adicionais a serem usados pelo APT, sem a necessidade de modificar o arquivo principal /etc/apt/sources.list. Trata-se de arquivos de texto simples, com a mesma sintaxe descrita acima e a extensão de arquivo .list.
Listando o conteúdo dos pacotes e buscando arquivos
apt-file
é uma ferramenta de linha de comando em sistemas baseados no Debian, como Ubuntu, que permite buscar arquivos específicos dentro de pacotes, mesmo que esses pacotes não estejam instalados no sistema. Ele é útil para encontrar qual pacote contém um arquivo necessário ou para verificar quais arquivos estão incluídos em um pacote específico.
#1 pode ser necessário instalar
# apt install apt-file
#2 Após a instalação, será preciso atualizar o cache do pacote usado para apt-file. Isso geralmente leva apenas alguns segundos.
# apt-file update
#3 Para listar o conteúdo de um pacote, use o parâmetro list seguido pelo nome do pacote:
# apt-file list unrar
Você pode procurar um arquivo em todos os pacotes usando o parâmetro search, seguido pelo nome do arquivo.
# apt-file search libSDL2.so
libsdl2-dev: /usr/lib/x86_64-linux-gnu/libSDL2.so
A diferença entre apt-file search e dpkg-query é que apt-file search também busca por pacotes não instalados, ao passo que dpkg-query mostra somente os arquivos pertencentes a um pacote instalado.