O Diário do Geek

Manter Software Usando RPM (Red Hat Package Manager)

RPM é um poderoso gerenciador de software que pode ser usado para construir, instalar, consultar, verificar, atualizar e desinstalar pacotes individuais de software. Um pacote RPM consiste de um arquivo de arquivos, e informações de pacotes como nome, versão, descrição e informações sobre dependências de outros pacotes RPM.

RPM é mais do que uma ferramenta específica da Red Hat. Muitas outras distribuições modernas, como Ubuntu e SuSE, usam o RPM também. Os benefícios de usar o RPM incluem:

  • Distribuição de software simplificada, instalação, atualização e remoção
  • Garantias que:
    • software pré-requisito está instalado no sistema.
    • versões de software pré-requisito permanecem compatíveis.
    • arquivos de configuração modificados localmente não são clobbed quando o RPM é atualizado.
    • arquivos de configuração modificados localmente são salvos com um “.rpmsave” se o pacote for excluído mais tarde.
  • permite certificar que o software instalado não foi alterado, modificado, corrompido ou alterado de nenhuma forma.

RPM mantém informações sobre os pacotes instalados sob o diretório “/var/lib/rpm”.

Componentes da ferramenta RPM são:

  • Uma base de dados personalizada contendo informações sobre todos os softwares instalados no sistema, coletadas dos RPMs individuais.
  • Um executável “/bin/rpm”.
  • Repositórios acessíveis pela Internet dos pacotes RPM disponíveis.

Tipos de pacotes RPM

Os pacotes RPM vêm em duas categorias: fonte e binário.

Um RPM fonte pode sempre ser reconhecido porque o nome do arquivo termina com a string “.src.rpm”. Em um source RPM não são apenas os arquivos originais do código fonte do programa, mas scripts que permitem que o código seja recompilado automaticamente, instalado automaticamente, e removido automaticamente. Não há arquivos executáveis de usuário final em um RPM de código fonte. Normalmente, apenas desenvolvedores estão interessados em um RPM.

Um RPM binário contém os compoments do usuário final de um RPM. Nomes de arquivos RPM binários identificam a arquitetura do host para o conteúdo. Por exemplo, o arquivo RPM binário:

bash-3.1-16.1.x86_64.rpm

Contém arquivos utilizáveis apenas em uma CPU de arquitetura Intel X86 de 64 bits. Outros valores comuns da arquitetura incluem “i386” para hosts Intel de 32 bits. Alguns RPM binários podem ser instalados em qualquer arquitetura de CPU porque seus arquivos funcionarão em qualquer máquina; um exemplo destes pacotes “.noarch.rpm” é o RPM “tzdata” que contém informações sobre fusos horários mundiais. Para atualizar seu sistema com a última versão de um pacote, você precisará do RPM binário mais recente para ele.

RPM Naming Scheme

Cada pacote RPM está contido em um único arquivo. O nome do arquivo tem vários campos para identificar completamente o conteúdo do pacote. Enquanto as próprias ferramentas RPM não dependem do nome do arquivo em si, você deve entender a convenção de nomes de arquivos para ajudá-lo a identificar ou baixar o pacote apropriado. Aqui está um exemplo de nome de arquivo RPM:

bash-3.1-16.1.x86_64.rpm

Este RPM é para a shell BASH (“/bin/bash”). O nome do arquivo é composto de várias partes:

--..rpm

where:

    é o nome do programa ou pacote. O nome é normalmente atribuído pelo autor do programa. Em nosso exemplo, os desenvolvedores decidiram nomear seu produto como “bash” por razões que lhes pareceram divertidas.

  • versão] identifica que edição do software este RPM contém. O número é atribuído pelo autor do programa. Usando o número permite determinar qual versão dos fontes do autor foi usada para gerar o RPM.
  • fornece o número de edição do arquivo RPM em si e não a versão dos arquivos fonte do autor. Um RPM atualizado pode ser emitido para fornecer uma versão corrigida do software original do autor. O patch não precisa ter vindo do desenvolvedor original, então o RPM é incrementado ao invés do .
  • descreve o conteúdo do RPM e diz se este arquivo contém o fonte do produto (um “.src.rpm”), arquivos independentes da arquitetura (um “.noarch.rpm”), ou arquivos que só podem ser instalados em um determinado tipo de host (um “.sh.rpm” funcionará somente em um processador embutido STRONGHOLD).
