Jak utworzyć zależności automatycznej instalacji rpm-a


138

Zbudowałem dwa pakiety RPM

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

proj1zależy od libtest1.soobecnego pliku i jest poprawnie odzwierciedlone w pakietach RPM, jak widać tutaj:

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)

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

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

Jak mogę się upewnić, że libtest1-1.0-1.x86_64.rpmzostanie zainstalowany automatycznie podczas instalacji programu proj1-1.0-1.x86_64.rpm?

Wypróbowałem --aidopcję z rpm -iopisaną tutaj, ale nie zadziałała.

Czy jest inny sposób?

Dzięki za wszelką pomoc.

Odpowiedzi:


102

Utwórz (lokalne) repozytorium i użyj go, yumaby rozwiązać zależności za Ciebie.

Wiki CentOS ma ładną stronę zawierającą instrukcje na ten temat. CentOS wiki HowTos / CreateLocalRepos .


Podsumowanie i dodatkowo zminimalizowane (nie idealne, ale najszybsze):

  1. Utwórz katalog dla swojego lokalnego repozytorium, np /home/user/repo.
  2. Przenieś pakiety RPM do tego katalogu.
  3. Napraw niektóre prawa własności i uprawnienia systemu plików:

    # chown -R root.root /home/user/repo
    
  4. Zainstaluj createrepopakiet, jeśli jeszcze nie został zainstalowany, i uruchom

    # createrepo /home/user/repo
    # chmod -R o-w+r /home/user/repo
    
  5. Utwórz plik konfiguracyjny repozytorium, np. /etc/yum.repos.d/myrepo.repoZawierający

    [local]
    name=My Awesome Repo
    baseurl=file:///home/user/repo
    enabled=1
    gpgcheck=0
    
  6. Zainstaluj pakiet za pomocą

    # yum install packagename
    

46
Link który podałeś rozwiązać moją sprawę tylko z tym jednym wierszu: yum --nogpgcheck localinstall packagename.arch.rpm.
— Matthew

@Matthew Cool, to wyeliminowałoby wszystkie kroki lokalnego repozytorium. Opublikuj to jako odpowiedź, którą bym powiedział.
— gertvdijk

To nie działa zbyt dobrze, jeśli próbujesz skryptu RPM zautomatyzować instalację YUM na AIX, tak jak ja ;-)
— Tricky

1
@ Max13, yum localinstallto jest to samo, co odpowiedź już tutaj zamieszczona , z omówionymi już wadami sytuacji, w których zależności nie występują w repozytoriach yum (zobacz, ta metoda nie zadziała, jeśli [...] część).
— gertvdijk

Pomyślałem, że to również, jeśli nie ma połączenia z Internetem, sudo yum --disablerepo=* --enablerepo=local install packagename.arch.rpmaby upewnić się, yumże nie zajrzy do innych repozytoriów.
— Anshuman Goel

194

Podany link @gertvdijk pokazuje szybki sposób osiągnięcia pożądanych wyników bez konfigurowania lokalnego repozytorium:

$ yum --nogpgcheck localinstall packagename.arch.rpm

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

Edytuj Tylko wyjaśnienie, spowoduje to automatyczne zainstalowanie wszystkich zależności, które są już dostępne w repozytoriach systemowych YUM.

Jeśli masz zależności spełniane przez inne pakiety RPM, których nie ma w repozytoriach systemu, ta metoda nie zadziała, chyba że każdy RPM zostanie również określony packagename.arch.rpmw wierszu poleceń.


7
Nie, to nie zadziała, chyba że libtest1-1.0-1.x86_64.rpmznajduje się w repozytorium w innym miejscu lub oba pakiety są określone w wierszu poleceń, tak jak rpm -iwymagałoby to „ ”. Właśnie to zweryfikowałem w yum3.4.3 (Fedora 18). Transkrypcja tutaj pokazuje, że idzie do updatesrepo o zależności, nawet gdy pliki są właśnie tam.
— Aaron D. Marasco

3
@ AaronD.Marasco może masz rację co do konkretnego przypadku opisanego w pytaniu, ale ta jedna linijka jest znacznie łatwiejsza dla każdego, kto skończy tutaj, tak jak ja, i jest w pełni poprawną odpowiedzią na pytanie w tytule „Jak tworzyć zależności automatycznej instalacji rpm-a ”.
— Matthew

3
Nie, to nie jest „automatyczna instalacja” zależności - podajesz je w wierszu poleceń w taki sam sposób, jak w przypadku „ rpm -i”, więc używanie nie yumdaje żadnych dodatkowych korzyści.
— Aaron D. Marasco

2
Przeczytaj ponownie, co napisałem. Wszelkie zależności zostały pobrane z repozytorium, nawet jeśli były lokalnie dostępne w katalogu z zainstalowanym RPM.
— Aaron D. Marasco

1
@ AaronD.Marasco Nie debatuję nad tym, że inne opublikowane rozwiązanie jest lepsze dla konkretnego przykładu, o który pytał OP. Moja odpowiedź jest jednak poprawna, jeśli chodzi o odpowiedź na pytanie w tytule i jest znacznie szybsza niż konfigurowanie lokalnego repozytorium i pomoże innym, którzy tu trafią, tak jak ja, którzy chcą szybkiego sposobu na uzyskanie yum, aby automatycznie zainstalować zależności, które rpm wymaga. To jest celem przepełnienia stosu, aby pomóc społeczności w wyszukiwaniu odpowiedzi, a nie tylko pomagać OP.
— Matthew

28

Dla użytkowników dnf po prostu użyj dnf install *.rpm, localinstallnie jest już potrzebne.


1
Przybyłem tutaj, aby powiedzieć dokładnie to
— nawfel bgh

