152 karma · joined January 27, 2014
Another is building that software with good security flags, see: https://www.anaconda.com/blog/developer-blog/improved-securi...
We also keep track of CVEs in our software and actively look for patches (e.g. pycrypto is dead now but Debian maintains patches to fix reported CVEs) or write our own (though usually to fix build-system bugs rather than security issues).
But yes, static linking and leaving software building to non-experts using whatever tools they like (without studying anything to do with low-level binary security or how to achieve that), statically linking insecure (some time to become old) libraries is far from ideal.
Anaconda Distribution strongly prefers dynamic linking and shared package dependencies so we can update to address critical security issues without needing to rebuild significant portions of our stack.
And who's liable here?
This is very much the idea of these awful (IMHO) ways of distributing software. Bundle all of your dependencies, share nothing, expose users to the risks of exploits in the libraries you've bundled (and maybe statically so no one can even figure out you have done that).
Please stop this madness.
> I’ve tried many times over many years, but never got a satisfactory working Python + Qt development environment working on the Mac.
It will setup exactly what was asked for. Specifically qt 5.9.5 with PyQt.
conda install r-essentials
So quite often the build system will be mis-programmed or will simply not care for relocatability at all, hard-coding /usr/lib/libfoo.so as DT_NEEDED, or hard-coding /usr/lib as DT_RPATH and/or DT_RUNPATH.
So conda-build runs a post-build step to make all DSO loading relative. We use patchelf and install_name_tool for that on Linux and macOS respectively.
https://www.anaconda.com/blog/developer-blog/improved-securi...
https://www.anaconda.com/blog/developer-blog/announcing-the-...
https://www.anaconda.com/blog/developer-blog/utilizing-the-n...
I would recommend using conda-build to build packages, since it provides a lot of tooling to ensure things work well and to detect problems.
You can still create software by taring up the final ${PREFIX} if you wish, but if it's open source stuff then the best thing to do is to try to get the conda build recipes accepted by conda-forge.
The recipes that make the Anaconda Distribution can be found at: https://github.com/AnacondaRecipes/aggregate
BTW we also have our own macOS clang 4.0.1 based compilers and they both run on and generate software for macOS 10.9 and above. You need to provide your own macOS 10.9 SDK and point CONDA_BUILD_SYSROOT to where you unpack it (or use one you got with Xcode and risk lower backwards compatibility).
The conda package manager can create isolated 'environments' (like virtualenv but not only for Python) that are very space efficient due to using hardlinks.
The conda-forge community has sprung up to develop recipes and provide packages. The Anaconda Distribution recipes are now actually built from github forks of these conda-forge recipes (we hope to achieve binary compatibility with them sometime soon).
bt full
#0 0x00000000004212bb in do_mkvalue ()
No symbol table info available.
#1 0x00000000004210a7 in do_mktuple ()
No symbol table info available.
#2 0x00000000004211a8 in do_mkvalue ()
No symbol table info available.
#3 0x00000000004213f2 in vmkvalue ()
No symbol table info available.
#4 0x00000000004214a1 in mkvalue ()
No symbol table info available.
#5 0x0000000000422438 in err_input ()
No symbol table info available.
#6 0x000000000042258c in parse_file ()
No symbol table info available.
#7 0x00000000004226ae in run_file ()
No symbol table info available.
#8 0x0000000000422bf3 in run_script ()
No symbol table info available.
#9 0x000000000042232a in realmain ()
No symbol table info available.
#10 0x00000000004039f4 in main ()
No symbol table info available. python -c "print 'hello world'" Python 1.0.1 (Mar 26 2014)
Copyright 1991-1994 Stichting Mathematisch Centrum, Amsterdam
Segmentation fault (core dumped)
.. I did capture the backtrace though; for what it's worth: (gdb) bt
#0 0x00000000004212bb in do_mkvalue ()
#1 0x00000000004210a7 in do_mktuple ()
#2 0x00000000004211a8 in do_mkvalue ()
#3 0x00000000004213f2 in vmkvalue ()
#4 0x00000000004214a1 in mkvalue ()
#5 0x0000000000422438 in err_input ()
#6 0x000000000042258c in parse_file ()
#7 0x00000000004226ae in run_file ()
#8 0x0000000000422bf3 in run_script ()
#9 0x000000000042232a in realmain ()
#10 0x00000000004039f4 in main ()Though as @kalefranz said already, we do allow it on Windows, we just warn loudly.
cp ${FILENAME} /tmp
Here you should have done:
cp "${FILENAME}" /tmp
Also, GNU make, still one of the cornerstones of building C and C++ libraries (since CMake and Autotools most commonly use that backend) cannot handle spaces in paths at all well.