Nota: O é controlado pelo autor original e o é controlado por quem construiu o RPM.

Understanding RPM Versions

O RPM e os campos nem sempre são estritamente numéricos e podem conter outros caracteres além dos dígitos comuns. É comum ver tanto uma versão “10” como uma versão “10a” do mesmo pacote. Às vezes, escolher a versão mais recente pode ser complicado. Aqui é como o próprio RPM compara internamente os números da versão e do lançamento:

1. Remova o prefixo e o sufixo “…rpm”. Por exemplo,:
“bash-3.1-16.1.x86_64.rpm” torna-se “3.1-16.1” e “bash-3.1-16.5a.1.x86_64.rpm” torna-se “3.1-16.5a.1”

2. Compare as restantes strings caracter por caracter, da esquerda para a direita até que um dígito seja encontrado. Se os caracteres diferirem, qualquer caractere que venha mais tarde na seqüência de agrupamento é o mais recente RPM.

3. Quando um dígito é encontrado, converta toda a seqüência de dígitos em um único número binário. No nosso exemplo, os dois caracteres “16” são combinados em um valor de dezesseis (16). Os valores binários resultantes são comparados e o maior valor é a RPM mais recente. Assim, uma RPM com um de “0010” é mais recente que uma com um de “9”.

Passos 2 e 3 são repetidos conforme necessário até que uma diferença ocorra.

Instalando e Removendo Arquivos

Nota: Normalmente apenas um ou de uma RPM pode ser instalado de uma vez.

Versões posteriores são normalmente instaladas usando a função RPM “-U” (update) em vez da função RPM “-i”. Exceções comuns à única – uma regra RPM são os RPMs do kernel. Um sistema normalmente tem várias versões de kernels instaladas; o RPM tem uma lista de quais RPM’s podem ter múltiplas versões instaladas. Para excluir uma versão quando várias estão instaladas, você deve especificar completamente o nome do pacote e version.

Na arquitetura x86_64, é comum ter ambos os pacotes RPM de 32 bits “.i386” e os de 64 bits “.x86_64” instalados para suportar ambas as aplicações de 32 e 64 bits. Normalmente, o RPM não exibe a arquitetura de um pacote em uma consulta, mas você pode exibi-la manualmente.

Instalação e Remoção

# rpm -i --install (install new RPM; error if already installed)# rpm -U --upgrade (delete existing RPM, if any; install new)# rpm -F --freshen (update RPM only if package already installed)# rpm -e --erase (remove, delete, expunge)

Opções Comuns
Saída: -v (verbose – nome do arquivo), -h (hash)
Precondições: -nodeps, -replacefiles, -force (Seja CUIDADO AQUI!!!)
Relocalizar: -excludepath, -prefix, -relocate, -badreloc, -root
SuporteURL: ftp, http

Exemplos:

# rpm -ivh binutils-2.11.90.0.8-12.i386.rpm# rpm -Uvh finger-0.17-9-i386.rpm# rpm -Fvh ftp://updates.redhat.com/current/i386/*.rpm# rpm -e diffutils# rpm -e kernel-enterprise-2.4.9-e.12

Dica: Nunca, jamais, use a opção “-U” para instalar um novo RPM do kernel. A função de atualização “-U” primeiro apaga o RPM atual do sistema e então tenta instalar o novo RPM. Qualquer problema que impeça a instalação do novo RPM deixará o sistema não inicializável. Isto não é o que você quer, então sempre use a chave “-i” para instalar um RPM.

Queries (Pacotes e/ou Informações)