1
Dzięki, miałem problemy w instalacji mysql-workbenchz rpm -ivh. ostatecznie skończyło się na tym poście. DNF załatwił sprawę.
— BlueBird

21

U mnie pracowałem tylko z

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

I automatycznie poprosił o zezwolenie na pobranie zależności. Poniżej przykładu używam fedory 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

najłatwiej myślę
— Shams

Nie jest to bezpośrednie rozwiązanie rpm, ale podoba mi się to najbardziej.
— TFuto

Nie jest rozwiązaniem RPM, ale jest najłatwiejszym sposobem zainstalowania zależności za pomocą tylko jednego polecenia. To zadziałało dla mnie bez zarzutu
— Enrique Benitez

9

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ę, że wymyśla prawidłową kolejność ich instalowania i instaluje RPM.


5
To nadal nie obsługuje przypadku, jeśli zależności nie znajdują się w bieżącym katalogu.
— Ding-Yi Chen

4

Odpowiedź Mateusza wzbudziła wiele emocji, ponieważ brakuje w niej jeszcze drobnego szczegółu. Ogólne polecenie brzmiałoby:

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

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

Yum wyszuka zależności między wszystkimi plikami pakietów podanymi w wierszu poleceń, A JEŚLI NIE MOŻE znaleźć zależności, użyje również dowolnych skonfigurowanych i włączonych repozytoriów yum.

Ani bieżący katalog roboczy, ani ścieżki żadnego z nich package_file_namenie będą przeszukiwane, z wyjątkiem sytuacji, gdy którykolwiek z tych katalogów został wcześniej skonfigurowany jako aktywne yumrepozytorium.

Tak więc w przypadku OP yumpolecenie:

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

zrobiłby tak, jak zrobiłoby to rpm:

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

Różnica między tymi yumi rpmwywołaniami byłaby widoczna tylko wtedy, gdyby jeden z wymienionych pakietów do zainstalowania miał dalsze zależności od pakietów NIE wymienionych w wierszu poleceń.

W takim przypadku rpmpo prostu odmówi kontynuowania, podczas gdy yumużyje skonfigurowanych i włączonych repozytoriów yum do wyszukiwania zależności i może się powieść.

Bieżący katalog roboczy NIE będzie przeszukiwany w żadnym przypadku, z wyjątkiem sytuacji, gdy został wcześniej skonfigurowany jako włączone yumrepozytorium.


0

Wpadłem na to i to, co zadziałało, to uruchomienie yum localinstall enterPkgNameHere.rpmz katalogu, w którym znajduje się plik .rpm.

Uwaga: zastąp enterPkgNameHere.rpmnazwę pliku .rpm.


0

W przypadku openSUSE Leap 15 otrzymuję podobny błąd:

> 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

Uruchamiam to polecenie, aby dowiedzieć się, jakie są zależności:

> 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

Następnie uruchamiam to polecenie, aby zainstalować zależności:

> 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

Następnie uruchamiam to, aby zainstalować rpmplik:

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

Jestem nie wiem, czy to jest najlepsza praktyka, jednak rozwiązać mój problem.


0

Krok 1: skopiuj wszystkie paczki rpm w podanych lokalizacjach

Krok 2: jeśli createrepo nie jest jeszcze zainstalowane, ponieważ domyślnie nie będzie, zainstaluj je.

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

Krok 3: utwórz metedane repozytorium i podaj poniższe uprawnienia

[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

Krok 4: Utwórz plik repozytorium z następującą zawartością w /etc/yum.repos.d/mysql.repo

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

Krok 5 Uruchom to polecenie, aby zainstalować

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

-2

Po prostu uruchom następujące polecenie.

sudo dnf install *package.rpm

Wpisz swoje hasło i gotowe.


-5

Proces generowania RPM z pliku źródłowego: 1) pobierz plik źródłowy z rozszerzeniem.gz. 2) zainstaluj rpm-build i rpmdevtools z yum install. (folder rpmbuild zostanie wygenerowany ... foldery SPECS, SOURCES, RPMS .. zostaną wygenerowane w folderze rpmbuild). 3) skopiuj kod źródłowy.gz do folderu SOURCES. (Rpmbuild / SOURCES) 4) Rozpakuj plik tar za pomocą następującego polecenia. przejdź do folderu SOURCES: rpmbuild / SOURCES, w którym znajduje się plik tar. polecenie: np. tar -xvzf httpd-2.22.tar.gz folder httpd-2.22 zostanie wygenerowany w tej samej ścieżce. Sprawdź, czy apr i apr-util i tam w folderze httpd-2.22 / srclib. Jeśli apr i apr-util nie istnieją, pobierz najnowszą wersję z witryny Apache, rozpakuj ją i umieść w folderze httpd-2.22 / srclib. Upewnij się również, że masz zainstalowany pcre w swoim systemie.

5) przejdź do wyodrębnionego folderu, a następnie wpisz poniższe polecenie: ./configure --prefix = / usr / local / apache2 --with-included-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker --enable-mods-static = all 6) uruchom poniższe polecenie po pomyślnym skonfigurowaniu: wykonaj 7) po pomyślnym wykonaniu polecenia make uruchom: checkinstall w tym samym folderze. (jeśli nie masz 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 pakiet wykluczeń: EXCLUDE = "/ selinux" 8) checkinstall zapyta o opcję (wpisz R jeśli chcesz tp budować rpm dla pliku źródłowego) 9) Gotowy plik .rpm zostanie wbudowany w folder RPMS wewnątrz pliku rpmbuild / RPMS. .. Wszystkiego najlepszego ....

Pozdrawiam, Prerana


Gdzie ktoś pytał o budowanie czegoś? Chodziło o rozwiązanie zależności już zbudowanego RPM.
— Craig Jackson
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.