红联Linux门户
Linux帮助

运用snapcraft 2.25+提供的hooks来实现对snap的设置

发布时间:2017-01-28 10:02:44来源:ubuntutouch作者:ubuntutouch
在先前的文章"如何为我们的Ubuntu Core应用进行设置"(http://www.linuxdiyf.com/linux/25590.html)中,我们通过copy plugin的方法把我们想要的congfigure文件拷入到我们所需要的目录中.具体的实现是这样的:
 
snapcraft.yaml
parts:    
hello:    
plugin: copy    
files:    
./bin: bin    
config:    
plugin: dump    
source: .    
organize:    
configure: meta/hooks/configure
 
由于在snapcraft 2.25版本以后,它提供了对hook的支持,所有,我们只需要要在我们的项目的根目录中建立一个叫做snap/hooks的目录,并把我们的configure文件拷入即可:
liuxg@liuxg:~/snappy/desktop/helloworld-hook$ tree -L 4
.
├── bin
│   ├── createfile
│   ├── createfiletohome
│   ├── echo
│   ├── env
│   ├── evil
│   └── sh
├── setup
│   ├── gui
│   │   ├── helloworld.desktop
│   │   └── helloworld.png
│   └── license.txt
├── snap
│   └── hooks
│       └── configure
└── snapcraft.yaml
 
有了这样的文件架构后,snapcraft会自动帮我们把configure文件考入到meta/hooks文件目录下.下面是我们的prime目录里的内容:
liuxg@liuxg:~/snappy/desktop/helloworld-hook/prime$ tree -L 3
.
├── bin
│   ├── createfile
│   ├── createfiletohome
│   ├── echo
│   ├── env
│   ├── evil
│   └── sh
├── command-createfiletohome.wrapper
├── command-createfile.wrapper
├── command-env.wrapper
├── command-evil.wrapper
├── command-hello-world.wrapper
├── command-sh.wrapper
├── meta
│   ├── gui
│   │   ├── helloworld.desktop
│   │   └── helloworld.png
│   ├── hooks
│   │   └── configure
│   └── snap.yaml
└── snap
    └── hooks
        └── configure
 
我们必须记住这个功能只是在snapcraft 2.25以上的版本中才有的.我们可以看到在meta/hooks/中有一个叫做configure的文件.
 
我们安装好这个snap应用,并执行如下的命令:
$ sudo snap set hello username=foo password=bar  
 
我们可以通过如下的命令来获得这个值:
$ sudo snap get hello username  
foo  
 
显然,我们得到我们设置的值.整个源码在:https://github.com/liu-xiao-guo/helloworld-hook.另外一个例程也可以在我们的snapcraft项目中的hooks(https://github.com/snapcore/snapcraft/tree/master/demos/hooks/snap/hooks)找到.
 
更多阅读:https://github.com/snapcore/snapcraft/blob/master/docs/hooks.md.就想文章中介绍的那样,我们也可以利用另外一种方法来实现.具体的例子见pyhooks(https://github.com/snapcore/snapcraft/tree/master/demos/pyhooks).这种方法的好处是可以使用Python语言来进行设置.运行结果如下:
liuxg@liuxg:~$ sudo snap set pyhooks fail=true  
error: cannot perform the following tasks:  
- Run configure hook of "pyhooks" snap (Failing as requested.)  
liuxg@liuxg:~$ sudo snap set pyhooks fail=false
 
本文永久更新地址:http://www.linuxdiyf.com/linux/27992.html