Aplica-se a SUSE Linux Enterprise Desktop 12 SP2

5 Gerenciando software com ferramentas de linha de comando

Resumo

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 8.1, “Definition of Terms”.

5.1 Usando o zypper

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

5.1.1 Uso geral

A sintaxe geral do zypper é:

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

Comandos do Zypper

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, use:

tux > sudo zypper patch
Opções globais

Você também pode escolher dentre uma ou mais opções globais, digitando-as logo antes do comando:

tux > sudo zypper --non-interactive patch

No exemplo acima, a opção --non-interactive significa que o comando é executado sem perguntar nada (aplicando as respostas padrão automaticamente).

Opções específicas do comando

Para usar as opções específicas de determinado comando, digite-as logo após o comando:

tux > sudo zypper patch --auto-agree-with-licenses

No exemplo acima, a opção --auto-agree-with-licenses é usada para aplicar todos os patches necessários a um sistema sem que você precise confirmar todas as licenças. Em vez disso, a licença é aceita automaticamente.

Argumentos

Alguns comandos requerem um ou mais argumentos. Por exemplo, ao usar o comando install, você precisa especificar qual pacote (ou pacotes) deseja instalar:

tux > sudo zypper install mplayer

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

tux > 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:

tux > sudo 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.

tux > sudo 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.

tux > sudo zypper --userdata string patch

5.1.2 Instalando e removendo software com o zypper

Para instalar ou remover pacotes, use os seguintes comandos:

tux > sudo zypper install package_name
tux > sudo zypper remove package_name
Atenção
Atenção: Não remova pacotes obrigatórios do sistema

Não remova pacotes obrigatórios do sistema, como glibc , zypper , kernel . Se eles forem removidos, o sistema poderá ficar instável ou parar de funcionar completamente.

5.1.2.1 Selecionando os pacotes para instalar ou remover

Há várias maneiras de resolver pacotes com os comandos zypper install e zypper remove.

Pelo Nome Exato do Pacote
tux > sudo zypper install MozillaFirefox
Pelo Nome Exato e Número da Versão do Pacote
tux > sudo zypper install MozillaFirefox-3.5.3
Pelo Álias do Repositório e Nome do Pacote
tux > sudo zypper install mozilla:MozillaFirefox

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

Pelo Nome do Pacote Usando Curingas

Você pode selecionar todos os pacotes que tenham nomes iniciando ou terminando com determinada string. Use os curingas com cuidado, principalmente ao remover pacotes. O comando a seguir instala todos os pacotes que começam com Moz:

tux > sudo zypper install 'Moz*'
Dica
Dica: Removendo todos os pacotes -debuginfo

Ao depurar um problema, às vezes você precisa instalar temporariamente muitos pacotes -debuginfo, que apresentam mais informações sobre a execução dos processos. Depois que a sessão de depuração termina, e você precisa limpar o ambiente, execute o seguinte:

tux > sudo zypper remove '*-debuginfo'
Por Recurso

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

tux > sudo zypper install firefox
Por Recurso, Arquitetura de Hardware ou Versão

Juntamente com um recurso, você pode especificar uma arquitetura de hardware e uma versão:

  • O nome da arquitetura de hardware desejada é anexado ao recurso após um ponto final. Por exemplo, para especificar as arquiteturas AMD64/Intel 64 (que no Zypper é denominada x86_64), use:

    tux > sudo zypper install 'firefox.x86_64'
  • As versões devem ser anexadas ao fim da string e precedidas por um operador: < (menor do que), <= (menor do que ou igual a), = (igual a), >= (maior do que ou igual a), > (maior do que).

    tux > sudo zypper install 'firefox>=3.5.3'
  • Você também pode combinar um requisito de versão e arquitetura de hardware:

    tux > sudo 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:

tux > sudo zypper install /tmp/install/MozillaFirefox.rpm
tux > sudo zypper install http://download.opensuse.org/repositories/mozilla/SLE_12/x86_64/MozillaFirefox-45.0.2-1.1.x86_64.rpm

5.1.2.2 Combinando a instalação e remoção de pacotes

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

