我正在尝试使用Snapcraft.io构建应用程序版本,并且几乎所有工作都已完成。
Snapcraft 已经编译了源代码,生成了 .snap 文件,包含了所有的依赖,等等。
但是,我被困在如何SNAP_USER_DATA
在第一次安装应用程序后初始化文件夹中的一些配置文件。
我不想将文件放在默认的只读路径SNAP
中,因为默认参数应该由用户修改,我还需要生成一些额外的文件,比如服务器证书。
所以我需要复制一些文件,并在第一次安装后运行一个脚本。
这可能吗?
谢谢。
我正在尝试使用Snapcraft.io构建应用程序版本,并且几乎所有工作都已完成。
Snapcraft 已经编译了源代码,生成了 .snap 文件,包含了所有的依赖,等等。
但是,我被困在如何SNAP_USER_DATA
在第一次安装应用程序后初始化文件夹中的一些配置文件。
我不想将文件放在默认的只读路径SNAP
中,因为默认参数应该由用户修改,我还需要生成一些额外的文件,比如服务器证书。
所以我需要复制一些文件,并在第一次安装后运行一个脚本。
这可能吗?
谢谢。
因为 snaps 是以 root 身份安装的,所以不可能完全按照您在安装时的要求进行操作,因为这$SNAP_USER_DATA
是用户特定的,所以它始终是 root 的。但是,您可以在安装时使用系统范围的目录执行此操作,例如$SNAP_DATA
,使用install
hook:
$ snapcraft init
Created snap/snapcraft.yaml.
Edit the file to your liking or run `snapcraft` to get started
创建钩子。在我们的例子中,我们只是在 中创建一个新文件$SNAP_DATA
,但你可以做任何你想做的事情。
$ mkdir -p snap/hooks
$ echo "touch \$SNAP_DATA/foo" >> snap/hooks/install
$ chmod a+x snap/hooks/install
构建快照。
$ snapcraft
Preparing to pull my-part
Pulling my-part
Preparing to build my-part
Building my-part
Staging my-part
Priming my-part
Snapping 'my-snap-name' |
Snapped my-snap-name_0.1_amd64.snap
安装卡扣。这将运行install
钩子。
$ sudo snap install my-snap-name_0.1_amd64.snap --devmode --dangerous
my-snap-name 0.1 installed
请注意,在 $SNAP_DATA 中创建了一个文件。
$ ls /var/snap/my-snap-name/current
foo
获得类似功能的唯一方法$SNAP_USER_DATA
是将您的真实命令包装在创建配置的脚本中。这个命令然后由用户运行,这意味着你得到$SNAP_USER_DATA
你想要的。当然,这不是在安装时。