Como criar dependências de instalação automática do rpm

138

Eu construí dois pacotes RPM

  • proj1-1.0-1.x86_64.rpm
  • libtest1-1.0-1.x86_64.rpm

proj1depende do arquivo libtest1.soestar presente e é refletido corretamente nos pacotes RPM, como visto aqui:

user@my-pc:~$ rpm -qp --requires proj1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

user@my-pc:~$ rpm -qp --provides libtest1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

A instalação de proj1falha devido a uma dependência ausente.

user@my-pc:~$ rpm -ivh proj1-1.0-1.x86_64.rpm
error: Failed dependencies:
libtest1.so()(64bit) is needed by proj1-1.0-1.x86_64.rpm

Como garantir que a libtest1-1.0-1.x86_64.rpminstalação seja automática durante a instalação do proj1-1.0-1.x86_64.rpm?

Tentei a --aidopção rpm -iconforme descrito aqui, mas não funcionou para mim.

Existe alguma outra maneira?

Obrigado por qualquer ajuda.

HAL
fonte

Respostas:

102

Crie um repositório (local) e use-o yumpara resolver as dependências para você.

O wiki do CentOS tem uma boa página que fornece um tutorial sobre isso. HowTos / CreateLocalRepos da wiki do CentOS .


Resumido e ainda mais minimizado (não ideal, mas mais rápido):

  1. Crie um diretório para seu repositório local, por exemplo /home/user/repo.
  2. Mova os RPMs para esse diretório.
  3. Corrija algumas permissões de propriedade e sistema de arquivos:

    # chown -R root.root /home/user/repo
    
  4. Instale o createrepopacote se ainda não estiver instalado e execute

    # createrepo /home/user/repo
    # chmod -R o-w+r /home/user/repo
    
  5. Crie um arquivo de configuração do repositório, por exemplo, /etc/yum.repos.d/myrepo.repocontendo

    [local]
    name=My Awesome Repo
    baseurl=file:///home/user/repo
    enabled=1
    gpgcheck=0
    
  6. Instale seu pacote usando

    # yum install packagename
    
gertvdijk
fonte
46
O link que você forneceu resolveu o meu caso com apenas esta linha: yum --nogpgcheck localinstall packagename.arch.rpm.
Matthew
@ Matthew Cool, que eliminaria todas as etapas do repositório local. Poste isso como uma resposta, eu diria.
Gtvdijk
Isso não funciona muito bem se você está tentando RPM script para automatizar a instalação do YUM no AIX como eu ;-)
Tricky
1
@ Max13, é yum localinstalle é o mesmo que a resposta já postada aqui , com as desvantagens já discutidas para situações em que as dependências não estão no yum repos (veja que este método não funcionará a menos que faça parte).
gertvdijk
Imaginei esse também, se não houver conexão com a Internet sudo yum --disablerepo=* --enablerepo=local install packagename.arch.rpmpara garantir que yumele não analise outros repositórios.
Anshuman Goel
194

O link @gertvdijk fornecido mostra uma maneira rápida de alcançar os resultados desejados sem configurar um repositório local:

$ yum --nogpgcheck localinstall packagename.arch.rpm

Apenas mude packagename.arch.rpmpara o nome do arquivo RPM que você deseja instalar.

Editar Apenas um esclarecimento, isso instalará automaticamente todas as dependências que já estão disponíveis nos repositórios YUM do sistema.

Se você tiver dependências atendidas por outros RPMs que não estão nos repositórios do sistema, esse método não funcionará, a menos que cada RPM também seja especificado junto com packagename.arch.rpma linha de comando.