tux > sudo zypper install emacs -vim

Para remover emacs e instalar simultaneamente vim , usar:

tux > sudo 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 --:

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

5.1.2.3 Limpando as dependências dos pacotes removidos

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

tux > sudo zypper rm package_name --clean-deps

5.1.2.4 Usando o Zypper em scripts

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:

tux > sudo zypper --non-interactive install package_name

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

5.1.2.5 Instalando ou fazendo download dos pacotes de origem

Se você deseja instalar o pacote de origem correspondente de um pacote, use:

tux > zypper source-install package_name

Quando executados como root, o local padrão para instalar pacotes de origem é /usr/src/packages/ e ~/rpmbuild, quando executados como usuário. Esses valores podem ser mudados em sua configuração de rpm local.

Esse comando também instala 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.

tux > sudo zypper source-install -D package_name # source package only
tux > sudo 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 5.1.5, “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:

tux > 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:

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

5.1.2.6 Instalando pacotes de repositórios desabilitados

Normalmente, você só pode instalar pacotes de repositórios habilitados. A opção --plus-content tag ajuda você a especificar os repositórios que devem ser atualizados, temporariamente habilitados durante a sessão atual do Zypper e desabilitados após sua conclusão.

Por exemplo, para habilitar os repositórios que podem fornecer pacotes -debuginfo ou -debugsource adicionais, use --plus-content debug. É possível especificar essa opção várias vezes.

Para habilitar temporariamente esses repositórios de "depuração" para instalar determinado pacote -debuginfo, use a opção da seguinte forma:

tux > sudo zypper --plus-content debug install "debuginfo(build-id)=eb844a5c20c70a59fc693cd1061f851fb7d046f4"

A string build-id é informada pelo gdb a respeito dos pacotes debuginfo ausentes.

5.1.2.7 Utilitários

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

tux > 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:

tux > sudo zypper install-new-recommends

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

5.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 é abordado no Chapter 14, Upgrading SUSE Linux Enterprise .

5.1.3.1 Instalando todos os patches necessários

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

tux > sudo zypper patch

Todos os patches disponíveis dos repositórios configurados em seu computador são verificados quanto à relevância em sua instalação. Se eles forem relevantes (e não classificados como opcional ou recurso), eles serão instalados imediatamente. Observe que o repositório de atualização oficial apenas estará disponível após o registro de sua instalação do SUSE Linux Enterprise Desktop.

Se um patch que estiver prestes a ser instalado incluir mudanças que exijam reinicialização do sistema, você será avisado antes.

Para instalar também os patches opcionais, use:

tux > sudo zypper patch --with-optional

Para instalar todos os patches referentes a um problema específico do Bugzilla, use:

tux > sudo zypper patch --bugzilla=number

Para instalar todos os patches referentes a uma entrada específica do banco de dados CVE, use:

tux > sudo zypper patch --cve=number

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

tux > sudo zypper patch --cve=CVE-2010-2713

Para instalar apenas os patches que afetam o Zypper e o gerenciamento de pacote propriamente dito, use:

tux > sudo zypper patch --updatestack-only

5.1.3.2 Listando os patches

Para saber se há patches disponíveis, o Zypper permite ver as seguintes informações:

Número de Patches Necessários

Para listar o número de patches necessários (patches que se aplicam ao seu sistema, mas ainda não foram instalados), use patch-check:

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

Esse comando pode ser combinado com a opção --updatestack-only para listar apenas os patches que afetam o Zypper e o gerenciamento de pacote propriamente dito.

Lista de Patches Necessários

Para listar todos os patches necessários (patches que se aplicam ao seu sistema, mas ainda não foram instalados), use list-patches:

tux > 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 for OpenSSL
Lista de Todos os Patches

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

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:

Por Problemas do Bugzilla

Para listar todos os patches necessários relacionados a problemas do Bugzilla, use a opção --bugzilla.

Para listar os patches referentes a um bug específico, você também pode informar o número do bug: --bugzilla=número. Para pesquisar patches relacionados a vários problemas do Bugzilla, adicione vírgulas entre os números de bug, por exemplo:

