在今天的文章中,我们来介绍一下如何利用QEMU来编译打包我们的Ubuntu Core armhf/arm64格式的Snap应用.这里的armhf/arm64格式的snap包可以被安装到我们的ARM板子上,比如树莓派或高通的Snapdragon 410C板子上.
\
1)安装qemu-user-static
\
我们在Ubuntu 16.04的桌面系统上打入如下的命令:
\
$ sudo apt install qemu-user-static
\
2)制作armhf/amd64 rootfs
\
在我们的terminal中打入如下的命令:
\
- 32 bit的armhf rootfs
$ mkdir -p ~/rootfs/usr/bin
$ cp -a /usr/bin/qemu-arm-static ~/rootfs/usr/bin/
$ sudo debootstrap --arch=armhf --verbose xenial ~/rootfs/
- 64 bit的arm64 rootfs
$ mkdir -p ~/rootfs/usr/bin
$ cp -a /usr/bin/qemu-aarch64-static ~/rootfs/usr/bin/
$ sudo debootstrap --arch=arm64 --verbose xenial ~/rootfs/
\
\
\
通过上面的指令,我们创建了一个以xenial (Ubuntu 16.04)为基础的 armhf/arm64 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 && sudo apt-get upgrade
\
通过这样的方法,我们就可以得到最新的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最新的版本.
\
\