Utilizar uma consulta para informações sobre os pacotes instalados. Você pode consultar contra todos os pacotes instalados, ou um único pacote instalado. Você também pode descobrir qual RPM fornece um arquivo em particular.

# rpm -q # rpm -qa (all installed packages)# rpm -q package_name# rpm -qf (filename)# rpm -qp (package filename)

Informação
default (nome do pacote)
-i: informações gerais
-l: lista de arquivos

Exemplos:

# rpm -qa# rpm -q kernel -i (information)# rpm -q kernel -l (files contained in package)# rpm -q kernel --requires (prereqs)# rpm -q kernel --provides (capabilities provided by package)# rpm -q kernel --scripts (scripts run during installation and removal)# rpm -q kernel --changelog (revision history)# rpm -q kernel -queryformat format (rpm --querytags for list of options)

Dica: Ao procurar por um pacote RPM específico quando o nome exato não é conhecido, um pipeline de comandos como:

$ rpm -qa | grep foo

é comumente usado. Versões posteriores da ferramenta RPM permitem que isto seja sucintamente feito como:

$ rpm -qa '*foo*'

Queries – Verification (Files)

O banco de dados RPM contém muitos atributos sobre cada um dos arquivos instalados por um RPM. Você pode verificar o status atual do arquivo contra as informações catalogadas pelo RPM quando o pacote foi instalado.

# rpm -V package_name# rpm -Va (verify all)# rpm -Vf (filename)# rpm -Vp (package filename)

Nota: Muitas distribuições Linux incluem um RPM “prelink” que tenta diminuir o tempo necessário para iniciar uma aplicação usando uma biblioteca compartilhada (a maioria das aplicações usa pelo menos uma biblioteca compartilhada e potencialmente dezenas) adicionando informações especiais diretamente no arquivo de programa de uma aplicação.

Adicionar esta informação faz com que as aplicações comecem mais rapidamente, mas as alterações no ficheiro invalidam a maioria dos atributos do ficheiro na base de dados RPM, tais como a data da última modificação do ficheiro, o tamanho do ficheiro e o checksum MD5 do ficheiro.

Queries – Verification (Packages)

# rpm -import /mnt/cdrom/RPM-GPG-KEY# rpm -q gpg-pubkey# rpm --checksig m4-1.4.1-11.i386.rpm

Exemplos:

# rpm -qf /path/filename (what package owns filename)# rpm -qf /path/filename -i (what does it do)# rpm -qp m4-1.4.1-11.i386.rpm -l (files in m4)# rpm -qp m4-1.4.1-11.i386.rpm --requires (prereqs needed to install m4)# rpm -q --whatprovides glibc.so (what package provides requisite library)

Repair the RPM database

A ferramenta RPM usa sua própria implementação de banco de dados personalizada para conter suas informações. Algumas vezes essa base de dados pode ficar corrompida; os sintomas incluem alegações de que um pacote RPM instalado está faltando; ou tentativas de atualizar um RPM simplesmente pendurar. Se a sua base de dados RPM estiver pendurada ou corrompida, você pode tentar repará-la com estes comandos. Este processo não é garantido para funcionar.

Você deve estar logado com privilégio de super usuário (aka “root”) para estes passos. Os comandos podem ser copiados e colados diretamente em uma janela de terminal raiz.

1. Certifique-se de que não há mais processos RPM rodando no seu sistema. Use o comando ps para identificá-los. Use the kill command to terminate any “rpm” processes you find; a “kill -9” may be necessary.

2. Delete the lock files that RPM uses:

# rm -f /var/lib/rpm/__db*

3. If you were experiencing a hanging “rpm” command, try it again. If it works, you are finished. If not, perform Step #1 and #2 again. Then proceed to the next step.

4. Make a backup of your RPM database:

# cd /var/lib# mkdir rpm-backup# rsync -av ./rpm/. ./rpm-backup/.

5. Rebuild your RPM database:

# rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1

6. Retry your failed RPM command.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *