systemdjournalctl: consultar o diário do systemdudev
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”.
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.
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.
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 patchVocê 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).
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.
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 mplayerAlgumas 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 patchPara instalar ou remover pacotes, use os seguintes comandos:
tux >sudo zypper install package_nametux >sudo zypper remove package_name
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.
Há várias maneiras de resolver pacotes com os comandos zypper install e zypper remove.
tux > sudo zypper install MozillaFirefoxtux > sudo zypper install MozillaFirefox-3.5.3tux > sudo zypper install mozilla:MozillaFirefox
onde mozilla é o álias do repositório do qual instalar.
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*'-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 exemplo, para instalar um módulo Perl sem saber o nome do pacote, os recursos podem ser convenientes:
tux > sudo zypper install firefoxJuntamente 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'Você também pode especificar um local ou caminho remoto para um pacote:
tux >sudo zypper install /tmp/install/MozillaFirefox.rpmtux >sudo zypper install http://download.opensuse.org/repositories/mozilla/SLE_12/x86_64/MozillaFirefox-45.0.2-1.1.x86_64.rpm
Para instalar e remover pacotes simultaneamente, use os modificadores +/-. Para instalar
emacs
e remover simultaneamente
vim
, usar:
tux > sudo zypper install emacs -vimPara 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 # Wrongtux >sudo zypper install vim -emacs # Correcttux >sudo zypper install -- -emacs +vim # same as abovetux >sudo 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:
tux > sudo 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:
tux >sudo zypper--non-interactiveinstall package_name
Essa opção permite o uso do zypper em scripts e tarefas cron.
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 onlytux >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.
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.
Para verificar se todas as dependências ainda são atendidas e para reparar dependências ausentes, use:
tux > zypper verifyAlé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-recommendsEsse 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.
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 .
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-optionalPara instalar todos os patches referentes a um problema específico do Bugzilla, use:
tux > sudo zypper patch --bugzilla=numberPara 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-2713Para instalar apenas os patches que afetam o Zypper e o gerenciamento de pacote propriamente dito, use:
tux > sudo zypper patch --updatestack-onlyPara saber se há patches disponíveis, o Zypper permite ver as seguintes informações:
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.
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
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:
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
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
[...]
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 updatePara atualizar pacotes individuais, especifique o pacote com o comando update ou install:
tux >sudo zypper update package_nametux >sudo zypper install package_name
Uma lista de todos os novos pacotes instaláveis pode ser obtida pelo comando:
tux > zypper list-updatesObserve 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.
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 --orphanedCom essa lista, você pode decidir se um pacote ainda é necessário ou pode ser removido com segurança.
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.
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 reposO resultado parecerá com o seguinte:
# | 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 -dPara adicionar um repositório, execute
tux > sudo zypper addrepo URI aliasO 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.
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 1tux >sudo zypper removerepo "SLEHA-12-GEO"
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' firefoxO 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 productstux >zypper patternstux >zypper packagestux >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.
fire
tux > zypper search "fire"MozillaFirefox
tux > zypper search --match-exact "MozillaFirefox"tux > zypper search -d firetux > zypper search -u firefir, 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.
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.
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 refreshSe isso não ajudar, tente
tux > sudo zypper refresh -fdbIsso força uma atualização completa e a reconstrução do banco de dados, incluindo um download forçado dos metadados iniciais.
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.
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.
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.
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.
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.
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.
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.
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”.
|
|
Informações de pacote |
|
|
Lista de arquivos |
|
|
Consulte o pacote que contém o arquivo ARQUIVO (o caminho completo deve ser especificado com 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.2, “rpm -q -i wget”.
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.
#! /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:
|
|
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 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.
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 ([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.
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.
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.
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.