quarta-feira, 18 de dezembro de 2013

Manipulação de pacotes .deb pelo dpkg e apt-get


O dpkg, é utilizado para instalar pacotes .deb baixados manualmente de sites que não sejam o repositório da sua distro ou de pacotes baixado de repositório de diferentes distros diretamente pelo navegador e de sites particulares.
Quando você usa o apt-get para instalar ou remover pacotes quem faz na verdade o trabalho pesado é o dpkg, já que ele é requisitado pelo apt-get em cada operação. Ao utilizar o dpkg manualmente você deixa de contar com todas as funções de cálculo de dependências e resolução de problemas utilizadas pelo apt-get.


Comandos do apt-get

Atualizando a sua base de dados

# apt-get update

Este comando baixará dos repositórios configurados a lista de pacotes e seus cabeçalhos e descrições mais recentes e depois de atualizada sua base de dados, você poderá pesquisar por pacotes e instalar os mesmos.
Este comando também deve ser executado quando você adicionar um novo repositório a sua base de dados.


Pesquisando por um pacote

# apt-cache search abiword

libenchant-voikko - Voikko spell-checker libenchant plugin
abiword-dbg - debugging symbols for abiword word processor
libabiword-2.9 - efficient, featureful word processor with collaboration -- shared library
libabiword-2.9-dev - efficient, featureful word processor with collaboration -- development files
libgtkmathview-bin - rendering engine for MathML documents
libgtkmathview-dev - rendering engine for MathML documents
libgtkmathview0c2a - rendering engine for MathML documents
pubtal - Template driven web site builder for small sites
python-abiword - Python AbiWidget and TableWidget wrappers
tea - text editor with syntax highlighting & UTF support
abiword - processador de texto colaborativo cheio de recursos e eficiente
abiword-common - eficiente, poderoso processador de texto com colaboração -- arquivos comuns
abiword-plugin-grammar - plug-in para verificação gramátical do AbiWord
abiword-plugin-mathview - extenção editor de equação para AbiWord

Nota:
Na pesquisa por nome de um pacote não é feita distinção de maiúscula ou minúscula no nome do mesmo, mas para instalação do pacote é feita a referida distinção, devendo ser na forma exata da listagem exibida pelo apt-cache.

Exibindo a descrições e dependências do pacote

Com o resultado do comando apt-cache search, você usa a opção show e especifica o nome do pacote desejado para ver uma descrição mais completa e dependências deste pacote.

# apt-cache show abiword

