Cara membuat dependensi instal otomatis rpm


144

Saya telah membangun dua paket RPM

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

proj1tergantung pada file libtest1.soyang ada dan itu tercermin dengan benar dalam paket RPM seperti yang terlihat di sini:

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)

Penginstalan proj1gagal karena ketergantungan yang hilang.

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

Bagaimana saya memastikan bahwa libtest1-1.0-1.x86_64.rpmdiinstal secara otomatis selama penginstalan proj1-1.0-1.x86_64.rpm?

Saya memang mencoba --aidopsi dengan rpm -iseperti yang dijelaskan di sini tetapi tidak berhasil untuk saya.

Apakah ada cara lain?

Terima kasih atas bantuannya.

Jawaban:


106

Buat repositori (lokal) dan gunakan yumuntuk membuatnya menyelesaikan dependensi untuk Anda.

Wiki CentOS memiliki halaman yang bagus yang menyediakan cara melakukannya. CentOS wiki HowTos / CreateLocalRepos .


Diringkas dan diminimalkan lebih lanjut (tidak ideal, tapi tercepat):

  1. Buat direktori untuk repositori lokal Anda, misalnya /home/user/repo.
  2. Pindahkan RPM ke direktori itu.
  3. Perbaiki beberapa kepemilikan dan izin sistem file:

    # chown -R root.root /home/user/repo
    
  4. Instal createrepopaket jika belum diinstal, dan jalankan

    # createrepo /home/user/repo
    # chmod -R o-w+r /home/user/repo
    
  5. Buat file konfigurasi repositori, misalnya /etc/yum.repos.d/myrepo.repoberisi

    [local]
    name=My Awesome Repo
    baseurl=file:///home/user/repo
    enabled=1
    gpgcheck=0
    
  6. Instal paket Anda menggunakan

    # yum install packagename
    

48
Link yang Anda berikan memecahkan kasus saya dengan hanya satu baris ini: yum --nogpgcheck localinstall packagename.arch.rpm.
Matius

@Matthew Keren, itu akan menghilangkan seluruh langkah repositori lokal. Posting itu sebagai jawaban yang akan saya katakan.
gertvdijk

Ini tidak berfungsi dengan baik jika Anda mencoba membuat skrip RPM untuk mengotomatiskan penginstalan YUM di AIX seperti saya ;-)
Rumit

1
@ Max13, itu yum localinstalldan itu sama dengan jawaban yang sudah diposting di sini , dengan kelemahan yang sudah dibahas untuk situasi di mana dependensi tidak ada dalam repo yum (lihat metode ini tidak akan berfungsi kecuali [...] bagian).
gertvdijk

Petak yang satu ini juga jika tidak ada koneksi internet di sana sudo yum --disablerepo=* --enablerepo=local install packagename.arch.rpmuntuk memastikan yumtidak melihat ke repositori lain.
Anshuman Goel

201

Tautan @gertvdijk yang disediakan menunjukkan cara cepat untuk mencapai hasil yang diinginkan tanpa mengonfigurasi repositori lokal:

$ yum --nogpgcheck localinstall packagename.arch.rpm

Ubah saja packagename.arch.rpmke nama file RPM yang ingin Anda instal.

Edit Sekadar klarifikasi, ini secara otomatis akan menginstal semua dependensi yang sudah tersedia melalui repositori YUM sistem.

Jika Anda memiliki dependensi yang dipenuhi oleh RPM lain yang tidak ada di repositori sistem, maka metode ini tidak akan berfungsi kecuali setiap RPM juga ditentukan bersama dengan packagename.arch.rpmdi baris perintah.


7
Tidak, ini tidak akan bekerja kecuali libtest1-1.0-1.x86_64.rpmada dalam repositori di tempat lain, atau kedua paket ditentukan pada baris perintah seperti " rpm -i" akan membutuhkan. Saya baru saja memverifikasi ini di yum3.4.3 (Fedora 18). Transkrip di sini menunjukkan bahwa ia masuk ke updatesrepo untuk dependensi, bahkan ketika file ada di sana.
Aaron D. Marasco

