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