Làm thế nào để làm cho phụ thuộc tự động cài đặt vòng / phút


138

Tôi đã xây dựng hai gói RPM

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

proj1phụ thuộc vào tệp libtest1.socó mặt và nó được phản ánh chính xác trong các gói RPM như được thấy ở đây:

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)

Việc cài đặt proj1không thành công do thiếu phụ thuộc.

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

Làm cách nào để đảm bảo libtest1-1.0-1.x86_64.rpmcài đặt tự động trong quá trình cài đặt proj1-1.0-1.x86_64.rpm?

Tôi đã thử --aidtùy chọn rpm -inhư được mô tả ở đây nhưng nó không hoạt động với tôi.

Còn cách nào khác không?

Cảm ơn vì bất kì sự giúp đỡ.

Câu trả lời:


102

Tạo một kho lưu trữ (cục bộ) và sử dụng yumđể giải quyết các phụ thuộc cho bạn.

Wiki CentOS có một trang đẹp cung cấp cách thực hiện điều này. CentOS wiki HowTos / CreateLocalRepos .


Tóm tắt và giảm thiểu hơn nữa (không lý tưởng, nhưng nhanh nhất):

  1. Tạo một thư mục cho bạn kho lưu trữ cục bộ, ví dụ /home/user/repo.
  2. Di chuyển các RPM vào thư mục đó.
  3. Khắc phục một số quyền sở hữu và quyền hệ thống tập tin:

    # chown -R root.root /home/user/repo
    
  4. Cài đặt createrepogói nếu chưa cài đặt và chạy

    # createrepo /home/user/repo
    # chmod -R o-w+r /home/user/repo
    
  5. Tạo một tệp cấu hình kho lưu trữ, ví dụ như /etc/yum.repos.d/myrepo.repochứa

    [local]
    name=My Awesome Repo
    baseurl=file:///home/user/repo
    enabled=1
    gpgcheck=0
    
  6. Cài đặt gói của bạn bằng cách sử dụng

    # yum install packagename
    

46
Liên kết bạn cung cấp đã giải quyết trường hợp của tôi chỉ với một dòng này : yum --nogpgcheck localinstall packagename.arch.rpm.
Matthew

@Matthew Tuyệt vời, sẽ loại bỏ toàn bộ các bước lưu trữ cục bộ. Đăng nó như một câu trả lời tôi muốn nói.
gertvdijk

Điều này không hoạt động tốt nếu bạn đang cố gắng tạo kịch bản RPM để tự động cài đặt YUM trên AIX như tôi ;-)
Tricky

1
@ Max13, đó yum localinstallcũng giống như câu trả lời đã được đăng ở đây , với những nhược điểm đã được thảo luận cho các tình huống mà sự phụ thuộc không có trong yum repos (xem phương pháp này sẽ không hoạt động trừ khi [...] phần).
gertvdijk

Hình này cũng như nếu không có kết nối internet sudo yum --disablerepo=* --enablerepo=local install packagename.arch.rpmđể đảm bảo yumkhông nhìn vào các kho khác.
Anshuman Goel

194

Liên kết @gertvdijk được cung cấp cho thấy một cách nhanh chóng để đạt được kết quả mong muốn mà không cần định cấu hình kho lưu trữ cục bộ:

$ yum --nogpgcheck localinstall packagename.arch.rpm

Chỉ cần thay đổi packagename.arch.rpmtên tệp RPM bạn muốn cài đặt.

Biên tập Chỉ cần làm rõ, điều này sẽ tự động cài đặt tất cả các phụ thuộc đã có sẵn thông qua kho YUM của hệ thống.

Nếu bạn có các phụ thuộc được thỏa mãn bởi các RPM khác không có trong kho của hệ thống, thì phương thức này sẽ không hoạt động trừ khi mỗi RPM cũng được chỉ định cùng với packagename.arch.rpmtrên dòng lệnh.


7
Không, điều này sẽ không hoạt động trừ khi libtest1-1.0-1.x86_64.rpmở trong kho lưu trữ ở nơi khác hoặc cả hai gói được chỉ định trên dòng lệnh như " rpm -i" sẽ yêu cầu. Tôi vừa xác minh điều này vào ngày yum3.4.3 (Fedora 18). Bảng điểm ở đây cho thấy rằng nó đi đến updatesrepo cho các phụ thuộc, ngay cả khi các tệp ở ngay đó.
Aaron D. Marasco