Mateus
fonte
7
Não, isso não funcionará, a menos que libtest1-1.0-1.x86_64.rpmesteja em um repositório em outro local ou ambos os pacotes sejam especificados na linha de comando como " rpm -i" exigiria. Acabei de verificar isso no yum3.4.3 (Fedora 18). Transcrição aqui, mostrando que ele vai para o updatesrepositório de dependências, mesmo quando os arquivos estão ali.
Aaron D. Marasco
3
@ AaronD.Marasco, talvez você esteja correto sobre o caso específico descrito na pergunta, mas essa linha é muito mais fácil para quem acaba aqui como eu, e é uma resposta totalmente válida para a pergunta no título "Como faça dependências de instalação automática do rpm ".
Matthew
3
Não, não é "instalar automaticamente" as dependências - você as especifica na linha de comando, da mesma maneira que faria com " rpm -i", portanto, o uso não yumoferece benefícios adicionais.
Aaron D. Marasco
2
Por favor, releia o que escrevi. Todas as dependências foram baixadas de um repositório, mesmo que estivessem disponíveis localmente no diretório com o RPM que você instalou.
Aaron D. Marasco
1
@ AaronD.Marasco Não estou debatendo que a outra solução publicada é melhor para o exemplo específico que o OP estava perguntando. Minha resposta, no entanto, é correta para responder à pergunta no título e é muito mais rápida do que configurar um repositório local, e ajudará outras pessoas que acabarem aqui como eu, que querem uma maneira rápida de obter o yum para instalar automaticamente as dependências que um rpm requer. Esse é o objetivo do estouro de pilha, para ajudar a comunidade a procurar respostas e não apenas ajudar o OP.
Matthew
28

Para usuários de dnf, basta usar dnf install *.rpm, localinstallnão é mais necessário.

mimoralea
fonte
1
Vim aqui para dizer exatamente isso
nawfel bgh
1
obrigado, eu estava lutando para instalar mysql-workbenchcom rpm -ivh. eventualmente acabou com este post. DNF fez o truque.
Julio
21

Para mim trabalhou apenas com

# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm

E solicitou autorização automaticamente para descarregar as depedências. Abaixo o exemplo, estou usando o fedora 22

[root@localhost lukas]# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm
Yum command has been deprecated, redirecting to '/usr/bin/dnf install  ffmpeg-2.6.4-1.fc22.x86_64.rpm'.
See 'man dnf' and 'man yum2dnf' for more information.
To transfer transaction metadata from yum to DNF, run:
'dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate'

Last metadata expiration check performed 0:28:24 ago on Fri Sep 25 12:43:44 2015.
Dependencies resolved.
====================================================================================================================
 Package               Arch           Version                                  Repository                      Size
====================================================================================================================
Installing:
 SDL                   x86_64         1.2.15-17.fc22                           fedora                         214 k
 ffmpeg                x86_64         2.6.4-1.fc22                             @commandline                   1.5 M
 ffmpeg-libs           x86_64         2.6.4-1.fc22                             rpmfusion-free-updates         5.0 M
 fribidi               x86_64         0.19.6-3.fc22                            fedora                          69 k
 lame-libs             x86_64         3.99.5-5.fc22                            rpmfusion-free                 345 k
 libass                x86_64         0.12.1-1.fc22                            updates                         85 k
 libavdevice           x86_64         2.6.4-1.fc22                             rpmfusion-free-updates          75 k
 libdc1394             x86_64         2.2.2-3.fc22                             fedora                         124 k
 libva                 x86_64         1.5.1-1.fc22                             fedora                          79 k
 openal-soft           x86_64         1.16.0-5.fc22                            fedora                         292 k
 opencv-core           x86_64         2.4.11-5.fc22                            updates                        1.9 M
 openjpeg-libs         x86_64         1.5.1-14.fc22                            fedora                          89 k
 schroedinger          x86_64         1.0.11-7.fc22                            fedora                         315 k
 soxr                  x86_64         0.1.2-1.fc22                             updates                         83 k
 x264-libs             x86_64         0.142-12.20141221git6a301b6.fc22         rpmfusion-free                 587 k
 x265-libs             x86_64         1.6-1.fc22                               rpmfusion-free                 486 k
 xvidcore              x86_64         1.3.2-6.fc22                             rpmfusion-free                 264 k

