Assistance Required for Updating Kolibri Remote Servers via Satellite

Dear Kolibri Team,

We hope this message finds you well. We are reaching out to request your assistance with a specific challenge we are facing.

We are deploying Kolibri on remote sites that lack Internet connectivity. and In most cases NO Internet At all.

To keep these Kolibri remote servers up to date, we are sending resources via satellite using a new one-way protocol (from our facilities to the areas where Kolibri is installed). Our platform successfully delivers these files to the remote sites via satellite and stores them in a designated location on the remote servers. However, we need guidance on the procedure to transfer these files from our specified location and integrate them into Kolibri’s system, ensuring they are recognized as classes, resources, and other relevant categories.

Could you please assist us in completing these tasks? Your expertise would be greatly appreciated.

Thank you in advance for your support.

you can learne about the project in this YTB video

Best regards,

Hi @Develop_Innovatech,

This is a very interesting setup! We’ve heard of organizations trying similar things over the years, so very interesting to hear you using a similar model.

Could you describe your current workflow in a bit more detail so we can help? What are you currently doing/planning to do after organizing/uploading your resources on Kolibri Studio?

Kind Regards,
Richard

More Details on Our Workflow with Kolibri Studio

Dear Richard,

Thank you for your quick response and kind words! It’s exciting to hear that other organizations have explored similar setups over the years—we’re glad to be part of this journey.

As I briefly mentioned in the description, here’s a more detailed overview of our current workflow and plans:

Our complete system consists of:

A central platform at our HQ, connected to the Eutelsat teleport. This platform handles the transmission of files and live TV channels in HLS format, all encapsulated in IP using the new DVB-NIP protocol.

A standard satellite receiver, similar to those used in households, but equipped with custom software. This receiver captures the signal, interprets its structure, and deencapsulates the content. Once deencapsulated, it deposits the received files and live channel streams onto a Tiny server.

A tiny server (8GB RAM, 250GB storage) connected to the DVB-S2 satellite receiver. When users (e.g., students, teachers) are within the server’s Wi-Fi range or on the same local network, they can access the live HLS streams and browse the stored files. This tiny server also integrates Kolibri.

Here’s what we’re currently doing and planning:

Preparing educational content Kolibri Format (classes, channels,…) We’re figuring this out and need help here.

Preparing other simple content (video capsules, quizzes, PDFs, Word docs, etc.) at our HQ. We know how to do this.
Sending the content via the teleport. We know how to do this.
Receiving it on the tiny server. We know how to do this.
Integrating it into Kolibri. We’re figuring this out and need help here.
Making it visible as classes, resources, or channels for users connected to the server (students, teachers, etc.). We know the basics but are looking to refine this process.

We hope this overview gives you the insights needed to better understand our project. We’re particularly eager to optimize the integration of our content into Kolibri Studio and ensure it’s seamlessly accessible to our end users. Any guidance or suggestions you could offer on this front would be greatly appreciated!

Looking forward to your thoughts.

Kind regards,
Abdelhamid

Hi Abdelhamid,

Great, OK - that gives me a sense. What I would suggest is on your central platform you should have an installation of Kolibri that can act as the “source” for your servers.

I would take a look at the user documentation for managing resources on a Kolibri device to get a sense for how this happens: Channels and resources - Kolibri User Guide

I think the way that would be most compatible here is for each HLS stream for Kolibri resources to be a predefined set of exported resources. So the workflow for doing this would be:

  • Import the channels (or subset of channels) to Kolibri.
  • Export each channel you want in the set to a specific location on disk (this would need to be done via the command line: Working with Kolibri from the command line - Kolibri User Guide)
  • Then use that location on disk to create an HLS stream that can be distributed.

Then on the tiny servers with Kolibri, once a teacher “selects” an HLS stream, you would run the import into the Kolibri server, assuming the HLS stream is addressable using a file path, you could have that triggered automatically using a command line invocation of Kolibri: Working with Kolibri from the command line - Kolibri User Guide

Does that make sense/line up with the HLS stream workflow?

Kind Regards,
Richard

Hi @richard Thnx a lot for your tips

But we also need to import classes and channels,… into Kolibri, which is on remote sites not connected to the Internet, so we also need to generate data files (PDF Docs, Images, videos, Quizzes, …) in the format required by Kolibri, and integrate them into remote Kolibri, so that students and teachers in disconnected schools can access these resources on their local tiny servers, and not just on the HLS stream. the idea of creating a local Kolibri at the central site for export is an interesting one.

But how do we build the content from scratch?

Is the approach we have in mind valid:

  • Build with Kolibri Studio,

  • Import into kolibri Central

  • Export the resource

  • Send the resource by satellite,

- Import this resource on Tiny remote server!!! :thinking:

but this last step we want to do automatically, as teachers are not often able to do the operation themselves.

Yes - all the resources would be assembled on the Kolibri Studio server first, then imported into your central Kolibri instance.

For the final step on the remote server, you will probably need to do some scripting that runs locally when the HLS stream is updated. This would then trigger the imports into Kolibri. Without knowing more technical details about how that happens, I don’t know that I can give precise advice.

One other alternative is to have the data put directly into the content folder of the Kolibri home directory, and then just have the command kolibri manage scanforcontent running periodically on a cron schedule on the tiny server to integrate any updated resources.

There are several ways to go about this, happy to hear your thoughts.

My last question is about the “classes” - currently all user accounts are managed on the Kolibri servers themselves, and we don’t currently have a mechanism for syncing them that would be compatible with the server updates you are suggesting. Is it your intention that this would also be managed remotely? This may be possible to script but would take some ingenuity, probably using our user CSV import functionality.

Dear @richard
In fact I did succeed to create ressources ans Import it into my Local Kolibri beneath the Kolibri Studio.

After that I export the ressources to external zip file that I used to upgrade the remote Servers .

Need your idea and helps about how can we embed a Tiny AI module (addon or Plug-in) im kolibri to allow a Minor interactive dialogs between the Computer and learners. For example for Quizzes.

This would be a little more involved - Kolibri has a plugin system that allows for this kind of thing.

One example is the plugin that we use to integrate Sentry for online deployments of Kolibri: GitHub - learningequality/kolibri-sentry-plugin: A plugin to enable sentry integration for Kolibri

You can see there an example of a plugin that injects arbitrary code into a page.

We also have some documentation of this: Kolibri plugin architecture — Kolibri developer documentation 0.18.0a0.dev0+git.33.gef1b92c5 documentation although the best examples of plugins are the actual plugins in the kolibri repository: kolibri/kolibri/plugins at develop · learningequality/kolibri · GitHub

That’s about as much guidance as I can give - although I am happy to answer specific questions you have about the plugin architecture as you dive into it.