一个Snap软件包能否依赖于发行版提供的.deb软件包?

可以以某种方式构建一个快照,当用户尝试安装它时,该快照也会安装另一个软件包吗?例如,wget。谢谢。
2个回答

简短回答你的问题是:不,snaps不能依赖于.deb文件,以至于当安装snap时,.deb文件也会被安装。
然而,更详细的回答是,在构建snap时,你可以将任何你想要的.deb文件捆绑在其中。以你的例子为例,以下是一个将wget捆绑在其中的snapcraft.yaml文件:
name: my-snap-name # you probably want to 'snapcraft register <name>'
base: core18 # the base snap is the execution environment for this snap
version: '0.1' # just for humans, typically '1.2+git' or '1.3.2'
summary: Single-line elevator pitch for your amazing snap # 79 char long summary
description: |
  This is my-snap's description. You have a paragraph or two to tell the
  most important story about your snap. Keep it under 100 words though,
  we live in tweetspace and your description wants to look good in the snap
  store.

grade: devel # must be 'stable' to release into candidate/stable channels
confinement: strict # 'strict' confinement means fully confined

parts: 
  my-part:
    plugin: nil
    # Include the wget .deb from the Ubuntu package archive
    stage-packages: [wget]

apps:
  # expose wget to end-users
  wget:
    command: usr/bin/wget
    plugs: [network, home, removable-media]

在那个上运行snapcraft,你最终会得到一个带有wget应用的snap。它不像你要求的那样在安装时拉取wget,但通过在构建时拉取它,也许可以实现你的最终目标。

谢谢!这是为了一个二进制文件,但如果我还需要来自usr/lib的库呢? - knocte
gtk2库? - knocte
一样的事情,只需将其添加到stage-packages中,它们就会出现在snap中。 - kyrofa
请注意,由于Snap文件是自包含的,您使用的每个依赖项都会增加Snap的大小和目标系统所需的资源。如果最终用户正在运行其他需要相同库的应用程序,则Snap环境将阻止在不同应用程序之间共享库。 - Mikko Rantalainen

Snap软件包是自包含的,不需要外部依赖项即可运行。 更多信息请参见Linux Commando: Snaps

那个指南只是从用户的角度来写的,并不是从想要创建snap的开发者的角度来写的;我的意思是,我知道一个snap可以是自包含的,并且包含所有的依赖关系,但是如果一个.deb包已经提供了与snap中包含的应用程序兼容的版本,并且snap构建器认为它足够好,那么snap是否可以依赖于.deb包呢? - knocte
2或许那是对的,但Snap的整个理念在于它能够跨多个发行版工作。因此,如果开发者需要一个不在Snap之外的依赖,情况可能并非如此,因为不同的发行版可能会将文件放置在不同的位置。以上仅为个人意见。 - kc1di
2依赖于deb的快照是不可移植的,可能会让一些用户感到困惑,并给开发者增加了不必要的支持负担。更紧迫的问题是,快照无法向apt传达deb的依赖关系。这使得安装变得非标准化,并成为支持中的另一个痛点:我们都知道人类有时候并不擅长遵循简单的指示。 - user535733
这个圆锥形指南应该更全面地回答了你的问题:https://docs.snapcraft.io/the-snap-format/698 - kc1di
@user535733:好的,即使它不便携,我也意识到这个劣势,我该怎么做呢? - knocte