Làm thế nào để các gói snap xử lý các phụ thuộc được chia sẻ?


30

Định dạng đóng gói snap cuối cùng giải phóng chúng ta khỏi địa ngục phụ thuộc bằng cách cho phép mỗi gói có bản sao phụ thuộc riêng. Tôi quan tâm đến các chi tiết kỹ thuật trong cách nó làm điều này. Làm thế nào để nó xử lý:

  • Snaps tùy thuộc vào phiên bản của một thư viện đã được cài đặt thông qua các gói deb cho bản phát hành hiện tại? Nó bỏ qua thư viện cài đặt?
  • snaps khác nhau chỉ định cùng một phiên bản của cùng một thư viện? Nó có làm sự trùng lặp bằng cách nào đó?
  • cập nhật cho các thư viện cốt lõi có khả năng được sử dụng bởi rất nhiều snaps? OpenSSL đến với tâm trí như một điểm đau rất lớn.

xdg-app có một thứ gọi là "thời gian chạy" :

Một khái niệm cơ bản trong xdg-app là phân chia thời gian chạy / ứng dụng. Mỗi ứng dụng phụ thuộc vào thời gian chạy, cung cấp các thư viện cốt lõi mà ứng dụng dựa vào. Thời gian chạy thường được chia sẻ bởi nhiều ứng dụng, nhưng người dùng có thể cài đặt nhiều thời gian chạy cùng lúc.

Có vẻ như trong trường hợp OpenSSL, nó sẽ là một phần của thời gian chạy trong các ứng dụng xdg, do đó, một bản cập nhật cho OpenSSL sẽ ảnh hưởng rõ ràng đến tất cả các ứng dụng xdg sử dụng cùng thời gian chạy.

Câu trả lời:


9

Hai tình huống đầu tiên được xử lý một cách thông minh.

Một trong những tính năng thú vị được nói đến là hỗ trợ chống trùng lặp cho nội dung trong các gói Snap. Snaps sẽ được tự động sao chép các tệp phổ biến được chia sẻ giữa các snaps dựa trên băm tập tin của chúng. Sẽ có sự sao chép lại trên lớp hệ thống tệp, khử trùng lặp khi tải xuống snap (có hỗ trợ máy chủ) và có lẽ là sao chép lại các thư viện được ánh xạ từ trình liên kết. Chống trùng lặp là một mục công việc lớn và có thể sẽ mất một thời gian để thực hiện đầy đủ, tuy nhiên đó vẫn là một mục tiêu thú vị.

Nguồn: http://www.phoronix.com/scan.php?page=news_item&px=Ubfox-Snappy-Ded repeatation

Đối với tình huống thứ ba, họ có một cái gì đó tương tự như thời gian chạy mà bạn đã đề cập:

Có ba lớp tạo nên một cỗ máy linh hoạt: lớp hệ thống, được cung cấp bởi Canonical, một lớp khung mở rộng hệ thống cơ sở được cung cấp bởi các nhà cung cấp phối hợp với Canonical và một bộ ứng dụng linh hoạt, được cung cấp trực tiếp bởi các nhà cung cấp. Cập nhật bất kỳ phần nào chỉ có nghĩa là sử dụng phiên bản mới của hình ảnh chỉ đọc. Trở lại phiên bản trước thật dễ dàng.

Nguồn: http://www.ubfox.com/cloud/snappy

Vẫn chưa có tài liệu tốt nào mô tả các khung công tác, chủ yếu là vì dường như chúng vẫn đang tìm ra ranh giới của khung là gì. Đây là một đoạn trích từ danh sách gửi thư của họ có thể giúp làm rõ mọi thứ.

Tôi đang thử nghiệm với Framework để cơ bản mở rộng hệ thống cơ sở Snappy bằng phần mềm và dịch vụ mà rất nhiều snaps yêu cầu nhưng không nên đưa vào bất kỳ và mỗi snap do vấn đề cập nhật và kích thước. Ví dụ tốt nhất tôi có cho điều này, là nhị phân openssl. Nhiều snaps cần điều này để tạo và xác nhận các khóa và chứng chỉ.

