Linux Essencial/Lição Gerenciamento de Pacotes

  • Objetivo(s): Explicar como é feito o gerenciamento de pacotes nas diferentes distribuições Linux.
  • Direitos autorais e licença: Veja notas de direitos autorais e licença no final da lição.

No Linux, os aplicativos veem geralmente na forma de código-fonte, tendo o usuário tem de baixá-los e compilá-los (transformar um código fonte em um executável) para poder utilizá-los. Os pacotes servem justamente para facilitar o trabalho do usuário, já que eles são na verdade um arquivo empacotado com o código já compilado. Existem vários meios para o gerenciamento de pacotes para o sistema Linux, o que pode variar entre as várias distribuições. Algumas das distribuições adotam ferramentas automatizadas, tais como: rpm ou aptitude o que veremos a seguir.

Instalação por código-fonte editar

A maioria dos arquivos fontes (os arquivos que implementam a funcionalidade do programa) estão disponíveis no formato *.tar.gz ( tarball ), que na realidade são programas prontos e scripts de instalação empacotados (tar - ferramenta tar) e compactado (gz - formato gzip). Esses arquivos são normalmente chamados de tarballs e geralmente precisam ser compilados. O que veremos no próximo tópico é como realizar a instalação de um programa a partir de um tarball.

Desempacotando um tarball editar

O primeiro passo para a instalação de um programa a partir de seu arquivo fonte é desempacotar o pacote. Para isso usaremos a seguinte sintaxe:

tar xvfz programa.tar.gz 

O significado do comando acima é:

tar ferramentado sistema operacional para empacotar e desempacotar arquivos
xvfz opções da ferramenta tar, na seguinte ordem: abrir o pacote, visualizar o tratamento dado, informa que será passado um arquivo e que o pacote está compactado pela ferramenta gzip

Antes, porém, necessitamos de um pacote para ser instalado. Instalaremos o programa Gimp que serve para fazer edição de imagens. O programa pode ser encontrado dentro do site oficial do Gimp (http://www.gimp.org/downloads/) e pode ser copiado por download gratuitamente na forma tarball. O nome do pacote que vamos instalar no exemplo é:

gimp-2.6.0.tar.bz2   

Quando se deseja instalar uma nova ferramenta para o sistema o melhor lugar para isto é o /usr/local/src, que é um diretório reservado, por padrão, para ferramentas extras para o sistema. Como exemplo será instalado a versão gimp-2.6.8.tar.bz2 da ferramenta Gimp. Iremos desempacotar e acessar o novo diretório.

tar xvfj gimp-2.6.8.tar.bz2
cd gimp-2.6.8

Dentro do diretório descompactado normalmente existe um arquivo de leitura de tipo texto (.txt), que explica a instalação da ferramenta para o sistema ou um arquivo do tipo INSTALL, README ou LEIAME.

Com a leitura do arquivo será possível localizar mais facilmente os arquivos de configuração e instalação da ferramenta. O arquivo de configuração é o configure, que é apresentado como um arquivo comum, mas que na realidade será o responsável por toda a preparação para a instalação, checando bibliotecas e dependências, além de verificar se o sistema está preparado para receber a nova ferramenta. Nesta etapa será necessário fazer com que o sistema seja verificado pelo configure:

./configure

Uma vez feita a configuração e checagem do sistema será necessário compilar o código-fonte com a nova ferramenta e incluir bibliotecas finais que não estão presentes na mesma. Para essa etapa é utilizado o comando make:

make

Ao término do comando anterior, caso o usuário deseje, poderá passar o comando make check para fazer testes e verificar se foi tudo correto na passagem do comando make.

Se não ocorrer nenhum erro nessa etapa a nova ferramenta poderá ser instalada no sistema, pois os testes necessários foram feitos, e o que resta agora é tornar o programa residente no sistema:

make install

Pronto. O programa já estará instalado se em nenhuma dessas etapas ocorrer a falta de pacotes. No caso da falta de outros arquivos, o melhor é ir ao site oficial da distribuição do Linux que está sendo usado para a instalação, para buscar o nome dos pacotes necessários para o término da instalação. A solicitação de arquivos específicos só irá acontecer por dois motivos: porque está faltando uma biblioteca (ver sobre bibliotecas no próximo tópico), ou porque a versão do programa requer uma biblioteca mais atualizada do que a que está instalada.

Bibliotecas compartilhadas editar

Vários sistemas sejam Windows (que usa DLL's), Unix ou Linux necessitam de bibliotecas compartilhadas, para que os aplicativos que possuem necessidades em comum possam fazer uso de funcionalidades encontradas em bibliotecas. Ou seja, não é necessário recriar toda a parte que os programas possuem em comum, basta compartilhar essas partes utilizando as bibliotecas. Assim quando, por exemplo, desejamos criar algum aplicativo de rede não é necessário reescrever todo o aplicativo.

Diretórios de bibliotecas editar

As bibliotecas dentro do Linux ficam distribuídas em vários diretórios dentro do sistema, sendo os mais comuns:

  • /lib
    • armazena as principais bibliotecas para o funcionamento do sistema, sendo elas as mais genéricas. Dentro desse diretório pode ser encontrado o diretório modules que armazena módulos, especificamente drivers que permitem controlar dispositivos.
  • /usr/lib
    • armazena bibliotecas para ferramentas mais específicas, como ldap (ferramenta para centralização e armazenamento de diretórios e outras informações), jpeg, xml, entre outros. Também podem ser encontrados os diretórios de programas que são configurados na instalação do sistema e que armazenam bibliotecas específicas, como o kde,licqqtnetscape, entre outros.
  • /usr/local/lib
    • nesse diretório são armazenadas as bibliotecas de programas que são instalados após a configuração do sistema. O seu conteúdo pode variar dependendo apenas dos programas que forem adicionados ao sistema pelo usuário.
  • /usr/X11R6/lib
    • responsável por armazenar as bibliotecas do ambiente gráfico como um todo, ou seja, informações necessárias para rodar o gráfico sem ficar preso a um gerenciador gráfico como o KDE , GNOME ou qualquer outro gerenciador.

Além dos caminhos padrões é possível indicar outros caminhos de bibliotecas para programas específicos através da configuração da variável de ambiente LD_LIBRARY_PATH, que indica localização de bibliotecas compartilhadas. Para saber mais, veja http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

Configuração do caminho para bibliotecas editar

A seguir encontra-se a descrição de alguns arquivos que auxiliam no compartilhamento de bilbiotecas no sistema:

  • /lib/ld.so e ld-linux.so*
    • Esse geralmente é um link para um arquivo real como /lib/ld-versao.so e serve para controlar os links presentes dentro dos diretórios de bibliotecas. Ele carrega as bibliotecas dinamicamente. Assim, quando um programa procura uma biblioteca para inicializar, o /lib/ld.so carrega essa biblioteca, e se um outro programa for utilizar a mesma biblioteca será possível procurar esse arquivo sem a necessidade de ocupar mais espaço no sistema.
  • /etc/ld.so.conf
    • Mantém o caminho para alguns diretórios de bibliotecas que não sejam genéricas, ou seja, não se encontram dentro do diretório /lib. Normalmente esse arquivo indica as bibliotecas dentro do /usr e diretórios afins.

Exemplo do conteúdo do arquivo ld.so.conf:

#cat /etc/ld.so.conf
/usr/local/lib
/usr/lib/krb5
/usr/X11R6/lib
/usr/lib/qt3/lib
/usr/lib/wine
/usr/lib/qt2/lib
/usr/lib/kde2/lib
/usr/lib/kde3/lib
/usr/lib/kde3/lib/kde3
/etc/ld.so.cache

Porém esse arquivo somente tem efeito após o comando ldconfig.

  • lib*.so.versao bibliotecas*
    • esse não é um arquivo de configuração para bibliotecas, e sim um modelo de biblioteca. O asterisco ( * ) representa o nome da biblioteca. Normalmente dentro do arquivo são encontrados a estrutura lib*.so.versão e um link para o mesmo com o nome lib*.so.

Por exemplo:

# ls -l libnss_nis.so.2
lrwxrwxrwx 1 root root 19 Abr 19 20:52 libnss_nis.so.2 -> libnss_nis-2.2.4.so

Pode-se notar que libnss nis.so.2 na realidade é um link para a biblioteca libnss_nis-2.2.4.so.

ldd editar

Uma biblioteca pode ser utilizada por vários programas, criando assim, uma dependência entre eles, não podendo um programa, isoladamente, apagar uma biblioteca. Para conseguir identificar o tipo de dependência entre um programa e outro, ou até mesmo entre duas bibliotecas é utilizado o comando ldd e o nome de uma biblioteca.

Exemplo com uso de ldd:

# ldd libdl.so.1.9.9
/lib/libNoVersion.so.1 => /lib/libNoVersion.so.1 (0x40003000)
libc.so.5 => not found
libc.so.6 => /lib/libc.so.6 (0x40017000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

No exemplo acima o comando ldd teve como parâmetro a biblioteca libdl.so.1.9.9 que está ligado a biblioteca libNoVersion.so.1, libc.so.6e a ld-linux.so.1.

O comando ldd apresenta a biblioteca associada ao comando binário.

Por exemplo:

# ldd cp 
libc.so.6 => /lib/libc.so.6 (0x40029000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Acima foi passado o comando cp (utilizado para fazer cópias de arquivos) e a ele está ligado a biblioteca libc.so.6 e a ld-linux.so.2.

ldconfig editar

O usuário, para trabalhar corretamente na linha de comandos, necessita dos comandos e sua sintaxe, assim como cada ferramenta instalada também o necessita. Para isso existem as bibliotecas que possuem informações sobre o que fazer e como fazer para cada ferramenta existente dentro do sistema. Caso falte alguma biblioteca para a instalação de uma ferramenta, será necessário a sua instalação.

Para o sistema reconhecer as bibliotecas existentes e ainda conseguir acessá-las existe o comando ldconfig que permite, além de gerenciar as bibliotecas, gerenciar os diretórios indicados em arquivos de configuração.

O comando ldconfig realiza esse gerenciamento, devendo o comando ser invocado a cada nova biblioteca instalada no sistema, para que o comando possa atualizar o mapa de bibliotecas do sistema, determinando na sua gerência, e determinando os links para as bibliotecas que estão no arquivo de configuração /etc/ld.so.conf e para os diretórios principais de bibliotecas (/lib e /usr/lib).

Ldconfig checa o cabeçalho e os arquivos das bibliotecas, determinando assim se ela pode ou não ser atualizada. Quando um programa é instalado no sistema é feita uma verificação para saber se a biblioteca já existe, caso exista o ldconfig simplesmente irá estabelecer uma ligação entre a biblioteca e a ferramenta, pois não é necessária a existência de bibliotecas repetidas.

Sintaxe:

ldconfig [-vq] [-f configuração] [-C cache] diretório
ldconfig -l [vq] biblioteca
ldconfig -p

Opções:

Opção Descrição
-v modo de visualização. Apresenta na saída padrão, a versão da biblioteca e cada diretório que ela esteja e cria um link.
-q não retorna avisos.
-f conf lê o arquivo conf em vez do /etc/ld.so.conf
-C cache armazena no arquivo cache todos os caminhos existentes para os links em vez de usar o /etc/ld.so.cache.
-l modo de biblioteca. Permite link e edição manual de bibliotecas individuais.
-p apresenta na saída padrão os diretórios e bibliotecas armazenados no arquivo cache.

Repositórios de Software editar

Existem muitos programas disponíveis para serem instalados em sistemas Linux. Um repositório de software nada mais é que um local de armazenamento de pacotes do qual é possível recuperá-los e instalá-los em um computador. Muitos editores de software e outras organizações mantêm servidores na internet para esse fim. Além disso, distribuições mantêm repositórios e utilizam programas específicos para manipulá-los.

Pacotes Slackware editar

Os pacotes Slackware são compactados da mesma maneira que um pacote tar.gz, porém já customizados (com diretórios propriamente indicados dentro do pacote) para serem automaticamente instalados no Slackware (distro), sendo assim diferente dos pacotes .tgz comuns. Utilizam o pkgtool que na verdade não é bem um gerenciador de pacotes. É só um formato de pacote e algumas ferramentas de linha de comando para criar, exibir, instalar, remover e atualizar pacotes. O sistema de empacotamento permite que scripts de instalação sejam embutidos no arquivo. Esses scripts é a única diferença entre a instalação de uma tarball (um pacote tar compactado) e a instalação de um pacote do Slackware. Lembrando que não há verificação de dependências ou seja se o programa necessitar de uma biblioteca que não existe no sistema ele não será instalado.

Instalando Pacote

# installpkg nome-do-pacote.tgz

Exemplo:

#installpkg nmap-3.75.tgz

Removendo Pacote

# removepkg nome-do-pacote 

Exemplo:

# removepkg nmap

No Slackware também é possível "transformar" um pacote RPM (que veremos a seguir) em um pacote slackware (.tgz), utilizando o comando :

# rpm2tgz nome_pacote.rpm

Pacotes RPM editar

As principais funções desse gerenciador de pacotes são: instalar, atualizar e desinstalar pacotes. O rpm permite manter fontes e binários de forma configurável dentro de um pacote.

  • Distribuições que suportam o rpm
    • Mandriva
    • Red Hat
    • Suse

Hoje em dia distribuições Debian e Slackware já suportam rpm, apesar de não funcionarem tão bem quanto os pacotes nativos das mesmas (.deb e .tgz), podendo ocorrer alguns erros na instalação. Essas distribuições citadas acima têm como o gerenciador de pacotes nativo o RPM.

Vantagens da utilização de pacotes RPM editar

1) Instalar programas no Linux sem ter de compilar todo um código fonte sem perda de tempo.

2) Não ocorre a perda das informações geradas em arquivos antigos, quando se é necessária a atualização.

3) Verificação das versões dos pacotes instalados.

Desvantagens editar

O usuário não tem noção do que está acontecendo no sistema, ou seja, no momento da instalação de um pacote rpm, ele é informado dos caminhos que o pacote está utilizando para a adição do pacote, mas pode ocorrer alguma falha, como um vírus dentro de um pacote de origem duvidosa.

Formato dos Pacotes RPM editar

Os pacotes rpm apresentam a sua estrutura de forma organizada e padronizada, pois com ela é possível saber a versão que está sendo instalada, se é um pacote para teste e se a plataforma é a requerida. O nome dos arquivos rpm seguem o seguinte padrão:

nome-versão-release-plataforma

Exemplo

quota-1.66-8cl.i386.rpm 

onde:

  • quota : nome do arquivo
  • 1.66 : versão
  • 8 : release
  • i386 : plataforma
  • Nome do arquivo: é a principal parte de um pacote. Indica qual o pacote em questão.
  • Versão: é o valor no qual se baseia as melhoras e retiradas de "bugs" de um determinado pacote, quanto maior o seu valor mais recente é a versão.
  • Release: informa o tipo do pacote, com ele é possível saber se o programa em questão é fornecido como definitivo - se o valor for par - ou para teste - valor ímpar.
  • Plataforma: para os computadores comuns são utilizados os pacotes com plataforma i386, podendo o mesmo ser i486, i586, etc.

Sintaxe geral editar

A instalação de pacotes rpm, bem como as outras funções, são bem simples de serem utilizadas, tendo sempre que informar ao gerenciador de pacotes (RPM) o que se deseja fazer.

Sintaxe:

rpm [[opções][opções especiais]] [--parâmetros] pacote.rpm

As opções podem ser instalação, atualização, verificação, consulta e desinstalação.

As opções especiais podem ser:

v cuja função é apresentar os pacotes conforme estão sendo manipulados (esta opção é válida somente para a instalação, atualização e desinstalação) ou pastas que estão sendo criadas;
h não irá mais apresentar os arquivos ou pastas manipuladas, e sim a porcentagem que é apresentada em formato especial ( nesse caso hashs, # ) .
Parâmetros os parâmetros auxiliam na instalação, atualização e desinstalação. São vários, sendo que as apresentadas para a instalação também servem para atualização dos pacotes.

Exemplo:

# rpm -ivh Eterm-0.9-4cl.i386.rpm
Preparando...             ########################################### [100%]
   1:Eterm                ########################################### [100%]

No exemplo acima é mostrado o formato do hash para uma instalação. Os detalhes do comando serão explanados mais a frente. Para o hash aparecem duas linhas, a primeira “Preparando...” está fazendo testes no sistema, procurando por programas e bibliotecas necessários para a instalação, caso tudo esteja correto o pacote é instalado, o que foi simbolizado pela segunda linha: “1:Eterm”.

Instalação editar

A instalação é muito simples, mas podem ocorrer alguns erros que são tratados na instalação, tais como conflito, dependências, entre outros.

A opção para a instalação é:

-i

Portanto, quando for desejado instalar algum pacote basta informar para o gerenciador a opção -i. Contudo, ao ser solicitada diretamente a instalação sem outras opções pode ocorrer a perda da evolução da instalação. Por evolução pode se entender a listagem do que está acontecendo, ou seja, se o sistema está instalando ou sofreu algum travamento.

Exemplo de instalação do pacote quota-1.66-8cl.i386.rpm:

# rpm -ivh quota-1.66-8cl.i386.rpm
Preparando...              ########################################### [100%]
   1:quota                 ########################################### [100%]

Para o exemplo foi instalado um gerenciador de cotas de usuários. Caso o pacote já estivesse instalado seria retornada uma mensagem de aviso informando que o pacote já está instalado.

Se ocorresse algum problema na instalação poderia ser utilizado algum parâmetro extra para tentar agir sobre o pacote, como forçar a instalação, ou permitir a instalação de pacotes com o mesmo nome. Esse assunto será melhor explorado no tópico sobre Principais Parâmetros.

Atualização editar

A atualização é de suma importância porque com ela não necessitamos refazer todos os caminhos da instalação, pois ela altera somente os locais necessários, fazendo troca de informações antigas pelas novas ou as removendo "bugs".

Ao se executar uma atualização os arquivos editados anteriormente não perdem a sua modificação - feitas pelo administrador do sistema - evitando assim novos preenchimentos de arquivos.

A opção para atualização é:

-U

Observando sempre que essa opção deve estar em maiúsculo. Como ocorre na instalação, quando é solicitado somente a opção de atualização não é apresentada nenhuma informação do andamento da mesma. Para evitar que ocorra isso, basta utilizar as opções v e h como mencionadas no tópico sobre a sintaxe geral.

Exemplo de atualização do pacote quota-1.66-8cl.1386.rpm:

# rpm -Uvh  quota-3.01-1cl.i386.rpm
Preparando...              ########################################### [100%]
   1:quota                 ########################################### [100%]

Principais parâmetros editar

São apresentados, a seguir, os principais parâmetros a serem utilizados em uma instalação ou em uma atualização:

Parâmetro Descrição
--test Não instala o pacote, apenas verifica e avisa sobre possíveis conflitos.
--nodeps Não verifica as dependências do pacote.
--oldpackage Atualiza pacotes antigos sobre pacotes mais recentes.
--force Força a instalação ou atualização de um pacote, desde que o administrador saiba que não irá prejudicar o funcionamento do sistema ou de algum outro pacote.
--ignoreos Permite a instalação ou atualização mesmo que os sistemas operacionais do RPM binário e máquina não coincidam.
--replacepkgs Instala os pacotes mesmo que alguns deles já estejam instalados no sistema.
--replacefiles Instala mesmo com conflito de arquivos.

Os parâmetros mostrados acima são os mais importantes. Caso você queira conhecer mais destes parâmetros, leia o manual do rpm – man rpm.

Desinstalação editar

A desinstalação de um determinado pacote geralmente ocorre quando o administrador verifica que tal ferramenta instalada é obsoleta, ou está necessitando de espaço, pois normalmente um pacote instalado não apresenta conflito com outros pacotes para o funcionamento do sistema.

A opção para a desinstalação é :

-e

Exemplo de desinstalação do pacote quota-1.66-8cl.1386.rpm:

#rpm -e quota-1.66-8cl

Caso não ocorra a falha em dependências do pacote, o mesmo será removido. Uma observação é que o nome do pacote não é mais o mesmo apresentado para a instalação. O nome do pacote fica sem o i386 e sem a sua extensão rpm. Se o nome do pacote contiver os trechos citados não será reconhecido.

Se for necessário remover mais de um pacote que possua o mesmo nome poderá ser utilizado o parâmetro --allmatches.

Consultas editar

As consultas a pacotes instalados no sistema são muito comuns, servindo de base para outras buscas como a data da instalação, quem criou o programa, onde obter maiores detalhes, etc.

Com as consultas é possível saber também a qual pacote determinado arquivo pertence, além de auxiliar o gerenciamento de pacotes.

Sintaxe:

rpm [[opção][opções especiais]] pacote

A opção é:

-q Através dele o computador fará a consulta sobre determinado pacote.
Opções especiais Se não for selecionado nenhuma opção especial, a ferramenta irá procurar pelo pacote selecionado.
a Busca em todo o sistema pelos pacotes instalados. Com essa opção não é necessário indicar o nome do pacote.
f Com essa opção é necessário passar o nome de um arquivo, e não mais o pacote, que a ferramenta rpm irá buscar pelo pacote ao qual o arquivo faz parte.
i Exibe informações sobre o pacote. (nome,versão,descrição).
R Lista os pacotes dos quais depende.
--provides Lista as capacidades que esse pacote fornece.
--changelog Exibe as informações sobre as mudanças desse pacote.
l Lista os arquivos contidos no pacote.
s Exibe os estados dos arquivos no pacote. O estado de cada arquivo é normal, instalado ou substituído.
c Lista apenas os arquivos de configuração.

Exemplo:

# rpm -qa | grep php
mod_php4-4.0.6-3cl
php4-pgsql-4.0.6-3cl
php4-4.0.6-3cl
php4-devel-4.0.6-3cl
php4-doc-4.0.6-3cl
php4-ldap-4.0.6-3cl
php4-mysql-4.0.6-3cl
php4-imap-4.0.6-3cl

No exemplo acima foi utilizado a consulta a todos os pacotes, porém o que interessa, para o exemplo, são os pacotes referentes ao PHP, e para isso foi utilizado o | (pipe) e o grep que fazem a filtragem. Para maiores detalhes sobre filtragem veja o tópico referente a redirecionamento e pipes.

Exemplo:

# rpm -qf /etc/httpd/conf/httpd.conf
apache-1.3.19-10cl

Para esse exemplo foi consultado a qual pacote o arquivo httpd.conf pertence. O resultado é apresentado na segunda linha.

Verificação editar

A verificação serve para informar se determinado pacote está instalado no sistema. É possível, também, optar por verificações mais avançadas, determinando até mesmo o tipo do arquivo, se é executável ou link.

Sintaxe:

rpm [[opção][opções especiais]] nome_do_pacote

A sua opção é:

-V

Para a verificação não deverá ser passado totalmente o nome do pacote. Deve ser retirado o .i386.rpm do nome do pacote. Se o pacote estiver instalado não será retornado nada, mas caso contrário, o sistema informará que o pacote não está instalado.

Exemplo:

# rpm -V quota-1.66-8cl.i386.rpm
pacote quota-1.66-8cl.i386.rpm não está instalado

Para esse exemplo foi informado o nome de todo o pacote. Isso está errado, pois uma vez instalado, o pacote perde o sufixo .i386.rpm. Segue um exemplo com a forma correta:

# rpm -V quota-1.66-8cl

Como o nome do pacote foi informado corretamente não foi retornada nenhuma mensagem informando que o pacote selecionado está instalado.

  • Opções de verificação:
a Verifica todos os pacotes instalados
f Verifica um pacote que tenha um arquivo em especial.

Exemplo:

# rpm -Vf /etc/httpd/conf/httpd.conf
S.5....T c /home/httpd/html/index.html
p   Para verificar um pacote instalado e o arquivo do pacote rpm.

Exemplo:

# rpm -Vp quota-1.66-8cl.i386.rpm
SM5....T   /sbin/quotacheck
....L...   /sbin/quotaoff
SM5....T   /sbin/quotaon
SM5....T   /usr/bin/quota
SM5....T   /usr/sbin/edquota
SM5....T   /usr/sbin/quotastats
SM5....T   /usr/sbin/repquota
missing    /usr/sbin/warnquota
S.5....T   /usr/share/man/man1/quota.1.gz
S.5....T   /usr/share/man/man2/quotactl.2.gz
missing    /usr/share/man/man3/rquota.3.gz
S.5....T   /usr/share/man/man8/edquota.8.gz
S.5....T   /usr/share/man/man8/quotacheck.8.gz
S.5....T   /usr/share/man/man8/quotaon.8.gz
S.5....T   /usr/share/man/man8/repquota.8.gz

A opção de verificação pode ser importante no caso de ocorrer suspeita de que a base de dados RPM esteja corrompida.

A resposta do pedido de verificação vem em códigos. Abaixo está a tabela de códigos.

Código Significado
5 MD5 Checksum
S Tamanho do arquivo
L Link simbólico
T Modificação do arquivo
D Dispositivo
U Usuário
G Grupo
M Modo

Zypp editar

Desde o lançamento do OpenSuSE? 10.2 foi introduzido o Zypp que é um gerenciador de pacotes em linha de comando. Assim, nas versões mais recentes ele já vem instalado como padrão. A distribuição Ark Linux também anunciou que começaria a utilizá-lo em 2 de junho de 2009 [http://wiki.arklinux.org/Marketing]. Sua utilização por linha de comando pode ser feita utilizando a interface zypper que é semelhante a de outros gerenciadores de pacotes, sendo bastante intuitiva. Seus principais comandos são:

zypper in pacote ou zypper install pacote Instala o pacote resolvendo suas dependências e é capaz, também, de remover determinados pacotes.
zypper update Faz o update de seu sistema com a possibilidade de atualizar toda a sua distribuição.
zypper list-updates Verifica a disponibilidade de atualização de novos pacotes.
zypper info Verifica o status de um pacote e exibe suas informação de forma detalhada. Similar ao rpm -qi ou dpkg -s.
zypper search ou zypper se Permite consultar no repositório, por nomes, todos os pacotes que você pode baixar.
zypper search ¦ grep -i pacote ou zypper search pacote Consulta por pacotes relacionados. Ele vai te retornar o nome dos pacotes bem como suas descrições.

O zypper possui uma opção muito interessante que é a possibilidade de você instalar um pacote A e automaticamente remover um pacote B. Por exemplo:

zypper in vim -emacs

Ele vai instalar o vim e automaticamente remover o emacs.

Repositórios editar

Os principais comandos para se trabalhar com repositórios (locais de armazenamento de pacotes de software) com o zypper são:

zypper lr Lista todos os repositórios já definidos.
zypper ar repositório Adiciona um novo repositório.
zypper rr repositório Remove um repositório específico.

Pacotes Debian editar

As ferramentas preparadas para essa distribuição podem ser encontradas tanto no próprio CD utilizado para a instalação quanto no site da própria distribuição: www.debian.org.

Utilitário dpkg editar

Instalando Pacote

Sintaxe:
dpkg -i nome_pacote

Exemplo:Instalando o ssh no sistema – o ssh é uma ferramenta de acesso remoto muito útil para redes de todos os portes.

#dpkg -i ssh-1.2.3-9.3.deb

Removendo Pacote

Sintaxe:
dpkg -r nome_pacote

O parâmetro -r faz com que o pacote seja removido.

Exemplo: Removendo o pacote nmap do sistema.

#dpkg -r nmap-3.75.deb

Apesar de remover o pacote do sistema, o parâmetro -r não remove os arquivos de configuração criados por este pacote, então para removermos todo e qualquer tipo de arquivo criado pelo pacote instalado devemos utilizar a opção --purge . Exemplo:

#dpkg --purge amsn

Consulta Pacotes

Sintaxe:
dpkg -l nome_pacote

Exemplo: Consultando se o pacote rp-pppoe esta instalado no sistema.

#dpkg -l rp-pppoe

Roteiro de APT - Advanced Packaging Tool editar

Introdução editar

No início havia o .tar.gz. Os usuários tinham de penar para compilar cada programa usado em seu sistema GNU/Linux, ou outro qualquer. Os passos eram os seguintes:

#tar xvfz samba-2.4.0-8cl.tar.gz (desempacotamento e descompactação)
#./configure ( preparação para a instalação, checando bibliotecas e dependências) 
#make (testar o sistema com a nova ferramenta e incluir bibliotecas finais)
#makeinstall (reside o programa no sistema)

Quando o Debian foi criado, sentiu-se a necessidade de um sistema de gerenciamento de pacotes instalados no sistema. Deu-se a esse sistema o nome de dpkg. Assim surgiu o famoso "pacote":

#dpkg -i ssh-1.2.3-9.3.deb (instala)
#dpkg -r ssh-1.2.3-9.3.deb (remove)
 #dpkg -l ssh-1.2.3-9.3.deb (consulta)

Logo após a Red Hat resolveu criar seu conhecido sistema rpm.

# rpm -ivh Eterm-0.9-4cl.i386.rpm (instala)
# rpm -Uvh Eterm-0.9-4cl.i386.rpm (faz um update)
# rpm -qa Eterm-0.9-4cl.i386.rpm (consulta)
# rpm -e Eterm-0.9-4cl.i386.rpm (remove)

Ainda existe a maneira de instalação e remoção para sistemas Slackware:

#installpkg nmap-3.75.tgz (instala)
#removepkg nmap-3.75.tgz (remove)

Rapidamente outro dilema tomou conta das mentes dos produtores de GNU/Linux. Uma maneira rápida, prática e eficiente de se instalar pacotes, gerenciando suas dependências automaticamente e tomando conta de seus arquivos de configuração quando atualizado. Assim, o Debian, pioneiro, criou o APT ou Advanced Packaging Tool, hoje portado por algumas outras distribuições.

O arquivo /etc/apt/sources.list editar

Para seu funcionamento, o APT utiliza-se de um arquivo que lista as "fontes" de onde ele obterá os pacotes. Esse arquivo é o /etc/apt/sources.list:

cat /etc/apt/sources.list
# 
 # deb cdrom:[Ubuntu-Studio 9.10 _Karmic Koala_ - Release i386 (20091027)]/ karmic main multiverse restricted universe

#deb cdrom:[Ubuntu-Studio 9.10 _Karmic Koala_ - Release i386 (20091027)]/ karmic main multiverse restricted universe
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
 # newer versions of the distribution.
 
 deb http://pt.archive.ubuntu.com/ubuntu/ karmic main restricted
 deb-src http://pt.archive.ubuntu.com/ubuntu/ karmic main restricted
 
 ## Major bug fix updates produced after the final release of the
## distribution.
 deb http://pt.archive.ubuntu.com/ubuntu/ karmic-updates main restricted
 deb-src http://pt.archive.ubuntu.com/ubuntu/ karmic-updates main restricted
 
 ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://pt.archive.ubuntu.com/ubuntu/ karmic universe
 deb-src http://pt.archive.ubuntu.com/ubuntu/ karmic universe
 deb http://pt.archive.ubuntu.com/ubuntu/ karmic-updates universe
 deb-src http://pt.archive.ubuntu.com/ubuntu/ karmic-updates universe
 ...
 ...

As palavras deb e deb-src indicam o tipo de repositório: se guarda pacotes binários (deb), ou seja, pacotes pré-compilados ou se guarda pacotes fonte (deb-src) que é a fonte original do programa mais o arquivo de controle Debian (.dsc) e o diff.gz.

As linhas desse arquivo apontam para fontes, repositório oficial e para atualizações de segurança. Para adicionar novos repositórios basta adicionar seus endereços nesse arquivo. Lembre-se de utilizar "apt-get update" depois de modificar o arquivo /etc/apt/sources.list. Você precisa fazer isso para que o APT obtenha as listas de pacotes das fontes que você especificou.

apt-get editar

apt-get é uma ferramenta de gerenciamento de pacotes. Os softwares são, por natureza, modulares. Se você faz um software com interface gráfica que toca músicas, para ele funcionar você vai precisar: da biblioteca que desenha os gráficos, do servidor de som, dos codecs que interpretam os formatos de música, etc. A isso damos o nome de dependências. Para instalar o pacote, (rpm -ivh softexemplo.rpm / dpkgsoftexemplo.deb) será necessário instalar as dependências que o software provavelmente exigirá. Assim, teremos que instalar manualmente os pacotes de dependência. O apt-get tenta resolver estes conflitos e instalar automaticamente todas as dependências. No caso de dependências cruzadas de diversos softwares ou de versões diferentes de bibliotecas, será necessário resolver o conflito manualmente. O apt vêm instalado por padrão na distribuição Debian, onde lida com pacotes deb.

Mais que um comando, o apt-get é uma tecnologia, que hoje está disponível para qualquer que seja a distribuição Linux que você utilize. Lembrando que o APT é uma interface para o dpkg.

Instalando pacotes editar

Da lista de opções do apt-get nos interessa agora as opções install e remove (para mais opções utilize o comando apt-get --help | more). Digite no terminal:

$apt-get install apt-howto-pt-br 
E: Não foi possível abri arquivo de trava /var/lib/dpkg/lock - open (13 Permissão negada) 
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root? 

Perceba que é preciso ser administrador para instalar softwares. Por isso é necessário se conectar como usuário root:

# su - 

O APT busca, quando solicitada a instalação, em seu banco de dados a versão mais nova do pacote e vai baixá-lo do repositório correspondente na sources.list. Caso esse pacote dependa de algum outro o APT irá conferir as dependências e instalar os pacotes necessários.

# apt-get install apt-howto-pt-br 
Reading Package Lists... Done 
Building Dependency Tree... Done 
The following NEW packages will be installed: 
apt-howto-pt-br 
0 upgraded, 1 newly installed, 0 to remove and 271 not upgraded. 
Need to get 0B/239kB of archives. 
After unpacking 393kB of additional disk space will be used. 
Selecting previously deselected package apt-howto-pt-br. 
(Reading database ... 52965 files and directories currently installed.) 
Unpacking apt-howto-pt-br (from .../apt-howto-pt-br_1.8.10.2-1_all.deb) ... 
Setting up apt-howto-pt-br (1.8.10.2-1) ... 

Tente, caso seja possível em sua distro, instalar os seguintes softwares:

  • # apt-get install gtkam
  • # apt-get install gphoto2

Opção reinstall editar

Caso você de alguma forma danifique a instalação de um pacote excluindo algum arquivo de configuração, por exemplo, ou simplesmente deseja que os arquivos do pacote sejam repostos com a versão mais nova que estiver disponível, você pode usar a opção --reinstall da seguinte maneira:

# apt-get --reinstall install gdm
Reading Package Lists... Done
Building Dependency Tree... Done
0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1  not upgraded.
Need to get 0B/182kB of archives. After unpacking 0B will be used.
Do you want to continue? [Y/n]
.....

Localizando um pacote instalado editar

Para localizar um pacote instalado basta seguir o exemplo:

# dpkg -L apt-howto-pt-br 
/usr/share/doc/Debian/apt-howto/apt-howto.pt-br.html 

Para utilizar o how-to encontrado basta seguir os passos:

# mozilla /usr/share/doc/Debian/apt-howto/apt-howto.pt-br.html 

Removendo pacotes editar

Abaixo segue um exemplo de como remover um pacote e os seus dependentes:

# apt-get remove apt-howto-pt-br 
The following packages will be REMOVED: 
apt-howto-pt-br 
0 upgraded, 0 newly installed, 1 to remove and 271 not upgraded. 
Need to get 0B of archives. 
After unpacking 393kB disk space will be freed. 

Procurando pacotes editar

Mesmo não sabendo qual o nome de um pacote é possível instalá-lo. Para isso basta fazer uma busca pelo pacote como no exemplo a seguir:

#apt-cache search atari
atari-fdisk-cross - Partition editor for Atari (running on non-Atari)
circuslinux - The clowns are trying to pop balloons to score points!
madbomber - A Kaboom! clone
tcs - Character set translator.
atari800 - Atari emulator for svgalib/X/curses
stella - Atari 2600 Emulator for X windows
xmess-x - X binaries for Multi-Emulator Super System

Obtendo informações editar

Para obter mais informações sobre um pacote, podemos utilizar o comando apt-cache show , como mostrado no exemplo abaixo:

#apt-cache show stella  
Package: stella
Priority: extra
Section: non-free/otherosfs
Installed-Size: 830
Maintainer: Tom Lear <tom@trap.mtview.ca.us>
Architecture: i386
Version: 1.1-2
Depends: libc6 (>= 2.1), libstdc++2.10, xlib6g (>= 3.3.5-1)
Filename: dists/potato/non-free/binary-i386/otherosfs/stella_1.1-2.deb
Size: 483430
MD5sum: 11b3e86a41a60fa1c4b334dd96c1d4b5
Description: Atari 2600 Emulator for X windows
Stella is a portable emulator of the old Atari 2600 video-game console
written in C++.  You can play most Atari 2600 games with it.  The latest
news, code and binaries for Stella can be found at:
http://www4.ncsu.edu/~bwmott/2600

Verificando dependências editar

Para saber de quais pacotes um outro pacote depende, utilizamos o comando apt-cache depends. Observe o exemplo a seguir:

# apt-cache depends penguin-command
penguin-command
Depends: libc6
Depends: libpng2
Depends: libsdl-mixer1.1
Depends: libsdl1.1
Depends: zlib1g

Escolhendo a origem dos pacotes editar

É possível escolher de onde baixar os pacotes. Para listar os repositórios onde estão disponíveis os pacotes, utilizamos o comando apt-setup. Como no exemplo a seguir:

#apt-setup
-escolher o método de acesso (cdrom, http, ftp, filesystem, edit source list by hand)
-escolher o país ( Brazil)
-escolher o mirror debian para usar (ftp.br.debian.org)
Conecting 0% to ftp.br.debian.org

Observe que foram utilizados apenas dois comandos para atualização de todo o sistema e tudo isso sem a necessidade de reboots.

Atualizando as informações sobre os pacotes disponíveis editar

O Comando apt-get update procura pelas listas de pacotes nos repositórios indicados no seu arquivo /etc/apt/sources.list.

Ao tentar rodar o apt-get install pacote, se aparecer a mensagem acima, significa que você se esqueceu de rodar o apt-get update depois da sua última alteração no arquivo /etc/apt/sources.list. Para resolver o problema basta executar o apt-get update.

Atualizando pacotes editar

A atualização de pacotes é um grande trunfo do sistema APT. Podemos fazer as atualizações da seguinte maneira.

# apt-get -u upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages have been kept back
cpp gcc lilo 
The following packages will be upgraded
adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent
ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev
libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0
libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc 
29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used.
Do you want to continue? [Y/n]

apt-get ou aptitude? editar

Embora o apt-get seja a ferramenta mais tradicional e a mais usada, ele disputa o posto com o aptitude, um "sucessor" pelo qual vem sendo substituído. Os dois buscam resolver os mesmos problemas, mas o aptitude oferece algumas vantagens técnicas sobre o apt-get. Para usuários finais, a escolha entre o apt-get e o aptitude recai mais sobre suas preferências pessoais, já que são ferramentas destinadas a solucionar exatamente o mesmo problema.

Muitas das deficiências do apt-get, que levaram ao aparecimento do aptitude já foram solucionadas nas versões recentes, o que fez com que as duas ferramentas se tornassem mais e mais parecidas em termos de funções.

Os dois programas resolvem problemas de dependência de pacotes. Porém, durante a remoção de determinados pacotes o apt-get não remove todas as dependências, já o aptitudesim, desde que nenhum outro pacote necessite daquelas dependências.

Visto que o apt-get possui algumas deficiências e que está sendo aos poucos substituído pelo aptitude dê preferência ao comando aptitude.

Nota: Para que o aptitude funcione corretamente devemos primeiramente realizar um update, e somente depois instalar o pacote. Além disso não se pode esperar que instalando um pacote com apt-get conseguiremos resolver problemas de dependência na remoção com o aptitude.

Opções do aptitude editar

Opções de Atualização da lista de pacotes

aptitude update Atualiza a lista de pacotes dos repositórios. Deve ser o primeiro comando a ser executado quando se pretende gerenciar seus pacotes (Equivalente a apt-get update).

Instalação de pacotes

aptitude install pacote Instala um pacote de software e todas as suas dependências. Podemos instalar vários pacotes de uma só vez, usando a sintaxe: aptitude install pacote1 pacote2 pacote3. (Equivalente a apt-get install pacote).
aptitude reinstall pacote Re-instala um pacote, substituindo os arquivos. Bastante útil, quando se quer restaurar arquivos que tenham sido alterados. (Equivalente a apt-get install —reinstall pacote).

Atualização do sistema

aptitude safe-upgrade Instala todas a atualizações disponíveis, satisfazendo todas as dependências. (Equivalente a apt-get -u upgrade).
aptitude full-upgrade Instala todas a atualizações disponíveis, procedendo à instalação ou remoção de pacotes para satisfazer todas as dependências. (Equivalente a apt-get -u dist-upgrade).

Remoção de pacotes

aptitude remove pacote Remove um pacote. É possível remover vários pacotes de uma só vez, usando a sintaxe: apt-get remove pacote1 pacote2 pacote3. (Equivalente a apt-get remove pacote).
aptitude purge pacote Remove totalmente um pacote, incluindo os arquivos de configuração. (Equivalente a apt-get remove ou purge pacote).

Pesquisar por pacotes

aptitude search procura Procura na lista de pacotes e mostra as ocorrências. (Equivalente a apt-cache search procura)

Informações sobre pacotes

aptitude show pacote Mostra informações sobre os pacotes. (Equivalente a apt-cache show pacote)

Exercícios de Revisão editar

1. Faça uma busca por repositórios de software Linux.

2. Geany é uma ferramenta para programação e desenvolvimento, que trabalha com múltiplas linguagens de programação. Como poderia ser feita instalação do programa Geany no Debian?

3. O que é um gerenciador de pacotes?

4. Qual a diferença entre o apt-get e o aptitude ?

5. Faça uma busca sobre o Gerenciador de pacotes Synaptic. Qual a sua utilidade?

Referências editar