在今天的文章中,我们来介绍一下如何利用QEMU来编译打包我们的Ubuntu Core armhf格式的Snap应用。这里的armhf格式的snap包可以被安装到我们的ARM板子上,比如树莓派或高通的Snapdragon 410C板子上。
1)安装qemu-user-static
我们在Ubuntu 16.04的桌面系统上打入如下的命令:
$ sudo apt install qemu-user-static
2)制作armhf rootfs
在我们的terminal中打入如下的命令:
$ mkdir -p ~/rootfs/usr/bin
$ cp -a /usr/bin/qemu-arm-static ~/rootfs/usr/bin/
$ sudo debootstrap --arch=armhf --verbose xenial ~/rootfs/
通过上面的指令,我们创建了一个以xenial (Ubuntu 16.04)为基础的 armhf rootfs.
3)进入chroot并编译我们的应用
我们在termnial中打入如下的指令:
$ sudo chroot ~/rootfs/
注意这里的rootfs是我们在上面创建的以rootfs命名的文件目录.一旦进入到chroot,我们可以利用如下的命令来安装我们的snapcraft及我们所需要的基本的打包工具:
# sudo apt update
# sudo apt-get upgrade
注意这里,我们已经是以root用户进入的,所有下面的命令可以省去sudo.
然后:
# sudo apt-get install software-properties-common
# sudo add-apt-repository universe
# sudo apt-get update
# sudo apt install snapcraft git-core build-essential
如果这个时候,我们查看我们的snapcraft的版本的话,它显示的将是:
root@liuxg:/apps/vtop# snapcraft --version
2.8.4
显然这个版本不是我们最新的版本2.22.1,它不支持许多最新的snapcraft.yaml中的syntax:
root@liuxg:/etc/apt# snapcraft --version
2.22.1
为了能够得到最新的snapcraft版本,我们修改/etc/apt/sources.list中的内容如下:
root@liuxg:/etc/apt# cat sources.list
deb http://ports.ubuntu.com/ubuntu-ports xenial main universe
deb http://ports.ubuntu.com/ubuntu-ports xenial-updates main universe
这里,我们主要是加入了xenial-updates这一项.然后,我们再:
# sudo apt update
通过这样的方法,我们就可以得到最新的snapcraft的版本2.22.1了。
上面加入universe channel的目的是为了能够顺利地安装snapcraft。
对于有些Qt应用,我们可能需要安装最新的Qt 5.6.1版本,那么我们可以通过如下的方法:
# sudo add-apt-repository ppa:ci-train-ppa-service/stable-phone-overlay
# sudo apt-get update
这样就可以得到相应的Qt最新的版本。