diff options
author | Max Audron <audron@cocaine.farm> | 2021-02-28 05:59:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-28 15:59:42 +1100 |
commit | e4d3ff2374142fe6431b68874f6604a471732fae (patch) | |
tree | 7d2ee5ec0fcd7e901be3c46ad7afb94d7a6d2fc0 | |
parent | bcbcb3d107a3d991044354129c06e77ce19bda27 (diff) | |
download | qmk_firmware-e4d3ff2374142fe6431b68874f6604a471732fae.tar.gz qmk_firmware-e4d3ff2374142fe6431b68874f6604a471732fae.zip |
Add support for using podman to util/docker_build.sh (#10819)
* add podman support to docker_build.sh script
* break out runtime into the RUNTIME variable
* allows RUNTIME to be set by the user
* decides on docker or podman if docker isn't avaible
* rewrote check for docker-machine to account only for docker runtime
* put --user arg into a variable only to be used with docker
this is not needed with podman as podman maps the containers root id
to the users id.
* add podman to getting_started_docker documentation
-rw-r--r-- | docs/getting_started_docker.md | 10 | ||||
-rwxr-xr-x | util/docker_build.sh | 39 |
2 files changed, 39 insertions, 10 deletions
diff --git a/docs/getting_started_docker.md b/docs/getting_started_docker.md index e5309fdbb..f9c3b366a 100644 --- a/docs/getting_started_docker.md +++ b/docs/getting_started_docker.md | |||
@@ -4,8 +4,9 @@ This project includes a Docker workflow that will allow you to build a new firmw | |||
4 | 4 | ||
5 | ## Requirements | 5 | ## Requirements |
6 | 6 | ||
7 | The main prerequisite is a working `docker` install. | 7 | The main prerequisite is a working `docker` or `podman` install. |
8 | * [Docker CE](https://docs.docker.com/install/#supported-platforms) | 8 | * [Docker CE](https://docs.docker.com/install/#supported-platforms) |
9 | * [Podman](https://podman.io/getting-started/installation) | ||
9 | 10 | ||
10 | ## Usage | 11 | ## Usage |
11 | 12 | ||
@@ -38,6 +39,13 @@ util/docker_build.sh | |||
38 | # Reads parameters as input (leave blank for all keyboards/keymaps) | 39 | # Reads parameters as input (leave blank for all keyboards/keymaps) |
39 | ``` | 40 | ``` |
40 | 41 | ||
42 | You can manually set which container runtime you want to use by setting the `RUNTIME` environment variable to it's name or path. | ||
43 | By default docker or podman are automatically detected and docker is preferred over podman. | ||
44 | |||
45 | ```bash | ||
46 | RUNTIME="podman" util/docker_build.sh keyboard:keymap:target | ||
47 | ``` | ||
48 | |||
41 | ## FAQ | 49 | ## FAQ |
42 | 50 | ||
43 | ### Why can't I flash on Windows/macOS | 51 | ### Why can't I flash on Windows/macOS |
diff --git a/util/docker_build.sh b/util/docker_build.sh index bf13f5097..2b109be76 100755 --- a/util/docker_build.sh +++ b/util/docker_build.sh | |||
@@ -17,12 +17,27 @@ done | |||
17 | if [ $# -gt 1 ]; then | 17 | if [ $# -gt 1 ]; then |
18 | errcho "$USAGE" | 18 | errcho "$USAGE" |
19 | exit 1 | 19 | exit 1 |
20 | elif ! command -v docker >/dev/null 2>&1; then | ||
21 | errcho "Error: docker not found" | ||
22 | errcho "See https://docs.docker.com/install/#supported-platforms for installation instructions" | ||
23 | exit 2 | ||
24 | fi | 20 | fi |
25 | 21 | ||
22 | # Allow $RUNTIME to be overriden by the user as an environment variable | ||
23 | # Else check if either docker or podman exit and set them as runtime | ||
24 | # if none are found error out | ||
25 | if [ -z "$RUNTIME" ]; then | ||
26 | if command -v docker >/dev/null 2>&1; then | ||
27 | RUNTIME="docker" | ||
28 | elif command -v podman >/dev/null 2>&1; then | ||
29 | RUNTIME="podman" | ||
30 | else | ||
31 | errcho "Error: no compatible container runtime found." | ||
32 | errcho "Either podman or docker are required." | ||
33 | errcho "See https://podman.io/getting-started/installation" | ||
34 | errcho "or https://docs.docker.com/install/#supported-platforms" | ||
35 | errcho "for installation instructions." | ||
36 | exit 2 | ||
37 | fi | ||
38 | fi | ||
39 | |||
40 | |||
26 | # Determine arguments | 41 | # Determine arguments |
27 | if [ $# -eq 0 ]; then | 42 | if [ $# -eq 0 ]; then |
28 | printf "keyboard=" && read -r keyboard | 43 | printf "keyboard=" && read -r keyboard |
@@ -41,20 +56,26 @@ if [ -z "$keyboard" ]; then | |||
41 | keyboard=all | 56 | keyboard=all |
42 | fi | 57 | fi |
43 | if [ -n "$target" ]; then | 58 | if [ -n "$target" ]; then |
44 | if [ "$(uname)" = "Linux" ] || docker-machine active >/dev/null 2>&1; then | 59 | # IF we are using docker on non Linux and docker-machine isn't working print an error |
45 | usb_args="--privileged -v /dev:/dev" | 60 | # ELSE set usb_args |
46 | else | 61 | if [ ! "$(uname)" = "Linux" ] && [ "$RUNTIME" = "docker" ] && ! docker-machine active >/dev/null 2>&1; then |
47 | errcho "Error: target requires docker-machine to work on your platform" | 62 | errcho "Error: target requires docker-machine to work on your platform" |
48 | errcho "See http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos" | 63 | errcho "See http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos" |
49 | errcho "Consider flashing with QMK Toolbox (https://github.com/qmk/qmk_toolbox) instead" | 64 | errcho "Consider flashing with QMK Toolbox (https://github.com/qmk/qmk_toolbox) instead" |
50 | exit 3 | 65 | exit 3 |
66 | else | ||
67 | usb_args="--privileged -v /dev:/dev" | ||
51 | fi | 68 | fi |
52 | fi | 69 | fi |
53 | dir=$(pwd -W 2>/dev/null) || dir=$PWD # Use Windows path if on Windows | 70 | dir=$(pwd -W 2>/dev/null) || dir=$PWD # Use Windows path if on Windows |
54 | 71 | ||
72 | if [ "$RUNTIME" = "docker" ]; then | ||
73 | uid_arg="--user $(id -u):$(id -g)" | ||
74 | fi | ||
75 | |||
55 | # Run container and build firmware | 76 | # Run container and build firmware |
56 | docker run --rm -it $usb_args \ | 77 | "$RUNTIME" run --rm -it $usb_args \ |
57 | --user $(id -u):$(id -g) \ | 78 | $uid_arg \ |
58 | -w /qmk_firmware \ | 79 | -w /qmk_firmware \ |
59 | -v "$dir":/qmk_firmware \ | 80 | -v "$dir":/qmk_firmware \ |
60 | -e ALT_GET_KEYBOARDS=true \ | 81 | -e ALT_GET_KEYBOARDS=true \ |