Package: abiword
Priority: optional
Section: universe/gnome
Installed-Size: 4649
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Dmitry Smirnov <onlyjob@member.fsf.org>
Architecture: i386
Version: 2.9.2+svn20120603-8
Depends: libabiword-2.9 (>= 2.9.2+svn20120603), libc6 (>= 2.7), libdbus-1-3 (>= 1.0.2), libdbus-glib-1-2 (>= 
----corte----
Este pacote inclui várias das extensões de importar/exportar disponíveis
permitindo que o AbiWord interaja com ODT, WordPerfect e outros formatos.
Ele também inclui extensões de ferramentas, oferecendo colaboração em
tempo real com usuário AbiWord no Linux e Windows (usando TCP ou
Jabber/XMPP), tradução web e suporte a dicionário, e mais.
---corte---


Exibindo as dependências do pacote

Este outro comando exibi somente a versão e as dependências do pacote

# apt-cache showpkg abiword

Package: abiword
Versions:
2.9.2+svn20120603-8 (
---corte---
Reverse Depends:
xubuntu-desktop,abiword
ubuntu-gnome-desktop,abiword
python-carquinyol-0.96,abiword
pkpgcounter,abiword
lubuntu-desktop,abiword
junior-writing,abiword
gnome,abiword 2.8
freemind-doc,abiword
abiword-plugin-mathview,abiword 2.9.2+svn20120603-8
abiword-plugin-grammar,abiword 2.9.2+svn20120603-8
abiword-dbg,abiword 2.9.2+svn20120603-8
Dependencies:
2.9.2+svn20120603-8 - libabiword-2.9 (2 2.9.2+svn20120603) libc6 (2 2.7) libdbus-1-3 (2 1.0.2) libdbus-glib-1-2 (2 0.78) libgcc1 (2 1:4.1.1) libgcrypt11 (2 1.4.5) libglib2.0-0 (2 2.16.0) libgnutls26 (2 2.12.6.1-0) libgsf-1-114 (2 1.14.9) libgtk-3-0 (2 3.0.0) libjpeg8 (2 8c) libloudmouth1-0 (2 1.3.3) libots0 
---corte---


Exibindo somente as dependências do pacote 2

# apt-cache depends abiword


Instalando um pacote

# apt-get install abiword

Aqui estou dizendo para instalar o pacote abiword que é um processador de texto, devendo especificar da mesma forma exibida pelo resultado do comando apt-get search.
As dependências que houver serão instaladas automaticamente.

Nota :
O comando install também atualiza um pacote caso exista uma versão superior a já instalada no sistema.

Reinstalando um pacote

No caso de você ter danificado sua instalação, arquivos corrompidos, faltando ou desejar repor uma nova versão do pacote use a opção --reinstall desta forma:

# apt-get --reinstall install xfe


Fazendo somente o download do pacote sem instalar no sistema

Com esse comando apenas será feito o download do pacote sem a instalação do mesmo.
# apt-get install nome-pacote -d

O pacote não é instalado no sistema, agora o usuário deverá instalar manualmente, entrando na pasta /var/cache/apt/archives e instalar manualmente o pacote, ou copiar o arquivo para uma pasta a fim de backup, ou também pode utilizar este arquivo para recuperar arquivos do sistema que não seja uma instalação direta do pacote.


Removendo um pacote

# apt-get remove xfe

Esse comando remove o pacote xfe mas não remove arquivos de configuração que tenham sido criados ou personalizados.
# apt-get remove --purge xfe

Para remover arquivos de configuração tem que adicionar a opção --purge junto.


Remover uma grande quantidade de pacotes que tem a mesma denominação

Eu instalei o xfce4 que junto vieram suas dependências em torno de quase 30 pacotes, a maioria começava com xfce4 e outras bibliotecas que tinha xfce4 no meio do nome do arquivo.

Para remover uma grande quantidade de pacotes que iniciam com o mesmo nome, adicione o curinga * (asterisco).

# apt-get remove --purge xfce4*

Ao usar o comando acima foram desinstalado todos os pacotes do xfce4 e suas dependências também. Antes de remover ele pergunta se tem certeza e exibi todos os nomes dos pacotes que serão removidos.

Gerar uma lista de todos os pacotes disponíveis para baixar


# apt-cache pkgnames | sort > lista.txt

Mostra uma lista de todos os pacotes que tem para baixar, mesmo que já estejam instalados no sistema, sendo esta lista criado no disco, são 40665 linhas na minha distro.

Conteúdo parcial da lista.txt

# cat lista.txt | more

---corte---
abcm2ps
abcmidi
abcmidi-yaps
abe
abe-data
abgate
abicheck
abi-compliance-checker
abinit
abinit-doc
---corte---

Corrigindo pacotes com conflitos

Se ao instalar um pacote com o comando apt-get install ou manualmente pelo dpkg principalmente forçando uma instalação, quando for instalar um novo pacote pode surgir algum conflito, no qual o apt-get ira sugeri para usar o comando apt-get -f install, e enquanto você não executar este comando não será mais possível instalar novos pacotes usando o apt-get e no qual normalmente sempre termina na remoção do pacote conflitante e alguns casos a instalação de alguma dependência caso o problema era este.

Quando o apt-get -f install não conseguir resolver o problema

Quando não se consegue resolver o problema com -f install tente a opção -f remove que dá preferência para remoção do pacote em vez de tentar corrigir o problema no caso de pacote instalado manualmente e que dependa de outros pacotes que não estão disponível no seu repositório, ou foram removidos do mesmo (caso de pacotes obsoleto).

# apt-get -f remove


Exibindo somente a versão de um pacote

# apt-show-versions abiword
abiword/quantal uptodate 2.9.2+svn20120603-8

O comando apt-show-versions exibi somente a versão de pacotes instalados no seu sistema, não sendo exibido versão de um pacote que se encontra no repositório apt.
Normalmente você terá que instalar o pacote apt-show-versions pois este comando não costuma ver junto na distro.

Verificar dependências de pacotes com problemas

# apt-get check


Atualizando todo o sistema

Se você quiser atualizar todo o seu sistema, instalando as atualizações de todos os pacotes, use o comando upgrade:

# apt-get upgrade

Este procedimento se escolhido deve ser feita só em último caso também apesar de não ser tão perigoso, portanto pense bem antes de fazer isto, pois sempre pode acontecer de algo dá errado.

E por último, se quiser atualizar a versão da sua distro o que pode ser tornar muito perigoso e não funcionar a nova atualização, use:

# apt-get dist-upgrade


Nota:
Em vez de atualizar a sua distro pelo apt, o melhor e mais garantido é baixar uma imagem ISO e instalar a mais nova versão do novo sistema do que usar o comando apt-get dist-upgrade e claro não esqueça de fazer um backup de seus arquivos e documentos pessoais em uma outra mídia como pendrive, HD externo ou DVD antes de fazer qualquer um destes procedimento, mesmo que eles estejam em outra partição no seu disco, pois se algo ter errado já era.


Onde ficam os pacotes que foram baixados via apt-get ?

Os pacotes .deb baixados ficam em /var/cache/apt/archives

Após baixados os pacotes e instalados automaticamente pelo apt-get no seu sistema os pacotes .deb baixados não são removidos desta pasta, devendo você fazê-lo manualmente para liberar espaço.

Onde ficam os arquivos de configuração do apt-get ?

Todos os arquivos de configuração ficam a partir de /etc/apt e a editação de qualquer arquivo feita por você deve ser feita corretamente e bem planejada, pesquisado antes como configurar cada arquivo para que nada saia errado.

Continuação de um download grande com o apt-get install

Se você for instalar um pacote com a linha de comando: sudo apt-get install flightgear e o pacote possuir muitos megas, e não terminando de fazer o download, no qual você deseja desligar o computador pra continuar noutro dia e foi pressionado CTRL+C para parar o download não há problema, pois ao executar a mesma linha de comando noutro dia, em um xterm de qualquer diretório, o download continuará de onde parou.
O arquivo de download enquanto não for instalado no sistema e ele não foi baixado por completo fica no diretório /var/cache/apt/archives/partial e somente quando o download for completado é que o arquivo é movido para o diretório /var/cache/apt/archives e depois é instalado no sistema.
Você somente pode fazer o download com o apt-get install um arquivo por fez, ou seja até concluir a instalação do download atual você não pode executar outro apt-get install pra ir fazendo download de outro programa.
Observação:
Você pode especificar vários tipos de arquivos para instalar em uma única linha de comando, mas não poderá executar outra instância do apt-get até concluir a atual.
Exemplo:
# apt-get install xfe, abiword, mplayer



Remoção dos arquivos temporários do cache

Os arquivos baixados pelo apt-get para posterior instalação no sistema ficam armazenados na pasta /var/cache/apt/archives e com o tempo vai ocupando muito espaço e para liberar o espaço em disco você pode deletar usando o comando apt-get clean sem precisar entrar na pasta e deletá-los manualmente.



Utilizando o dpkg


O dpkg é utilizado para instalar pacotes .deb baixados manualmente diretamente pelo navegador web ou obtido de mídias de Cds/DVDs e sendo que o mesmo instala somente o(s) pacotes(s) solicitado sem resolver as dependências do mesmo, embora que você possa forçar a instalação sem resolver as dependências isto as vezes pode causar algum problema, mas que você pode contornar na maioria das vezes estes problemas caso você já tenha experiência com o sistema GNU/Linux.

Instalando pacote

# dpkg -i pacote.deb

ou

# dpkg -i *.deb


O flag -i também serve para atualização do pacote, ou seja se você está tentando instalar uma versão mais nova ele atualiza para você.

Sobrescrevendo um pacote já instalado com a mesma versão no sistema

dpkg -i --force-overwrite pacote.deb


Forçando a instalação de pacotes com dependências

# dpkg -i --force-all pacote.deb
# dpkg -i --force-all *.deb


Outras opções para forçar uma instalação

Se você precisar entrar com uma opção específica para força uma instalação de pacote deb com o dpkg para mais opção use o comando: dpkg -i --force-help

opções para forçar do dpkg - controla o comportamento quando problemas são encontrados:
avisar mas continuar: --force-<coisa>,<coisa>,...
parar com erro(s): --refuse-<coisa>,<coisa>,... | --no-force-<coisa>,...
Forçando coisas:
all [!] Definie todas opções de forçar
downgrade [*] Substituir um pacote por uma versão mais antiga
configure-any Configurar qualquer pacote que possa vir a ajudar esse
hold Processar pacotes incidentais mesmo quando segurando-os
bad-path Faltam programas importantes no PATH, devendo aparecer problemas
not-root Tentar (des)instalar coisas mesmo não sendo root
overwrite Sobrepor um arquivo de um pacote com outro
overwrite-diverted Sobrepor um arquivo desviado com uma versão sem desvios
bad-verify Instalar um pacote mesmo caso isso falhe a checagem de autenticidade
depends-version [!] Converter problemas de dependências da versão em avisos
depends [!] Converter todos os problemas de dependências em avisos
confnew [!] Sempre usar os novos arquivos de configuração, não perguntar
confold [!] Sempre usar os antigos arquivos de configuração, não perguntar
confdef [!] Usar as opções padrões para novos arquivos de configuração se uma
estiver disponível, não perguntar. Se nenhum padrão pode ser achado,
você será questionado a menos que uma das opções, confold ou
confnew também sejam dadas
confmiss [!] Sempre instalar arquivos de configuração faltando
conflicts [!] Permitir instalação de pacotes conflitantes
architecture [!] Processar até mesmo pacotes com arquitetura errada
overwrite-dir [!] Sobrepor um diretório de um pacote com um arquivo de outro
remove-reinstreq [!] Remover pacotes que requerem instalação
remove-essential [!] Remover um pacote essencial

AVISO - o uso das opções marcadas com [!] pode danificar seriamente a sua instalação.
Opções para forçar marcadas com [*] são habilitadas por padrão.

Depois use: dpkg -i --force-opção pacote.deb



Removendo um pacote

# dpkg -r nome-pacote

Nos casos que você não conseguir remover um pacote problemático com o comando apt-get remove, usando diretamente o dpkg será sua única solução, após execute apt-get -f install

Forçando a remoção do pacote

# dpkg -r --force-depends nome-pacote

Caso o pacote não seja removido porque outros pacotes dependem dele, você pode forçar a remoção do pacote com o parâmetro --force-depends:

PERIGO
Forçar a remoção do pacote pode causar que os programas que depende dele não funcione mais; use com cuidado e somente se souber o que está fazendo.

Quando não conseguir remover um pacote use desta forma com a opção --purge
# dpkg --purge nome-pacote


Verificando pendências de configuração

No caso da instalação do pacote não sendo totalmente concluída a configuração do mesmo, porque foi abortada por falta de luz ou travamento do computador tendo que apertar no botão Reset, para estas situações use o comando "dpkg --configure -a".

# dpkg --configure -a

Especificando a velocidade da taxa de download do apt-get


Você deve editar o arquivo /etc/apt/apt.conf.d/70debconf

$ cat 70debconf
// Pre-configure all packages with debconf before they are installed.
// If you don't like it, comment it out.
DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt || true";};
Acquire
{
Queue-mode "access";
http
{
Dl-Limit "60";
};
};


Na linha Dl-Limit altere o valor 60 para a velocidade desejada para download, por exemplo 30
Neste exemplo abaixo limitei a taxa máxima para 30 Kb/seg.
Dl-Limit "30";

Procedimento valido para debian e ubuntu.

Listando todos os pacotes instalados

# dpkg -l

O dpkg então irá te mostrar uma lista com todos os pacotes instalados, o status, a versão e um pequeno sumário ( -l = letra ele minúsculo).

Se quiser você pode fazer uma filtragem com o grep:

# dpkg -l | grep -i xfe
ii xfe 1.35-1 i386 A lightweight file manager for X11
ii xfe-i18n 1.32.5-1 all lightweight file manager for X11 (i18n support)
ii xfe-themes 1.32.5-1 all lightweight file manager for X11 (themes)


Obtendo uma informação de um pacote instalado

Para obter uma informação detalhada de pacote instalado utilizar o parâmetro -p assim:
# dpkg -p xfe

Package: xfe
Priority: optional
Section: x11
Installed-Size: 6502
Maintainer: Roland Baudin <roland65@free.fr>
Architecture: i386
Version: 1.35-1
Depends: libc6 (>= 2.3.6-6~), libfox-1.6-0, libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.1.1), libx11-6, libxft2 (>> 2.1.1)
Size: 2793592
Description: A lightweight file manager for X11
Xfe is desktop independent and is written using the C++ Fox Toolkit.
It has Windows Commander or MS-Explorer look and is very fast and simple.
Included in the package are a simple text viewer (Xfv),
a simple text editor (Xfw),a simple package manager (Xfp)
and a simple image viewer (Xfi).

Verificar o status de um pacote

Para verificar o status de um pacote (produz uma listagem parecida com a do comando dpkg -p)

# dpkg -s nome-pacote

Listando os arquivos do pacote instalado

Para listar o conteúdo do pacote instalado em seu sistema, mostrando todos os arquivos que compõem o pacote use:

# dpkg -L xterm

Você também pode usar a opção --listfiles no lugar -L que produz o mesmo resultado.

Notas:
Onde xterm é o nome do pacote instalado. Se existir subvariedades e tipos do pacote xterm que começam com xterm deverá entrar com o nome completo do pacote instalado.
O ideal é fazer um listagem completa dos pacotes instalados e usar o grep para filtrar a listagem com o flag -i. Exemplo: dpkg -l | grep -i xterm
Com isto todo pacote que tiver xterm no nome será listado.


Descobrir um arquivo do sistema a qual pacote pertence


Para descobrir um executável associando a um pacote, use a opção -S dessa forma:

# dpkg -S /usr/bin/xterm
xterm: /usr/bin/xterm

Se não especificar o caminho, será exibido o nome de todos os pacotes que tem arquivos ou pastas que tenha xterm como parte do nome.

# dpkg -S xterm
---corte---
xubuntu-icon-theme: /usr/share/icons/elementary-xfce/apps/16/gnome-xterm.svg
xterm: /usr/share/doc/xterm/xterm.termcap.gz
xterm: /usr/bin/uxterm
xterm: /usr/share/pixmaps/xterm-color_32x32.xpm
gettext: /usr/share/gettext/styles/po-emacs-xterm256.css
xubuntu-icon-theme: /usr/share/icons/elementary-xfce/apps/32/gnome-xterm.svg
wmaker-common: /usr/share/WindowMaker/Icons/linuxterm.tiff
----corte----


Examinando a descrição de um pacote .deb não instalado

Para examinar a descrição e sumário de pacote deb não instalado
# dpkg --info wmmixer_1.7-1_i386.deb

Visualizando o conteúdo de um pacote .deb não instalado

Para ver os arquivos de um pacote de um pacote deb não instalado

# dpkg --contents wmmixer_1.7-1_i386.deb

Nota:
Você também pode usar a opção -c que é a forma reduzida de --contents.

Extraindo arquivos de um pacote deb sem instalar no sistema

Sintese: dpkg -x pacote.deb /diretório-para-onde-será-descompactado-o-pacote

# dpkg -x supertux-0.1.0-i686_1-2_all.deb vazio

Quando for necessário se obter os arquivos dentro de um pacote sem instalá-lo, ou quando você precisa recuperar um arquivo de configuração especifico sem que outros arquivos de configuração seja sob-regravados ou algum arquivo de uma versão antiga do pacote você utiliza este método e depois copia o arquivo para o local desejado.
Também serve para experimentar programas, deste que os mesmos não precisem está instalado a partir da / (raiz) para funcionar.


Instalar um pacote sem danificar o sistema

Um método interessante de instalar um pacote deb ignorando as dependências e sem danificar é:
# dpkg -x pacote.deb / <enter>

Alguns pacotes podem pedir dependências desnecessárias, e instalá-las pode causar alguns problemas ou não existir mais estas dependências no repositório. 

PERIGO
Faça o procedimento acima somente com pacotes que não sejam do tipo de libs, drivers, bibliotecas etc... essenciais pra funcionamento do sistema, pois caso contrário o seu sistema poderá não mais funcionar.
Utilize este método apenas para programas comuns como jogos, utilitários. O funcionamento do programa utilizando este método dependerá da sua capacidade de resolver as dependências manualmente caso houve na execução do programa, sem utilizar o apt-get para este caso.









3 comentários:

  1. Parabéns! Esse é um manual bem completo. Eu estava montando um manual e esse já está bem completo. Obrigado

    ResponderExcluir
  2. Quando tento atualizar, instalar ou remover qualquer programa aparece essa mensagem: dpkg: erro: o formato de base de dados de informação (2) está errado ou é demasiado novo; tente obter um dpkg mais recent

    Alguém pode me ajudar a resolver isso?

    ResponderExcluir