我们在《snap打包Nginx实践》中,熟悉了使用snapcraft工具打包nginx的过程,但nginx启动所需要的配置文件,是我们手动从只读区拷贝到可读写区的,下面我们就来了解一下snap hook技术,并实践通过snap hook技术来实现nginx snap包在安装过程中,自动把配置文件从只读区拷贝到可读写区。
1.什么是snap hook
snap hook通常是一个可执行文件,由某种操作触发,可以在snap的沙箱环境中运行。
snap hook的常用场景有:
1) 通知发生了什么事情
比如snap app升级的时候,可能需要触发hook更新配置文件、升级数据格式等。
2) 通知正在发生什么操作
比如snap app可能需要知道特定的interface何时连接或断开。
snap hook文件需要放在跟snapcraft.yaml文件同级目录的snap/hooks目录下,可执行文件的名称跟hook类型一致,比如我们即将用到的install hook的文件名称就是install,这样使用snapcraft工具打包后,snapd就会根据操作来触发snap hook。
snap hook通常只能访问沙箱内部的资源,如果要访问沙箱外部资源,需要通过interface机制的slots and plugs来实现。
snap hook按照触发操作分为configure hook、install hook、interface hook、pre-refresh hook、post-refresh hook、remove hook、prepare-device hook。
2.编写hook实现nginx配置文件拷贝
nginx的配置文件,是需要在install过程中进行拷贝的,所以我们需要编写install hook。