├── .gitattributes ├── .gitignore ├── Dockerfile ├── LICENSE ├── README-CN.md ├── README.md ├── build ├── build-esp32 ├── build-esp8266 ├── cmd.sh ├── configure-esp32 ├── lfs-image └── read.me /.gitattributes: -------------------------------------------------------------------------------- 1 | # Declare scripts that will always have LF line endings on checkout. 2 | build text eol=lf 3 | cmd.sh text eol=lf 4 | lfs-image text eol=lf 5 | build-esp32 text eol=lf 6 | build-esp8266 text eol=lf 7 | configure-esp32 text eol=lf 8 | 9 | # Declare win dump file that will always have CRLF line endings on checkout. 10 | read.me text eol=crlf 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/** 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # see https://hub.docker.com/_/ubuntu/ for versions, should be the same as on Travis for NodeMCU CI 2 | # 16.04 == xenial 3 | FROM ubuntu:16.04 4 | LABEL maintainer="marcelstoer" 5 | 6 | # If you want to tinker with this Dockerfile on your machine do as follows: 7 | # - git clone https://github.com/marcelstoer/docker-nodemcu-build 8 | # - cd docker-nodemcu-build 9 | # - vim Dockerfile 10 | # - docker build -t docker-nodemcu-build . 11 | # - cd 12 | # - docker run --rm -ti -v `pwd`:/opt/nodemcu-firmware docker-nodemcu-build build 13 | 14 | # Lint the final file with https://hadolint.github.io/hadolint/ 15 | 16 | # Deleting apt-get lists is done at the very end 17 | # hadolint ignore=DL3009 18 | RUN apt-get update && apt-get install -y --no-install-recommends wget unzip git make python-serial srecord bc xz-utils gcc ccache tzdata vim-tiny 19 | 20 | # additionally required for ESP32 builds as per https://nodemcu.readthedocs.io/en/dev-esp32/build/#ubuntu 21 | RUN apt-get install -y --no-install-recommends gperf python-pip python-dev flex bison build-essential libssl-dev libffi-dev libncurses5-dev libncursesw5-dev libreadline-dev 22 | 23 | RUN pip install --upgrade pip 24 | 25 | RUN mkdir /opt/nodemcu-firmware 26 | WORKDIR /opt/nodemcu-firmware 27 | 28 | RUN rm -rf /root 29 | RUN ln -s /tmp /root 30 | ENV PATH="/opt:${PATH}" 31 | 32 | COPY cmd.sh /opt/ 33 | COPY read.me /opt/ 34 | COPY build /opt/ 35 | COPY build-esp32 /opt/ 36 | COPY build-esp8266 /opt/ 37 | COPY configure-esp32 /opt/ 38 | COPY lfs-image /opt/ 39 | 40 | # Release some space... 41 | RUN apt-get clean \ 42 | && rm -rf /var/lib/apt/lists/* 43 | 44 | CMD ["/opt/cmd.sh"] 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Marcel Stör 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README-CN.md: -------------------------------------------------------------------------------- 1 | # Docker NodeMCU build 2 | [![Docker Pulls](https://img.shields.io/docker/pulls/marcelstoer/nodemcu-build.svg)](https://hub.docker.com/r/marcelstoer/nodemcu-build/) [![Docker Stars](https://img.shields.io/docker/stars/marcelstoer/nodemcu-build.svg)](https://hub.docker.com/r/marcelstoer/nodemcu-build/) [![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/marcelstoer/docker-nodemcu-build/blob/master/LICENSE) 3 | 4 | 5 | 克隆 [NodeMCU firmware](https://github.com/nodemcu/nodemcu-firmware) 并自定义本地配置文件,使用这个 Dcoker 镜像可以方便的编译出固件 [下载到 ESP8266](http://nodemcu.readthedocs.org/en/dev/en/flash/)。 6 | 7 | ## 目标群体 8 | NodeMCU 开发者可以分为三类: 9 | - 应用开发者 10 | 11 | 他们需要一个现成的固件, 我创建 [云端构建服务](http://nodemcu-build.com/index.php) 具有界面友好的配置选项。但是,如果是使用 [LFS](https://nodemcu.readthedocs.io/en/latest/en/lfs/) ,他们可能想建立他们的LFS映像作为 [Terry Ellison's online service](https://blog.ellisons.org.uk/article/nodemcu/a-lua-cross-compile-web-service/) 在线服务的替代品。 12 | **这个镜像正是你们心中所求!** 13 | 14 | - 固件极客 15 | 16 | 他们不需要完全控制整个工具链,也不希望在构建环境中设置 Linux 虚拟机。 17 | **这个镜像正是你们心中所求!** 18 | 19 | - 固件开发者 20 | 21 | 他们在 GitHub 上提交或贡献项目,并且需要 [自己构建完整的编译环境和完整的工具链](http://www.esp8266.com/wiki/doku.php?id=toolchain#how_to_setup_a_vm_to_host_your_toolchain) 。他们肯定会发现这个镜像有用。 22 | 23 | ## 用法 24 | 25 | ### 安装 Docker 26 | Docker 是一个开源项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。Docker 现在拥有不同系统平台的安装包,查看[官方文档](https://docs.docker.com/get-started/)可以获取方便的安装教程。 27 | 28 | ### 克隆仓库 29 | 运行下面命令克隆代码到你喜欢的目录: 30 | ```bash 31 | git clone https://github.com/nodemcu/nodemcu-firmware.git 32 | ``` 33 | 34 | ### 配置要使用的模块和特性 35 | **注意**构建脚本会将下面设的置选项添加到 NodeMCU 引导信息(在应用程序启动时转储到控制台)。 36 | 配置要构建的模块功能编辑 `app/include/user_modules.h` 文件,也可以考虑在 `app/include/user_config.h `中打开 SSL 或 LFS。在同一个文件中的`#define LUA_NUMBER_INTEGRAL`参数,可以控制是否使用浮点支持构建固件。有关构建选项的其他选项和详细信息,请参阅 [NodeMCU 文档](https://nodemcu.readthedocs.io/en/latest/en/build/#build-options)。 37 | 38 | ### 使用 Docker 运行此镜像创建 LFS 固件 39 | 启动 Docker 并切换到 NodeMCU 固件目录, 运行下面命令创建 LFS 固件: 40 | ``` 41 | docker run --rm -ti -v `pwd`:/opt/nodemcu-firmware -v {PathToLuaSourceFolder}:/opt/lua marcelstoer/nodemcu-build lfs-image 42 | ``` 43 | 这将编译并存储给定文件夹及其目录中中的所有 Lua 文件。 44 | 45 | #### 输出 46 | 根据你构建的固件类型的不同,这将在 lua 文件夹的根目录中创建一个或两个 LFS 映像。 47 | 48 | ### Windows 用户笔记 49 | Docker 在 Windows 平台处理路径略有不同,你需要在命令中指定 NodeMCU 固件目录的完整路径,且需要在 Windows 路径中添加一个额外的正斜杠('/')。这样命令就变成了(即c盘, "c:"): 50 | ``` 51 | docker run --rm -it -v //c/Users//:/opt/nodemcu-firmware marcelstoer/nodemcu-build 52 | ``` 53 | 如果Windows路径包含空格,那么它必须像往常一样在 Windows 上用引号括起来。 54 | ``` 55 | docker run --rm -it -v "//c/Users/monster tune/":/opt/nodemcu-firmware marcelstoer/nodemcu-build 56 | ``` 57 | 如果这个 Docker 容器挂载存储 hang 死了,请检查 Windows 服务 “LanmanServer” 是否正在运行,[详见 DockerBug #2196](https://github.com/docker/for-win/issues/2196)。 58 | 59 | ### ‼️ 如果你以前拉取过 docker 镜像(例如根据上面的命令),你应该经常更新镜像,以获得最新的错误修复: 60 | ``` 61 | docker pull marcelstoer/nodemcu-build 62 | ``` 63 | 64 | ## 支持 65 | 希望大家不要在 Docker Hub 提问。 首先,Docker Hub 不会通知我。第二,问题在不集中保持下去这样意义不太大。欢迎在 [StackOverflow](http://stackoverflow.com/) 提问并且打上 `nodemcu` 和 `docker` 标签。 66 | 67 | 对于错误和改进建议,可以在这里提出问题 [https://github.com/marcelstoer/docker-nodemcu-build/issues](https://github.com/marcelstoer/docker-nodemcu-build/issues) 68 | 69 | ## 贡献 70 | 感谢 [Paul Sokolovsky](http://pfalcon-oe.blogspot.com/) 创建并维护 [esp-open-sdk](https://github.com/pfalcon/esp-open-sdk)。 71 | 把更多的感谢给 [Gregor Hartmann](https://github.com/HHHartmann) ,他实现了 LFS 支持,并删除了此镜像的设计不良的 `INTEGER_ONLY` / `FLOAT_ONLY` 参数。 72 | 73 | ## 作者 74 | [http://frightanic.com](http://frightanic.com) 75 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Docker NodeMCU build and LFS images 2 | [![Docker Pulls](https://img.shields.io/docker/pulls/marcelstoer/nodemcu-build.svg)](https://hub.docker.com/r/marcelstoer/nodemcu-build/) [![Docker Stars](https://img.shields.io/docker/stars/marcelstoer/nodemcu-build.svg)](https://hub.docker.com/r/marcelstoer/nodemcu-build/) [![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/marcelstoer/docker-nodemcu-build/blob/master/LICENSE) 3 | 4 | Clone and edit the [NodeMCU firmware](https://github.com/nodemcu/nodemcu-firmware) locally on your platform. This image will take it from there and turn your code into a binary which you then can [flash to the ESP8266](https://nodemcu.readthedocs.org/en/latest/en/flash/) or [the ESP32](https://nodemcu.readthedocs.io/en/dev-esp32/en/flash/). 5 | It can also create LFS images from your Lua sources. 6 | 7 | [中文文档请参阅 README-CN.md](README-CN.md) 8 | 9 | * [Usage](#usage) 10 | * [Install Docker](#install-docker) 11 | * [Clone the NodeMCU firmware repository](#clone-the-nodemcu-firmware-repository) 12 | * [Build for ESP8266](#build-for-esp8266) 13 | * [Configure modules and features](#configure-modules-and-features) 14 | * [Build the firmware](#build-the-firmware) 15 | * [Create an LFS image for ESP8266](#create-an-lfs-image-for-esp8266) 16 | * [Build for ESP32](#build-for-esp32) 17 | * [Configure modules and features](#configure-modules-and-features-1) 18 | * [Build the firmware](#build-the-firmware-1) 19 | * [Options](#options) 20 | * [Notes for Windows users](#notes-for-windows-users) 21 | * [Notes for macOS users](#notes-for-macos-users) 22 | * [Updating NodeMCU](#updating-nodemcu) 23 | * [Starting over](#starting-over) 24 | * [Attempt to preserve your changes](#attempt-to-preserve-your-changes) 25 | * [Support](#support) 26 | * [Credits](#credits) 27 | * [Author](#author) 28 | 29 | 30 | ## Target audience 31 | There seem to be three types of NodeMCU developers: 32 | 33 | - NodeMCU "application developers" 34 | 35 | They just need a ready-made firmware. I created a [cloud build service](http://nodemcu-build.com/index.php) with a nice UI and configuration options for them. 36 | However, if they use [LFS](https://nodemcu.readthedocs.io/en/latest/en/lfs/) they might want to build their LFS images as an alternative to [Terry Ellison's online service](https://blog.ellisons.org.uk/article/nodemcu/a-lua-cross-compile-web-service/). **Then this image is right for them!** 37 | 38 | - Occasional NodeMCU firmware hackers 39 | 40 | They don't need full control over the complete tool chain and don't want to setup a Linux VM with the build environment. **This image is _exactly_ for them!** 41 | 42 | - NodeMCU firmware developers 43 | 44 | They commit or contribute to the project on GitHub and need their own full fledged [build environment with the complete tool chain](http://www.esp8266.com/wiki/doku.php?id=toolchain#how_to_setup_a_vm_to_host_your_toolchain). _They still might find this Docker image useful._ 45 | 46 | ### :bangbang: Regular updates 47 | If you have previously pulled this Docker image then you should update the image from time to time to pull in the latest bug fixes: 48 | 49 | `docker pull marcelstoer/nodemcu-build` 50 | 51 | # Usage 52 | 53 | ## Install Docker 54 | Follow the instructions at [https://docs.docker.com/get-started/](https://docs.docker.com/get-started/). 55 | 56 | ## Clone the NodeMCU firmware repository 57 | Docker runs on a VirtualBox VM which by default only shares the user directory from the underlying guest OS. On Windows that is `c:/Users/` and on Mac it's `/Users/`. Hence, you need to clone the [NodeMCU firmware](https://github.com/nodemcu/nodemcu-firmware) repository to your *user directory*. If you want to place it outside the user directory you need to adjust the [VirtualBox VM sharing settings](http://stackoverflow.com/q/33934776/131929) accordingly. 58 | 59 | `git clone --recurse-submodules https://github.com/nodemcu/nodemcu-firmware.git` 60 | 61 | For ESP32 you would then switch to the `dev-esp32` branch and update the submodules: 62 | 63 | ``` 64 | git checkout dev-esp32 65 | git submodule update --recursive 66 | ``` 67 | 68 | ## Build for ESP8266 69 | 70 | ### Configure modules and features 71 | 72 | **Note** The build script adds information about the options you set below to the NodeMCU boot message (dumped to console on application start). 73 | 74 | To configure the modules to be built into the firmware edit `app/include/user_modules.h`. 75 | Also consider turning on SSL or [LFS](https://nodemcu.readthedocs.io/en/dev/en/lfs/) in `app/include/user_config.h`. `#define LUA_NUMBER_INTEGRAL` in the same file gives you control over whether to build a firmware with floating point support or without. See the [NodeMCU documentation on build options](https://nodemcu.readthedocs.io/en/latest/en/build/#build-options) for other options and details. 76 | 77 | The version information and build date are correctly set automatically unless you modify the parameters in `app/include/user_version.h`. 78 | 79 | ### Build the firmware 80 | Start Docker and change to the NodeMCU firmware directory (in the Docker console). To build the firmware run: 81 | 82 | ``docker run --rm -ti -v `pwd`:/opt/nodemcu-firmware marcelstoer/nodemcu-build build`` 83 | 84 | Depending on the performance of your system it takes 1-3min until the compilation finishes. The first time you run this it takes longer because Docker needs to download the image and create a container. 85 | 86 | #### Output 87 | All outputs will be created in the `bin` subfolder of your NodeMCU repository's root directory. They will be: 88 | 89 | * `nodemcu_${BUILD_TYPE}_${IMAGE_NAME}.bin` is the combined firmware image 90 | you can flash. 91 | `BUILD_TYPE` is `integer` or `float`. 92 | For `IMAGE_NAME`, see the [Options](#options) chapter below. 93 | * Almost same but with `.map` ending, a mapfile will be saved that contains the relative offsets of functions. 94 | * `0x00000.bin` will contain just the firmware. 95 | * `0x10000.bin` will contain the SPIFFS. 96 | 97 | #### Flash the firmware 98 | There are several [tools to flash the firmware](https://nodemcu.readthedocs.io/en/latest/en/flash/) to the ESP8266. 99 | 100 | ### Create an LFS image for ESP8266 101 | Start Docker and change to the NodeMCU firmware directory (in the Docker console). To create the LFS image run: 102 | 103 | ``docker run --rm -ti -v `pwd`:/opt/nodemcu-firmware -v {PathToLuaSourceFolder}:/opt/lua marcelstoer/nodemcu-build lfs-image`` 104 | 105 | This will compile and store all Lua files in the given folder including subfolders. 106 | 107 | To only add specific files you can prepare a file containing the files to add and give them as paramater. 108 | 109 | ``docker run --rm -ti -v `pwd`:/opt/nodemcu-firmware -v {PathToLuaSourceFolder}:/opt/lua marcelstoer/nodemcu-build lfs-image final/files.lst`` 110 | 111 | Assume the following content of files.lst: 112 | ``` 113 | lib/*.lua main.lua 114 | ../baseProject/*.lua 115 | ``` 116 | NOTE: use linux path separator '/' instead of Windows type '\'. 117 | Basically this is just an ``ls`` expression as long as it contains no spaces and other shell escapable characters. 118 | 119 | Assume the following files inside ``{PathToLuaSourceFolder}`` which is mounted as ``/opt/lua`` 120 | ``` 121 | baseProject/base.lua 122 | baseProject/lib/baseLib.lua 123 | final/files.lst 124 | final/lib/lib1.lua 125 | final/main.lua 126 | main.lua 127 | ``` 128 | this would add the following files 129 | ``` 130 | baseProject/base.lua 131 | final/lib/lib1.lua 132 | final/main.lua 133 | ``` 134 | 135 | #### Output 136 | Depending on what type(s) of firmware you built this will create one or two LFS images in the root of your Lua folder. 137 | 138 | ## Build for ESP32 139 | 140 | NodeMCU for ESP32 is built on the [ESP-IDF](https://github.com/espressif/esp-idf) (Espressif IoT Development Framework). It uses a menu-driven user interface Kconfig to configure all firmware features and options. Hence, building NodeMCU for ESP32 is a two step process and you will launch the Docker container twice. First to start Kconfig, select all options and write the configuration file. Then to actually build the firmware. 141 | 142 | **Note** make sure you have got the Git submodules loaded as [described above](#clone-the-nodemcu-firmware-repository). 143 | 144 | ### Configure modules and features 145 | 146 | ``docker run --rm -ti -v `pwd`:/opt/nodemcu-firmware marcelstoer/nodemcu-build configure-esp32`` 147 | 148 | This internally will run `make menuconfig` in the firmware directory. It will generate a `sdkconfig` file in the same. 149 | 150 | ### Build the firmware 151 | 152 | ``docker run --rm -ti -v `pwd`:/opt/nodemcu-firmware marcelstoer/nodemcu-build build`` 153 | 154 | That is the exact same command as for building for the ESP8266. It analyses the available files to figure out whether you checked out NodeMCU for ESP32 or ESP8266. The `build` command is thus a shortcut to using `build-esp32`. 155 | 156 | The process will fail early with a meaningful error message if it does not find a `sdkconfig` file in the firmware directory. 157 | 158 | ### Output 159 | All outputs will be created in the `bin` subfolder of your NodeMCU repository's root directory. They will be: 160 | 161 | * `nodemcu_${IMAGE_NAME}.bin` will be the firmware image. 162 | For `IMAGE_NAME`, see the [Options](#options) chapter below. 163 | 164 | ## Options 165 | You can pass the following optional parameters to the Docker build like so `docker run -e "=value" -e ...`. 166 | 167 | - `BUILD_MAKE_TARGETS` A space-separated list of custom make targets to build, instead of the default ones. 168 | - `IMAGE_NAME` can be set to save the output files (see your platform's "Output" section for above) with fixed names. If it is not set or empty, the branch name and a timestamp will be used. 169 | - `TZ` By default the Docker container will run in UTC timezone. Hence, the time in the timestamp of the default image name (see `IMAGE_NAME` option above) will not be same as your host system time - unless that is UTC as well of course. To fix this you can set the `TZ` parameter to any [valid timezone name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) e.g. `-e TZ=Asia/Kolkata`. 170 | 171 | `INTEGER_ONLY` and `FLOAT_ONLY` are **not supported anymore**. Please configure `LUA_NUMBER_INTEGRAL` in `app/include/user_config.h` as described above. 172 | 173 | ## Notes for Windows users 174 | 175 | (Docker on) Windows handles paths slightly differently. You need to specify the full path to the NodeMCU firmware directory in the command: 176 | 177 | `docker run --rm -it -v c:/Users//:/opt/nodemcu-firmware marcelstoer/nodemcu-build build` 178 | 179 | If the Windows path contains spaces it would have to be wrapped in quotes as usual on Windows. 180 | 181 | `docker run --rm -it -v "c:/Users/monster tune/":/opt/nodemcu-firmware marcelstoer/nodemcu-build build` 182 | 183 | If this Docker container hangs on sharing the drive (or starting) check whether the Windows service 'LanmanServer' is running. See [DockerBug #2196](https://github.com/docker/for-win/issues/2196) for details. 184 | 185 | ## Notes for macOS users 186 | 187 | [Docker for Mac is slow](https://markshust.com/2018/01/30/performance-tuning-docker-mac/). Period. However, much of the I/O-related latency can be significantly reduced with tuned volume mounts. Docker for Mac 17.04 introduced a "delegated" flag to avoid keeping host file system and container file system in perfect sync all the time. "delegated" postpones writing back changes in the container to the host in order to achieve higher filesystem throughput. 188 | 189 | So, instead of ``-v `pwd`:/opt/nodemcu-firmware`` you would say ``-v `pwd`:/opt/nodemcu-firmware:delegated`` (note the flag at the end). 190 | 191 | # Updating NodeMCU 192 | The NodeMCU team hopes that you will want to regularly pull their latest updates into your cloned repository and build 193 | a new firmware. There is more than one way to skin a cat and thus this chapter has unfortunately-but-intentionally to 194 | be brief. 195 | 196 | ## Starting over 197 | The simplest process is to discard your local changes, update the firmware, and then manually reapply them. That may 198 | be appropriate if all you changed are a handful of settings in the `.h` files. 199 | ``` 200 | git reset --hard origin/ 201 | git submodule update --recursive 202 | ``` 203 | Afterwards you would manually re-edit the files and run Docker again. 204 | 205 | ## Attempt to preserve your changes 206 | Git is extremely flexible and powerful. What process you follow is very often just a matter of taste. In any case, 207 | unless you are familiar with Git-fu the least you want to be dealing with is conflict resolution on the command line ( 208 | both you and NodeMCU updated the same file => potential conflict). 209 | 210 | One way to _attempt_ to preserve your changes is using [`git stash`](https://www.atlassian.com/git/tutorials/saving-changes/git-stash). 211 | I say "attempt" because you still might end up with conflicts. 212 | 213 | ``` 214 | git stash 215 | git pull 216 | git submodule update --recursive 217 | git stash pop 218 | ``` 219 | 220 | # Support 221 | Ask a question on [StackOverflow](http://stackoverflow.com/) and assign the `nodemcu` and `docker` tags. 222 | 223 | For bugs and improvement suggestions create an issue at [https://github.com/marcelstoer/docker-nodemcu-build/issues](https://github.com/marcelstoer/docker-nodemcu-build/issues). 224 | 225 | # Credits 226 | Thanks to [Paul Sokolovsky](http://pfalcon-oe.blogspot.com/) who created and maintains [esp-open-sdk](https://github.com/pfalcon/esp-open-sdk). 227 | 228 | A big "Thank You!" goes to [Gregor Hartmann](https://github.com/HHHartmann) who implemented LFS-support and removed the ill-designed `INTEGER_ONLY` / `FLOAT_ONLY` parameters for this image. 229 | 230 | # Author 231 | [https://frightanic.com](http://frightanic.com) 232 | -------------------------------------------------------------------------------- /build: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | cd /opt/nodemcu-firmware 6 | 7 | if [ -f sdkconfig.defaults ]; then 8 | /opt/build-esp32 9 | else 10 | /opt/build-esp8266 11 | fi 12 | -------------------------------------------------------------------------------- /build-esp32: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | # Config options you may pass via Docker like so 'docker run -e "