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 \ |
