Stage-Packages with --target-arch

I’m trying to cross build a Go application (host is amd64, target is armhf), with stage-package dependencies. If I build it on a armhf machine, everything works fine. If I try to build it on an amd64 machine, the stage-packages that are pulled are not armhf.

I’ve tried defining it several ways

 stage-packages: 
  - bluetooth:target
  - bluetooth:armhf
  - bluetooth on armhf

dpkg --add-architecture armhf has been run

Here is my /etc/apt/sources.list, apt update executes without any issues.

## Note, this file is written by cloud-init on first boot of an instance
## modifications made here will not survive a re-bundle.
## if you wish to make changes you can:
## a.) add 'apt_preserve_sources_list: true' to /etc/cloud/cloud.cfg
##     or do the same in user-data
## b.) add sources in /etc/apt/sources.list.d
## c.) make changes to template file /etc/cloud/templates/sources.list.tmpl

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb [arch=amd64] http://archive.ubuntu.com/ubuntu xenial main restricted
deb [arch=armhf] http://ports.ubuntu.com/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb [arch=amd64] http://archive.ubuntu.com/ubuntu xenial-updates main restricted
deb [arch=armhf] http://ports.ubuntu.com/ xenial-updates main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb [arch=amd64] http://archive.ubuntu.com/ubuntu xenial universe
deb [arch=armhf] http://ports.ubuntu.com/ xenial universe
deb-src http://archive.ubuntu.com/ubuntu xenial universe
deb [arch=amd64] http://archive.ubuntu.com/ubuntu xenial-updates universe
deb [arch=armhf] http://ports.ubuntu.com/ xenial-updates universe
deb-src http://archive.ubuntu.com/ubuntu xenial-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb [arch=amd64] http://archive.ubuntu.com/ubuntu xenial multiverse
deb [arch=armhf] http://ports.ubuntu.com/ xenial multiverse
deb-src http://archive.ubuntu.com/ubuntu xenial multiverse
deb [arch=amd64] http://archive.ubuntu.com/ubuntu xenial-updates multiverse
deb [arch=armhf] http://ports.ubuntu.com/ xenial-updates multiverse
deb-src http://archive.ubuntu.com/ubuntu xenial-updates multiverse
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb [arch=amd64] http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
deb [arch=armhf] http://ports.ubuntu.com/ xenial-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse

deb [arch=amd64] http://security.ubuntu.com/ubuntu xenial-security main restricted
deb [arch=armhf] http://ports.ubuntu.com/ xenial-security main restricted
deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted
deb [arch=amd64] http://security.ubuntu.com/ubuntu xenial-security universe
deb [arch=armhf] http://ports.ubuntu.com/ xenial-security universe
deb-src http://security.ubuntu.com/ubuntu xenial-security universe
deb [arch=amd64] http://security.ubuntu.com/ubuntu xenial-security multiverse
deb [arch=armhf] http://ports.ubuntu.com/ xenial-security multiverse
deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu xenial partner
# deb-src http://archive.canonical.com/ubuntu xenial partner

Hi,

I encountered a similar problem, and the way I solved it is by using the deb syntax for specifying the packages, i.e. rsync:armhf, but becuase the colon has special meaning inside YAML, you have to enclose the entire package name inside quotes. Also note that in recent versions of snapcraft you need to use the snapcraft advanced grammar to work with cross-compiling using on and to. For example to install the armhf package version when cross-compiling to armhf, you would do:

    stage-packages:
      - on amd64 to armhf:
          - "rsync:armhf"
      - else:
        - "rsync"

which admittedly looks rather awkward but does work. Also note that I needed to cxhange /etc/apt/sources.list similarly to you on my amd64 xenial system, but for every line that was in there previously I had to add the arch for example

deb http://archive.ubuntu.com/ubuntu/ xenial main restricted

to

deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ xenial main restricted

and add the following additional lines for armhf:

deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports xenial main universe
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports xenial-security main universe
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports xenial-updates main universe
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports xenial-backports main universe

This was necessary because snapcraft will run apt update (or some equivalent), and if any of the cache hits fail, as they did for me without the [arch=amd64] changes, snapcraft will fail. I did not need to add any of the deb-src lines like you have in your sources.list file.

Hope this helps!

(also note that I added arm64 to the deb sources so that the above can just be pasted in and you get arm64 support too if needed)

4 Likes