você está aqui: Home  → Colunistas  →  Sysadmin

Instalação DNS - Parte 1

Por Rubens Queiroz de Almeida

Data de Publicação: 13 de Fevereiro de 2007

A instalação do DNS é algo que praticamente não temos com que nos preocupar hoje em dia. A maior parte das distribuições GNU/Linux já possuem este pacote pré-compilado e pronto para instalação com apenas alguns comandos do sistema de pacotes nativo.

A grande maioria das distribuições emprega o formato de empacotamento de software RPM, iniciais de Red Hat Package Manager, desenvolvido pela empresa RedHat. As distribuições Mandriva, e a própria empresa RedHat empregam este formato. A distribuição Debian emprega um outro formato, chamado deb, bastante poderoso e certamente responsável pela grande popularidade desta distribuição entre administradores de redes e, crescentemente, de usuários desktop, principalmente pelo aparecimento de distribuições como Ubuntu, Knoppix e Kurumin, que se baseiam em sistemas Debian.

Neste capítulo abordaremos, de forma genérica, o gerenciamento básico de pacotes RPM, deb (Debian) e também abordaremos a ferramenta APT, criada originalmente para sistemas Debian e hoje empregada por diversas distribuições, como RedHat e Mandriva. A empresa Conectiva foi a pioneira em realizar a adaptação desta ferramenta para sistemas GNU/Linux com gerenciamento de pacotes baseados em RPM. Além desta adaptação, que como veremos a seguir, facilita em muito a vida de administradores de redes, a Conectiva foi responsável também pela criação da ferramenta Synaptic, que é uma interface gráfica para o gerenciamento de pacotes com APT.

Instalação de Pacotes Pré-Compilados

Sistemas Baseados em RPM

Esta ferramenta permite a instalação, atualização e remoção de pacotes de software, simplificando enormemente esta tarefa comparativamente ao método tradicional, que exigia que todos os pacotes fossem compilados e instalados, em um processo difícil e propenso a falhas, com um grande consumo de tempo.

Com o RPM a instalação de software se torna extremamente simples, requerendo, na maioria dos casos, apenas a execução de um comando de uma linha. Além da facilidade de uso em si, o banco de dados RPM permite a fácil duplicação de sistemas com exatamente a mesma configuração de software.

Empregaremos nos exemplos a seguir, comandos emitidos em um sistema Fedora Core. Obviamente os resultados dos comandos em sistemas diferentes serão variados, porém a metodologia apresentada permanece a mesma.

O RPM possui cinco modos básicos de operação:

  • instalação
  • desinstalação
  • atualização
  • consulta
  • verificação

A seguir passaremos a realizar uma análise de cada um destes modos de operação.

Instalação

Softwares distribuídos no formato rpm geralmente possuem a terminação .rpm, como por exemplo bind_9.2.2.P3-9_i386.rpm, que é o software que implementa o serviço de resolução de nomes em um sistema.

Esta representação contém o nome do software (bind), a versão e número do release (bind_9.2.2.P3-9) e a arquitetura (i386). A instalação de um software requer nada mais do que a execução, como superusuário (root) do comando:

  # rpm -ivh bind_9.2.2.P3-9_i386.rpm
  aviso: bind_9.2.2.P3-9_i386.rpm: V3 DSA signature: NOKEY, key ID 4f2a6fd2
  
  A preparar...               < A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>### [100%]
  1:bind                   < A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>### [100%]

Os argumentos utilizados, ivh, indicam que desejamos instalar o software (i), e desejamos que os resultados obtidos sejam exibidos na tela (v), acrescentando marcas à saída para termos uma idéia, em termos gráficos, do andamento da instalação (h).

O RPM aceita diversos argumentos em um só comando. Caso queiramos instalar diversos pacotes simultaneamente basta especificar o nome de todos eles na linha de comando. No exemplo abaixo, além da instalação do servidor bind, instalamos também o pacote com os utilitários cliente para acesso a diversas funções do bind, como por exemplo, o utilitário host, utilizado para consultas a servidores DNS. Da mesma forma em que no exemplo anterior empreguei diretivas que são mais informativas, posso desta vez optar apenas pela diretiva -i, que se limita apenas a instalar o software e nada mais.

  # rpm -i bind_9.2.2.P3-9_i386.rpm  bind-utils_9.2.2.P3-9_i386.rpm

Posso também utilizar um coringa, para sinalizar que desejo instalar todos os pacotes que se iniciam por bind e que estejam no diretório local:

  # rpm -i bind*

Desinstalação

A remoção de um pacote é tão simples quanto sua instalação:

  # rpm -e bind
  aviso: /etc/rndc.key gravado como /etc/rndc.key.rpmsave

Na remoção de um software basta especificar-se o seu nome. Não é necessário indicar o nome completo (bind_9.2.2.P3-9_i386.rpm) como fizemos quando da instalação.

Na desinstalação, caso a remoção de um pacote implique em problemas para o funcionamento de outros softwares pela eliminação de componentes compartilhados, teremos o seguinte erro:

  # rpm -e bind-utils
  erro: Failed dependencies:
  libdns.so.10 is needed by (installed) bind-9.2.2.P3-9
  libisc.so.4 is needed by (installed) bind-9.2.2.P3-9
  liblwres.so.1 is needed by (installed) bind-9.2.2.P3-9
  bind-utils is needed by (installed) bind-9.2.2.P3-9

O sistema tenta impedir que o sistema se torne inconsistente pela remoção de componentes que são usados por outros pacotes. Em nosso exemplo, diversas bibliotecas são necessárias ao funcionamento do software bind. Sua remoção ocasionaria na corrupção e interrupção de funcionamento do bind.

Entretanto, como não podia deixar de ser, caso o administrador realmente saiba o que está fazendo, existe a possibilidade de se remover o software mesmo com depêndencias não resolvidas. Para remover algum software, ignorando todos e quaisquer problemas passíveis de serem gerados, especificar a opção --nodeps na linha de comando:

  # rpm -e --nodeps bind-utils

Atualização

A atualização de um software também é bastante simples:

  # rpm -Uvh  bind_9.2.2.P3-9_i386.rpm

O que na verdade ocorre quando se faz a atualização de um pacote é que a versão anterior é removida e substituída pela nova. A opção -U pode ser usada com segurança mesmo quando o software não se encontra instalado em seu sistema.

Consultas

O banco de dados RPM nos permite consultar a lista de softwares instalados. Isto é feito através do comando rpm -q. Por exemplo, se quisermos verificar se o software bind está instalado, basta emitir o comando:

  % rpm -q bind
  bind-9.2.2.P3-9

Para executar consultas ao banco de dados RPM não é necessário nenhum privilégio especial. Usuários comuns podem realizar estas consultas livremente.

As consultas podem também ser feitas de um modo mais genérico. Caso não seja conhecido o nome correto do software, pode-se proceder como abaixo:

  % rpm -qa | grep bind
  ypbind-1.12-3
  bind-9.2.2.P3-9
  bind-utils-9.2.2.P3-9

O nosso comando, por ser mais genérico, trouxe também informações sobre o pacote ypbind, que é usado para prover autenticação em uma rede de computadores.

Desta forma, conhecendo-se apenas uma parte do nome de um pacote, podemos obter a informação desejada conjugando o uso do programa rpm com o comando grep.

O rpm nos permite determinar também a qual pacote pertence determinado arquivo. Por exemplo, se desejarmos determinar a qual pacote pertence o arquivo smbd, basta emitir o comando:

  % rpm -qf /etc/init.d/named
  bind-9.2.2.P3-9

Importante, é necessário que se especifique o caminho completo até o arquivo. Caso emitamos o comando:

  rpm -qf named
  erro: ficheiro named: Arquivo ou diretório não encontrado

