Bagaimana paket snap menangani dependensi bersama?

30

Format pengepakan cepat akhirnya membebaskan kita dari neraka ketergantungan dengan memungkinkan setiap paket memiliki salinan dependensinya sendiri. Saya tertarik pada detail teknis tentang cara melakukannya. Bagaimana cara menangani:

  • terkunci tergantung pada versi perpustakaan yang sudah diinstal melalui paket deb untuk rilis saat ini? Apakah itu mengabaikan perpustakaan yang diinstal?
  • terkunci berbeda menentukan versi yang sama dari perpustakaan yang sama? Apakah itu melakukan deduplikasi entah bagaimana?
  • pembaruan ke pustaka inti yang kemungkinan akan digunakan oleh banyak buncis? OpenSSL terlintas dalam pikiran sebagai titik sakit yang sangat besar.

xdg-app memiliki sesuatu yang disebut "runtime" :

Konsep dasar dalam xdg-app adalah pemisahan runtime / aplikasi. Setiap aplikasi bergantung pada runtime, yang memasok pustaka inti yang diandalkan oleh aplikasi tersebut. Runtimes biasanya dibagikan oleh banyak aplikasi, tetapi pengguna dapat menginstal beberapa runtimes pada saat bersamaan.

Tampaknya dalam kasus OpenSSL, itu akan menjadi bagian dari runtime di xdg-apps, jadi pembaruan untuk OpenSSL harus secara transparan memengaruhi semua xdg-apps menggunakan runtime yang sama.

muru
sumber

Jawaban:

9

Dua situasi pertama ditangani dengan cara yang cerdas.

Salah satu fitur menarik yang dibicarakan adalah dukungan deduplikasi untuk konten dalam paket Snap. Snaps akan secara otomatis dideduplikasi dari file-file umum yang dibagi di antara snaps berdasarkan hash file mereka. Akan ada de-duplikasi pada lapisan sistem file, de-duplikasi pada unduhan snap (dengan dukungan server), dan mungkin de-duplikasi perpustakaan yang dipetakan dari linker. Deduplikasi adalah item pekerjaan yang besar dan kemungkinan akan membutuhkan waktu cukup lama untuk diterapkan sepenuhnya, tetapi itu adalah tujuan yang menarik.

Sumber: http://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-Snappy-Deduplication

Adapun situasi ketiga, mereka memiliki sesuatu yang mirip dengan runtime yang Anda sebutkan:

Ada tiga lapisan yang membentuk mesin tajam: lapisan sistem, disediakan oleh Canonical, lapisan kerangka kerja yang memperluas sistem dasar yang diproduksi oleh vendor bekerja sama dengan Canonical, dan satu set aplikasi tajam, yang disediakan langsung oleh vendor. Memperbarui setiap bagian berarti menggunakan versi baru dari gambar hanya-baca. Mengembalikan ke versi sebelumnya juga mudah.

Sumber: http://www.ubuntu.com/cloud/snappy

Tidak ada dokumentasi yang baik untuk menjelaskan kerangka kerja, terutama karena mereka tampaknya masih bekerja di luar batas-batas kerangka itu. Berikut adalah kutipan dari milis mereka yang dapat membantu memperjelas beberapa hal.

Saya sedang bereksperimen dengan Kerangka dasarnya untuk memperluas sistem basis Snappy oleh perangkat lunak dan layanan yang memerlukan banyak terkunci tetapi tidak boleh dimasukkan dalam setiap dan setiap jepret karena masalah dan ukuran pembaruan. Contoh terbaik yang saya miliki untuk ini, adalah biner openssl. Banyak terkunci membutuhkan ini untuk menghasilkan dan memvalidasi kunci dan sertifikat.

Masalah lain yang harus saya selesaikan dengan kerangka kerja adalah akses ke sumber daya sistem yang luas, terutama port. Misalnya, kerangka kerja server web akan menyediakan cara bagi snapps lain untuk menyuntikkan api layanan web mereka dan titik akhir melalui proxy terbalik ke dalam kerangka kerja yang menjalankan server web.

Saya diberitahu di IRC bahwa saya agak menyalahgunakan konsep kerangka kerja, tetapi kedua masalah ini sering muncul di meja saya.

Sumber: https://lists.ubuntu.com/archives/snappy-app-devel/2015-November/000442.html

sinis
sumber
1
Untuk memperjelas, tidak ada yang benar-benar ada sekarang, kan? Ini adalah rencana dan Anda mungkin bermaksud mengatakan "akan ditangani" alih-alih "ditangani" di baris pertama?
muru
Secara teknis, keduanya ada. Saya tahu setidaknya sudah ada kerangka buruh pelabuhan, dan bahwa sudah ada tautan untuk beberapa perpustakaan yang disertakan dengan ubuntu-core yang memanfaatkan aplikasi yang diinstal. Saya tidak tahu seberapa jauh keduanya; Saya hanya menjelaskan rincian teknis dari solusinya.
sinis
1
Ini bukan cara-cara yang ditangani dengan cerdik, hanya ide-ide yang diduga cerdik. Misalnya, masih belum ada dokumentasi resmi tentang bagaimana yang pertama benar-benar dilaksanakan, hanya artikel Phoronix yang menunjuk pada sebuah pembicaraan, yang merupakan tautan mati btw.
bviktor
3

Saya tidak berpikir bahwa terkunci memeriksa dependensi apa yang sudah diinstal. Itu hanya mencakup semua dependensi dan runtime-nya (yang merupakan sebagian alasan snap LibreOffice adalah 287 MB dan flatpak sekitar 200MB).

Terkunci mencakup hampir semua perangkat lunak yang perlu dijalankan. Saya tidak berpikir apa pun dibagikan di antara bentak.

Namun ketika snap diperbarui, itu hanya akan mengunduh dependensi yang baru, dan bukan keseluruhan snap.

Frederik Baetens
sumber
2

Klarifikasi tambahan adalah dalam rangka tentang cara pengemasan snap menangani dependensi bersama.

Terkunci mencakup hampir semua perangkat lunak yang perlu dijalankan. Saya tidak berpikir apa pun dibagikan di antara bentak.

Pernyataan dalam salah satu jawaban ini sebagian benar, namun semua paket snap yang diinstal kecuali snap inti bergantung pada dua paket, salah satunya adalah snap inti.

  1. snapd - yang diinstal secara default pada 16,04 dan seterusnya dan juga dapat diinstal dalam 14,04.

  2. core    - (core snap) yang secara otomatis diunduh dan diinstal ketika paket snap yang diinstal pertama diinstal

Semua paket snap kecuali untuk core itu sendiri tergantung pada snap inti. Jika ada yang salah dengan snap inti, maka beberapa atau semua terkunci lainnya tidak akan berfungsi. Masalah dengan snap inti dapat diperbaiki dengan dua cara berikut.

  1. Perbarui snap inti. Bahkan jika ini tidak berhasil, hasil menjalankan perintah berikut ini akan memberikan informasi tambahan yang akan membantu menyelesaikan masalah.

    sudo snap refresh core  
    
  2. Hapus instalan snap inti dan semua paket snap lalu instal ulang.

    sudo snap remove core snap-package1 snap-package2  
    sudo snap install core snap-package1 snap-package2
    
karel
sumber