3
@ AaronD.Marasco mungkin Anda benar tentang kasus spesifik yang dijelaskan dalam pertanyaan, tetapi kalimat satu ini jauh lebih mudah bagi siapa pun yang menutup di sini seperti yang saya lakukan, dan merupakan jawaban yang sepenuhnya valid untuk pertanyaan dalam judul, "Bagaimana membuat dependensi instal otomatis rpm ".
Matius

3
Tidak, ini bukan "menginstal otomatis" dependensi - Anda menetapkannya pada baris perintah, sama seperti yang Anda lakukan dengan " rpm -i", jadi menggunakan tidak yummemberi Anda manfaat tambahan.
Aaron D. Marasco

2
Silakan baca kembali apa yang saya tulis. Semua dependensi diunduh dari repositori, meskipun dependensi tersebut tersedia secara lokal di direktori dengan RPM yang Anda instal.
Aaron D. Marasco

1
@ AaronD.Marasco Saya tidak memperdebatkan bahwa solusi yang diposting lainnya lebih baik untuk contoh spesifik yang ditanyakan OP. Jawaban saya, bagaimanapun, adalah benar untuk menjawab pertanyaan dalam judul dan jauh lebih cepat daripada mengonfigurasi repo lokal, dan akan membantu orang lain yang berakhir di sini seperti saya yang menginginkan cara cepat untuk membuat yum menginstal dependensi secara otomatis. rpm membutuhkan. Itulah tujuan stack overflow, untuk membantu komunitas mencari jawaban dan tidak hanya membantu OP.
Matius

30

Untuk pengguna dnf cukup gunakan dnf install *.rpm, localinstalltidak lagi dibutuhkan.


1
Datang ke sini untuk mengatakan persis seperti ini
nawfel bgh

1
terima kasih, saya berjuang untuk menginstal mysql-workbenchdengan rpm -ivh. akhirnya berakhir dengan posting ini. DNF berhasil.
BlueBird

22

Bagi saya bekerja hanya dengan

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

Dan secara otomatis meminta otorisasi untuk mengunduh depedensi. Di bawah contoh, saya menggunakan 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

cara termudah yang saya pikirkan
Syams

Bukan solusi rpm langsung, tapi saya paling suka yang ini.
TFuto

Bukan solusi RPM tetapi merupakan cara termudah untuk menginstal dependensi hanya dengan satu perintah. Ini bekerja dengan sempurna bagi saya
Enrique Benitez

10

Saya menemukan solusi yang lebih sederhana. Jika Anda memiliki semua RPM di direktori yang sama, yang perlu Anda lakukan hanyalah,

$ sudo rpm -i *.rpm

rpm tampaknya menemukan urutan yang benar untuk memasang ini dan memasang RPM.


5
Itu masih tidak menangani kasus jika dependensi tidak ada di direktori saat ini.
Ding-Yi Chen

4

Jawaban Matthew membangkitkan banyak emosi, karena fakta yang masih kurang detail kecil. Perintah umumnya adalah:

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

Di package_file_nameatas dapat menyertakan jalur absolut atau relatif lokal, atau menjadi URL (bahkan mungkin URI).

Yum akan mencari dependensi di antara semua file paket yang diberikan pada baris perintah DAN JIKA GAGAL menemukan dependensi di sana, Yum juga akan menggunakan repositori yum yang dikonfigurasi dan diaktifkan.

Baik direktori kerja saat ini, maupun jalur dari salah satu dari yang package_file_nameakan dicari, kecuali jika salah satu dari direktori ini sebelumnya telah dikonfigurasi sebagai yumrepositori yang diaktifkan .

Jadi dalam kasus OP, yumperintah:

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

akan dilakukan, seperti halnya rpm:

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

Perbedaan antara ini yumdan rpmpemanggilan hanya akan terlihat jika salah satu paket yang terdaftar untuk diinstal memiliki ketergantungan lebih lanjut pada paket yang TIDAK terdaftar pada baris perintah.