Transaction Summary
====================================================================================================================
Install  17 Packages

Total size: 11 M
Total download size: 9.9 M
Installed size: 35 M
Is this ok [y/N]: y
user5377363
fonte
maneira mais fácil eu acho
Shams
Não é uma solução de rpm direta, mas eu gosto mais disso.
TFuto 26/09/19
Não é uma solução RPM, mas é a maneira mais fácil de instalar dependências com apenas um comando. Isso funcionou perfeitamente para mim
Enrique Benitez
9

Encontrei uma solução mais simples. Se você tiver todos os RPMs no mesmo diretório, tudo que você precisa fazer é,

$ sudo rpm -i *.rpm

rpm parece descobrir a ordem correta para instalá-los e instalar os RPMs.

Rajaram
fonte
5
Isso ainda não resolverá o caso se as dependências não estiverem no diretório atual.
Ding-Yi Chen
4

A resposta de Mateus despertou muitas emoções, porque ainda falta um pequeno detalhe. O comando geral seria:

# yum --nogpgcheck localinstall <package1_file_name> ... <packageN_file_name>

O package_file_nameacima pode incluir o caminho absoluto ou relativo local ou ser um URL (possivelmente até um URI).

O Yum procuraria dependências entre todos os arquivos de pacotes fornecidos na linha de comando E SE FALHAR para encontrar as dependências lá, também usará todos os repositórios do yum configurados e habilitados.

Nem o diretório de trabalho atual nem os caminhos de nenhum package_file_namedeles serão pesquisados, exceto quando qualquer um desses diretórios tiver sido configurado anteriormente como um yumrepositório ativado .

Portanto, no caso do OP, o yumcomando:

# cd <path with pkg files>; yum --nogpgcheck localinstall ./proj1-1.0-1.x86_64.rpm ./libtest1-1.0-1.x86_64.rpm

faria, como faria o rpm:

# cd <path with pkg files>; rpm -i proj1-1.0-1.x86_64.rpm libtest1-1.0-1.x86_64.rpm

A diferença entre essas yume rpminvocações seria visível apenas se um dos pacotes listados a serem instalados tivesse dependências adicionais dos pacotes NÃO listados na linha de comando.

Nesse caso rpm, apenas se recusará a continuar, enquanto yumusaria quaisquer repositórios yum configurados e habilitados para procurar dependências e pode ter êxito.

O diretório de trabalho atual NÃO será pesquisado em nenhum caso, exceto quando tiver sido configurado anteriormente como um yumrepositório ativado .

Artur Opalinski
fonte
0

Eu me deparei com isso e o que funcionou para mim foi executar yum localinstall enterPkgNameHere.rpmdentro do diretório em que o arquivo .rpm está localizado.

Nota: substitua o enterPkgNameHere.rpmpelo nome do seu arquivo .rpm.

specialk1st
fonte
0

No caso do openSUSE Leap 15, estou recebendo um erro semelhante:

> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm 
[sudo] password for root: 
warning: opera-stable_53.0.2907.68_amd64.rpm: Header V4 RSA/SHA512 Signature, key ID a5c7ff72: NOKEY
error: Failed dependencies:
    at is needed by opera-stable-53.0.2907.68-0.x86_64

Eu executo este comando para descobrir quais são as dependências:

> sudo zypper install opera-stable_53.0.2907.68_amd64.rpm 
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 4 NEW packages are going to be installed:
  at libfl2 libHX28 opera-stable

4 new packages to install.
Overall download size: 50.3 MiB. Already cached: 0 B. After the operation, additional 176.9 MiB will be used.
Continue? [y/n/...? shows all options] (y): n

Então eu executo este comando para instalar dependências:

> sudo zypper in at
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 3 NEW packages are going to be installed:
  at libfl2 libHX28

