When two Buildroot builds run in parallel, and they both happen to call npm at roughly the same time, the two npm instances may conflict when accessing the npm cache, which is by default ~/.npm Although npm is supposed to lock access to the cache, it seems it does sometimes fail to do so properly, bailling out in error, when it would never ever crash at all when not running in parallel. We suspect that the sequence leading to such failures are something like: npm-1 npm-2 lock(retry=few, sleep=short) . does-stuff() . . lock(retry=few, sleep=short) . # can't lock local cache . download-module() . # can't download . exit(1) unlock() As per the docs [0], few = 10, short = 10. So if the first npm (npm-1) takes more than 100s (which can happen behind slow links and/or big modules that contain native code that is compiled), then the second npm (npm-2) will bail out (the download would fail if there is no network access, for example, and only local modules are used). Point npm to use a per-build cache directory, so they no longer compete across builds. That would still need some care when we do top-level parallel builds, though. Note also that the conflicts are not totally eliminated: two or more npm instances may still compete for some other resource that has not yet been identified. But, at least, the conflict window has been drastically shortened now, to the point where it now seldom occurs. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: Peter Korsgaard <peter@korsgaard.com> |
||
---|---|---|
arch | ||
board | ||
boot | ||
configs | ||
docs | ||
fs | ||
linux | ||
package | ||
support | ||
system | ||
toolchain | ||
utils | ||
.defconfig | ||
.flake8 | ||
.gitignore | ||
.gitlab-ci.yml | ||
.gitlab-ci.yml.in | ||
CHANGES | ||
Config.in | ||
Config.in.legacy | ||
COPYING | ||
DEVELOPERS | ||
Makefile | ||
Makefile.legacy | ||
README |
Buildroot is a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation. The documentation can be found in docs/manual. You can generate a text document with 'make manual-text' and read output/docs/manual/manual.text. Online documentation can be found at http://buildroot.org/docs.html To build and use the buildroot stuff, do the following: 1) run 'make menuconfig' 2) select the target architecture and the packages you wish to compile 3) run 'make' 4) wait while it compiles 5) find the kernel, bootloader, root filesystem, etc. in output/images You do not need to be root to build or run buildroot. Have fun! Buildroot comes with a basic configuration for a number of boards. Run 'make list-defconfigs' to view the list of provided configurations. Please feed suggestions, bug reports, insults, and bribes back to the buildroot mailing list: buildroot@buildroot.org You can also find us on #buildroot on Freenode IRC. If you would like to contribute patches, please read https://buildroot.org/manual.html#submitting-patches