我需要运行一个命令来初始化应用程序的环境。安装 snap 包时,这只需要发生一次。
DEB 包提供了安装后脚本,可用于此目的以及许多其他目的,例如设置特定于应用程序的用户帐户等。
那么,DEB 的安装后脚本在 snap 包中相当于什么?
答案1
故意没有使用 post* 脚本(以确保您有事务更新)。
不过,snapd 本身很快就会发布一些钩子系统,以便您实现这一点。不过目前还不可用,但您可以使用 $SNAP_DATA 文件标志让您的守护进程等待,直到用户归档配置(例如,通过同一 snap 中的另一个命令)。
答案2
您可以在启动器脚本中配置应用程序的环境,该脚本在启动应用程序之前执行此操作。@didrocks 所说的是,您可以在文件夹中创建一个隐藏的标志文件$SNAP_DATA
,以了解应用程序是否之前已启动。
例如,您可以编写一个$SNAP/bin/myapp-launcher.sh
执行下列操作的 bash 脚本:
#!/bin/sh
...
if [ ! -e "$SNAP_DATA/.flag_file ]; then
<configure the app>
touch $SNAP_DATA/.flag_file
fi
...
exec "<command of your app>" "$@"
并snapcraft.yaml
配置该应用程序通过调用其启动器来启动,例如
...
apps:
myapp:
command: bin/myapp-launcher.sh
...