mirror of
https://github.com/scottlamb/moonfire-nvr.git
synced 2024-12-25 22:55:55 -05:00
update arm docker build notes
This commit is contained in:
parent
f512d5cacb
commit
115b081dcd
@ -67,7 +67,7 @@ if [[ "${BUILDARCH}" != "${TARGETARCH}" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
packages+=(
|
packages+=(
|
||||||
g++-${gcc_target}
|
g++-${gcc_target/_/-}
|
||||||
libc6-dev-${dpkg_arch}-cross
|
libc6-dev-${dpkg_arch}-cross
|
||||||
pkg-config-${gcc_target}
|
pkg-config-${gcc_target}
|
||||||
qemu-user
|
qemu-user
|
||||||
|
@ -30,18 +30,29 @@ $ cd moonfire-nvr
|
|||||||
|
|
||||||
## Docker builds
|
## Docker builds
|
||||||
|
|
||||||
*Note about ARM:* this build procedure is normally used on x86-64 running
|
|
||||||
Docker 20.10. The author has *cross-compiled to* ARM machines but never
|
|
||||||
successfully *built on* an ARM machine. In general, the Docker experience on ARM
|
|
||||||
appears much less polished. For example, you're likely to hit
|
|
||||||
[this `At least one invalid signature was encountered.` error](https://stackoverflow.com/questions/64439278/gpg-invalid-signature-error-while-running-apt-update-inside-arm32v7-ubuntu20-04).
|
|
||||||
|
|
||||||
This command should prepare a deployment image for your local machine:
|
This command should prepare a deployment image for your local machine:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ docker buildx build --load --tag=moonfire-nvr -f docker/Dockerfile .
|
$ docker buildx build --load --tag=moonfire-nvr -f docker/Dockerfile .
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Common errors</summary>
|
||||||
|
|
||||||
|
* `docker: 'buildx' is not a docker command.`: You shouldn't see this with
|
||||||
|
Docker 20.10. With Docker version 19.03 you'll need to prepend
|
||||||
|
`DOCKER_CLI_EXPERIMENTAL=enabled` to `docker buildx build` commands. If
|
||||||
|
your Docker version is older than 19.03, you'll need to upgrade.
|
||||||
|
* `At least one invalid signature was encountered.`: this is likely
|
||||||
|
due to an error in `libseccomp`, as described [in this askubuntu.com answer](https://askubuntu.com/a/1264921/1365248).
|
||||||
|
Try running in a privileged builder. As described in [`docker buildx build` documentation](https://docs.docker.com/engine/reference/commandline/buildx_build/#allow),
|
||||||
|
run this command once:
|
||||||
|
```
|
||||||
|
$ docker buildx create --use --name insecure-builder --buildkitd-flags '--allow-insecure-entitlement security.insecure'
|
||||||
|
```
|
||||||
|
then add `--allow security.insecure` to your `docker buildx build` commandlines.
|
||||||
|
</details>
|
||||||
|
|
||||||
If you want to iterate on code changes, doing a full Docker build from
|
If you want to iterate on code changes, doing a full Docker build from
|
||||||
scratch every time will be painfully slow. You will likely find it more
|
scratch every time will be painfully slow. You will likely find it more
|
||||||
helpful to use the `dev` target. This is a self-contained developer environment
|
helpful to use the `dev` target. This is a self-contained developer environment
|
||||||
@ -63,13 +74,14 @@ The development image overrides cargo's output directory to
|
|||||||
using a bind filesystem for build products, which can be slow on macOS. It
|
using a bind filesystem for build products, which can be slow on macOS. It
|
||||||
also means that if you sometimes compile directly on the host and sometimes
|
also means that if you sometimes compile directly on the host and sometimes
|
||||||
within Docker, they don't trip over each other's target directories.
|
within Docker, they don't trip over each other's target directories.
|
||||||
directories.
|
|
||||||
|
|
||||||
You can also cross-compile to a different architecture. Adding a
|
You can also cross-compile to a different architecture. Adding a
|
||||||
`--platform=linux/arm64/v8,linux/arm/v7,linux/amd64` argument will compile
|
`--platform=linux/arm64/v8,linux/arm/v7,linux/amd64` argument will compile
|
||||||
Moonfire NVR for all supported platforms. For the `dev` target, this prepares
|
Moonfire NVR for all supported platforms. (Note: this has been used
|
||||||
a build which executes on your local architecture and is capable of building
|
successfully for building on x86-64 and compiling to arm but not the
|
||||||
a binary for your desired target architecture.
|
reverse.) For the `dev` target, this prepares a build which executes on your
|
||||||
|
local architecture and is capable of building a binary for your desired target
|
||||||
|
architecture.
|
||||||
|
|
||||||
On the author's macOS machine with Docker desktop 3.0.4, building for
|
On the author's macOS machine with Docker desktop 3.0.4, building for
|
||||||
multiple platforms at once will initially fail with the following error:
|
multiple platforms at once will initially fail with the following error:
|
||||||
|
Loading…
Reference in New Issue
Block a user