When using LXC containers booting the lxc container would not populate it as the normal boot process. Or when you create a chroot jail /dev is not mounted or just some devices are created.
There is an option to populate (when using LXC containers) it with minimal required devices:
lxc.autodev = 1
which will create a tmpfs mount under /dev and create some basic devices, it will ensure /dev/shm to be mounted on with tmpfs!
If you omit this option, the /dev directory won’t be populated and will stay with the devices you made or copied when you made the LXC container (or the chroot jail) and /dev/shm will not be mounted using tmps, which could create numerous bad issues.
If you get errors like
* configure has detected that the sem_open function is broken. * Please ensure that /dev/shm is mounted as a tmpfs with mode 1777.
You could mount the /dev/shm of the LXC container or the chroot jail (usually you can tune the size half of the server’s RAM) with
mkdir -p /dev/shm mount -t tmpfs -o nodev,nosuid,noexec,mode=1777,size=6144m tmpfs /dev/shm
Or reboot your LXC container with a new configuration (probably in the “/var/lxc/[lxc_name]/config”) adding the following line:
lxc.mount.entry = none dev/shm tmpfs nodev,nosuid,noexec,mode=1777,create=dir 0 0
Thus you ensure the /dev/shm to be mounted on tmpfs and all semaphore functions to work properly.
* Real output of Gentoo failed compilation of python package:
* configure has detected that the sem_open function is broken. * Please ensure that /dev/shm is mounted as a tmpfs with mode 1777. * ERROR: dev-lang/python-3.3.4-r1::gentoo failed (configure phase): * Broken sem_open function (bug 496328) * * Call stack: * ebuild.sh, line 124: Called src_configure * environment, line 3542: Called die * The specific snippet of code: * die "Broken sem_open function (bug 496328)"; * * If you need support, post the output of `emerge --info '=dev-lang/python-3.3.4-r1::gentoo'`, * the complete build log and the output of `emerge -pqv '=dev-lang/python-3.3.4-r1::gentoo'`. * The complete build log is located at '/var/tmp/portage/dev-lang/python-3.3.4-r1/temp/build.log'. * The ebuild environment file is located at '/var/tmp/portage/dev-lang/python-3.3.4-r1/temp/environment'. * Working directory: '/var/tmp/portage/dev-lang/python-3.3.4-r1/work/x86_64-pc-linux-gnu' * S: '/var/tmp/portage/dev-lang/python-3.3.4-r1/work/Python-3.3.4' >>> Failed to emerge dev-lang/python-3.3.4-r1, Log file:
Thank you for the writeup, it helped to solve a problem while upgrading to dev-python/pillow-5.2.0
In my case, it was throwing a bunch of sandbox Access Violations, on the file: /dev/sem.mp…. After doing some digging I keyed in to a missing /dev/shm mount in my lxd container causing the problem.
Adding a raw.lxc lxc.mount.entry fixed it up and allowed the @world emerge to complete successfully.