Gerenciando pacotes com o apt-get/dpkg

O sistema de pacotes baseados em Debian torna possível a instalação de praticamente todos os programas disponíveis para Linux sem que o usuário precise preocupar-se com bibliotecas ou com outros programas necessários. Cada pacote de programa, com extensão **.deb**, traz internamente as informações sobre todos os programas e bibliotecas dos quais depende.

As principais ferramentas de administração de pacotes .deb são:

dpkg – Utilitário para instalação de pacotes individuais.
apt-get – Utilitário para buscar um pacote em repositórios remotoso e o instala, assim como as suas dependências.
aptitute – Alternativa ao apt-get.

Instalação, remoção e atualização de pacotes

O grande trunfo de utilizar um sistema de pacotes como esse é a possibilidade de resolver dependências, ou seja, se o pacote a ser instalado necessitar de outros programas ou bibliotecas ausentes no sistema, estas poderão ser automaticamente baixadas e instaladas.

O sistema de empacotamento usa um banco de dados próprio para saber quais pacotes estão instalados, quais não estão e quais estão disponíveis para instalação. O apt-get usa esse banco de dados para saber instalar os pacotes solicitados pelo usuário e para saber quais pacotes são necessários para que o pacote selecionado rode perfeitamente.

Para atualizar essa lista, utilizamos o comando apt-get update. Ele procura pelas listas de pacotes nos repositórios indicados no seu arquivo /etc/apt/sources.list.

Exemplo:

# Official repository
deb http://ftp.br.debian.org/debian jessie main contrib non-free
deb-src http://ftp.br.debian.org/debian jessie main contrib non-free

# Updates repository
#deb http://volatile.debian.org/debian-volatile jessie/volatile main contrib non-free
#deb-src http://volatile.debian.org/debian-volatile jessie/volatile main contrib non-free

# Security update repository
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

# Propose update repository
deb http://ftp.br.debian.org/debian jessie-proposed-updates main contrib non-free
deb-src http://ftp.br.debian.org/debian jessie-proposed-updates main contrib non-free

/etc/apt/sources.list do Debian 8.6 Jessie.

A primeira palavra em cada linha, deb ou deb-src, indica o tipo de arquivo: se ele contém pacotes binários (deb), isto é, os pacotes pré-compilados que nós normalmente usamos, ou os pacotes-fonte (deb-src), que são os fontes originais do programa mais o arquivo de controle do Debian (.dsc) e o deff.gz contendo as alterações necessarias para o empacotamento do programa.

A distribuição pode ser ou o nome-código da versão / apelido (lenny,squeeze, wheezy, sid) ou a classe da versão (oldstable, stable, testing, unstable) respectivamente.

Se preferir adicione os componentes contrib e non-free, após main. Os termos main, contrib, e non-free determinam a categoria dos pacotes a serem baixados. Cada distribuição possui repositórios próprios, oficiais e não-oficiais.

As indicações main, contrib e non-free significam o tipo da licença dos pacotes. Os pacotes da seção main fazem parte da distribuição oficial Debian, os da seção non-free são pacotes que possuem distribuição restrita e os da seção contrib contém pacotes que podem ser livremente distribuídos mas dependem de pacotes da seção non-free.

Após configurar o sources.list é necessário executar o comando apt-get update para que as informações dos pacotes e dependências disponibilizados por cada repositório sejam baixados e atualizados localmente.

Exemplos:

apt-cache – O comando apt-cache apresenta parte das informações armazenadas no banco de dados interno do APT.

root@debian:/etc/apt# apt-cache search vim | grep ^vim 
vim-common - Vi IMproved - Arquivos comuns
vim-runtime - Vi IMproved - arquivos de execução
vim - Vi IMproved - editor vi melhorado
...
...
...

search – Busca pacotes no repositório.

root@debian:/etc/apt# apt-cache pkgnames 
dvd+rw-tools
bind9-host
grilo-plugins-0.2
libmaa3
desktop-base
...
...
...

pkgnames – Lista todos os pacotes instalados no sistema.

root@debian:/etc/apt# apt-cache pkgnames vim 
vim-doc
vim-nox
vim-common
...
...
...

pkgnames – Verifica se o pacote está no repósitorio.

