Come creare dipendenze per l'installazione automatica di rpm


138

Ho creato due pacchetti RPM

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

proj1dipende dal file libtest1.sopresente e si riflette correttamente nei pacchetti RPM come mostrato qui:

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)

L'installazione di proj1non riesce a causa di una dipendenza mancante.

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

Come posso assicurarmi che libtest1-1.0-1.x86_64.rpmsia installato automaticamente durante l'installazione di proj1-1.0-1.x86_64.rpm?

Ho provato l' --aidopzione con rpm -icome descritto qui ma non ha funzionato per me.

C'è un altro modo?

Grazie per qualsiasi aiuto.

Risposte:


102

Crea un repository (locale) e usalo yumper risolvere le dipendenze per te.

La wiki di CentOS ha una bella pagina che fornisce istruzioni su questo. CentOS wiki HowTos / CreateLocalRepos .


Riassunto e ulteriormente minimizzato (non ideale, ma più veloce):

  1. Crea una directory per il tuo repository locale, ad es /home/user/repo.
  2. Sposta gli RPM in quella directory.
  3. Correggi alcune autorizzazioni di proprietà e del filesystem:

    # chown -R root.root /home/user/repo
    
  4. Installa il createrepopacchetto se non ancora installato ed esegui

    # createrepo /home/user/repo
    # chmod -R o-w+r /home/user/repo
    
  5. Creare un file di configurazione del repository, ad esempio /etc/yum.repos.d/myrepo.repocontenente

    [local]
    name=My Awesome Repo
    baseurl=file:///home/user/repo
    enabled=1
    gpgcheck=0
    
  6. Installa il tuo pacchetto usando

    # yum install packagename
    

46
Il link che hai fornito risolto il mio caso con un solo questa riga: yum --nogpgcheck localinstall packagename.arch.rpm.
Matteo

@Matthew Cool, eliminerebbe tutti i passaggi del repository locale. Pubblicalo come risposta, direi.
gertvdijk,

Questo non funziona molto bene se stai cercando di scrivere RPM per automatizzare l'installazione di YUM su AIX come me ;-)
Tricky

1
@ Max13, questo è yum localinstalled è lo stesso della risposta già pubblicata qui , con i lati negativi già discussi per le situazioni in cui le dipendenze non sono in repository yum (vedere questo metodo non funzionerà se non [...] parte).
gertvdijk,

Ho pensato anche a questo se non c'è una connessione Internet sudo yum --disablerepo=* --enablerepo=local install packagename.arch.rpmper assicurarsi yumche non guardi in altri repository.
Anshuman Goel,

194

Il link @gertvdijk fornito mostra un modo rapido per ottenere i risultati desiderati senza configurare un repository locale:

$ yum --nogpgcheck localinstall packagename.arch.rpm

Basta passare packagename.arch.rpmal nome file RPM che si desidera installare.

modificare Solo un chiarimento, questo installerà automaticamente tutte le dipendenze che sono già disponibili tramite i repository YUM di sistema.

Se si hanno dipendenze soddisfatte da altri RPM che non si trovano nei repository del sistema, questo metodo non funzionerà a meno che non venga specificato anche ciascun RPM insieme packagename.arch.rpmalla riga di comando.


7
No, questo non funzionerà se non si libtest1-1.0-1.x86_64.rpmtrova in un repository altrove, o entrambi i pacchetti sono specificati sulla riga di comando come " rpm -i" richiederebbe. Ho appena verificato questo su yum3.4.3 (Fedora 18). Trascrizione qui che mostra che va al updatesrepository per le dipendenze, anche quando i file sono proprio lì.
Aaron D. Marasco,

3
@ AaronD.Marasco forse hai ragione sul caso specifico descritto nella domanda, ma questo one-liner è molto più facile per chiunque finisca qui come ho fatto io, ed è una risposta pienamente valida per la domanda nel titolo, "Come rendere le dipendenze di installazione automatica rpm ".
Matteo

3
No, non si tratta di "autoinstallazione" delle dipendenze: le stai specificando sulla riga di comando, come faresti con " rpm -i", quindi l'utilizzo yumnon ti dà alcun vantaggio aggiuntivo.
Aaron D. Marasco

2
Per favore rileggi quello che ho scritto. Tutte le dipendenze sono state scaricate da un repository, anche se erano disponibili localmente nella directory con l'RPM installato.
Aaron D. Marasco,

1
@ AaronD.Marasco Non sto discutendo che l'altra soluzione pubblicata sia migliore per l'esempio specifico di cui stava chiedendo OP. La mia risposta, tuttavia, è corretta per rispondere alla domanda nel titolo ed è molto più veloce rispetto alla configurazione di un repository locale, e aiuterà gli altri che finiscono qui come ho fatto io che vogliono un modo veloce per ottenere yum per installare automaticamente le dipendenze che un rpm richiede. Questo è lo scopo dell'overflow dello stack, per aiutare la comunità a cercare risposte e non solo per aiutare l'OP.
Matteo

28

Per gli utenti dnf basta usare dnf install *.rpm, localinstallnon è più necessario.


1
Sono venuto qui per dire esattamente questo
nawfel bgh

1
grazie, ho faticato per l'installazione mysql-workbenchcon rpm -ivh. alla fine è finito con questo post. DNF ha fatto il trucco.
BlueBird,

21

Per me ha lavorato solo con

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

