O RPM (gerenciador de pacotes RPM) é usado para gerenciar pacotes de software. Seus principais comandos são rpm e rpmbuild. O banco de dados RPM avançado pode ser consultado pelos usuários, administradores de sistema e construtores de pacotes para obtenção de informações detalhadas sobre o software instalado.
Basicamente, o rpm possui cinco modos: instalação, desinstalação (ou atualização) de pacotes de software, reconstrução do banco de dados RPM, consulta de bancos RPM ou arquivos RPM individuais, verificação de integridade dos pacotes e assinatura de pacotes. O rpmbuild pode ser usado para construir pacotes instaláveis de fontes originais.
Os arquivos RPM instaláveis são compactados em um formato binário especial. Esses são arquivos de programa para instalação e determinadas metainformações usadas durante a instalação pelo comando rpm para configurar o pacote de softwares. Também são armazenados no banco de dados RPM com o objetivo de documentação. Os arquivos RPM normalmente têm a extensão .rpm.
![]() | pacotes de desenvolvimento de software |
|---|---|
Para vários pacotes, os componentes necessários para o desenvolvimento de software (bibliotecas, cabeçalhos, arquivos de inclusão etc.) foram colocados em pacotes separados. Esses pacotes de desenvolvimento só são necessários quando você deseja compilar software por conta própria (por exemplo, os pacotes do GNOME mais recentes). Eles podem ser identificados pela extensão de nome | |
Os pacotes RPM possuem uma assinatura GnuPG. O comando rpm --checksig pacote-1.2.3.rpm pode ser usado para verificar a assinatura de um pacote RPM e determinar se ele provém do SUSE ou de outro recurso confiável. Isso é especialmente recomendado para pacotes de atualização da Internet.
Normalmente, a instalação de um arquivo RPM é bem simples: rpm -i pacote.rpm. Com esse comando, o pacote será instalado, mas somente se as dependências forem atendidas e não houver conflitos com outros pacotes. Com uma mensagem de erro, o rpm solicita os pacotes que devem ser instalados para atender a requisitos de dependência. Em segundo plano, o banco de dados RPM garante que não haja conflitos, pois um arquivo específico pode pertencer a apenas um pacote. Ao escolher opções diferentes, você pode forçar o rpm a ignorar esses padrões, mas isso é somente para especialistas. Caso contrário, você se arrisca a comprometer a integridade do sistema e, possivelmente, ameaça a capacidade de atualização do sistema.
As opções -U ou --upgrade e -F ou --freshen podem ser usadas para atualizar um pacote (por exemplo, rpm -F pacote.rpm). Esse comando remove os arquivos da versão antiga e instala os novos arquivos imediatamente. A diferença entre as duas versões é que o -U instala pacotes que não existiam no sistema anteriormente, mas -F atualiza somente pacotes previamente instalados. Durante a atualização, o rpm atualiza arquivos de configuração cuidadosamente com a seguinte estratégia:
Se um arquivo de configuração não tiver sido modificado pelo administrador de sistema, o rpm instalará a nova versão do arquivo apropriado. O administrador de sistema não precisa adotar nenhuma ação.
Se um arquivo de configuração tiver sido mudado pelo administrador do sistema antes da atualização, o rpm gravará o arquivo mudado com a extensão .rpmorig ou .rpmsave (arquivo de backup) e instalará a versão do novo pacote (mas somente se o arquivo instalado originalmente e a versão mais nova forem diferentes). Nesse caso, compare o arquivo de backup (.rpmorig ou .rpmsave) com o arquivo recém-instalado e faça novamente as modificações no novo arquivo. Depois, verifique se apagou todos os arquivos .rpmorig e .rpmsave para evitar problemas em atualizações futuras.
Arquivos.rpmnew são exibidos se o arquivo de configuração já existir e se o rótulo noreplace tiver sido especificado no arquivo .spec.
Após uma atualização, os arquivos .rpmsave e .rpmnew devem ser removidos depois de comparados, para que não impeçam atualizações futuras. A extensão .rpmorig será atribuída se o arquivo não tiver sido previamente reconhecido pelo banco de dados RPM.
Caso contrário, o .rpmsave será usado. Em outras palavras, o .rpmorig resulta da atualização de um formato estranho ao RPM. O .rpmsave resulta da atualização de um RPM mais antigo para um RPM mais novo. O .rpmnew não revela se o administrador do sistema fez mudanças no arquivo de configuração. Uma lista destes arquivos está disponível em /var/adm/rpmconfigcheck. Alguns arquivos de configuração (como /etc/httpd/httpd.conf) não são sobregravados para permitir operação continuada.
O switch -Unão é somente um equivalente para a desinstalação com a opção -e e a instalação com a opção -i. Use -U sempre que possível.
Para remover um pacote, digite rpm -e pacote. O rpm, que só apaga o pacote quando não há dependências não resolvidas. É teoricamente impossível apagar Tcl/Tk, por exemplo, enquanto outro aplicativo exigir sua existência. Mesmo nesse caso, o RPM pede ajuda do banco de dados. Se, por qualquer motivo, a exclusão for impossível (mesmo que não exista nenhuma dependência adicional), talvez seja útil reconstruir o banco de dados RPM usando a opção --rebuilddb.
Para garantir a segurança operacional de um sistema, pacotes de atualização devem ser instalados no sistema periodicamente. Anteriormente, um erro em um pacote só poderia ser eliminado com a substituição de todo o pacote. Pacotes grandes com bugs em pequenos arquivos podem resultar facilmente nesse cenário. Porém, o RPM do SUSE oferece um recurso que permite a instalação de patches em pacotes.
Como exemplo, as considerações mais importantes são demonstradas com pine:
Para verificar isso, consulte primeiro a versão instalada do pacote. No caso do pine, isso pode ser feito com
rpm -q pine pine-4.44-188
Em seguida, verifique se o RPM com patch é adequado para essa versão do pine:
rpm -qp --basedon pine-4.44-224.i586.patch.rpm pine = 4.44-188 pine = 4.44-195 pine = 4.44-207
Esse patch é adequado para três versões diferentes do pine. A versão instalada no exemplo também está listada para que o patch possa ser instalado.
Os arquivos afetados por um patch podem ser facilmente vistos no RPM com patch. O parâmetro rpm-P permite a seleção de recursos de patch especiais. Exiba a lista de arquivos com o seguinte comando:
rpm -qpPl pine-4.44-224.i586.patch.rpm /etc/pine.conf /etc/pine.conf.fixed /usr/bin/pine
ou, se o patch já estiver instalado, com o seguinte comando:
rpm -qPl pine /etc/pine.conf /etc/pine.conf.fixed /usr/bin/pine
RPMs com patch são usados como RPMs comuns. A única diferença é que um RPM adequado já deve estar instalado.
É possível exibir uma lista de todos os patches instalados no sistema com o comando rpm -qPa. Se somente um patch for instalado em um novo sistema (como no exemplo), a lista será exibida como a seguir:
rpm -qPa pine-4.44-224
Se posteriormente você desejar saber qual versão de pacote foi originalmente instalada, essas informações também estarão disponíveis no banco de dados RPM. No caso do pine, é possível exibir essas informações com o seguinte comando:
rpm -q --basedon pine pine = 4.44-188
Mais informações, incluindo informações sobre o recurso de patch do RPM, estão disponíveis nas páginas de manual de rpm e rpmbuild.
![]() | atualizações oficiais do SUSE Linux Enterprise Desktop |
|---|---|
Para que o tamanho de download das atualizações seja o menor possível, as atualizações oficiais do SUSE Linux Enterprise Desktop não são fornecidas como RPMs de patch, mas como pacotes Delta RPM (consulte a Seção 5.2.4, “Pacotes RPM Delta” para obter detalhes). | |
Os pacotes RPM Delta possuem uma diferença entre uma versão nova e antiga de um pacote RPM. Aplicar um RPM delta a um RPM antigo resulta em um RPM completamente novo. Não é necessário ter uma cópia do RPM antigo, pois um RPM delta também pode funcionar com um RPM instalado. Os pacotes RPM delta têm tamanho ainda menor que os RPMs com patch, o que é uma vantagem durante a transferência de pacotes de atualização na Internet. A desvantagem é que operações de atualização que envolvem RPMs delta consomem consideravelmente mais ciclos de CPU do que as operações com RPMs com patch ou simples.
Os binários prepdeltarpm, writedeltarpm e applydeltarpm integram a suíte de RPM delta (pacote deltarpm) e ajudam na criação e aplicação de pacotes RPM delta. Com os seguintes comandos, crie um RPM delta chamado new.delta.rpm. O comando a seguir pressupõe que old.rpm e new.rpm estejam presentes:
prepdeltarpm -s seq -i info old.rpm > old.cpio prepdeltarpm -f new.rpm > new.cpio xdelta delta -0 old.cpio new.cpio delta writedeltarpm new.rpm delta info new.delta.rpm
Por fim, remova os arquivos de trabalho temporários old.cpio, new.cpio e delta.
Usando applydeltarpm, você poderá reconstruir o novo RPM do arquivo de sistema, se o pacote antigo já estiver instalado:
applydeltarpm new.delta.rpm new.rpm
Para derivá-lo do RPM antigo sem acessar o sistema de arquivos, use a opção -r:
applydeltarpm -r old.rpm new.delta.rpm new.rpm
Consulte /usr/share/doc/packages/deltarpm/README" para obter detalhes técnicos.
Com a opção -q, o rpm inicia consultas, permitindo a inspeção de um arquivo RPM (adicionando-se a opção -p) e também a consulta ao banco de dados RPM de pacotes instalados. Vários switches estão disponíveis para especificar o tipo de informação necessária. Consulte a Tabela 5.1, “Opções mais importantes de consulta de RPM”.
Tabela 5.1. Opções mais importantes de consulta de RPM
|
|
Informações de pacote |
|
|
Lista de arquivos |
|
|
Consulte o pacote que contém o arquivo |
|
|
Lista de arquivos com informações de status (requer |
|
|
Lista somente arquivos de documentação (requer |
|
|
Lista somente arquivos de configuração (requer |
|
|
Lista de arquivos com detalhes completos (a ser usada com |
|
|
Lista recursos do pacote que outro pacote pode solicitar com |
|
|
Recursos exigidos pelo pacote |
|
|
Scripts de instalação (pré-instalação, pós-instalação, desinstalação) |
Por exemplo, o comando rpm -q -i wget exibe as informações mostradas no Exemplo 5.1, “rpm -q -i wget”.
Exemplo 5.1. rpm -q -i wget
Name : wget Relocations: (not relocatable) Version : 1.11.4 Vendor: openSUSE Release : 1.70 Build Date: Sat 01 Aug 2009 09:49:48 CEST Install Date: Thu 06 Aug 2009 14:53:24 CEST Build Host: build18 Group : Productivity/Networking/Web/Utilities Source RPM: wget-1.11.4-1.70.src.rpm Size : 1525431 License: GPL v3 or later Signature : RSA/8, Sat 01 Aug 2009 09:50:04 CEST, Key ID b88b2fd43dbdc284 Packager : http://bugs.opensuse.org URL : http://www.gnu.org/software/wget/ Summary : A Tool for Mirroring FTP and HTTP Servers Description : Wget enables you to retrieve WWW documents or FTP files from a server. This can be done in script files or via the command line. [...]
A opção -f funciona somente se você especificar o nome e o caminho completos do arquivo. Forneça quantos nomes de arquivo desejar. Por exemplo, o seguinte comando
rpm -q -f /bin/rpm /usr/bin/wget
resulta em:
rpm-4.4.2.3-45.5 wget-1.11.4-1.70
Se somente parte do nome de arquivo for conhecida, use um script de shell conforme mostrado no Exemplo 5.2, “Script para pesquisar pacotes”. Passe o nome de arquivo parcial para o script mostrado como um parâmetro ao executá-lo.
Exemplo 5.2. Script para pesquisar pacotes
#! /bin/sh
for i in $(rpm -q -a -l | grep $1); do
echo "\"$i\" is in package:"
rpm -q -f $i
echo ""
doneO comando rpm -q --changelog rpm exibe uma lista detalhada de informações de mudança sobre um pacote específico, classificadas por data.
Com a ajuda do banco de dados RPM instalado, é possível realizar verificações. Inicie as verificações com -V, -y ou --verify. Com essa opção, o rpm mostra todos os arquivos em um pacote que foram modificados desde a instalação. O rpm usa oito símbolos de caracteres para fornecer algumas dicas sobre as seguintes mudanças:
Tabela 5.2. Opções de verificação do RPM
|
|
Resumo de verificação MD5 |
|
|
Tamanho do arquivo |
|
|
Link simbólico |
|
|
Tempo de modificação |
|
|
Números de dispositivo principais e auxiliares |
|
|
Proprietário |
|
|
Grupo |
|
|
Modo (tipo de arquivo e permissões) |
No caso de arquivos de configuração, a letra c é impressa. Por exemplo, para mudanças para /etc/wgetrc (wget):
rpm -V wget S.5....T c /etc/wgetrc
Os arquivos do banco de dados RPM são colocados em /var/lib/rpm. Se a partição /usr tiver o tamanho de 1 GB, esse banco de dados poderá ocupar praticamente 30 MB, especialmente após uma atualização completa. Se o banco de dados for maior do que o esperado, será útil reconstruir o banco de dados com a opção --rebuilddb. Antes disso, faça um backup do banco de dados antigo. O script cron cron.daily faz cópias diárias do banco de dados (compactado com gzip) e as armazena em /var/adm/backup/rpmdb. O número de cópias é controlado pela variável MAX_RPMDB_BACKUPS (padrão: 5) em /etc/sysconfig/backup. O tamanho de um único backup é de aproximadamente 1 MB para 1 GB em /usr.
Todos os pacotes de fonte têm a extensão .src.rpm (RPM de fonte).
![]() | |
Pacotes de fonte podem ser copiados da mídia de instalação para o disco rígido e descompactados com o YaST. Porém, eles não são marcados como instalados ( | |
Os diretórios a seguir devem estar disponíveis para rpm e rpmbuild em /usr/src/packages (a menos que você tenha especificado configurações personalizadas em um arquivo como /etc/rpmrc):
SOURCES
para as fontes originais (arquivos .tar.bz2 ou .tar.gz etc.) e para ajustes específicos de distribuição (geralmente arquivos .diff ou .patch)
SPECS
para os arquivos .spec, similares a um metaMakefile, que controla o processo de construção
BUILD
diretório em que todas as fontes são descompactadas, corrigidas e compiladas
RPMS
local em que os pacotes binários concluídos são armazenados
SRPMS local em que estão os RPMs de fonte
Quando você instala um pacote de fonte com o YaST, todos os componentes necessários são instalados em /usr/src/packages: as fontes e os ajustes em SOURCES e o arquivo .spec relevante em SPECS.
![]() | |
Não faça experiências com os componentes do sistema ( | |
O exemplo a seguir usa o pacote wget.src.rpm. Após instalar o pacote de origem, você deverá ter arquivos semelhantes aos da seguinte lista:
/usr/src/packages/SOURCES/wget-1.11.4.tar.bz2 /usr/src/packages/SOURCES/wgetrc.patch /usr/src/packages/SPECS/wget.spec
rpmbuild -b X /usr/src/packages/SPECS/wget.spec inicia a compilação. X é um curinga para vários estágios do processo de construção (consulte a saída de --help ou a documentação do RPM para obter detalhes). Veja a seguir uma breve explicação:
-bp
Preparar as fontes em /usr/src/packages/BUILD: descompactar e corrigir.
-bc
Faz o mesmo que -bp, mas com compilação adicional.
-bi
Faz o mesmo que -bp, mas com a instalação adicional do software criado. Cuidado: se o pacote não aceitar o recurso BuildRoot, talvez você sobregrave os arquivos de configuração.
-bb
Faz o mesmo que -bi, mas com a criação adicional do pacote binário. Se a compilação tiver sido bem-sucedida, o binário deverá estar em /usr/src/packages/RPMS.
-ba
Faz o mesmo que -bb, mas com a criação adicional do RPM de fonte. Se a compilação tiver sido bem-sucedida, o binário deverá estar em /usr/src/packages/SRPMS.
--short-circuit
Ignora algumas etapas.
O RPM binário criado agora pode ser instalado com rpm -i ou, de preferência, com rpm -U. A instalação com rpm faz com que ele apareça no banco de dados RPM.
O perigo de vários pacotes é que arquivos indesejados são adicionados ao sistema em execução durante o processo de construção. Para evitar isso, use build, que cria um ambiente definido para construção do pacote. Para estabelecer esse ambiente chroot, o script build deve ser fornecido com uma árvore de pacote completa. Essa árvore pode ser disponibilizada no disco rígido, por meio do NFS ou DVD. Defina a posição com build --rpms diretório. Ao contrário do comando rpm, o comando build procura o arquivo SPEC no diretório de origem. Para construir wget (como no exemplo acima) com o DVD montado no sistema em /media/dvd, use os comandos seguintes como root:
cd /usr/src/packages/SOURCES/ mv ../SPECS/wget.spec . build --rpms /media/dvd/suse/ wget.spec
Depois disso, um ambiente mínimo é estabelecido em /var/tmp/build-root. O pacote é criado nesse ambiente. Após a conclusão, os pacotes resultantes estarão localizados em /var/tmp/build-root/usr/src/packages/RPMS.
O script build oferece várias opções adicionais. Por exemplo, fazer com que o script prefira seus próprios RPMs, omitir a inicialização do ambiente de construção ou limitar o comando rpm a um dos estágios mencionados acima. Acesse informações adicionais com build --help e a leitura da página de manual build.
O Midnight Commander (mc) pode exibir o conteúdo de arquivos RPM e copiar partes deles. Ele representa arquivos como sistemas de arquivos virtuais, oferecendo todas as opções de menu usuais do Midnight Commander. Exiba o HEADER com F3. Exiba a estrutura de arquivos com as teclas de cursor e Enter. Copie componentes de arquivos com F5.
O KDE oferece a ferramenta kpackage como front end para rpm. Um gerenciador de pacotes completo está disponível como um módulo do YaST (consulte o Capítulo Installing or Removing Software (↑Guia de Implantação)).