Pardon my ignorance. What niche did #! fill? Any others that fill the same niche?
#! Filled the niche of a simple base install. It is quick to install and allows for instant use, unlike things like arch or gentoo, even if those can be more efficient. I think antergos (my current distro) also fills this void and allows you to use the full power of arch.
Cool. Thanks for the details. I have been playing with arch when I have free moments.
I want to spend more time with coreos when I have a chance as well. I work with containers quite a bit (started working with them 8 years ago with openvz). Actually, the current implementation of builder.swillkb.com is powered by LXC in order to overcome the single tenant issues of FreeCAD.
coreos does rocket (nspawn goodie) , now lxc for multitennants .. thats what i call brave .. well hit me up on freenode #coreos if you stuck somewhere
I knew that coreos used systemd, but I did not realize they used any of the nspawn functionality. Do you have a reference where I can learn more about that? I have been reading a bunch about nspawn recently. I know the container space pretty well and I didn't even know that existed till a couple days ago. Pretty interesting stuff...
To be clear, I am not using LXC for true multitenant functionality (as known in the industry). Basically what I mean is this...
FreeCAD was designed to be used on a single desktop by a single user. I did not realize how poorly some aspects of the software was written until I started trying to create multiple FreeCAD objects at the same time and realized that changes in one could effect the other. Since the builder.swillkb.com is a web based service, I needed to be able to support multiple requests at the same time, which I am referring to as multitenant because the requests should be isolated from each other.
Since I was much too deep into the implementation at that point, I just needed to find a solution to this without rewriting everything.
My solution:
Run a server that handles all of the requests from the clients, let's call it core. On a new 'build' request, I spin up a new instance of basically the same server in an LXC container and wait for this new worker server to come online (6-10 seconds) and then I have the core server offload the build request to this worker. Once the worker finishes the build and uploads the resulting files to an object store, it passes the metadata for the built files back to the core server and then the LXC worker is destroyed. The core server then updates the client with their cad files and completes the request.
Obviously this is totally inefficient and not ideal, but I just needed a solution. This is actually why I am rebuilding the tool from scratch and skipping the cad engine completely and writing a software that can just generate the output files directly. So far it is blazing fast and is looking promising, but I have not implemented the majority of the complexity yet. I will only support 2D drawings with my new tool instead of both 2D and 3D as I currently do. I think it will be worth it when I am done.
Sorry for the essay, I have been stuck in this hospital bed for too long and I am frackin bored.