snapパッケージは共有依存関係をどのように処理しますか?


30

スナップパッケージング形式は、各パッケージに独自の依存関係のコピーを持たせることにより、最終的に依存関係の地獄から解放されます。これを行う方法の技術的な詳細に興味があります。処理方法:

  • 現在のリリースのdebパッケージを介して既にインストールされているライブラリのバージョンに応じてスナップしますか?インストールされたライブラリを無視しますか?
  • 同じライブラリの同じバージョンを指定する異なるスナップ?何らかの方法で重複排除を行いますか?
  • 多くのスナップで使用される可能性が高いコアライブラリの更新 OpenSSLは、大きな問題点として頭に浮かびます。

xdg-appには「ランタイム」と呼ばれるものがあります

xdg-appの基本概念は、ランタイム/アプリケーションの分割です。すべてのアプリはランタイムに依存しており、ランタイムはアプリが依存するコアライブラリを提供します。通常、ランタイムは多くのアプリケーションで共有されますが、ユーザーは複数のランタイムを同時にインストールできます。

OpenSSLの場合、xdg-appsのランタイムの一部になるため、OpenSSLの更新は同じランタイムを使用するすべてのxdg-appsに透過的に影響するはずです。

回答:


9

最初の2つの状況は巧妙に処理されます。

興味深い機能の1つは、Snapパッケージ内のコンテンツの重複排除サポートです。スナップは、ファイルハッシュに基づいて、スナップ間で共有される一般的なファイルの自動的に重複排除されます。ファイルシステムレイヤーでの重複排除、スナップダウンロード(サーバーサポートあり)での重複排除、およびリンカーからのマッピングされたライブラリの重複排除があります。重複排除は大きな作業項目であり、完全に実装するにはしばらく時間がかかる可能性がありますが、それでも興味深い目標です。

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

3番目の状況については、あなたが言及したランタイムに似たものがあります:

スナッピーマシンを構成する3つのレイヤーがあります。Canonicalが提供するシステムレイヤー、Canonicalと協力してベンダーが作成した基本システムを拡張するフレームワークのレイヤー、およびベンダーが直接提供するスナッピーアプリケーションのセットです。ピースを更新するということは、読み取り専用イメージの新しいバージョンを使用することを意味します。以前のバージョンに戻すのも簡単です。

ソース:http : //www.ubuntu.com/cloud/snappy

主にフレームワークが何であるかの境界をまだ解決しているように見えるため、フレームワークを説明する良いドキュメントはまだありません。以下は、物事を明確にするのに役立つかもしれないメーリングリストからの抜粋です。

私は多くのスナップが必要とするが、アップデートの問題とサイズのためにスナップに含まれるべきではないソフトウェアとサービスによって、基本的にSnappyベースシステムを拡張するためにフレームワークを実験しています。私がこれについて持っている最良の例は、opensslバイナリです。多くのスナップでは、キーと証明書を生成および検証するためにこれが必要です。

フレームワークで解決すべきもう1つの問題は、システム全体のリソース、特にポートへのアクセスです。たとえば、Webサーバーフレームワークは、他のスナップがWebサーバーを実行しているフレームワークにリバースプロキシを介してWebサービスAPIとエンドポイントを挿入する方法を提供します。

IRCでフレームワークの概念を悪用していると言われましたが、それでもこれらの2つの問題が頻繁に私の机に現れます。

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


1
明確にするために、これらはどれも実際に存在しませんよね?これらは計画であり、おそらく最初の行で「処理されます」ではなく「処理されます」と言うつもりでしたか?
ムル

技術的には、両方が存在します。少なくともdockerフレームワークが既に存在し、インストールされたアプリが利用するubuntu-coreに含まれるいくつかのライブラリへのリンクが既にあることを知っています。どちらに沿っているかはわかりません。ソリューションの技術的な詳細を説明しているだけです。
皮肉屋

1
これらは巧妙に処理された方法ではなく、巧妙なアイデアと言われているだけです。たとえば、最初の1つが実際にどのように実装されているかについての公式ドキュメントはまだなく、トークを指しているPhoronixの記事だけがデッドリンクです。
bviktor

3

スナップは、どの依存関係が既にインストールされているかをチェックするとは思わない。すべての依存関係とランタイムが含まれているだけです(これが、LibreOfficeスナップが287 MB、flatpakが約200MBである理由の1つです)。

スナップには、ソフトウェアの実行に必要なほぼすべてのものが含まれています。スナップ間で共有されるものはないと思います。

ただし、スナップが更新されると、スナップ全体ではなく、新しい依存関係のみがダウンロードされます。


2

追加の明確化は、スナップパッケージングが共有依存関係を処理する方法についての順序です。

スナップには、ソフトウェアの実行に必要なほぼすべてのものが含まれています。スナップ間で共有されるものはないと思います。

回答の1つにあるこの記述は部分的に正しいですが、コアスナップを除くインストールされたすべてのスナップパッケージは2つのパッケージに依存し、そのうちの1つはコアスナップです。

  1. snapd -16.04以降にデフォルトでインストールされ、14.04にもインストールできます。

  2. core-    (コアスナップ)最初にインストールされたスナップパッケージがインストールされたときに自動的にダウンロードおよびインストールされます

コア自体を除くすべてのスナップパッケージは、コアスナップに依存しています。コアスナップに問題がある場合、他のスナップの一部またはすべてが機能しません。コアスナップの問題は、次の2つの方法で修正できます。

  1. コアスナップを更新します。これが機能しない場合でも、次のコマンドを実行した結果は、問題の解決に役立つ追加情報を提供します。

    sudo snap refresh core  
    
  2. コアスナップとすべてのスナップパッケージをアンインストールしてから、再インストールします。

    sudo snap remove core snap-package1 snap-package2  
    sudo snap install core snap-package1 snap-package2
    
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.