Dalam kasus seperti rpmitu hanya akan menolak untuk melanjutkan, sementara yumakan menggunakan repositori yum yang dikonfigurasi dan diaktifkan untuk mencari dependensi, dan mungkin berhasil.

Direktori kerja saat ini TIDAK akan dicari dalam kasus apa pun, kecuali jika sebelumnya telah dikonfigurasi sebagai yumrepositori yang diaktifkan .


0

Saya mengalami ini dan yang berhasil bagi saya adalah menjalankan yum localinstall enterPkgNameHere.rpmdari dalam direktori tempat file .rpm berada.

Catatan: ganti enterPkgNameHere.rpmdengan nama file .rpm Anda.


0

Dalam kasus openSUSE Leap 15, saya menerima kesalahan serupa:

> 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

Saya menjalankan perintah ini untuk mencari tahu apa saja dependensinya:

> 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

Kemudian saya menjalankan perintah ini untuk menginstal dependensi:

> 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

Kemudian saya menjalankan ini untuk menginstal rpmfile:

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

Saya tidak yakin apakah ini adalah praktik terbaik, namun ini menyelesaikan masalah saya.


0

Langkah 1: salin semua pkg rpm di lokasi tertentu

Langkah2: jika createrepo belum diinstal, karena tidak akan secara default, instal.

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

Step3: buat metedata repositori dan berikan izin di bawah ini

[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

Langkah4: Buat file repositori dengan konten berikut di /etc/yum.repos.d/mysql.repo

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

Step5 Jalankan perintah ini untuk menginstal

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

-2

Sederhana saja jalankan perintah berikut.

sudo dnf install *package.rpm

Masukkan kata sandi Anda dan Anda selesai.


-5

Proses menghasilkan RPM dari file sumber: 1) unduh file sumber dengan ekstensi.gz. 2) instal rpm-build dan rpmdevtools dari yum install. (folder rpmbuild akan dibuat ... SPECS, SOURCES, RPMS .. folder harus dibuat di dalam folder rpmbuild). 3) salin source code.gz ke folder SOURCES. (Rpmbuild / SOURCES) 4) Untar bola tar dengan menggunakan perintah berikut. pergi ke folder SOURCES: rpmbuild / SOURCES di mana file tar ada. perintah: misalnya tar -xvzf httpd-2.22.tar.gz folder httpd-2.22 akan dibuat di jalur yang sama. Periksa apakah apr dan apr-util dan ada di folder httpd-2.22 / srclib. Jika apr dan apr-util tidak ada, unduh versi terbaru dari situs apache, lepaskan dan letakkan di dalam folder httpd-2.22 / srclib. Juga pastikan Anda telah menginstal pcre di sistem Anda.

5) pergi ke folder yang diekstrak dan kemudian ketik perintah di bawah ini: ./configure --prefix = / usr / local / apache2 --with-termasuk-apr --enable-proxy --enable-proxy-balancer --with-mpm = pekerja --enable-mods-static = semua 6) jalankan perintah di bawah ini setelah konfigurasi berhasil: make 7) setelah eksekusi yang berhasil dan buat perintah run: checkinstall di folder yang sama. (jika Anda tidak memiliki software checkinstall silahkan download versi terbaru dari situs) Selain itu software checkinstall memiliki bug yang dapat diatasi dengan cara berikut ::::: cari checkinstallrc lalu ganti TRANSLATE = 1 ke TRANSLATE = 0 menggunakan perintah vim. Periksa juga untuk mengecualikan paket: EXCLUDE = "/ selinux" 8) checkinstall akan menanyakan opsi (ketik R jika Anda ingin tp membangun rpm untuk file sumber) 9) Selesai. File .rpm akan dibangun di folder RPMS di dalam file rpmbuild / RPMS. .. Semua yang terbaik ....

Salam, Prerana


Di mana orang bertanya tentang membangun sesuatu? Ini tentang menyelesaikan dependensi dari RPM yang sudah dibuat.
Craig Jackson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.