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.

HAL
źródło

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
    
gertvdijk
źródło
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ń.

Mateusz
źródło
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.

mimoralea
źródło
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
user5377363
źródło
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.

Rajaram
źródło
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.

Artur Opaliński
źródło
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.

specialk1st
źródło
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.

user3405291
źródło
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
Pavan Gilda
źródło
-2

Po prostu uruchom następujące polecenie.

sudo dnf install *package.rpm

Wpisz swoje hasło i gotowe.

Subham Debnath
źródło
-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

user3248738
źródło
Gdzie ktoś pytał o budowanie czegoś? Chodziło o rozwiązanie zależności już zbudowanego RPM.
Craig Jackson