tux > zypper list-patches --bugzilla=972197,956917
Por Número do CVE

Para listar todos os patches necessários relacionados a uma entrada no banco de dados CVE (Common Vulnerabilities and Exposures – Exposições e Vulnerabilidades Comuns), use a opção --cve.

Para listar os patches de uma entrada específica do banco de dados CVE, você também pode informar o número do CVE: --cve=número. Para pesquisar patches relacionados a várias entradas do banco de dados CVE, adicione vírgulas entre os números do CVE, por exemplo:

tux > zypper list-patches --bugzilla=CVE-2016-2315,CVE-2016-2324

Para listar todos os patches, independentemente de serem necessários, use também a opção --all. Por exemplo, para listar todos os patches com um número do CVE atribuído, use:

tux > zypper list-patches --all --cve
Issue | No.           | Patch             | Category    | Severity  | Status
------+---------------+-------------------+-------------+-----------+----------
cve   | CVE-2015-0287 | SUSE-SLE-Module.. | recommended | moderate  | needed
cve   | CVE-2014-3566 | SUSE-SLE-SERVER.. | recommended | moderate  | not needed
[...]

5.1.3.3 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:

tux > sudo zypper update

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

tux > sudo zypper update package_name
tux > sudo zypper install package_name

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

tux > 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:

tux > sudo 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.

5.1.3.4 Identificando pacotes órfãos

Sempre que você remove um repositório do Zypper ou faz upgrade do sistema, alguns pacotes podem entrar no estado órfão. Esses pacotes órfãos não pertencem mais a nenhum repositório ativo. O comando a seguir fornece uma lista deles:

tux > sudo zypper packages --orphaned

Com essa lista, você pode decidir se um pacote ainda é necessário ou pode ser removido com segurança.

5.1.4 Identificando processos e serviços que usam arquivos apagados

Durante a aplicação de patches, atualização ou remoção de pacotes, pode haver processos em execução no sistema que continuam usando os arquivos que foram apagados pela atualização ou remoção. Use o zypper ps para listar os processos que usam arquivos apagados. Se o processo pertence a um serviço conhecido, o nome do serviço é listado para facilitar sua reinicialização. Por padrão, o zypper ps mostra uma tabela:

PID   | PPID | UID | User  | Command      | Service      | Files
------+------+-----+-------+--------------+--------------+-------------------
814   | 1    | 481 | avahi | avahi-daemon | avahi-daemon | /lib64/ld-2.19.s->
      |      |     |       |              |              | /lib64/libdl-2.1->
      |      |     |       |              |              | /lib64/libpthrea->
      |      |     |       |              |              | /lib64/libc-2.19->
[...]
PID: ID do processo
PPID: ID do processo pai
UID: ID do usuário que executa o processo
Login: Nome de login do usuário que executa o processo
Comando: Comando usado para executar o processo
Serviço: Nome do serviço (apenas se o comando estiver associado a um serviço do sistema)
Arquivos: A lista de arquivos apagados

O formato de saída do zypper ps pode ser controlado da seguinte maneira:

zypper ps-s

Criar uma tabela resumida sem mostrar os arquivos apagados.

PID   | PPID | UID  | User    | Command      | Service
------+------+------+---------+--------------+--------------
814   | 1    | 481  | avahi   | avahi-daemon | avahi-daemon
817   | 1    | 0    | root    | irqbalance   | irqbalance
1567  | 1    | 0    | root    | sshd         | sshd
1761  | 1    | 0    | root    | master       | postfix
1764  | 1761 | 51   | postfix | pickup       | postfix
1765  | 1761 | 51   | postfix | qmgr         | postfix
2031  | 2027 | 1000 | tux     | bash         |
zypper ps-ss

Mostrar apenas os processos associados a um serviço do sistema.