será emitida uma mensagem de erro mesmo existindo o arquivo.

O comando abaixo exibe informações bem mais completas sobre o software, como a data em que foi compilado, a URL do pacote original (http:www.isc.org/products/BIND/), apenas para citar algumas.

  $ rpm -qi bind
  Name        : bind                      Relocations: (not relocateable)
  Version     : 9.2.2.P3                  Vendor: Red Hat, Inc.
  Release     : 9                         Build Date: Sex 17 Out 2003 13:02:54 BRT
  Install Date: Seg 31 Jan 2005 20:06:51 BRST      Build Host: porky.devel.redhat.com
  Group       : Ambiente de Sistema/Daemons   Source RPM: bind-9.2.2.P3-9.src.rpm
  Size        : 3935546                   License: BSD-like
  Signature   : DSA/SHA1, Ter 28 Out 2003 22:18:07 BRST, Key ID b44269d04f2a6fd2
  Packager    : Red Hat, Inc. <http:bugzilla.redhat.com/bugzilla>
  URL         : http:www.isc.org/products/BIND/
  Summary     : Um servidor de DNS (Domain Name System).
  Description :
  O BIND (Berkeley Internet Name Domain) é uma implementação dos protocolos
  de DNS (Domain Name System). O BIND inclui um servidor de DNS (named), que
  traduz os nomes de máquinas em endereços IP; uma biblioteca de tradução de
  nomes (rotinas para as aplicações usarem para interagir com o DNS) e algumas
  ferramentas para verificar se o servidor de DNS está¡ a funcionar como deve ser.

Uma outra opção de consulta extremamente útil é a listagem de todos os arquivos que integram determinado pacote de software:

  $ rpm -ql bind
  /etc/logrotate.d/named
  /etc/rc.d/init.d/named
  /etc/rndc.conf
  /etc/rndc.key
  /etc/sysconfig/named
  /usr/lib/libisccc.so.0
  /usr/lib/libisccc.so.0.0.1
  /usr/lib/libisccfg.so.1
  /usr/lib/libisccfg.so.1.0.0
  /usr/sbin/dns-keygen
  ... diversas linhas omitidas

O comando acima me informou que o pacote bind possui 204 arquivos. Este comando nos oferece informações valiosas, como por exemplo, qual documentação está disponível, onde se encontram os scripts de inicialização do serviço, os arquivos de log, as bibliotecas utilizadas e muito mais.

Uma outra modalidade de consulta que nos oferece o RPM, é a listagem dos arquivos de documentação distribuídos em conjunto com um pacote:

  rpm -qd bind
  /usr/share/doc/bind-9.2.2.P3/CHANGES
  /usr/share/doc/bind-9.2.2.P3/README
  /usr/share/doc/bind-9.2.2.P3/arm/Bv9ARM-book.xml
  /usr/share/doc/bind-9.2.2.P3/arm/Bv9ARM.ch01.html
  /usr/share/doc/bind-9.2.2.P3/arm/Bv9ARM.ch02.html
  /usr/share/doc/bind-9.2.2.P3/arm/Bv9ARM.ch03.html
  /usr/share/doc/bind-9.2.2.P3/arm/Bv9ARM.ch04.html
  /usr/share/doc/bind-9.2.2.P3/arm/Bv9ARM.ch05.html
  /usr/share/doc/bind-9.2.2.P3/arm/Bv9ARM.ch06.html
  /usr/share/doc/bind-9.2.2.P3/arm/Bv9ARM.ch07.html
  ... diversas linhas omitidas

Uma descoberta interessante, vejam só, as primeiras 10 linhas, de um total de 175, nos exibem os arquivos integrantes do BIND 9 Administrator Reference Manual, que é o guia de referência oficial do Bind. Leitura obrigatória para quem deseja conhecer em mais detalhes o funcionamento deste software.