3
@ AaronD.Maraco có thể bạn đúng về trường hợp cụ thể được mô tả trong câu hỏi, nhưng phần mềm này dễ dàng hơn nhiều cho bất kỳ ai ở đây như tôi đã làm, và là một câu trả lời hoàn toàn hợp lệ cho câu hỏi trong tiêu đề, "Làm thế nào để làm cho vòng quay phụ thuộc tự động cài đặt ".
Matthew

3
Không, đó không phải là "cài đặt tự động" các phụ thuộc - bạn đang chỉ định chúng trên dòng lệnh, giống như cách bạn làm với " rpm -i", vì vậy việc sử dụng yummang lại cho bạn không có thêm lợi ích.
Aaron D. Marasco

2
Vui lòng đọc lại những gì tôi đã viết. Bất kỳ phụ thuộc nào cũng được tải xuống từ kho lưu trữ, ngay cả khi chúng có sẵn cục bộ trong thư mục có RPM bạn đã cài đặt.
Aaron D. Marasco

1
@ AaronD.Maraco Tôi không tranh luận rằng giải pháp được đăng khác là tốt hơn cho ví dụ cụ thể mà OP đã hỏi về. Câu trả lời của tôi, tuy nhiên, là chính xác cho việc trả lời các câu hỏi trong tiêu đề và là nhiều nhanh hơn so với cấu hình một repo địa phương, và sẽ giúp những người khác gió lên ở đây như tôi đã muốn một cách nhanh chóng để có được yum để tự động cài đặt hệ phụ thuộc mà một vòng / phút yêu cầu. Đó là mục đích của stack stack, để giúp cộng đồng tìm kiếm câu trả lời và không chỉ giúp OP.
Matthew

28

Đối với người dùng dnf chỉ cần sử dụng dnf install *.rpm, localinstallkhông còn cần thiết.


1
Đến đây để nói chính xác điều này
nawfel bgh

1
cảm ơn, tôi đã vật lộn để cài đặt mysql-workbenchvới rpm -ivh. cuối cùng kết thúc với bài này. DNF đã lừa
BlueBird

21

Đối với tôi làm việc chỉ với

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

Và tự động yêu cầu ủy quyền để tải xuống các phụ thuộc. Dưới ví dụ, tôi đang sử dụng 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

Cách dễ nhất tôi nghĩ
Shams

Không phải là một giải pháp vòng / phút trực tiếp, nhưng tôi thích điều này nhất.
TFuto

Không phải là giải pháp RPM nhưng là cách dễ nhất để cài đặt các phụ thuộc chỉ với một lệnh. Điều này làm việc hoàn hảo đối với tôi
Enrique Benitez

9

Tôi tìm thấy một giải pháp đơn giản hơn. Nếu bạn có tất cả các RPM trong cùng một thư mục, tất cả những gì bạn cần làm là,

$ sudo rpm -i *.rpm

rpm dường như tìm ra thứ tự đúng để cài đặt chúng và cài đặt RPM.


5
Điều đó vẫn không xử lý trường hợp nếu các phụ thuộc không có trong thư mục hiện tại.
Đinh-Yi Chen

4

Câu trả lời của Matthew đã đánh thức nhiều cảm xúc, vì thực tế là nó vẫn thiếu một chi tiết nhỏ. Lệnh chung sẽ là:

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

package_file_nametrên có thể bao gồm đường dẫn tuyệt đối hoặc tương đối cục bộ hoặc là một URL (thậm chí có thể là URI).

Yum sẽ tìm kiếm các phụ thuộc trong số tất cả các tệp gói được cung cấp trên dòng lệnh VÀ NẾU FAILS để tìm các phụ thuộc ở đó, nó cũng sẽ sử dụng bất kỳ kho lưu trữ yum nào được cấu hình và kích hoạt.

Không phải thư mục làm việc hiện tại cũng như đường dẫn của bất kỳ thư mục nào package_file_namesẽ được tìm kiếm, ngoại trừ khi bất kỳ thư mục nào trong số này đã được cấu hình trước đó dưới dạng yumkho lưu trữ được bật .

Vì vậy, trong trường hợp của OP, yumlệnh:

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

sẽ làm, như sẽ làm rpm:

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