root@debian:/etc/apt# apt-cache show vim 
Package: vim
Version: 2:7.4.488-7+deb8u1
Installed-Size: 2233
Maintainer: Debian Vim Maintainers 
Architecture: amd64
Provides: editor
Depends: vim-common (= 2:7.4.488-7+deb8u1), vim-runtime (= 2:7.4.488-7+deb8u1), libacl1 (>= 2.2.51-8), libc6 (>= 2.15), libgpm2 (>= 1.20.4), libselinux1 (>= 1.32), libtinfo5
Suggests: ctags, vim-doc, vim-scripts
Description-pt_BR: Vi IMproved - editor vi melhorado
 Vim é uma versão quase compatível com o editor Vi do UNIX.
...
...
...

show – Mostra informações sobre o pacote.

root@debian:/etc/apt# apt-cache dump | head -n10 
Using Versioning System: Standard .deb
Package: dvd+rw-tools
 Version: 7.1-11
     File: /var/lib/apt/lists/Debian%20GNU_Linux%208.6.0%20%5fJessie%5f%20-%20Official%20amd64%20DVD%20Binary-1%2020160917-14:25_dists_jessie_main_binary-amd64_Packages
  Depends: libc6 2.2.5
  Depends: libgcc1 1:4.1.1
  Depends: libstdc++6 4.1.1
  Depends: genisoimage (null)
  Depends: growisofs 7.1-9
  Depends: cdrskin (null)
...
...
...

dump – Mostra uma listagem curta de todos os pacotes na cache.

root@debian:/etc/apt# apt-cache depends vim 
vim
  Depende: vim-common
  Depende: vim-runtime
  Depende: libacl1
  Depende: libc6
  Depende: libgpm2
  Depende: libselinux1
  Depende: libtinfo5
  Sugere: 
  Sugere: vim-doc
  Sugere: 

depends – Mostra qual pacote depende de qual pacote.

root@debian:/etc/apt# apt-get install vim 
Lendo listas de pacotes... Pronto
Construindo árvore de dependências       
Lendo informação de estado... Pronto
Os pacotes extra a seguir serão instalados:
  vim-runtime
Pacotes sugeridos:
  ctags vim-doc vim-scripts
Os NOVOS pacotes a seguir serão instalados:
  vim vim-runtime
0 pacotes atualizados, 2 pacotes novos instalados, 0 a serem removidos e 3 não atualizados.
É preciso baixar 5.988 kB de arquivos.
Depois desta operação, 28,5 MB adicionais de espaço em disco serão usados.
Você quer continuar? [S/n] 

install – Instala um pacote, caso haja pendências, o administrador será consultado em relação a instalação desses programas. Utilizando a opção -f ele instala o pacote tentando resolver as dependências.

root@debian:/etc/apt# apt-get remove vim 
Lendo listas de pacotes... Pronto
Construindo árvore de dependências       
Lendo informação de estado... Pronto
Os pacotes a seguir serão REMOVIDOS:
  vim
0 pacotes atualizados, 0 pacotes novos instalados, 1 a serem removidos e 3 não atualizados.
Depois desta operação, 2.287 kB de espaço em disco serão liberados.
Você quer continuar? [S/n] 

remove – Remove um pacote (desinstala um programa). Para remover o pacote e também seus respectivos arquivos de conf relacionados é utilizado o –purge. Ex:

root@debian:/etc/apt# apt-get remove --purge vim
root@debian:/etc/apt# apt-get upgrade vim 
Lendo listas de pacotes... Pronto
Construindo árvore de dependências       
Lendo informação de estado... Pronto
Calculando atualização... vim já é a versão mais nova.
Pronto
Os pacotes a seguir serão atualizados:
  liblcms2-2 libssl1.0.0 openssl
3 pacotes atualizados, 0 pacotes novos instalados, 0 a serem removidos e 0 não atualizados.
É preciso baixar 1.853 kB de arquivos.
Depois desta operação, 31,7 kB de espaço em disco serão liberados.
Você quer continuar? [S/n]

upgrade – Atualiza um pacote. Para uma atualização completa de todos os pacotes que possuem novas versões no repositório basta utilizar o apt-get upgrade.

