红联Linux门户
Linux帮助

如何snap Shadowsocks并发布到Ubuntu Store

发布时间:2016-11-03 09:46:37来源:Ubuntu手机作者:Ubuntu手机
在今天的文章中,我们来介绍如何snap Shadowsocks应用,并发布到Ubuntu商店.
 
1)创建snapcraft.yaml文件
我们可以在github的地址https://github.com/shadowsocks/shadowsocks-qt5找到这个项目的源码.这是一个Qt的项目.为此,我们创建了一个如下的snapcraft.yaml文件:
snapcraft.yaml
name: ss-qt # you probably want to 'snapcraft register <name>'  
version: '0.1' # just for humans, typically '1.2+git' or '1.3.2'  
summary: Shadowsocks  
description: |  
This is shadowsocks snap app  
grade: stable # must be 'stable' to release into candidate/stable channels  
confinement: strict # use 'strict' once you have the right plugs and slots  
apps:  
ss-qt:  
command: desktop-launch $SNAP/usr/bin/ss-qt5  
plugs: [home,opengl,network,unity7,browser-support,network-bind]  
parts:  
ss:  
plugin: qmake  
source: https://github.com/shadowsocks/shadowsocks-qt5  
source-type: git  
qt-version: qt5  
stage-packages:  
- libzbar-dev  
- libappindicator-dev  
- libbotan1.10-dev  
- libqrencode-dev  
- libqtshadowsocks-dev  
- libqtshadowsocks  
after: [desktop/qt5]
在我们创建这个snapcraft.yaml的文件时,我们可以使用:
$ snapcraft init
命令来创建这个template. 关于这个项目所需要的stage-packages,我们可以参照项目所在的debian包的依赖:
https://github.com/shadowsocks/shadowsocks-qt5/blob/master/debian/control
Source: shadowsocks-qt5  
Section: net  
Priority: extra  
Maintainer: Symeon Huang <hzwhuang@gmail.com>  
Build-Depends: debhelper (>= 9),  
pkg-config,  
qt5-qmake,  
qtbase5-dev,  
libqrencode-dev,  
libqtshadowsocks-dev (>= 1.9.0),  
libzbar-dev,  
libappindicator-dev,  
libbotan1.10-dev  
Standards-Version: 3.9.6  
Homepage: https://github.com/librehat/shadowsocks-qt5  
Vcs-Git: https://github.com/librehat/shadowsocks-qt5.git  
Vcs-Browser: https://github.com/librehat/shadowsocks-qt5  
Package: shadowsocks-qt5  
Architecture: any  
Depends: ${shlibs:Depends},  
libqtshadowsocks (>= 1.9.0)  
Description: A cross-platform shadowsocks GUI client  
Shadowsocks-Qt5 is a native and cross-platform shadowsocks GUI client  
with advanced features.
在这个项目中,我们也使用了一个叫做"desktop/qt5"的remote part.这个remote part是由别人已经做好的.我们直接来使用.这是因为这个项目是一个Qt项目,所以我们需要desktop-launch来启动该应用.关于所有的remote part我们可以参阅连接remote part(https://wiki.ubuntu.com/snapcraft/parts).当然,我们也可以直接通过如下的命令来查看:
$ snapcraft update  
$ snapcraft search  
liuxg@liuxg:~/snappy/desktop/ss$ snapcraft search  
PART NAME                          DESCRIPTION  
checkbox                           Part that supplies the latest stable version of the Checkbox t...  
checkbox-dev                       Part that supplies the latest stable version of the Checkbox t...  
checkbox-ng-dev                    Part that supplies the latest stable version of the Checkbox t...  
checkbox-support-dev               Part that supplies the latest stable version of the Checkbox t...  
curl                               A tool and a library (usable from many languages) for client s...  
desktop-glib-only                  Helpers for glib minimal launchers.  
desktop-gtk2                       Helpers for gtk2 minimal launchers.  
desktop-gtk3                       Helpers for gtk3 minimal launchers.  
desktop-qt4                        Helpers for qt4 minimal launchers.  
desktop-qt5                        Helpers for qt5 minimal launchers.  
desktop/glib-only                  Helpers for gtk2, gtk3, qt4 and qt5 or glib minimal launchers.  
desktop/gtk2                       Helpers for gtk2, gtk3, qt4 and qt5 or glib minimal launchers.  
desktop/gtk3                       Helpers for gtk2, gtk3, qt4 and qt5 or glib minimal launchers.  
desktop/qt4                        Helpers for gtk2, gtk3, qt4 and qt5 or glib minimal launchers.  
desktop/qt5                        Helpers for gtk2, gtk3, qt4 and qt5 or glib minimal launchers.  
dnsmasq                            Network infrastructure swiss-army knife  
ffmpeg                             This sets up ffmpeg for projects.  
gtkconf                            This sets up the GTK environment for GTK-based projects  
modemmanager                       Part providing access to the ModemManager client utilities nam...  
mongodb                            A document-oriented database  
mqtt-paho-python2                  mqtt-paho for python.  
mqtt-paho-python3                  mqtt-paho for python.  
mqtt-paho/python2                  mqtt-paho for python.  
mqtt-paho/python3                  mqtt-paho for python.  
networkmanager                     Part providing access to the NetworkManager client utilities n...  
openssh                            OpenSSH is the premier connectivity tool for remote login with...  
plainbox-dev                       Part that supplies the latest stable version of the Checkbox t...  
plainbox-provider-docker           Tests to certify the correct functioning of Docker containers ...  
plainbox-provider-ipdt             Tests to certify the correct functioning of devices running re...  
plainbox-provider-snappy           Tests to certify the correct functioning of devices running re...  
plainbox-provider-snappy-resource  Resource jobs are that are used to gather information about a ...  
plainbox-provider-tpm2             Tests to certify the correct functioning of TPM2 devices  
qt4conf                            This sets up qt4.conf for projects using qml and other qt4 com...  
qt57                               Qt 5.7 part. Lets you use newer Qt than what is available in U...  
qt5conf                            This sets up qt5.conf for projects using qml and other qt5 com...  
simple-make-filesets               The filesets test from the integration test suite.  
tpm-tools                          Part containing utilities to interact with a TPM chip being pa...  
tpm2-tss                           Implementation of the TPM 2.0 Software Stack (TSS). See https:...  
wafdemo                            Waf c Demo
由于我们需要"desktop/qt5",然后才能编译我们的"ss"part,所有我们使用了关键词after.关于snapcraft的更多syntax的介绍,我们可以参阅http://snapcraft.io/docs/build-snaps/syntax,最终,我们的源码可以在如下的地址找到:
https://github.com/liu-xiao-guo/ss-qt
我们在我们的snapcraft.yaml文件所在的目录中,打入如下的命令:
$ snapcraft  
如果顺利的话,我们就可以在我们的当前的目录中找到最终生产的.snap包文件:
liuxg@liuxg:~/snappy/desktop/ss$ tree -L 1  
.  
├── parts  
├── prime  
├── setup  
├── snapcraft.yaml  
├── ss-qt_0.1_amd64.snap  
└── stage
这里的parts,stage及prime都是在编译过程中所生产的中间文件目录.其中prime目录中的所有文件就是我们最终安装到电脑系统中所有的文件:
liuxg@liuxg:~/snappy/desktop/ss/prime$ tree -L 2  
.  
├── bin  
│   └── desktop-launch  
├── command-ss-qt.wrapper  
├── etc  
│   ├── drirc  
│   ├── fonts  
│   ├── gss  
│   ├── gtk-2.0  
│   ├── gtk-3.0  
│   ├── init.d  
│   ├── profile.d  
│   ├── ucf.conf  
│   ├── X11  
│   └── xdg  
├── flavor-select  
├── lib  
│   └── x86_64-linux-gnu  
├── meta  
│   ├── gui  
│   └── snap.yaml  
├── usr  
│   ├── bin  
│   ├── include  
│   ├── lib  
│   ├── sbin  
│   └── share  
└── var  
└── lib
从上面可以看出来,在prime目录中,它包含了一个snap运行所需要的所有的文件(包括运行库).一个snap包被称作为self-contained,也即它不依赖于OS所提供的任何库.如果需要OS的资源的话,它必须是通过interfaces来完成的.
为了能够使得我们的应用在dash中可以被启动,我们在我们的根目录下创建一个setup/gui的目录,并把我们所需要的图标放入到该目录中.这样在最终的snap包中,就含有desktop所需要的信息.这个信息可以在上面所示的meta/gui中找到.
我们的.snap文件在本地,所以我们可以通过如下的命令:
$ sudo snap install *.snap --dangerous  
来完成我们的安装.等安装完后,我们可以在我们的Desktop的dash中看到:
如何snap Shadowsocks并发布到Ubuntu Store
点击上面的图标,我们就可以启动我们的Shadowsocks应用了.这个snap应用可以使用所有支持snapd的Linux的发行版.用户一旦安装,不需要再安装任何其它的依赖库.
如何snap Shadowsocks并发布到Ubuntu Store
 
2)发布我们的应用
在这一节中,我们来介绍如何发布一个应用到我们的应用商店.
为了能够在Ubuntu商店中发布我们的应用,我们必须在地址 https://myapps.developer.ubuntu.com/注册我们的账号.在创建的过程中,我们必须选一个我们自己独有的"developer namespace".这个namespace将成为我们发布应用名称的一部分.比如针对我的情况,我的namespace是"xiaoguo".
首先在我们的项目的根目录中(.snap文件所在的目录),打入如下的命令:
如何snap Shadowsocks并发布到Ubuntu Store
我们通过snapcraft login命令来登陆我们的商店.我们使用如下的snap register命令来为我们的应用注册一个名字:
如何snap Shadowsocks并发布到Ubuntu Store
在这里,我们选择"ss-qt"来作为我们的应用名称.我们使用snapcraft push命令来把我们的应用上传到商店.最后,我们使用snapcraft release命令来发布我们的应用.
等我们发布完我们的应用后,我们可以通过如下的命令来进行安装我们的应用.
$ sudo snap find ss-qt  
$ sudo snap install ss-qt  
如何snap Shadowsocks并发布到Ubuntu Store
如何snap Shadowsocks并发布到Ubuntu Store
从上面可以看出来,我的namespace "xiaoguo"在上面作为Developer列出来了.至此,我们的应用已经发布到我们的商店了.可以供其它的使用者进行使用了.
这个应用可以在其它许多的Linux发行版中安装并运行.我们可以参照http://snapcraft.io/docs/core/install来安装到其它的Linux发行版中。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/25677.html