It is now possible to choose the version of crosstool-ng per image, To make it easier to upgrade crosstool-ng to newer versions without having to update all images at the same time
Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
This addresses the build of a dependency of conan:
/usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
warnings.warn(msg)
error in isort setup command: 'install_requires' must be a string or list of strings containing valid project/version requirement specifiers
If `id -un` or `id -gn` outputs a name containing a space, e.g. when joined to an AD domain with SSSD, the current `dockcross` script would break and abort with an error: `docker: invalid reference format.`, because it would interpret the part after the space as an image name.
* Consistently use "/usr/src" as download and staging area
* install-cmake-binary: Introduce CMAKE_ROOT var
* build-and-install-openssl: Remove redundant -fPIC flag, download openssl sources using "wget"
Older versions of git included in older linux distributions are not able
to download source from Github. A newer version is required with a newer
OpenSSL. This requires to also build curl with the same OpenSSL.
CMake is downloaded precompiled if available (64bits system) or compiled
from source otherwise.
This commit is a follow up of b7028af (entrypoint.sh: Update help
text so that current image name is used)
It ensures that the suggested script in the help text doesn't include ":"
in its name.
Assuming DEFAULT_DOCKCROSS_IMAGE is set to "dockcross/imagename:latest"
Instead of suggesting:
[...]
# docker run --rm dockcross/imagename:latest > dockcross-imagename:latest
# chmod +x dockcross-imagename:latest
[...]
it will now suggest
[...]
# docker run --rm dockcross/imagename:latest > dockcross-imagename-latest
# chmod +x dockcross-imagename-latest
[...]
xref https://github.com/dockbuild/dockbuild/issues/30
[ci skip]
Add a mechanism to construct a full cross-compiler environment using the
"crosstool-ng" cross-compiler building utility. This is implemented in
the new "common.crosstool" include, and augments the "dockcross/base"
base image.
Update Makefile to consolidate Dockerfile generation, notably the
"sed"-based inclusion directives.
Finally, employ all of this to generate a "linux-mips" 32-bit hard-float
MIPS cross-compiler Dockcross image.
BUG:
Creating a new directory under /home/<user>/ from the /work folder does
not work. In fact, going into the home directory and trying to run mkdir
fails as well.
SOLUTION:
Turns out chown -R <user>:<user> was run on $HOME/* instead of on $HOME.
This means that /home/<user> was still under the ownership of root:root,
hence preventing any writes to non-root users.
Added SSH support to enable Git checkouts that use SSH instead of
HTTP(S).
The SSH directory is assumed to be in $HOME/.ssh; however:
export SSH_DIR=/my/custom/dir
will override the setting and allow for configurable settings.
$SSH_DIR is then mounted as host-volume in the Docker container and
placed in /home/<user>/.ssh
This commit includes files omitted in commit 6e59959 (manylinux: Use
CentOS Vault repositories)
Reported-by: Constantine Grantcharov <cgrantcharov@trustpointinnovation.com>
This commit fixes the following error specific to AUFS:
/dockcross/entrypoint.sh: line 47: /usr/bin/gosu: Text file busy
/dockcross/entrypoint.sh: line 47: /usr/bin/gosu: Success
Thanks @sobolevn
See https://github.com/moby/moby/issues/13594#issuecomment-262441366
Backported from thewtex/docker-centos-build@26f7fd3
CentOS 5 is no longer supported and requests to obtain information from
the mirrors fails. However, the packages are still available on the
"Vault" mirrors.
Comment out the `mirrorlist` entries and set `enabled=0` in
CentOS-Base.repo, add entries for 5.11 in CentOS-Vault.repo and mark
them `enabled=1`.
This commit will avoid the following error from being reported
on MacOSX:
```
docker run --rm dockcross/linux-armv7 > ./dockcross-linux-armv7
chmod +x ./dockcross-linux-armv7
./dockcross-linux-armv7 bash -c '$CC test/C/hello.c -o hello_arm'
grep: /proc/version: No such file or directory
grep: /proc/version: No such file or directory
```
Reported-by: Chris Warth <cswarth@gmail.com>
This commit follows up on 2e71db2 (dockcross: Ignore deletion error
when running in unprivileged LXC container) by hiding the message
only when (a) the command output matches the expected error message
and (b) is executed on CircleCI.
Doing so will avoid adding "noise" to log of service like CircleCI
that are effectively running docker in unprivileged LXC container.
See #50
To accommodate the requirements associated with x86 and x64 images, the
command building OpenSSL and CMake became overly complex and hard to
maintain.
This commit has multiple purposes:
(1) simplify common.docker
(2) fix the building of 64-bit shared libraries against the static openssl
libraries by passing the -fPIC flag.
(3) ensure [many]linux-x86 and [many]linux-x64 images have an up-to-date
OpenSSL install. Openssl static libraries are installed in /usr
(4) simplify and speedup CMake build avoiding the second build with
explicit -DCMAKE_USE_OPENSSL:BOOL=ON. Indeed, configuring CMake on Linux
already looks for OpenSSL.
(5) speedup download of CMake source directly downloading the archive
corresponding to the revision.
(6) test CMake by:
- running CMake.FileDownload test
- trying to download a file served over https
While the use of sudo (made possible by 53cf084) allows to install
additional packages, the warning copied below was still reported.
To avoid this warning and streamline the installation of new packages,
this commit (1) introduces the concept of "pre_exec" entrypoint hook
and (2) adds such a hook to change the ownership of python "bin" and
"site-packages" directories for the manylinux images.
Warning reported are similar to this one:
```
The directory '/home/jcfr/.cache/pip/http' or its parent directory is
not owned by the current user and the cache has been disabled. Please
check the permissions and owner of that directory. If executing pip
with sudo, you may want sudo's -H flag.
```
Note that the sudo "-H" flag suggested in the warning is not available
in centos.
This commit removes the complex pipeline leveraging output from
/dev/urandom and simply uses $RANDOM variable. For the purpose
of generating an available container name, it will works well.
Suggested-by: Matt McCormick <matt.mccormick@kitware.com>
As explained in [1], when using dockcross from python subprocess, the
interactive mode is disabled and output of "cat /dev/urandom" is block
buffered instead of being line buffered.
Workaround to this problem is to simply read a fixed amount of characters
from urandom.
The following two snippets illustrates the problem and the
the implemented solution:
Works
```python
import subprocess as sp
sp.check_call("var=$(head -c 500 /dev/urandom | base64 | tr -dc 'a-zA-Z0-9' | fold -w 7 | head -n 1); echo $var", shell=True)
```
=> output random string
Fail:
```python
import subprocess as sp
sp.check_call("var=$(cat /dev/urandom | base64 | tr -dc 'a-zA-Z0-9' | fold -w 7 | head -n 1); echo $var", shell=True)
```
=> Hang
[1] http://stackoverflow.com/questions/16805827/unable-to-read-stdout-from-a-running-process#16806506
where RAND is a 7 characters long randomly generated alphanumeric string.
Note that container name can NOT start with "_",
only [a-zA-Z0-9][a-zA-Z0-9_.-] are allowed
See #50
This will allow build script like "build-wheels.sh" to run command like
the following (see [1]):
sudo yum install -y atlas-devel
It will also allow to pip install using sudo and avoid error reported in [3].
That said, instead of running pip using sudo, the recommended approach
is to specify the "--user" flag [2]
[1] 893d92517e/travis/build-wheels.sh
[2] http://stackoverflow.com/questions/7143077/how-can-i-install-packages-in-my-home-folder-with-pip#7143496
[3] Error reported when running pip without "sudo pip install <packagename" or "pip install --user <packagename>"
```
Exception:
Traceback (most recent call last):
File "/opt/_internal/cpython-2.7.11-ucs2/lib/python2.7/site-packages/pip/basecommand.py", line 215, in main
status = self.run(options, args)
File "/opt/_internal/cpython-2.7.11-ucs2/lib/python2.7/site-packages/pip/commands/install.py", line 317, in run
prefix=options.prefix_path,
File "/opt/_internal/cpython-2.7.11-ucs2/lib/python2.7/site-packages/pip/req/req_set.py", line 736, in install
requirement.uninstall(auto_confirm=True)
File "/opt/_internal/cpython-2.7.11-ucs2/lib/python2.7/site-packages/pip/req/req_install.py", line 742, in uninstall
paths_to_remove.remove(auto_confirm)
File "/opt/_internal/cpython-2.7.11-ucs2/lib/python2.7/site-packages/pip/req/req_uninstall.py", line 115, in remove
renames(path, new_path)
File "/opt/_internal/cpython-2.7.11-ucs2/lib/python2.7/site-packages/pip/utils/__init__.py", line 267, in renames
shutil.move(old, new)
File "/opt/_internal/cpython-2.7.11-ucs2/lib/python2.7/shutil.py", line 303, in move
os.unlink(src)
OSError: [Errno 13] Permission denied: '/opt/_internal/cpython-2.7.11-ucs2/bin/easy_install'
```
By default the toolchain file is always passed as an option to cmake/ccmake
It can be explicitly disabled setting the environment variable
DOCKCROSS_PASS_CMAKE_TOOLCHAIN_FILE to 0