As far as OOT modules, that's easy. For instance, a Dockerfile for gr-air-modes could look like this (this is untested, don't get any ideas):
FROM bistromath/gnuradio:3.7.8
RUN apt-get install -y python-zmq
WORKDIR /opt/gr-air-modes
COPY . /opt/gr-air-modes
RUN mkdir build \
&& cd build \
&& cmake ../ \
&& make -j4 \
&& make install
...that's more or less the whole thing, although this particular example is broken for a couple of reasons (no Qt in my base layer, other missing prerequisites). It might be nice to include a Dockerfile template in the OOT example. The nice part about doing OOT modules in this manner is that Gnuradio users could potentially never have to compile Gnuradio -- just write their OOT and base its Dockerfile upon a precompiled Gnuradio base layer. Another benefit is bitrot is all but eliminated, as you're basing your module on top of a versioned base layer rather than master.
The Docker image I put up on Docker Hub is small-ish because it only includes these components (and their prerequisites):
-- * python-support
-- * testing-support
-- * volk
-- * gnuradio-runtime
-- * gr-blocks
-- * gnuradio-companion
-- * gr-fft
-- * gr-filter
-- * gr-analog
-- * gr-digital
-- * gr-channels
-- * gr-uhd
-- * gr-utils
-- * gr-wxgui
It could be a lot smaller if I removed the GR build files (292MB), GR source files (88MB), and UHD source/build (200MB). That would cut it down to somewhat more than half its current size. I like having them there because if I'm working inside the environment I can compile changes incrementally. For a pure deployment system, though, they're unnecessary.
It's possible, albeit messy, to build a Gnuradio distribution in layers and tag the individual layers separately. Because each command in a Dockerfile produces an incremental UFS layer, if you can break the compilation of Gnuradio into separate commands for each component in the Dockerfile, then you can tag the various incremental layers to build different composite Gnuradio distributions. It's probably simpler just to provide a "bells-'n-whistles" version and a "bare bones" version.
If you like, I can see just how small I can reasonably get things. I'd argue, though, that a one-time, couple-of-GB download is a reasonable compromise for the convenience of versioned distribution in all but niche applications (embedded or offline come to mind). In other words, the benefit of getting the wire size down probably doesn't outweigh the effort for most people.
--n
_______________________________________________
Discuss-gnuradio mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio