| Summary: | Sanity test that files can be created in TMPDIR | ||
|---|---|---|---|
| Product: | [Build System, Metadata & Runtime] OE-Core | Reporter: | Ross Burton <ross.burton> |
| Component: | core | Assignee: | Mariano Lopez <mariano.lopez> |
| Status: | VERIFIED FIXED | QA Contact: | Daniel Istrate <daniel.alexandrux.istrate> |
| Severity: | enhancement | ||
| Priority: | Medium | CC: | anibal.limon, bluelightning, bogdanx.a.voiculescu, meta.mr.watcher, meta.watcher |
| Version: | 1.9 | ||
| Target Milestone: | 1.9 M2 | ||
| Hardware: | x86 | ||
| OS: | Multiple | ||
| Whiteboard: | |||
| OS type for building Yocto: | --- | Type of Regression: | --- |
| Verified: | Documentation change: | No (bug/feature does not impact docs) | |
The check must be done in /tmp (not TMPDIR) Sent patch for review This bug has been fixed with commit: http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=cea20425a3dcb8868c53518cbec4b250076f1675 Adding the comments from Ross
+ # Check if /tmp is writable
+ from string import ascii_letters
+ from random import choice
+ filename = "bb_writetest.%s" % os.getpid()
+ testfile = os.path.join("/tmp", filename)
Use tempfile.mkstemp() here, we'll get proper unique names and it will use the same temporary directory as gcc etc.
+ try:
+ f = open(testfile, "w")
+ f.write("".join(choice(ascii_letters) for x in range(1024)))
+ f.close()
+ os.remove(testfile)
+ except:
+ status.addresult("Failed to write into /tmp. Please verify your filesystem.")
The error should include the message from the exception to help root-cause the problem.
Ross
Sent patch v2 based on master for review This bug has been solved with commit: http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=45772bab329821ad425b20e630749c2a6c82c235 FYI the fix mentioned above was reverted in favour of this one: http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=9f87dcf3a3adf0b215b59eac854d372216c9dc0d Verified on master: 370a2916c4559c17952392b872322e8e490b124c As far as I can tell this bug was fixed and then the fix was removed in favor of http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=9f87dcf3a3adf0b215b59eac854d372216c9dc0d. That fix only checks that /tmp has enough space. It does not check proper /tmp permissions. So the case when you cannot create a file in /tmp due to wrong permissions is not covered. **************** Test 1: change /tmp permissions to 555 [daniel@fedora-ws poky-build2]$ sudo chmod 555 /tmp [daniel@fedora-ws poky-build2]$ bitbake ed Parsing recipes: 100% |##############################################################################| ETA: 00:00:00 Parsing of 900 .bb files complete (0 cached, 900 parsed). 1330 targets, 38 skipped, 0 masked, 0 errors. NOTE: Resolving any missing task queue dependencies Build Configuration: BB_VERSION = "1.28.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "Fedora-21" TARGET_SYS = "i586-poky-linux" MACHINE = "qemux86" DISTRO = "poky" DISTRO_VERSION = "2.0" TUNE_FEATURES = "m32 i586" TARGET_FPU = "" meta meta-yocto meta-yocto-bsp = "master:370a2916c4559c17952392b872322e8e490b124c" NOTE: Preparing RunQueue NOTE: Executing SetScene Tasks NOTE: Executing RunQueue Tasks ERROR: autoreconf execution failed. ERROR: Function failed: do_configure (log file is located at /media/ssd/poky-build2/tmp/work/x86_64-linux/gperf-native/3.0.4-r0/temp/log.do_configure.26594) ERROR: Logfile of failure stored in: /media/ssd/poky-build2/tmp/work/x86_64-linux/gperf-native/3.0.4-r0/temp/log.do_configure.26594 Log data follows: | DEBUG: Executing python function sysroot_cleansstate | DEBUG: Python function sysroot_cleansstate finished | DEBUG: Executing shell function autotools_preconfigure | DEBUG: Shell function autotools_preconfigure finished | DEBUG: Executing python function autotools_copy_aclocals | DEBUG: SITE files ['endian-little', 'common-linux', 'common-glibc', 'bit-64', 'x86_64-linux', 'common'] | DEBUG: Python function autotools_copy_aclocals finished | DEBUG: Executing shell function do_configure | automake (GNU automake) 1.15 | Copyright (C) 2014 Free Software Foundation, Inc. | License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html> | This is free software: you are free to change and redistribute it. | There is NO WARRANTY, to the extent permitted by law. | | Written by Tom Tromey <tromey@redhat.com> | and Alexandre Duret-Lutz <adl@gnu.org>. | AUTOV is 1 | NOTE: Executing ACLOCAL="aclocal --system-acdir=/media/ssd/poky-build2/tmp/work/x86_64-linux/gperf-native/3.0.4-r0/build/aclocal-copy/" autoreconf --verbose --install --force --exclude=autopoint -I /media/ssd/poky-build2/tmp/work/x86_64-linux/gperf-native/3.0.4-r0/gperf-3.0.4 | autoreconf: cannot create /tmp/ar825.27062: Permission denied | at /media/ssd/poky-build2/tmp/sysroots/x86_64-linux/usr/bin/autoreconf line 732. | ERROR: autoreconf execution failed. | ERROR: Function failed: do_configure (log file is located at /media/ssd/poky-build2/tmp/work/x86_64-linux/gperf-native/3.0.4-r0/temp/log.do_configure.26594) ERROR: Task 292 (virtual:native:/home/daniel/poky/meta/recipes-extended/gperf/gperf_3.0.4.bb, do_configure) failed with exit code '1' NOTE: Tasks Summary: Attempted 147 tasks of which 120 didn't need to be rerun and 1 failed. Waiting for 0 running tasks to finish: Summary: 1 task failed: virtual:native:/home/daniel/poky/meta/recipes-extended/gperf/gperf_3.0.4.bb, do_configure Summary: There were 2 ERROR messages shown, returning a non-zero exit code. Revert back /tmp permissions [daniel@fedora-ws poky-build2]$ sudo chmod 1777 /tmp **************** Test 2: change /tmp size to less that 100MB (the fix mentioned in Comment 7) [daniel@fedora-ws poky-build2]$ sudo mount -o remount,size=90m,noatime /tmp [daniel@fedora-ws poky-build2]$ bitbake -c clean ed Loading cache: 100% |################################################################################| ETA: 00:00:00 Loaded 1331 entries from dependency cache. NOTE: Resolving any missing task queue dependencies Build Configuration: BB_VERSION = "1.28.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "Fedora-21" TARGET_SYS = "i586-poky-linux" MACHINE = "qemux86" DISTRO = "poky" DISTRO_VERSION = "2.0" TUNE_FEATURES = "m32 i586" TARGET_FPU = "" meta meta-yocto meta-yocto-bsp = "master:370a2916c4559c17952392b872322e8e490b124c" NOTE: Preparing RunQueue NOTE: Executing RunQueue Tasks WARNING: The free space of /tmp (tmpfs) is running low (0.087GB left) ERROR: No new tasks can be executed since the disk space monitor action is "STOPTASKS"! NOTE: Tasks Summary: Attempted 1 tasks of which 0 didn't need to be rerun and all succeeded. Summary: There was 1 WARNING message shown. Summary: There was 1 ERROR message shown, returning a non-zero exit code. This bug was opened because /tmp was running out of space in the autobuilders. With the patch that Paul mentioned this is being monitored during all the build. I think if you can't write in /tmp, there would be other major problems than running bitbake I think I agree with Mariano here - if /tmp isn't writable at all then you'll be having far greater problems than bitbake not working: I'd be surprised if you can even login. We should sanity check the environment but not check for catastrophic failure. Checking if /tmp has sufficient free space is enough. |
If /tmp can't be written to for whatever reason (say, no tmpfs and / is full up) then bitbake gives a very obscure error: ERROR: OE-core's config sanity checker detected a potential misconfiguration. Either fix the cause of this error or at your own risk disable the checker (see sanity.conf). Following is the list of potential problems / advisories: Your gcc version is older than 4.5 or is not working properly. Please verify you can build and link something that uses atomic operations, such as: __sync_bool_compare_and_swap (&atomic, 2, 3); (as gcc fails to write temporary files) We should probably check that we can write a small file into $TMP as a very early sanity test before compiling.