Làm thế nào để thoát khỏi địa ngục phụ thuộc?


21

Tôi có một máy tính Ubuntu không có internet và máy tính Ubuntu có internet. Cái không có internet yêu cầu trình điều khiển phải được cài đặt thông qua ndiswrapper. Vấn đề là ndiswrapper-dkmsphụ thuộc vào dkmsđiều đó phụ thuộc vào một vài điều, và những điều đó phụ thuộc vào rất nhiều thứ, phụ thuộc vào nhiều thứ, v.v. Cho đến nay tôi đã tải xuống 92 phụ thuộc và tôi vẫn cần thêm. Tôi đã sử dụng mã

for i in $(apt-cache depends <package> | grep -E 'Depends|Recommends|Suggests' | cut -d ':' -f 2,3 | sed -e s/'<'/''/ -e s/'>'/''/); do sudo apt-get download $i 2>>errors.txt; done

làm cho công việc được thực hiện nhưng chỉ cho các phụ thuộc của một gói, không phụ thuộc vào các phụ thuộc của gói, v.v. Điều này đã biến thành một cuộc chiến kéo dài nhiều giờ để có được tất cả các gói và nó thực sự tẻ nhạt. Tôi đã chạy mã này để tải các tệp .deb vào ổ USB trên máy tính trực tuyến của mình, sau đó chuyển sang máy tính ngoại tuyến để chèn ổ đĩa, sau đó chạy sudo apt install ./*trong thư mục và hy vọng điều tốt nhất. Nó thường phun ra một cái gì đó như thế này:

...
The following packages have unmet dependencies:
 binutils : Depends: binutils-common (= 2.30-21ubuntu1~18.04.1) but 2.30-21ubuntu1~18.04 is to be installed
            Depends: libbinutils (= 2.30-21ubuntu1~18.04.1) but 2.30-21ubuntu1~18.04 is to be installed
            Depends: binutils-x86-64-linux-gnu (= 2.30-21ubuntu1~18.04.1) but 2.30-21ubuntu1~18.04 is to be installed
 cpp-doc : Depends: cpp-7-doc (>= 7.4.0-1~) but it is not installable
 file : Depends: libmagic1 (= 1:5.32-2ubuntu0.2) but 1:5.32-2ubuntu0.1 is to be installed
 g++-7 : Depends: libstdc++-7-dev (= 7.4.0-1ubuntu1~18.04) but it is not installable
 g++-multilib : Depends: g++-7-multilib (>= 7.4.0-1~) but it is not installable
 gcc-7-multilib : Depends: lib32gcc-7-dev (= 7.4.0-1ubuntu1~18.04) but it is not installable
                  Depends: libx32gcc-7-dev (= 7.4.0-1ubuntu1~18.04) but it is not installable
 gfortran : Depends: gfortran-7 (>= 7.4.0-1~) but it is not installable
 glibc-doc : Depends: glibc-doc-reference (>= 2.18) but it is not installable
 libasan4-dbg : Depends: libasan4 (= 7.4.0-1ubuntu1~18.04) but it is not installable
 libatomic1-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                  Depends: libatomic1 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 libbabeltrace1 : Depends: libdw1 (>= 0.126) but it is not installable
 libcc1-0 : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libcilkrts5-dbg : Depends: libcilkrts5 (= 7.4.0-1ubuntu1~18.04) but it is not installable
 libfl-dev : Depends: libfl2 (= 2.6.4-6) but it is not installable
 libgcc-7-dev : Depends: libitm1 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libatomic1 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libasan4 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: liblsan0 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libtsan0 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libubsan0 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libcilkrts5 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libmpx2 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
 libgcc1 : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libgcc1-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libgomp1-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                Depends: libgomp1 (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libitm1-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
               Depends: libitm1 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 liblsan0-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                Depends: liblsan0 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 libmpx2-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
               Depends: libmpx2 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 libquadmath0-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                    Depends: libquadmath0 (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libstdc++6 : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libtsan0-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                Depends: libtsan0 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 libubsan0-dbg : Depends: libubsan0 (= 7.4.0-1ubuntu1~18.04) but it is not installable
 libumfpack5 : Depends: libcholmod3 (>= 1:4.5.2) but it is not going to be installed
 m4 : Depends: libsigsegv2 (>= 2.9) but it is not installable
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

Có ai biết một phương pháp chỉ cần đổ tất cả các tệp .deb cho một gói phụ thuộc và tất cả các phụ thuộc vào một thư mục để tiết kiệm sự tỉnh táo của tôi không? Cám ơn!



Bạn cũng có thể kết nối trực tiếp 2 máy bằng ethernet để máy ngoại tuyến sử dụng kết nối máy trực tuyến. Từ những gì tôi nhớ lại, quá trình apt-offline nghe có vẻ đơn giản hơn nhiều; nhưng câu trả lời này nói rằng đó là "plug and play".
pbhj

1
Miễn là bạn sử dụng RecommendsSuggeststhay vì chỉ Dependstôi mong bạn sẽ cài đặt toàn bộ internet cho dù bạn bắt đầu từ gói nào.
đường ống

1
@ N0rbert Tôi chưa bao giờ tìm thấy những câu trả lời thỏa đáng. Tôi biết rằng đó không phải là điểm của hệ thống trùng lặp, mặc dù.
wizzwizz4

@ N0rbert Đó không phải là một câu hỏi rõ ràng để giải quyết các tình huống địa ngục phụ thuộc. Bất kỳ sự trùng lặp giữa hai là trong câu trả lời , không phải là câu hỏi .
Giàu

Câu trả lời:


27

Hãy xem apt-offline, một cách (thân thiện hơn) để quản lý các phụ thuộc ngoại tuyến. Bạn sẽ cần cài đặt nó trước bằng cách tải xuống tệp gỡ lỗi và chuyển nó vào máy ngoại tuyến của bạn. Bạn có thể sử dụng một cái gì đó như sudo apt download apt-offlineđể xử lý việc tải xuống. Cài đặt có thể được thực hiện bằng cách sử dụng sudo dpkg -i /path/to/your/debfile.debtrên máy ngoại tuyến và chỉ sudo apt installtrên máy trực tuyến của bạn.

Khi đã xong, bạn sẽ cần chuẩn bị một loạt thứ để cài đặt thực tế.

  1. Bắt đầu bằng cách tạo chữ ký của hệ thống ngoại tuyến của bạn yêu cầu cài đặt các ndiswrappergói:

    sudo apt-offline set offline.sig --install-packages ndiswrapper-dkms
    
  2. Sao chép tệp vào máy trực tuyến của bạn và chạy lệnh sau trên máy trực tuyến để tải xuống tất cả các tệp cần thiết:

    apt-offline get offline.sig --bundle ndis-ao.zip
    
  3. Di chuyển gói zipfile trở lại máy ngoại tuyến của bạn và chạy lệnh này trên nó:

    sudo apt-offline install ndis-ao.zip
    

Bạn nên ndiswrapper-dkmscài đặt vào thời điểm này và tất cả sẽ tốt.


Nếu apt-offlinegói của bạn không cài đặt được, hãy lưu ý các gói phụ thuộc không thành công và giải quyết từng gói một (sao chép thủ công khi cần). Địa ngục phụ thuộc là khó chịu, nhưng thật không may đó là một trong những vấn đề với một hệ thống ngoại tuyến nhiều hơn.

Bạn cũng có thể thử xem xét apt-rdependsđể tạo ra một biểu đồ phụ thuộc hoàn chỉnh . Kết hợp điều này với apt downloadvà bạn có thể có một giải pháp thay thế cho vấn đề, mặc dù thử nghiệm của tôi với điều này đã không có kết luận để nói rằng ít nhất.

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.