Visto que o sistema de gerenciamento de pacotes com RPM é extremamente difundido, é fundamental que se domine bem estas funções de consulta. Em diversas ocasiões não precisaremos realizar a instalação do software bind, mas simplesmente alguns ajustes menores. Para isto é muito importante conhecer em profundidade as opções apresentadas neste item.

Verificação

A verificação de um pacote consiste em comparar a informação entre os arquivos que o compõem e aqueles que efetivamente se encontram no sistema. Esta comparação consiste em verificar, entre outras coisas, o tamanho, soma MD5, permissões, tipo de arquivo, a quem o arquivo deve pertencer (dono e grupo).

O comando rpm -V verifica um pacote. Qualquer forma de verificação já abordada nos itens anteriores é válida. Por exemplo:

  # rpm -V bind
  S.5..... c /etc/rndc.key

Se tudo estiver correto nada é impresso na tela. Caso algum arquivo estiver faltando, será impressa uma mensagem de erro informando a inconsistência encontrada:

  # rpm -V bind
  missing  c /etc/rndc.conf
  
  S.5..... c /etc/rndc.key

Neste caso o arquivo rndc.conf, integrante do pacote Bind, está faltando.

Se o seu sistema começar a se comportar misteriosamente, talvez valha a pena fazer uma verificação global:

  rpm -Va > verificacao-dependencias

Como a saída deste comando em um sistema com problemas pode gerar muitas linhas, é conveniente redirecionar o resultado para um arquivo para verificação posterior.

Problemas

  1. Softwares Previamente Instalados

    Se o software já se encontra instalado em seu sistema, temos a seguinte situação:

      # rpm -ivh bind_9.2.2.P3-9_i386.rpm
      package bind_9.2.2 is already installed
    
    No exemplo acima, foi detectado que o software já se encontra instalado e o processamento é interrompido. É possível entretanto que se force a instalação, especificando ao RPM que ignore eventuais erros:

      # rpm -ivh --replacepkgs bind_9.2.2.P3-9_i386.rpm
      bind < A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>##
    
    O comando emitido gerou uma saída contendo o nome do software seguida de marcas indicativas do progresso da instalação.

  2. Arquivos Conflitantes

    Caso se tente instalar um pacote que contenha arquivos que já tenham sido instalados previamente por outros softwares, será gerada a seguinte mensagem de erro:
      # rpm -ivh WebMaker-0.8.5-4.i386.rpm 
      file /usr/share/icons/mini/html.xpm from install of WebMaker-0.8.5-4 conflicts with file from package kdebase-1.1.2-11
    
    Para fazer com que tal erro seja ignorado, utilizar a diretiva --replacefiles:"
      # rpm -ivh --replacefiles WebMaker-0.8.5-4.i386.rpm 
      
      WebMaker < A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>
    
  3. Dependências Não Resolvidas

    Muitos softwares dependem, para seu correto funcionamento, de funções oferecidas por outros softwares. Desta forma, a instalação só é bem sucedida se todos os elementos necessários estiverem presentes no sistema.
      # rpm -ivh bind_9.2.2.P3-9_i386.rpm
      aviso: bind_9.2.2.P3-9_i386.rpm: V3 DSA signature: NOKEY, key ID 4f2a6fd2
      erro: Failed dependencies:
      bind-utils is needed by bind-9.2.2.P3-9
      libdns.so.10 is needed by bind-9.2.2.P3-9
      libisc.so.4 is needed by bind-9.2.2.P3-9
      liblwres.so.1 is needed by bind-9.2.2.P3-9
    
    Para resolver estes problemas é necessário que os pré-requisitos apropriados sejam instalados. É também possível se forçar a instalação, o que certamente não é aconselhável. Na quase totalidade dos casos, ignorar as dependências irá resultar em um software instalado que não funcionará. Para forçar uma instalação, sem respeitar os pré-requisitos, utilizar a opção --nodeps na linha de comando.

 

 

Veja a relação completa dos artigos desta coluna