Despite working in a computing department in a distance education institution, where providing course software to students running a wide range of arbitrary devices, in a cross-platform way, can be a challenge at times, the phrase what’s Docker? is still par for the course…
…and at times I wonder why we aren’t more aggressively exploring virtualisation as a way of regaining control over software environments we provide to students and making them available in a variety of ways.
To listen along, open this in another tab…
I don’t want to wait anymore I’m tired of looking for answers
TM351, our data management course, uses a Virtualbox VM to deliver course software to students (Jupyter notebooks, OpenRefine, PostgreSQL, MongoDB). I’ve dabbled on and off with various Dockerised versions — a docker-compose composition, a monolithic multi-application container — and explored a version of the VM that runs on OpenStack.
We were supposed to have a version of the VM running on the Faculty OpenStack server for ALs (tutors) and “needy” students who struggled with getting the VM running in 18J (that’s October, 2018), but it didn’t happen. I got a test version up by November, and tried to pull together my blockers and questions into an internal document in early December.
So much for that. Not a single question answered, not a single comment questioning any of the points I’ve raised, not any come-backs saying how incomprehensible the document is.
There’s no starting over, no new beginnings, time races on
And you’ve just gotta keep on keeping on
Elsewhere, the TM129 Frankenstein course that’s watched too many Dracula movies keeps on not dying… As with TM351, it faces issues: a Linux desktop is delivered using Virtualbox; and as on TM351, there’s grief every presentation with the least capable students having the most problems getting it running. On Windows, the default Hyper-V hypervisor clashes with Virtualbox (only one of them can run at any one time), and in some circumstances, fixing it requires a trip to the BIOS.
Gotta keep on going, looking straight out on the road
Can’t worry ’bout what’s behind you or what’s coming for you further up the road
But I’m not wrong. I’m happy to take any bet that anyone cares to make about it: virtualisation is what we should be doing because it holds the promise of anywhere running (on student’s machines, on OU servers, on remote servers whether OU provided or BYO); it allows us to control environments, and maintain them at whatever package version numbers we want.
I try not to hold on to what is gone, I try to do right what is wrong
I try to keep on keeping on
Yeah I just keep on keeping on
One of the points of difference between TM129 and TM351 is that TM129 uses desktop Linux whereas TM351 runs a headless Linux server. Desktop access creates it’s own issues, such as how do you provide desktop access to via a browser if the VM is remotely hosted. One way is via an novnc style client, another is RDP (Remote Desktop Protocol).
Take a minute out to listen to the song, mull over just how much you know about virtualisation, and wonder about how we might be able to make use of it in a distance learning context… What don’t you know you that might be preventing you from thinking this through? Your peripheral vision will cue you back into reading along…
Something good comes with the bad
One of the advantages of the desktop, rather than headless, approach is that it provides us with a context in which we can run legacy apps. One of the TM129 applications is an old, old Windows desktop app, RobotLab, packaged under WINE and PlayOnMac to provide cross-platform support. Each year it seems to require another patch, so how much easier if we dumped it into a VM and let folk run it from there.
The desktop approach also means that where an application is a desktop, rather than HTML-GUI fronted app, we can make it available to students, wheresoever they happen to be, on whatsoever platform they happen to be on…
There’s hope, there’s a silver lining
Discussions are currently afoot about how we can make life easier for TM129 students in a TM129 rewrite. One option is that we give them a Linux Live-USB, another that we ship them a Raspberry Pi. My preference would be to provide remote access. But there may be another way of keeping it local…
Show me my silver lining
In Autumn last year, Microsoft seemed to up support for Ubuntu under Hyper-V. As this post — Using Enhanced Mode Ubuntu 18.04 for Hyper-V on Windows 10 — describes, it seems that some flavours of Windows 10 will now let you run Ubuntu with a graphical desktop and access it via the Windows RDP client.
Show me my silver lining
But how does that help TM351, where we use a headless server?
Having no idea who or what or where I am
I don’t remember if I’ve explored this before — not having access to a Windows machine means I tend to shirk on (that is, completely ignore!) Windows integration and test — but this recent post on How to Migrate VirtualBox VMs to Windows 10 Hyper-V could be handy… Rather than just ship the TM351 Virtualbox VM, why don’t we ship a Hyper-V version too.
(The TM351VM build is actually managed under Vagrant, and the original Vagrantfile supported builds for Virtualbox, AWS, Linode and Azure. I was trying to be a Good Citizen by enabling run anywhere, at least insofar as I could test it…)
These shackles I’ve made in an attempt to be free
One thing I find particularly frustrating is that rather than spend an hour putting together a working and reusable demo of how some of these virtualisation demos can fit together (for example, a demo of how to run the Microsoft VS Code desktop electron app in a container, probably by cribbing CoCalc’s collaborative persistent graphical Linux applications to your browser, with integrated clipboard and HiDPI support based on what’s in the
CoCalc-Docker image), I have to keep writing things like this because no-one else seems to be willing to play along…
I won’t take the easy road
PS if you’re wondering about the lyrics, they’re from First Aid Kit‘s beautiful song “Silver Lining”. [Wipes tear from eye…]
I had it playing on repeat as I wrote this post using ListenOnRepeat.