2012-12-14 16 views
90

zbudowałem dwa pakiety RPMJak rpm auto zainstalować zależności

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

proj1 zależy od pliku libtest1.so jest obecny i jest prawidłowo odzwierciedlone w pakietach RPM jak widać tutaj:

[email protected]:~$ rpm -qp --requires proj1-1.0-1.x86_64.rpm 
libtest1.so()(64bit) 

[email protected]:~$ rpm -qp --provides libtest1-1.0-1.x86_64.rpm 
libtest1.so()(64bit) 

Instalacja proj1 kończy się niepowodzeniem z powodu braku zależności.

[email protected]:~$ 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 

Jak mogę zapewnić, że libtest1-1.0-1.x86_64.rpm jest instalowany automatycznie podczas instalacji proj1-1.0-1.x86_64.rpm?

Próbowałem opcji --aid z rpm -i jak opisano here ale to nie działa dla mnie.

Czy istnieje inny sposób?

Dzięki za pomoc.

Odpowiedz

70

Utwórz (lokalne) repozytorium i użyj yum, aby rozwiązać zależność.

Witryna CentOS zawiera ładną stronę z poradami na ten temat. CentOS wiki HowTos/CreateLocalRepos.


podsumować i dodatkowo minimalizowane (nie idealna, ale najszybsza):

  1. Utwórz katalog dla Ciebie lokalnym repozytorium, np /home/user/repo.
  2. Przenieś RPM do tego katalogu.
  3. naprawić niektóre własności i uprawnienia systemu plików:

    # chown -R root.root /home/user/repo 
    
  4. Zainstaluj pakiet createrepo jeśli jeszcze nie jest zainstalowane i uruchomić

    # createrepo /home/user/repo 
    # chmod -R o-w+r /home/user/repo 
    
  5. Tworzenie Plik konfiguracyjny, np /etc/yum.repos.d/myrepo.repo zawierający

    [local] 
    name=My Awesome Repo 
    baseurl=file:///home/user/repo 
    enabled=1 
    gpgcheck=0 
    
  6. zainstalować pakiet używając

    # yum install packagename 
    
+28

Podany link rozwiązał moją sprawę za pomocą tylko jednej linii: 'yum --nogpgcheck localinstall nazwa_programu.arch.rpm'. – Matthew

+0

@Matthew Cool, to wyeliminowałoby kroki z lokalnego lokalnego repozytorium. Opublikuj to jako odpowiedź, powiedziałbym. – gertvdijk

+0

Dzięki @Matthew :) –

139

@gertvdijk łącza pokazuje szybki sposób na osiągnięcie pożądanych rezultatów bez konfigurowania lokalnym repozytorium

$ yum --nogpgcheck localinstall packagename.arch.rpm 

Po prostu zmień packagename.arch.rpm na nazwę pliku RPM, który chcesz zainstalować.

Edytuj Po prostu wyjaśnienie, to automatycznie zainstaluje wszystkie zależności, które są już dostępne w repozytoriach systemu YUM.

Jeśli zależności są spełnione przez inne pakiety RPM, które nie znajdują się w repozytoriach systemu, ta metoda nie będzie działać, dopóki nie zostaną określone poszczególne RPM wraz z packagename.arch.rpm w wierszu polecenia.

+5