root@debian:/etc/apt# apt-get download samba 
Obter:1 http://security.debian.org/ jessie/updates/main samba amd64 2:4.2.14+dfsg-0+deb8u2 [1.029 kB]
Baixados 1.029 kB em 5s (194 kB/s)

download – Baixa o pacote .deb. Para baixar o fonte do pacote utilizamos o –download-only source

root@debian:/etc/apt# apt-get --download-only source vim 
Lendo listas de pacotes... Pronto
Construindo árvore de dependências       
Lendo informação de estado... Pronto
AVISO: o empacotamento de 'vim' é mantido no sistema de controle de versões 'Hg' em:
http://anonscm.debian.org/hg/pkg-vim/vim
Preciso obter 12,2 MB de arquivos fonte.
Obter:1 http://security.debian.org/ jessie/updates/main vim 2:7.4.488-7+deb8u1 (dsc) [2.995 B]
Obter:2 http://security.debian.org/ jessie/updates/main vim 2:7.4.488-7+deb8u1 (tar) [12,0 MB]
Obter:3 http://security.debian.org/ jessie/updates/main vim 2:7.4.488-7+deb8u1 (diff) [152 kB]                                  Baixados 12,2 MB em 7s (1.564 kB/s)                         
Baixar completo e no modo somente baixar ("download only")

Esse comando irá efetuar o download do source do pacote em três formatos:

root@debian:/etc/apt# ls -lthr | grep vim 
-rw-r--r-- 1 root root   12M Nov 17 04:50 vim_7.4.488.orig.tar.gz
-rw-r--r-- 1 root root  3,0K Nov 17 04:50 vim_7.4.488-7+deb8u1.dsc
-rw-r--r-- 1 root root  149K Nov 17 04:50 vim_7.4.488-7+deb8u1.debian.tar.xz

Os pacotes baixados via apt-get ficam armazenados em cache no /var/cache/apt/archives, e é de boa prática removê-los de tempos em tempos para evitar o aumento desnecessário do filesystem.

root@debian:/var/cache/apt/archives# du -h * 
0	lock
4,0K	partial
932K	vim_2%3a7.4.488-7+deb8u1_amd64.deb
4,9M	vim-runtime_2%3a7.4.488-7+deb8u1_all.deb

E executamos o comando:

root@debian:/var/cache/apt/archives# apt-get clean

E notamos a limpeza dos mesmos:

root@debian:/var/cache/apt/archives# du -h * 
0	lock
4,0K	partial
DPKG

Além de proporcionar grande facilidade para instalar, remover, e desinstalar programas, o sistema de pacotes do Debian (dpkg) permite fazer diversos tipos de inspeção nos pacotes.

Exemplos:

root@debian:~# dpkg -l vim 
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  vim                             2:7.4.488-7+deb8u1   amd64                Vi IMproved - enhanced vi editor

dpkg -l – Mostra o estado do pacote.

root@debian:/etc# dpkg -S logrotate.conf 
logrotate: /usr/share/man/man5/logrotate.conf.5.gz
logrotate: /etc/logrotate.conf

dpkg – S – Mostra qual pacote instalou o arquivo especificado.

root@debian:/etc# dpkg -L logrotate 
/.
/etc
/etc/cron.daily
/etc/cron.daily/logrotate
/etc/logrotate.conf
/etc/logrotate.d
...
...
...

dpkg -L – Mostra os arquivos instalados pelo pacote.

root@debian:/home/tadeu# dpkg --contents samba_amd64.deb 
drwxr-xr-x root/root         0 2016-12-17 19:37 ./
drwxr-xr-x root/root         0 2016-12-17 19:36 ./usr/
drwxr-xr-x root/root         0 2016-12-17 19:37 ./usr/sbin/
-rwxr-xr-x root/root     19545 2016-12-17 19:36 ./usr/sbin/samba_upgradedns
-rwxr-xr-x root/root     68824 2016-12-17 19:37 ./usr/sbin/samba
...
...
...

dpkg –contents – Lista o conteúdo de um pacote.

Referências:
https://www.debian.org/distrib/packages
https://debian-handbook.info/browse/pt-BR/stable/sect.apt-cache.html
http://www.guiafoca.org/cgs/guia/intermediario/ch-dpkg.html