E ha chiesto automaticamente l'autorizzazione a scaricare le dipendenze. Sotto l'esempio, sto usando 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

il modo più semplice penso
Shams

Non è una soluzione rpm diretta, ma mi piace di più.
TFuto,

Non è una soluzione RPM ma è il modo più semplice per installare dipendenze con un solo comando. Questo ha funzionato perfettamente per me
Enrique Benitez il

9

Ho trovato una soluzione più semplice. Se hai tutti gli RPM nella stessa directory, tutto ciò che devi fare è,

$ sudo rpm -i *.rpm

rpm sembra capire l'ordine corretto per installarli e installa gli RPM.


5
Ciò non gestirà ancora il caso se le dipendenze non si trovano nella directory corrente.
Ding-Yi Chen,

4

La risposta di Matthew ha suscitato molte emozioni, a causa del fatto che manca ancora un piccolo dettaglio. Il comando generale sarebbe:

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

Il package_file_name sopra può includere un percorso assoluto o relativo locale o essere un URL (possibilmente anche un URI).

Yum cercherà le dipendenze tra tutti i file di pacchetto forniti nella riga di comando. E SE FA GUASTO per trovare le dipendenze lì, utilizzerà anche tutti i repository yum configurati e abilitati.

Né la directory di lavoro corrente, né i percorsi di nessuno dei package_file_nameverranno cercati, tranne quando una di queste directory è stata precedentemente configurata come abilitatayum repository .

Quindi nel caso dell'OP il yumcomando:

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

farebbe, come farebbe il rpm:

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

La differenza tra queste yume le rpminvocazioni sarebbe visibile solo se uno dei pacchetti elencati da installare avesse ulteriori dipendenze dai pacchetti NON elencati nella riga di comando.

In tal caso, rpmsi rifiuterà semplicemente di continuare, mentreyum utilizzerebbe tutti i repository yum configurati e abilitati per cercare dipendenze e potrebbe avere esito positivo.

La directory di lavoro corrente NON verrà cercata in nessun caso, tranne quando è stata precedentemente configurata come yumrepository abilitato .


0

Mi sono imbattuto in questo e quello che ha funzionato per me era correre yum localinstall enterPkgNameHere.rpm dall'interno della directory in cui si trova il file .rpm.

Nota: sostituire il enterPkgNameHere.rpmcon il nome del file .rpm.


0

Nel caso di openSUSE Leap 15, ricevo un errore simile:

> 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

Eseguo questo comando per capire quali sono le dipendenze:

> 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

Quindi eseguo questo comando per installare le dipendenze:

> 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

Quindi eseguo questo per installare il rpmfile:

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

Sono Non so se è la migliore pratica, tuttavia risolto il mio problema.


0

Step1: copia tutti i giri / min in determinate posizioni

Step2: se createrepo non è già installato, in quanto non lo sarà di default, installalo.

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

Passaggio 3: creare i metedati del repository e fornire le autorizzazioni seguenti

[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

Passaggio 4: Creare il file repository con i seguenti contenuti in /etc/yum.repos.d/mysql.repo

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

Passaggio 5 Eseguire questo comando per installare

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

-2

Semplice, basta eseguire il seguente comando.

sudo dnf install *package.rpm

Inserisci la tua password e il gioco è fatto.


-5

Processo di generazione di RPM dal file sorgente: 1) scaricare il file sorgente con estensione.gz. 2) installa rpm-build e rpmdevtools da yum install. (Verrà generata la cartella rpmbuild ... Le cartelle SPECS, SOURCES, RPMS .. dovrebbero essere generate all'interno della cartella rpmbuild). 3) copia il codice sorgente.gz nella cartella SOURCES. (Rpmbuild / SOURCES) 4) Decomprimi la tar ball usando il seguente comando. vai alla cartella SOURCES: rpmbuild / SOURCES dove è presente il file tar. comando: ad esempio, la cartella tar -xvzf httpd-2.22.tar.gz httpd-2.22 verrà generata nello stesso percorso. Controlla se apr e apr-util e lì nella cartella httpd-2.22 / srclib. Se apr e apr-util non esistono, scarica l'ultima versione dal sito apache, decomprimilo e inseriscilo nella cartella httpd-2.22 / srclib. Assicurati anche di avere pcre installato nel tuo sistema.

5) vai alla cartella estratta e quindi digita sotto il comando: ./configure --prefix = / usr / local / apache2 --with-incluso-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker --enable-mods-static = all 6) esegui sotto il comando una volta che la configurazione è andata a buon fine: make 7) dopo l'esecuzione corretta del comando make make run: checkinstall nella stessa cartella. (se non si dispone del software checkinstall, scaricare l'ultima versione dal sito). Inoltre, il software checkinstall ha un bug che può essere risolto nel modo seguente :::: individuare checkinstallrc e sostituire TRANSLATE = 1 in TRANSLATE = 0 usando il comando vim. Controlla anche il pacchetto di esclusione: EXCLUDE = "/ selinux" 8) checkinstall richiederà l'opzione (digita R se vuoi tp build rpm per il file sorgente) 9) Il file .rpm fatto verrà creato nella cartella RPMS all'interno del file rpmbuild / RPMS. .. Ti auguro il meglio ....

Saluti, Prerana


Dove qualcuno ha chiesto di costruire qualcosa? Si trattava di risolvere le dipendenze di un RPM già costruito.
Craig Jackson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.