Sự khác biệt giữa những điều này yumvà các rpmyêu cầu sẽ chỉ hiển thị nếu một trong các gói được liệt kê để cài đặt có thêm phụ thuộc vào các gói KHÔNG được liệt kê trên dòng lệnh.

Trong trường hợp như vậy rpmsẽ chỉ từ chối tiếp tục, trong khi yumsẽ sử dụng bất kỳ kho lưu trữ yum được cấu hình và kích hoạt nào để tìm kiếm các phụ thuộc và có thể có thể thành công.

Thư mục làm việc hiện tại sẽ KHÔNG được tìm kiếm trong mọi trường hợp, ngoại trừ khi nó đã được cấu hình trước đó dưới dạng yumkho lưu trữ được kích hoạt .


0

Tôi chạy vào đây và những gì làm việc cho tôi là chạy yum localinstall enterPkgNameHere.rpm từ trong thư mục chứa tệp .rpm.

Lưu ý: thay thế enterPkgNameHere.rpmbằng tên của tệp .rpm của bạn.


0

Trong trường hợp openSUSE Leap 15, tôi nhận được lỗi tương tự:

> 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

Tôi chạy lệnh này để tìm ra các phụ thuộc là gì:

> 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

Sau đó, tôi chạy lệnh này để cài đặt phụ thuộc:

> 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

Sau đó, tôi chạy này để cài đặt các rpmtập tin:

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

Tôi không chắc đó có phải là cách tốt nhất hay không, tuy nhiên nó đã giải quyết được vấn đề của tôi.


0

Bước 1: sao chép tất cả pkg vòng / phút ở các vị trí nhất định

Bước2: nếu commeepo chưa được cài đặt, vì nó sẽ không được mặc định, hãy cài đặt nó.

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

Bước 3: tạo kho lưu trữ metedata và cho phép dưới đây

[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

Bước 4: Tạo tệp kho lưu trữ với các nội dung sau tại /etc/yum.repos.d/mysql.repo

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

Bước 5 Chạy lệnh này để cài đặt

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

-2

Đơn giản chỉ cần chạy lệnh sau.

sudo dnf install *package.rpm

Nhập mật khẩu của bạn và bạn đã hoàn tất.


-5

Quá trình tạo RPM từ tệp nguồn: 1) tải xuống tệp nguồn với phần mở rộng. 2) cài đặt rpm-build và rpmdevtools từ cài đặt yum. (thư mục rpmbuild sẽ được tạo ... Các thư mục ĐẶC BIỆT, NGUỒN, RPMS .. sẽ được tạo trong thư mục rpmbuild). 3) sao chép mã nguồn.gz vào thư mục SOURCES. (Rpmbuild / SOURCES) 4) Tháo bóng tar bằng cách sử dụng lệnh sau. đi tới thư mục SOURCES: rpmbuild / SOURCES nơi có tệp tar. lệnh: ví dụ: tar -xvzf httpd-2.22.tar.gz httpd-2.22 thư mục sẽ được tạo trong cùng một đường dẫn. Kiểm tra xem apr và apr-produc và có trong thư mục httpd-2.22 / srclib. Nếu apr và apr-produc không tồn tại tải xuống phiên bản mới nhất từ ​​trang apache, hãy gỡ bỏ nó và đặt nó vào thư mục httpd-2.22 / srclib. Cũng đảm bảo rằng bạn đã cài đặt pcre trong hệ thống của bạn.

5) đi tới thư mục được giải nén và sau đó gõ lệnh bên dưới: ./configure --prefix = / usr / local / apache2 --with-gộp-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker --enable-mods-static = all 6) chạy bên dưới lệnh sau khi cấu hình thành công: make 7) sau khi thực hiện thành công od make lệnh run: checkinstall trong cùng một thư mục. . Đồng thời kiểm tra gói loại trừ: EXCLUDE = "/ selinux" 8) checkinstall sẽ yêu cầu tùy chọn (loại R nếu bạn muốn tp build rpm cho tệp nguồn) 9) Tập tin .rpm sẽ được xây dựng trong thư mục RPMS bên trong tệp RPbuild / RPMS. .. TẤT CẢ TỐT NHẤT ....

Trân trọng, Prerana


Trường hợp có ai hỏi về việc xây dựng bất cứ điều gì? Đây là về việc giải quyết các phụ thuộc của RPM đã được xây dựng.
Craig Jackson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.