3 new packages to install.
Overall download size: 208.6 KiB. Already cached: 0 B. After the operation, additional 600.4 KiB will be used.
Continue? [y/n/...? shows all options] (y): y

Então eu executo isso para instalar o rpmarquivo:

> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm

Estou não tenho certeza se é a melhor prática, no entanto, ele resolveu o meu problema.

user3405291
fonte
0

Etapa 1: copiar todo o pacote de rpm em determinados locais

Etapa 2: se o createrepo ainda não estiver instalado, como não será por padrão, instale-o.

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

Etapa 3: crie os metedados do repositório e dê a permissão abaixo

[root@pavangildamysql1 8.0.11_rhel7]# chown -R root.root /scratch/PVN/8.0.11_rhel7
[root@pavangildamysql1 8.0.11_rhel7]# createrepo /scratch/PVN/8.0.11_rhel7
Spawning worker 0 with 3 pkgs
Spawning worker 1 with 3 pkgs
Spawning worker 2 with 3 pkgs
Spawning worker 3 with 2 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@pavangildamysql1 8.0.11_rhel7]# chmod -R o-w+r /scratch/PVN/8.0.11_rhel7

Etapa 4: Crie o arquivo de repositório com o seguinte conteúdo em /etc/yum.repos.d/mysql.repo

[local]
name=My Awesome Repo
baseurl=file:///scratch/PVN/8.0.11_rhel7
enabled=1
gpgcheck=0

Etapa 5 Execute este comando para instalar

[root@pavangildamysql1 local]# yum --nogpgcheck localinstall mysql-commercial-server-8.0.11-1.1.el7.x86_64.rpm
Pavan Gilda
fonte
-2

Simples, basta executar o seguinte comando.

sudo dnf install *package.rpm

Digite sua senha e pronto.

Subham Debnath
fonte
-5

Processo de geração de RPM a partir do arquivo de origem: 1) faça o download do arquivo de origem com extensão.gz. 2) instale o rpm-build e o rpmdevtools do yum install. (a pasta rpmbuild será gerada ... SPECS, SOURCES, RPMS .. as pastas deverão ser geradas dentro da pasta rpmbuild). 3) copie o código-fonte.gz para a pasta SOURCES. (Rpmbuild / SOURCES) 4) Desvire a bola de tar usando o seguinte comando. vá para a pasta SOURCES: rpmbuild / SOURCES onde o arquivo tar está presente. comando: por exemplo, a pasta tar -xvzf httpd-2.22.tar.gz httpd-2.22 será gerada no mesmo caminho. Verifique se apr e apr-util e lá na pasta httpd-2.22 / srclib. Se apr e apr-util não existir, baixe a versão mais recente do site apache, descompacte-a e coloque-a na pasta httpd-2.22 / srclib. Verifique também se você possui a instalação do PCRE no seu sistema.

5) vá para a pasta extraída e digite o comando abaixo: ./configure --prefix = / usr / local / apache2 --with-included-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker --enable-mods-static = all 6) execute o comando abaixo assim que o configure for bem-sucedido: make 7) após a execução bem-sucedida od faça o comando executar: verifique a instalação na mesma pasta. (se você não possui o software checkinstall, baixe a versão mais recente do site) Também o software checkinstall possui um bug que pode ser resolvido da seguinte maneira ::::: localize checkinstallrc e substitua TRANSLATE = 1 por TRANSLATE = 0 usando o comando vim. Verifique também se há um pacote de exclusão: EXCLUDE = "/ selinux" 8) O checkinstall solicitará a opção (digite R se você quiser construir o rpm para o arquivo de origem) 9) O arquivo .rpm concluído será criado na pasta RPMS dentro do arquivo rpmbuild / RPMS. .. Muito bem sucedida ....

Atenciosamente, Prerana

user3248738
fonte
Onde alguém perguntou sobre a construção de alguma coisa? Tratava-se de resolver dependências de um RPM já construído.
Craig Jackson