Vấn đề khác tôi buộc phải giải quyết với một khung là quyền truy cập vào tài nguyên trên toàn hệ thống, đáng chú ý là các cổng. Ví dụ, một khung máy chủ web sẽ cung cấp các cách để các snapp khác đưa api dịch vụ web của họ và các điểm cuối thông qua proxy ngược vào khung chạy máy chủ web.

Tôi đã nói với IRC rằng tôi đang lạm dụng khái niệm khung, nhưng vẫn có hai vấn đề này xuất hiện trên bàn làm việc của tôi.

Nguồn: https://lists.ubfox.com/archives/snappy-app-devel/2015-November/000442.html


1
Để làm rõ, không ai trong số này thực sự tồn tại bây giờ, phải không? Đây là những kế hoạch và bạn có thể muốn nói "sẽ được xử lý" thay vì "được xử lý" trong dòng đầu tiên?
muru

Về mặt kỹ thuật, cả hai tồn tại. Tôi biết đã có ít nhất một khung docker và đã có các liên kết cho một số thư viện đi kèm với lõi ub Ubuntu mà các ứng dụng đã cài đặt tận dụng. Tôi không biết bao xa là một trong hai; Tôi chỉ đơn giản là giải thích các chi tiết kỹ thuật của các giải pháp.
yếm thế

1
Đây không phải là cách xử lý khéo léo, chỉ có ý tưởng được cho là thông minh. Ví dụ, vẫn chưa có tài liệu chính thức nào về cách thực hiện bài đầu tiên, chỉ có một bài viết Phoronix chỉ vào một bài nói chuyện, đó là một liên kết chết btw.
bviktor

3

Tôi không nghĩ rằng snaps kiểm tra những phụ thuộc nào đã được cài đặt. Nó chỉ bao gồm tất cả các phụ thuộc và thời gian chạy của nó (đó là một phần lý do tại sao snap của LibreScript là 287 MB và Flatpak là khoảng 200 MB).

Snaps bao gồm khá nhiều thứ mà phần mềm cần để chạy. Tôi không nghĩ bất cứ điều gì được chia sẻ giữa các snaps.

Tuy nhiên, khi một snap cập nhật, nó sẽ chỉ tải xuống các phụ thuộc mới chứ không phải toàn bộ snap.


2

Làm rõ thêm theo thứ tự về cách đóng gói snap xử lý các phụ thuộc được chia sẻ.

Snaps bao gồm khá nhiều thứ mà phần mềm cần để chạy. Tôi không nghĩ bất cứ điều gì được chia sẻ giữa các snaps.

Tuyên bố này trong một trong các câu trả lời là đúng một phần, tuy nhiên tất cả các gói snap được cài đặt ngoại trừ snap snap phụ thuộc vào hai gói, một trong số đó là snap snap.

  1. snapd - được cài đặt theo mặc định trong 16.04 trở đi và cũng có thể được cài đặt trong 14.04.

  2. lõi    - (snap snap) được tự động tải xuống và cài đặt khi gói snap được cài đặt đầu tiên được cài đặt

Tất cả các gói snap ngoại trừ chính lõi phụ thuộc vào snap snap. Nếu có bất cứ điều gì sai với snap snap, thì một số hoặc tất cả các snaps khác sẽ không hoạt động. Một vấn đề với snap snap có thể được khắc phục theo hai cách sau.

  1. Cập nhật snap snap. Ngay cả khi điều này không hoạt động, kết quả của việc chạy lệnh sau sẽ cung cấp thêm thông tin sẽ giúp giải quyết vấn đề.

    sudo snap refresh core  
    
  2. Gỡ cài đặt lõi snap và tất cả các gói snap và sau đó cài đặt lại chúng.

    sudo snap remove core snap-package1 snap-package2  
    sudo snap install core snap-package1 snap-package2
    
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.