Aplica-se a SUSE Linux Enterprise Desktop 12

7 Gerenciando software com ferramentas de linha de comando

Este capítulo descreve o Zypper e o RPM, duas ferramentas de linha de comando para gerenciar software. Para obter a definição da terminologia usada neste contexto (por exemplo, repositório, patch ou atualização), consulte a Section “Definition of Terms”, Chapter 6, Installing or Removing Software, Deployment Guide.

7.1 Usando o zypper

O zypper é um gerenciador de pacotes de linha de comando para instalar, atualizar e remover pacotes, bem como para gerenciar repositórios. Ele é especialmente útil para realizar tarefas de gerenciamento remoto de software ou gerenciar software de scripts de shell.

7.1.1 Uso geral

A sintaxe geral do zypper é:

zypper [--global-options] command  [--command-options] [arguments]
  ...

Os componentes entre colchetes não são obrigatórios. Consulte zypper help para obter uma lista de opções gerais e todos os comandos. Para obter ajuda sobre determinado comando, digite zypper help comando.

A maneira mais simples de executar o zypper é digitar seu nome seguido de um comando. Por exemplo, para aplicar todos os patches necessários ao sistema, digite:

zypper patch

Você também pode escolher dentre uma ou mais opções globais, digitando-as logo antes do comando. Por exemplo, --non-interactive significa executar o comando sem perguntar nada (aplicando as respostas padrão automaticamente):

zypper --non-interactive patch

Para usar as opções específicas de um comando em particular, digite-as logo após o comando. Por exemplo, --auto-agree-with-licenses significa aplicar todos os patches necessários ao sistema sem solicitar confirmação de nenhuma licença (eles serão aceitos automaticamente):

zypper patch --auto-agree-with-licenses

Alguns comandos requerem um ou mais argumentos. Ao usar o comando install, por exemplo, é preciso especificar o(s) pacotes(s) a instalar:

zypper install mplayer

Algumas opções também requerem um argumento. O comando a seguir lista todos os padrões conhecidos:

zypper search -t pattern

Você pode combinar todos os anteriores. Por exemplo, o comando a seguir instala os pacotes aspell-de e aspell-fr do repositório factory durante o modo verboso:

zypper -v install --from factory aspell-de aspell-fr

A opção --from trata de manter todos os repositórios habilitados (para resolução de dependências) enquanto solicita o pacote do repositório especificado.

Quase todos os comandos zypper possuem uma opção dry-run que simula o comando indicado. Ela pode ser usada para fins de teste.

zypper remove --dry-run MozillaFirefox

O Zypper suporta a opção global --userdata string. É possível especificar uma string com essa opção, que é gravada nos arquivos de registro e plug-ins do Zypper (como o plug-in Btrfs). Ela pode ser usada para marcar e identificar transações nos arquivos de registro.

zypper --userdata string patch

7.1.2 Instalando e removendo software com o zypper

Para instalar ou remover pacotes, use os seguintes comandos:

zypper install package_name
zypper remove package_name

O zypper conhece várias maneiras de tratar pacotes para os comandos install e remove.

pelo nome exato do pacote (e número da versão)
zypper install MozillaFirefox

ou

zypper install MozillaFirefox-3.5.3
pelo álias do repositório e pelo nome do pacote
zypper install mozilla:MozillaFirefox

onde mozilla é o álias do repositório a partir do qual instalar.

pelo nome do pacote usando curingas

O comando a seguir instalará todos os pacotes cujos nomes começam com Moz. Use-o com cuidado, principalmente ao remover pacotes.

zypper install 'Moz*'
por recurso

Por exemplo, para instalar um módulo Perl sem saber o nome do pacote, os recursos podem ser convenientes:

zypper install firefox
por recurso e/ou arquitetura e/ou versão

Juntamente com um recurso, você pode especificar a arquitetura (como x86_64) e/ou a versão. A versão deve ser precedida por um operador: < (menor que), <= (menor que ou igual), = (igual), >= (maior que ou igual), > (maior que).

zypper install 'firefox.x86_64'
zypper install 'firefox>=3.5.3'
zypper install 'firefox.x86_64>=3.5.3'
por caminho para o arquivo RPM

Você também pode especificar um local ou caminho remoto para um pacote:

zypper install /tmp/install/MozillaFirefox.rpm
zypper install http://download.opensuse.org/repositories/mozilla/SUSE_Factory/x86_64/MozillaFirefox-3.5.3-1.3.x86_64.rpm

Para instalar e remover pacotes simultaneamente, use os modificadores +/-. Para instalar o emacs e remover o vim simultaneamente, use:

zypper install emacs -vim

Para remover o emacs e instalar o vim simultaneamente, use:

zypper remove emacs +vim

Para impedir que o nome do pacote iniciado por - seja interpretado como uma opção de comando, use-o sempre como segundo argumento. Se isso não for possível, preceda-o com --:

zypper install -emacs +vim       # Wrong
zypper install vim -emacs        # Correct
zypper install -- -emacs +vim    # same as above
zypper remove emacs +vim         # same as above

Para (com determinado pacote) remover automaticamente qualquer pacote desnecessário após remover o pacote especificado, use a opção --clean-deps:

zypper rm package_name --clean-deps

Por padrão, o zypper solicita uma confirmação antes de instalar ou remover um pacote selecionado, ou quando ocorre um problema. Você pode anular esse comportamento usando a opção --non-interactive. Essa opção deve ser inserida antes do comando real (install, remove e patch), conforme mostrado a seguir:

zypper --non-interactive install package_name

Essa opção permite o uso do zypper em scripts e tarefas cron.

Atenção
Atenção: não remova pacotes de sistema obrigatórios

Não remova pacotes como glibc, zypper, kernel ou similares. Esses pacotes são obrigatórios para o sistema e, se removidos, podem fazer o sistema ficar instável ou parar de funcionar de vez.

7.1.2.1 Instalando ou fazendo download dos pacotes de origem

Se desejar instalar o pacote de origem de um pacote, use:

zypper source-install package_name

Esse comando também instalará as dependências de compilação do pacote especificado. Se não quiser isso, adicione o switch -D. Para instalar apenas as dependências de compilação, use -d.

zypper source-install -D package_name # source package only
zypper source-install -d package_name # build dependencies only

Naturalmente isso só funcionará se o repositório com os pacotes de origem estiver habilitado na sua lista de repositórios (ele é adicionado por padrão, mas não habilitado). Consulte a Seção 7.1.4, “Gerenciando repositórios com o zypper” para obter os detalhes sobre o gerenciamento de repositórios.

Uma lista de todos os pacotes de origem disponíveis nos seus repositórios pode ser obtida com:

zypper search -t srcpackage

É possível também fazer download dos pacotes de origem para todos os pacotes instalados em um diretório local. Para fazer download dos pacotes de origem, use:

zypper source-download

O diretório de download padrão é /var/cache/zypper/source-download. Você pode mudá-lo usando a opção --directory. Para mostrar apenas os pacotes ausentes ou incorretos sem fazer download nem apagar nada, use a opção --status. Para apagar pacotes de origem incorretos, use a opção --delete. Para desabilitar a exclusão, use a opção --no-delete.

7.1.2.2 Utilitários

Para verificar se todas as dependências ainda são atendidas e para reparar dependências ausentes, use:

zypper verify

Além das dependências que precisam ser atendidas, alguns pacotes recomendam outros pacotes. Esses pacotes recomendados são instalados apenas quando estão realmente disponíveis e são instaláveis. Caso os pacotes recomendados fiquem disponíveis após a instalação do pacote que os recomendou (adicionando outros pacotes ou hardware), use o seguinte comando:

zypper install-new-recommends

Este comando será muito útil após conectar uma webcam ou um dispositivo Wi-Fi. Ele instala drivers para o dispositivo e software relacionado, se disponíveis. Os drivers e o software relacionado serão instaláveis se determinadas dependências de hardware forem atendidas.

7.1.3 Atualizando software com o zypper

Existem três maneiras diferentes de atualizar o software usando o zypper: instalando patches, instalando uma versão nova de um pacote ou atualizando a distribuição inteira. Para a segunda opção, use o comando zypper dist-upgrade. O upgrade do SUSE Linux Enterprise Desktop é discutido no Chapter 4, Updating SUSE Linux Enterprise, Deployment Guide.

7.1.3.1 Instalando patches

Para instalar todos os patches lançados oficialmente que se aplicam ao seu sistema, execute:

zypper patch

Nesse caso, todos os patches disponíveis em seus repositórios são verificados quanto à sua relevância e instalados, se necessário. Após o registro de sua instalação do SUSE Linux Enterprise Desktop, um repositório de atualização oficial contendo os patches será adicionado ao seu sistema. O comando acima é tudo o que você deve digitar para aplicá-los quando necessário.

O zypper conhece três comandos diferentes para consultar a disponibilidade dos patches:

zypper patch-check

Lista o número de patches necessários (patches que se aplicam ao seu sistema e ainda não estão instalados)

tux > sudo zypper patch-check
Loading repository data...
Reading installed packages...
5 patches needed (1 security patch)
zypper list-patches

Lista todos os patches necessários (patches que se aplicam ao seu sistema e ainda não estão instalados)




tux > sudo zypper list-patches
Loading repository data...
Reading installed packages...
 
Repository     | Name        | Version | Category | Status  | Summary
---------------+-------------+---------+----------+---------+---------
SLES12-Updates | SUSE-2014-8 | 1       | security | needed  | openssl: Update to OpenSSL 1.0.1g
zypper patches

Lista todos os patches disponíveis para o SUSE Linux Enterprise Desktop, independentemente de já estarem instalados ou de se aplicarem à sua instalação.

Também é possível listar e instalar todos os patches relevantes a problemas específicos. Para listar patches específicos, use o comando zypper list-patches com as seguintes opções:

--bugzilla[=número]

Lista todos os patches necessários para problemas do Bugzilla. Opcionalmente, você pode inserir um número de bug para listar apenas os patches para esse bug específico.

--cve[=número]

Lista todos os patches necessários para problemas do CVE (Common Vulnerabilities and Exposures) ou apenas os patches correspondentes a determinado número de CVE, se especificado.

Para instalar um patch para um problema específico do Bugzilla ou do CVE, use os seguintes comandos:

zypper patch --bugzilla=number

ou

zypper patch --cve=number

Por exemplo, para instalar um patch de segurança com o número do CVE CVE-2010-2713, execute:

zypper patch --cve=CVE-2010-2713

7.1.3.2 Instalando novas versões de pacotes

Se um repositório contém apenas pacotes novos, mas não fornece patches, zypper patch não surte nenhum efeito. Para atualizar todos os pacotes instalados com as versões mais recentes disponíveis (sem afetar a integridade do sistema), use:

zypper update

Para atualizar pacotes individuais, especifique o pacote com o comando update ou install:

zypper update package_name
zypper install package_name

Uma lista de todos os novos pacotes instaláveis pode ser obtida pelo comando:

zypper list-updates

Observe que este comando apenas lista os pacotes correspondentes aos seguintes critérios:

  • têm os mesmo fornecedor que o pacote já instalado,

  • são fornecidos por repositórios com pelo menos a mesma prioridade que o pacote já instalado,

  • são instaláveis (todas as dependências foram atendidas).

Uma lista de todos os novos pacotes disponíveis (sejam instaláveis ou não) pode ser obtida com:

zypper list-updates --all

Para descobrir o motivo pelo qual um novo pacote não pode ser instalado, use o comando zypper install ou zypper update conforme descrito acima.

7.1.4 Gerenciando repositórios com o zypper

Todos os comandos de instalação ou patch do zipper dependem de uma lista de repositórios conhecidos. Para listar todos os repositórios conhecidos para o sistema, use o comando:

zypper repos

O resultado parecerá com o seguinte:

Exemplo 7.1 Zypper: lista de repositórios conhecidos




# | Alias        | Name          | Enabled | Refresh
--+--------------+---------------+---------+--------
1 | SLEHA-12-GEO | SLEHA-12-GEO  | Yes     | No     
2 | SLEHA-12     | SLEHA-12      | Yes     | No     
3 | SLES12       | SLES12        | Yes     | No 
  

Na especificação de repositórios em vários comandos, é possível usar um álias, URI ou número de repositório a partir da saída do comando zypper repos. O álias do repositório é uma versão abreviada do nome do repositório para uso em comandos de gerenciamento de repositórios. Observe que os números dos repositórios podem ser mudados após modificar a lista de repositórios. O álias nunca mudará sozinho.

Por padrão; detalhes, como o URI ou a prioridade do repositório, não são exibidos. Use o seguinte comando para listar todos os detalhes:

zypper repos -d

7.1.4.1 Adicionando repositórios

Para adicionar um repositório, execute

zypper addrepo URI alias

O URI pode ser um repositório da Internet, um recurso de rede, um diretório ou um CD ou DVD (consulte http://en.opensuse.org/openSUSE:Libzypp_URIs para obter os detalhes). O álias é um identificador abreviado e exclusivo do repositório. Você tem livre escolha, com a única condição de que seja exclusivo. O zypper emitirá um aviso se você especificar um álias que já está em uso.

7.1.4.2 Removendo repositórios

Se você deseja remover um repositório da lista, use o comando zypper removerepo junto com o álias ou o número do repositório que você deseja apagar. Por exemplo, para remover o repositório SLEHA-12-GEO do Exemplo 7.1, “Zypper: lista de repositórios conhecidos”, use um dos seguintes comandos:

zypper removerepo 1
zypper removerepo "SLEHA-12-GEO"

7.1.4.3 Modificando repositórios

Habilite ou desabilite os repositórios com zypper modifyrepo. Você também pode alterar as propriedades do repositório (por exemplo, atualizar o comportamento, o nome ou a prioridade) com esse comando. O comando a seguir habilita o repositório chamado updates, ativa a atualização automática e define sua prioridade como 20:

zypper modifyrepo -er -p 20 'updates'

A modificação de repositórios não se limita a um único repositório, você também pode operar em grupos:

-a: todos os repositórios
-l: repositórios locais
-t: repositórios remotos
-m TIPO: repositórios de um tipo específico (em que TIPO pode ser um dos seguintes: http, https, ftp, cd, dvd, dir, file, cifs, smb, nfs, hd, iso)

Para renomear o álias de um repositório, use o comando renamerepo. O exemplo a seguir muda o álias de Mozilla Firefox para firefox:

zypper renamerepo 'Mozilla Firefox' firefox

7.1.5 Consultando repositórios e pacotes com o zypper

O zypper oferece vários métodos de consulta a repositórios ou pacotes. Para obter as listas de todos os produtos, padrões, pacotes ou patches disponíveis, use os seguintes comandos:

zypper products
zypper patterns
zypper packages
zypper patches

Para consultar todos os repositórios para determinados pacotes, use search. Ela funciona em nomes de pacotes ou, opcionalmente, em resumos e descrições de pacotes. Uma string entre / é interpretada como expressão regular. Por padrão, a pesquisa não diferencia maiúsculas de minúsculas.

Pesquisa simples de nome de pacote que inclua fire
zypper search "fire"
Pesquisa simples do pacote exato MozillaFirefox
zypper search --match-exact "MozillaFirefox"
Pesquisar também em descrições e resumos de pacotes
zypper search -d fire
Exibir apenas pacotes ainda não instalados
      zypper search -u fire
     
Exibir pacotes que tenham a string fir, não seguida por e

zypper se "/fir[^e]/"

Para procurar pacotes que oferecem um recurso específico, use o comando what-provides. Por exemplo, para saber qual pacote inclui o módulo Perl SVN::Core, use o seguinte comando:

zypper what-provides 'perl(SVN::Core)'

Para consultar pacotes únicos, use info com um nome exato de pacote como argumento. Ele exibe informações detalhadas sobre um pacote. Para mostrar também o que é exigido/recomendado pelo pacote, use as opções --requires e --recommends:

zypper info --requires MozillaFirefox

O what-provides pacote é semelhante a rpm -q --whatprovides pacote, mas o RPM só pode consultar o banco de dados RPM (que é o banco de dados de todos os pacotes instalados). O zypper, por outro lado, o informará sobre fornecedores do recurso a partir de qualquer repositório, não apenas aqueles que estão instalados.

7.1.6 Configurando o Zypper

O Zypper agora vem com um arquivo de configuração que permite mudar permanentemente o comportamento do Zypper (de todo o sistema ou de um usuário específico). Para mudanças de todo o sistema, edite /etc/zypp/zypper.conf. Para mudanças específicas do usuário, edite ~/.zypper.conf. Se ~/.zypper.conf ainda não existir, você poderá usar /etc/zypp/zypper.conf como gabarito: copie-o para ~/.zypper.conf e ajuste-o como desejar. Consulte os comentários no arquivo para obter ajuda sobre as opções disponíveis.

7.1.7 Solucionando problemas

Caso tenha problemas para acessar os pacotes dos repositórios configurados (por exemplo, o Zypper não encontra determinado pacote apesar de você saber que ele existe em um dos repositórios), poderá ajudar se você atualizar os repositórios com:

zypper refresh

Se isso não ajudar, tente

zypper refresh -fdb

Isso força uma atualização completa e a reconstrução do banco de dados, incluindo um download forçado dos metadados iniciais.

7.1.8 Recurso de rollback do Zypper no sistema de arquivos Btrfs

Se o sistema de arquivos Btrfs for usado na partição raiz e o snapper estiver instalado, o Zypper chamará automaticamente o snapper (usando o script instalado pelo snapper) ao confirmar as mudanças no sistema de arquivos para criar os instantâneos apropriados do sistema de arquivos. É possível usar esses instantâneos para reverter as mudanças feitas pelo Zypper. Consulte o Capítulo 4, Recuperação de sistema e gerenciamento de instantâneos com o Snapper para obter mais informações.

7.1.9 Para obter mais informações

Para obter mais informações sobre como gerenciar o software da linha de comando, digite zypper help, zypper help comando ou consulte a página de manual de zypper(8). Para obter uma referência completa e detalhada dos comandos, incluindo folhetos de dicas com os comandos mais importantes, e informações sobre como usar o Zypper em scripts e aplicativos, consulte http://en.opensuse.org/SDB:Zypper_usage. Você encontra uma lista das mudanças de software da versão mais recente do SUSE Linux Enterprise Desktop em http://en.opensuse.org/openSUSE:Zypper versions.

7.2 RPM — o gerenciador de pacotes

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.

Dica
Dica: 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). É possível identificá-los pela extensão do nome -devel, como os pacotes alsa-devel e gimp-devel.

7.2.1 Verificando a autenticidade do pacote

Os pacotes RPM têm uma assinatura GPG. Para verificar a assinatura de um pacote RPM, use o comando rpm --checksig pacote-1.2.3.rpm para determinar se o pacote vem do SUSE ou de outro recurso confiável. Isso é especialmente recomendado para pacotes de atualização da Internet.

7.2.2 Gerenciando pacotes: instalar, atualizar e desinstalar

Normalmente, a instalação de um arquivo RPM é bem simples: rpm -i pacote.rpm. Com esse comando, o pacote é instalado, mas apenas quando suas dependências são atendidas e quando não há 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. No segundo plano, o banco de dados RPM garante que não haja conflitos, pois um arquivo específico pode pertencer somente a 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 -U nã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. Este comando 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.

7.2.3 Pacotes RPM Delta

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 makedeltarpm e applydelta 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:

makedeltarpm old.rpm new.rpm new.delta.rpm

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 os detalhes técnicos.

7.2.4 Consultas de RPM

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 7.1, “Opções mais importantes de consulta de RPM”.

Tabela 7.1 Opções mais importantes de consulta de RPM

-i

Informações de pacote

-l

Lista de arquivos

-f ARQUIVO

Consulte o pacote que contém o arquivo ARQUIVO (o caminho completo deve ser especificado com ARQUIVO)

-s

Lista de arquivos com informações de status (requer -l)

-d

Lista somente arquivos de documentação (requer -l)

-c

Lista somente arquivos de configuração (requer -l)

--dump

Lista de arquivos com detalhes completos (a ser usada com -l, -c ou -d)

--provides

Lista recursos do pacote que outro pacote pode solicitar com --requires

--requires, -R

Recursos exigidos pelo pacote

--scripts

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 7.2, “rpm -q -i wget”.

Exemplo 7.2 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 funcionará somente se você especificar o nome e o caminho completos do arquivo. Insira quantos nomes de arquivo desejar. Por exemplo, o seguinte comando

rpm -q -f /bin/rpm /usr/bin/wget

resulta em:

rpm-4.8.0-4.3.x86_64
wget-1.11.4-11.18.x86_64

Se apenas parte do nome de arquivo for conhecida, use um script de shell conforme mostrado no Exemplo 7.3, “Script para pesquisar pacotes”. Passe o nome de arquivo parcial para o script mostrado como um parâmetro ao executá-lo.

Exemplo 7.3 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 ""
done

O comando rpm -q --changelog pacote exibe uma lista detalhada com as informações de modificações sobre determinado pacote, classificadas por data.

Com a ajuda do banco de dados RPM instalado, é possível realizar verificações. Inicie as verificações com -V 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 7.2 Opções de verificação do RPM

5

Resumo de verificação MD5

S

Tamanho do arquivo

L

Link simbólico

T

Tempo de modificação

D

Números de dispositivo principais e auxiliares

U

Proprietário

C

Grupo

M

Modo (tipo de arquivo e permissões)

No caso de arquivos de configuração, a letra c é impressa. Por exemplo, para modificações no pacote /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.

7.2.5 Instalando e compilando pacotes de fonte

Todos os pacotes de fonte têm a extensão .src.rpm (RPM de fonte).

Nota
Nota: Pacotes de fontes instalados

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 ([i]) no gerenciador de pacotes. Isso ocorre porque os pacotes de fontes não são inseridos no banco de dados RPM. Somente o software do sistema operacional instalado está listado no banco de dados RPM. Quando você instalar um pacote de fontes, somente o código-fonte será adicionado ao sistema.

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 fontes 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.

Atenção
Atenção: Integridade do Sistema

Não faça experiências com os componentes do sistema (glibc, rpm, etc.), pois isso arrisca a estabilidade 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 os 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.

7.2.6 Compilando pacotes RPM com build

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. Diferentemente do rpm, o comando build procura o arquivo .spec no diretório de fontes. Para construir o wget (como no exemplo acima) com o DVD montado no sistema em /media/dvd, use o seguinte comando 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.

7.2.7 Ferramentas para arquivos RPM e banco de dados RPM

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.

Um gerenciador de pacote completo está disponível como um módulo do YaST. Para obter os detalhes, consulte o Chapter 6, Installing or Removing Software, Deployment Guide.

Imprimir esta página