PID   | PPID | UID  | User    | Command      | Service
------+------+------+---------+--------------+--------------
814   | 1    | 481  | avahi   | avahi-daemon | avahi-daemon
817   | 1    | 0    | root    | irqbalance   | irqbalance
1567  | 1    | 0    | root    | sshd         | sshd
1761  | 1    | 0    | root    | master       | postfix
1764  | 1761 | 51   | postfix | pickup       | postfix
1765  | 1761 | 51   | postfix | qmgr         | postfix
zypper ps-sss

Mostrar apenas os serviços do sistema que usam os arquivos apagados.

avahi-daemon
irqbalance
postfix
sshd
zypper ps--print "systemctl status %s"

Mostrar os comandos para recuperar informações de status dos serviços que possam precisar de reinicialização.

systemctl status avahi-daemon
systemctl status irqbalance
systemctl status postfix
systemctl status sshd

Para obter mais informações sobre o gerenciamento de serviços, consulte o Capítulo 14, O daemon systemd.

5.1.5 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:

tux > zypper repos

O resultado parecerá com o seguinte:

Exemplo 5.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:

tux > zypper repos -d

5.1.5.1 Adicionando repositórios

Para adicionar um repositório, execute

tux > sudo 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.

5.1.5.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 5.1, “Zypper: lista de repositórios conhecidos”, use um dos seguintes comandos:

tux > sudo zypper removerepo 1
tux > sudo zypper removerepo "SLEHA-12-GEO"

5.1.5.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:

tux > sudo 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:

tux > sudo zypper renamerepo 'Mozilla Firefox' firefox

5.1.6 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:

tux > zypper products
tux > zypper patterns
tux > zypper packages
tux > 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
tux > zypper search "fire"
Pesquisa simples do pacote exato MozillaFirefox
tux > zypper search --match-exact "MozillaFirefox"
Pesquisar também em descrições e resumos de pacotes
tux > zypper search -d fire
Exibir apenas pacotes ainda não instalados
tux > zypper search -u fire
Exibir pacotes que tenham a string fir, não seguida por e
tux > 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:

tux > 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:

tux > zypper info --requires MozillaFirefox

O what-provides pacote é semelhante ao 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.

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

5.1.8 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:

tux > sudo zypper refresh

Se isso não ajudar, tente

tux > sudo 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.

5.1.9 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 6, Recuperação de sistema e gerenciamento de instantâneos com o Snapper para obter mais informações.

5.1.10 Para obter mais informações

Para obter mais informações sobre gerenciamento de software da linha de comando, digite zypper help, zypper help  comando ou consulte a página de manual do 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.

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

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

Ao corrigir problemas no sistema operacional, talvez seja necessário instalar uma PTF (Problem Temporary Fix – Correção Temporária do Problema) no sistema de produção. Os pacotes oferecidos pelo SUSE são assinados com uma chave PTF especial. No entanto, diferentemente do SUSE Linux Enterprise 11, essa chave não é importada nos sistemas SUSE Linux Enterprise 12 por padrão. Para importar a chave manualmente, use o seguinte comando:

rpm --import /usr/share/doc/packages/suse-build-key/suse_ptf_key.asc

Após importar a chave, você poderá instalar os pacotes PTF no sistema.

5.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. Do 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.

Do 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 nenhuma informação indicando se o administrador do sistema fez modificações 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.

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

5.2.4 Consultas de RPM

Com a opção -q, o rpm inicia consultas, permitindo a inspeção de um arquivo RPM (adicionando a opção -p) e a consulta ao banco de dados RPM dos 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

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

Exemplo 5.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 5.3, “Script para pesquisar pacotes”. Passe o nome de arquivo parcial para o script mostrado como um parâmetro ao executá-lo.

Exemplo 5.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 o 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 5.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.

5.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 origem com o YaST, todos os componentes necessários são instalados em /usr/src/packages: as origens 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 -bX /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.

Lembre-se de que a diretiva BuildRoot no arquivo de especificações foi descontinuada a partir do SLE12. Se você ainda precisa desse recurso, use a opção --buildroot como uma solução alternativa. Para informações mais detalhadas, consulte o banco de dados de suporte em https://www.suse.com/support/kb/doc?id=7017104.

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

5.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 a Chapter 8, Installing or Removing Software.

Imprimir esta página