Setup VPS w/ ARM64 runner to avoid cross-compile #49

Closed
opened 2026-06-27 17:53:37 +00:00 by shadowdrake · 1 comment
Collaborator

Linked to #43

Suggested to use Oracle free tier Ampere VPS - will be 100% free and be more than sufficient for this task.

https://www.oracle.com/cloud/free/

Sign up for the always-free tier and have an account prepared.

Provision a VM with the following criteria:

  1. Select "Change shape" first, and select Ampere, VM.Standard.A1.Flex, expand the list option and change to 2 OCPUs and 12GB of memory, per screenshot below
    image
  2. Select "Change image" and select the image of your choice. Recommended Ubuntu or Oracle Linux but the world is your oyster
  3. If desired, change advanced options but the defaults are generally acceptable
  4. In step 2 for security - the defaults are acceptable
  5. In step 3 for networking - again the defaults are acceptable. Ensure a public IPv4 address assignment is provided unless you plan to use a tunnel for connectivity to Forgejo (tailscale, netbird, etc)
  6. If you plan to host other things on the server it's worth setting up a Network Security Group (and this is how you forward ports, if required. By default ALL ports except SSH are closed). You must select Advanced Options, "Use network security groups to control traffic" Add a new Network Security Group and configure it. Feel free to ask me about this if you plan to go this route
  7. Add an SSH key - either have Oracle generate a keypair or generate your own and upload/paste the public key. Password login is NOT allowed on Oracle VPS and the SSH keypair is the only way in
  8. In step 4 for Storage, you can select "Specify a custom boot volume size and performance setting" and configure the boot volume size. Additionally, you may encrypt the boot volume with a key of your choosing if you do so choose - if you do this, Oracle will not be able to decrypt the volume. Do not add an additional block volume

Finish provisioning and sign into the VPS!

Provisioning while your account is locked as "Always Free" might mean there are no available Ampere instances in the region you specified. You can try again later - for some people this is a couple of days. Or even a couple of hours.

If you don't want to wait (I gave up waiting after a few weeks of bad luck) you can convert your account to Pay-As-You-Go. Doing so will allow you to provision a VM immediately. As long as you stay within the free tier limits you will not be billed - it just unlocks the ability for you to provision paid services.

Linked to #43 Suggested to use Oracle free tier Ampere VPS - will be 100% free and be more than sufficient for this task. https://www.oracle.com/cloud/free/ Sign up for the always-free tier and have an account prepared. Provision a VM with the following criteria: 1. Select "Change shape" first, and select Ampere, VM.Standard.A1.Flex, expand the list option and change to 2 OCPUs and 12GB of memory, per screenshot below ![image](/attachments/0d499202-d8fd-4ad3-9ea2-a6ed9e51c15d) 2. Select "Change image" and select the image of your choice. Recommended Ubuntu or Oracle Linux but the world is your oyster 3. If desired, change advanced options but the defaults are generally acceptable 4. In step 2 for security - the defaults are acceptable 5. In step 3 for networking - again the defaults are acceptable. Ensure a public IPv4 address assignment is provided unless you plan to use a tunnel for connectivity to Forgejo (tailscale, netbird, etc) 6. If you plan to host other things on the server it's worth setting up a Network Security Group (and this is how you forward ports, if required. By default ALL ports except SSH are closed). You must select Advanced Options, "Use network security groups to control traffic" Add a new Network Security Group and configure it. Feel free to ask me about this if you plan to go this route 7. Add an SSH key - either have Oracle generate a keypair or generate your own and upload/paste the public key. Password login is NOT allowed on Oracle VPS and the SSH keypair is the only way in 8. In step 4 for Storage, you can select "Specify a custom boot volume size and performance setting" and configure the boot volume size. Additionally, you may encrypt the boot volume with a key of your choosing if you do so choose - if you do this, Oracle will not be able to decrypt the volume. Do not add an additional block volume Finish provisioning and sign into the VPS! Provisioning while your account is locked as "Always Free" might mean there are no available Ampere instances in the region you specified. You can try again later - for some people this is a couple of days. Or even a couple of hours. If you don't want to wait (I gave up waiting after a few weeks of bad luck) you can convert your account to Pay-As-You-Go. Doing so will allow you to provision a VM immediately. As long as you stay within the free tier limits you will not be billed - it just unlocks the ability for you to provision paid services.
140 KiB
Collaborator

Done — merged to master 70d5362. The full arm64 story is now shipped:

  • Runner: the Oracle Ampere runner (linux-arm64) has been live for a while, natively building the image-arm64 leg on every release (green since ~alpha.21).
  • Images: every release tag is a multi-arch manifest — docker pull resolves amd64/arm64 automatically.
  • Packages (this commit): the packages job now loops both architectures — 7 release assets per tag (_amd64.deb/_arm64.deb, x86_64/aarch64 rpms, x86_64-linux/aarch64-linux tarballs, SHA256SUMS). The arm64 binary is extracted from the arm64 image with docker create/cp on the amd64 runner (never runs the container → no QEMU), so there is still exactly one compile per (tag, arch), each native. packaging/build-packages.sh derives the arch from the host for local builds.

Verified piecewise without a tag: nfpm arch interpolation (correct names + Architecture fields in deb control / rpm headers for both arches) and both image-extraction legs against the real alpha.22 images on the runner host (correct ELF machine each). First full end-to-end exercise lands with the next release tag.

Docs updated: docs/packaging.md, docs/docker-usage.md (multi-arch + CI sections), README standalone-tarball snippet.

**Done — merged to master `70d5362`.** The full arm64 story is now shipped: - **Runner**: the Oracle Ampere runner (`linux-arm64`) has been live for a while, natively building the `image-arm64` leg on every release (green since ~alpha.21). - **Images**: every release tag is a multi-arch manifest — `docker pull` resolves amd64/arm64 automatically. - **Packages** (this commit): the `packages` job now loops both architectures — 7 release assets per tag (`_amd64.deb`/`_arm64.deb`, `x86_64`/`aarch64` rpms, `x86_64-linux`/`aarch64-linux` tarballs, `SHA256SUMS`). The arm64 binary is extracted from the arm64 image with `docker create`/`cp` on the amd64 runner (never runs the container → no QEMU), so there is still exactly one compile per (tag, arch), each native. `packaging/build-packages.sh` derives the arch from the host for local builds. Verified piecewise without a tag: nfpm arch interpolation (correct names + `Architecture` fields in deb control / rpm headers for both arches) and both image-extraction legs against the real alpha.22 images on the runner host (correct ELF machine each). First full end-to-end exercise lands with the next release tag. Docs updated: `docs/packaging.md`, `docs/docker-usage.md` (multi-arch + CI sections), README standalone-tarball snippet.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
dark/nether-voicebridge#49
No description provided.