Nie, to nie zadziała, dopóki 'libtest1-1.0-1.x86_64.rpm' nie znajduje się w repozytorium w innym miejscu lub oba pakiety są określone w wierszu poleceń, jak" rpm -i ". Właśnie to zweryfikowałem na 'mniam' 3.4.3 (Fedora 18). Transcript [here] (http://pastebin.com/HpjRtqFh) pokazujący, że przechodzi do repozytorium 'updates' dla zależności, nawet gdy pliki są właśnie tam. –

+3

@ AaronD.Marasco Być może masz rację co do konkretnego przypadku opisanego w pytaniu, ale ta jedna linijka jest znacznie łatwiejsza dla każdego, kto zwleka tutaj tak jak ja, i jest w pełni poprawną odpowiedzią na pytanie w tytule "Jak aby zrobić zależność autoinstalacji rpm ". – Matthew

+3

Nie, to nie jest "automatyczna instalacja" zależności - określasz je w wierszu poleceń, w taki sam sposób, jak w przypadku "rpm -i", więc użycie 'yum' nie przyniesie Ci żadnej dodatkowej korzyści. –

4

Znalazłem prostsze rozwiązanie. Jeśli masz wszystkie RPM w tym samym katalogu, wszystko co musisz zrobić, to

$ sudo rpm -i *.rpm 

rpm wydaje się wymyślić odpowiedniej kolejności, aby zainstalować te i instaluje RPM.

+4

To nadal nie obsługuje przypadku, jeśli zależności nie znajdują się w bieżącym katalogu. –

+0

To był najszybszy sposób na rozwiązanie mojego problemu. Dzięki! –

19

Dla użytkowników dnf wystarczy użyć dnf install *.rpm, localinstall nie jest już potrzebna.

+1

Przyszedłem, aby powiedzieć dokładnie to –

+0

dzięki, miałem problem z zainstalowaniem 'mysql-workbench' z' rpm -ivh'. ostatecznie skończyło się tym postem. DNF załatwiło sprawę. – BlueBird

10

Dla mnie pracował tylko z

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

i automatycznie poprosił o zezwolenie na ściągnięcie z depedencies. Poniżej przykład używam Fedory 22

[[email protected] 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 
0

wpadłem na to i co pracował dla mnie było, aby uruchomić yum localinstall enterPkgNameHere.rpm od wewnątrz katalogu, w którym plik .rpm znajduje.

Uwaga: zamień nazwę enterPkgNameHere.rpm na nazwę pliku .rpm.

-2

proces generowania RPM z pliku źródłowego:

  1. Pobierz plik źródłowy with.gz rozbudowa.
  2. Zainstaluj rpm-build i rpmdevtools z yum install. (Zostanie wygenerowany folder rpmbuild ... Foldery SPECS, SOURCES, RPMS .. powinny zostać wygenerowane w folderze rpmbuild).
  3. Skopiuj kod źródłowy.gz do folderu SOURCES. (Rpmbuild/SOURCES)
  4. Rozwiąż smołę za pomocą następującego polecenia.
    • przejdź do folderu SOURCES: rpmbuild/SOURCES, gdzie znajduje się plik tar. Komenda : na przykład tar -xvzf httpd-2.22.tar.gz folder httpd-2.22 zostanie wygenerowany w tej samej ścieżce. Sprawdź, czy apr i apr-util znajdują się w folderze httpd-2.22/srclib. Jeśli apr i apr-util nie istnieją, pobierz najnowszą wersję ze strony apache, rozpakuj ją i umieść w folderze httpd-2.22/srclib. Upewnij się także, że masz zainstalowaną PCR w swoim systemie.
  5. idź do ekstrakcji folder, a następnie wpisz poniżej polecenia: ./configure --prefix=/usr/local/apache2 --with-included-apr --enable-proxy --enable-proxy-balancer --with-mpm=worker --enable-mods-static=all
  6. Uruchom poniższą komendę po konfigurowanie powiedzie: make
  7. Po pomyślnym wykonaniu biegu polecenia make: checkinstall w tym samym folderze. (jeśli nie masz zainstalowanego oprogramowania checkinstall, pobierz najnowszą wersję ze strony) Również oprogramowanie checkinstall ma błąd, który można rozwiązać w następujący sposób: zlokalizuj checkinstallrc, a następnie zamień TRANSLATE = 1 na TRANSLATE = 0 za pomocą polecenia vim. Sprawdź także wykluczyć pakiet: WYKLUCZAJă = "/ SELinux"
  8. checkinstall poprosi o opcji (Type R, jeśli chcesz zbudować tp rpm dla pliku źródłowego)
  9. Gotowe! Plik .rpm zostanie zbudowany w folderze RPMS wewnątrz pliku rpmbuild/RPMS.
1

Odpowiedź Mateusza obudziła wiele emocji, ponieważ wciąż brakuje w nim drobnego szczegółu. Ogólny poleceń byłoby:

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

package_file_name powyżej może zawierać lokalną ścieżkę bezwzględną lub względną lub być adresem (ewentualnie URI).

Yum będzie szukać zależności między wszystkimi plikami pakietów podanymi w wierszu poleceń ORAZ JEŚLI NIE BĘDZIE znaleźć tam zależności, użyje też dowolnych skonfigurowanych i włączonych repozytoriów yum.

Nie będzie ani aktualny katalog roboczy, ani ścieżki żadnego z package_file_name, chyba że któryś z tych katalogów został wcześniej skonfigurowany jako repozytorium z aktywną wersją yum.

Tak więc w przypadku PO za polecenie yum:

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

zrobi, jak zrobi to rpm:

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

differencve pomiędzy tymi yum i rpm wywołania byłyby widoczne tylko jeśli jeden pakietów wymienionych do zainstalowania miało dalsze zależności od pakietów NIE wymienionych w wierszu poleceń.

W takim przypadku rpm po prostu odmówi kontynuacji, a yum użyje dowolnych skonfigurowanych i włączonych repozytoriów yum do wyszukiwania zależności i może się powieść.

Obecny katalog roboczy NIE będzie przeszukiwany w żadnym wypadku, chyba że został wcześniej skonfigurowany jako repozytorium z aktywną wersją yum.

Powiązane problemy