在今天的教程中,我们来展示如何来hack一个已经发布的Ubuntu Core应用.这个方法特别是对已经发布在Ubuntu Core商店的应用进行hack非常有用.
最近,我想把在Ubuntu Desktop上面的一个叫做vtop的应用移植到我们的Ubuntu Core的dragonboard上面.vtop是一个非常好的应用,它可以展示在Ubuntu系统中的应用资源:
我们可以在我们的Ubuntu Desktop上面利用如下的命令来安装它:
$ sudo snap install vtop
在这里,我们没有用到任何的channel选项,表明它是从我们的stable channel进行安装的.没有任何的安全的问题.我们可以在terminal中直接打入如下的命令:
$ vtop就可以运行这个应用.
为了得到同样的应用,我也尝试使用如下的snapcraft.yaml文件来创建一个同样的应用:
snapcraft.yaml
name: v-top # you probably want to 'snapcraft register <name>' version: '0.1' # just for humans,typically '1.2+git' or '1.3.2' summary: This is a snap for vtop # 79 char long summary description: | This is vtop. More info can be found at https://parall.ax/vtop grade: stable # must be 'stable' to release into candidate/stable channels confinement: strict # use 'strict' once you have the right plugs and slots apps: v-top: command: bin/vtop plugs: [home,network,system-observe,process-control,network-bind] parts: vtop: # See 'snapcraft plugins' plugin: nodejs source: https://github.com/MrRio/vtop source-type: git node-engine: 6.9.2
这个snapcraft.yaml文件非常简单.等我们打包过后,我们发现这个应用只能在devmode下进行安装,否则会出现一些问题,比如:
liuxg@liuxg:~/snappy/desktop/vtop2$ v-top TypeError: Cannot read property 'replace' of undefined at child.exec (/snap/v-top/x1/lib/node_modules/vtop/sensors/memory.js:45:43) at ChildProcess.exithandler (child_process.js:213:5) at emitTwo (events.js:106:13) at ChildProcess.emit (events.js:191:7) at maybeClose (internal/child_process.js:877:16) at Socket.<anonymous> (internal/child_process.js:334:11) at emitOne (events.js:96:13) at Socket.emit (events.js:188:7) at Pipe._handle.close [as _onclose] (net.js:498:12)
那么我们的问题出现在哪里呢?显然它出现在最新的发布版本中 https://github.com/MrRio/vtop.这个最新发布的软件里面含有一些不利于我们进行snap打包工作的代码.为了解决这个问题,我想到了已经发布在我们的Ubuntu Core商店里的软件vtop.我进行了如下的操作:
创建一个目录,比如tmp,然后进入到我们的目录中中:
$ snap download vtop
我们通过上面的命令来把发布到商店里的vtop应用下载到本地:
liuxg@liuxg:~/tmp$ ls vtop_1.snap
显然我们已经下载了发布到我们商店里的vtop应用.接下来,我们使用如下的命令:
liuxg@liuxg:~/tmp$ unsquashfs vtop_1.snap Parallel unsquashfs: Using 4 processors 2205 inodes (2419 blocks) to write [=================================================================================/] 2419/2419 100% created 2202 files created 483 directories created 3 symlinks created 0 devices created 0 fifos liuxg@liuxg:~/tmp$ ls squashfs-root vtop_1.snap
liuxg@liuxg:~/tmp$ snapcraft snap squashfs-root/ Snapping 'vtop' | Snapped vtop_1.0.1_amd64.snap liuxg@liuxg:~/tmp$ ls squashfs-root vtop_1.0.1_amd64.snap vtop_1.snap
liuxg@liuxg:~/tmp$ cd squashfs-root/ liuxg@liuxg:~/tmp/squashfs-root$ ls bin CHANGELOG.md command-vtop.wrapper etc include lib LICENSE Meta README.md share liuxg@liuxg:~/tmp/squashfs-root$ cd bin/ liuxg@liuxg:~/tmp/squashfs-root/bin$ ls node npm vtop liuxg@liuxg:~/tmp/squashfs-root/bin$ ./node --version v4.2.2
liuxg@liuxg:~/tmp/squashfs-root/lib/node_modules$ ls npm vtop
在这里,我们可以看见我们所有的能够运行我们的vtop的代码都被保存到一个叫做vtop的目录之中:
liuxg@liuxg:~/tmp/squashfs-root/lib/node_modules$ ls vtop app.js CHANGELOG.md LICENSE node_modules README.md themes bin docs Makefile package.json sensors upgrade.js
无论它在原来的应用中是怎样形成的,它肯定是被定义为一个被叫做vtop的part.我们需要这个部分的软件.我们可以把这个目录的文件考入到我们打包的文件中:
liuxg@liuxg:~/snappy/desktop/vtop$ ls snapcraft.yaml vtop
比如,在上面我们创建的项目中,我们把vtop整个目录都拷入到我们的项目中.同时我们的snapcraft.yaml的内容如下:
name: v-top # you probably want to 'snapcraft register <name>' version: '0.1' # just for humans,typically '1.2+git' or '1.3.2' summary: This is a snap for vtop # 79 char long summary description: | This is vtop. More info can be found at https://parall.ax/vtop grade: stable # must be 'stable' to release into candidate/stable channels confinement: strict # use 'strict' once you have the right plugs and slots apps: v-top: command: bin/vtop plugs: [system-observe] parts: vtop: # See 'snapcraft plugins' plugin: nodejs source: ./vtop node-engine: 4.2.2
这里我们同时指定了和原来一样的nodejs的版本4.2.2.我们重新打包我们的应用,我们会发现它和原来的应用运行的一模一样,并且在安装时,不需要devmode.我们此时也可以查看在Meta文件目录下的snap.yaml文件,并找到相应的所需要的plug system-observe.当然针对目前的这种情况似乎并不需要这个plug就可以很好地运行.
那么这样的一个应用,在QualComm的dragonboard上的安装是如何呢?
我们可以安装文章"
如何为树莓派安装Ubuntu Core并在Snap系统中进行编译"来在Dragonboard上打包我们的v-top应用,我们最终的运行的情况和在Ubuntu Destop上一模一样,并且它也不需要devmode.
从上面的图片中看出,v-top应用被成功安装,并且不汗devmode.
在64为的dragonboard上,我们可以通过如下的命令来安装:$ sudo snap install v-top
原文链接:https://www.f2er.com/ubuntu/355361.html