-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Project description: https://ellak.gr/wiki/index.php?title=GSOC2018_Projects#Epoptes
Epoptes websites: http://epoptes.org/, https://github.com/epoptes
Epoptes (Επόπτης - a Greek word for overseer) is an open source computer lab management and monitoring tool. It allows for screen broadcasting and monitoring, remote command execution, message sending, imposing restrictions like screen locking or sound muting the clients and much more! It can be installed in Ubuntu, Debian and openSUSE based labs that may contain any combination of the following: LTSP servers, thin and fat clients, non LTSP servers, standalone workstations, NX or XDMCP clients etc.
Epoptes has been undermaintained for the last couple of years. It's currently powered by Python 2 and GTK 2, while unfortunately a number of bugs have crept in due to major updates in Linux distribution packages (systemd, consolekit, VNC…).
This project aims at reviving Epoptes with Python 3 and GTK 3 support, while also addressing several outstanding issues.
I propose to extend the original project goals a bit, so that the following areas are covered:
- Make Epoptes run properly in Ubuntu 18.04 and in Debian Buster.
- Rewrite Epoptes with Python 3 support.
- Use Gtk3 with GObject Introspection instead of pygtk2.
- Improvements in the code structure (Break existing code into python modules/packages).
- Make the newer version available for Ubuntu 18.04 in a PPA.
A more detailed description of the project goals follows. Of course any new code will be proposed as a pull request on github.
As part of my GSoC proposal, I submitted the following pull requests in github:
- Convert lock-screen to Python 3 / GTK 3 (issue #45): migrating lock-screen to Python 3 / GTK 3 was rather straightforward. I took the opportunity to also add support for HiDPI monitors, giving appropriate sizes for the lock screen icon and text, and to make it work in the absence of a window manager (issue #47), for example in client login screens.
- Convert screenshot to Python3/Gtk3 (issue #46): migrating screenshot to Python 3 / GTK 3 was a bit more challenging. Quite a bit of searching was required to map the old API into the new one, and I also bumped into issues with text encodings on stdout on Python 3, and even internal issues with the padding of the pixmap last line. I made sure the result works fine with the current Epoptes version, and I also did some benchmarking research.
A few significant issues have arisen due to other software updates in Linux distributions:
- replacement of ifupdown with netplan needs integration for /etc/network/if{up,down}.d scripts
- packages providing ifupdown scripts must have those scripts fixed if needed
- improve support for tigervnc
- Epoptes crashes when a user logs off
- Debian epoptes-client packaging: is the dependency on ifup still needed?
- get-display not working on systemd distributions
Some of these issues will need to be addressed before the Python 3 / GTK 3 migration, so as to be able to run and test the resulting code in a recent development environment.
For example, launching epoptes-client with a systemd unit instead of an if-up script is essential, as modern distributions don't even run scripts in /etc/network/if-up anymore, i.e. epoptes-client isn't launched at all on boot.
Epoptes is currently powered by Python 2, which is to be EOLed in 2020. No recent Linux distribution ships without Python 3 anymore. Hence, backwards compatibility with Python 2 needn't be a big concern; supporting only Python 3 should be enough.
The Python 2to3 automatic conversion tool may help a bit in the initial conversion, but of course all its proposed changes will need to be manually reviewed.
The Python 3 migration needs to be implemented in the same step as the Gtk3 migration analyzed below, because there's no pygtk module in Python 3, and the code needs to be massively updated to use the new GObject Introspection methods. That means that it would be best to split the code base into chunks that can be separately updated; more on this on the timeline section.
Epoptes is currently using pygtk2 for its user interface, but that's deprecated and unmaintained, and bug reports have been filed that may even result in the removal of Epoptes from distributions:
The migration of Epoptes from GTK 2 to 3 though won't be trivial. It's using some techniques like client-side image grabbing, for thin-client bandwidth savings, that might not be easily portable. Fortunately, thin clients themselves are getting deprecated upstream in LTSP, so some of those features are not very important anymore.
A plan for the migration would be to start with the standalone parts of epoptes, like the lock-screen code, so as to gain experience and dive into the larger parts later. More on the code base splitting in the timeline section.
The glade .ui files shouldn't be much of a problem, in many cases a simple GTK version bumping should be enough.
Restructuring a code base as large as epoptes is no trivial task. It requires a deep familiarity with the code base, so I believe it should be the last one of the project's programming tasks.
The most obvious part to be restructured is gui.py, which currently counts 1111 lines, and whose core functionality could probably be seperated in a library, while gui.py itself would only contain the knitting between the UI and the various libraries.
In order to make the result of this GSoC effort more useful, a new Epoptes version should be released upstream after the end of the GSoC project, and that Epoptes version should then be published in its PPA for its Ubuntu-based users.
Timeline 🔗
March 27, 2018 - April 22, 2018 | Proposal Review Period |
---|---|
April 23, 2018 | Student Projects Announced |
April 23, 2018 - May 14, 2018 | Community Bonding |
In the bonding period, I'd like to focus on the following areas:
- Create a blog where I will be tracking my GSoC progress.
- Set up my development environment, Ubuntu 18.04, LTSP, Epoptes, pycharm, glade.
- Install Ubuntu 18.04, Debian Buster and LTSP in Virtualbox, so as to be able to test Epoptes in standalone, thin and fat client mode.
- Review, confirm or submit bug reports about issues that Epoptes has in those recent distributions.
May 14, 2018 - June 15, 2018 | Students Work on their Projects |
---|---|
June 11 - 15, 2018 | First Evaluations |
I'm planning to work 40 hours a week in all GSoC work periods. In the first phase, I aim to work on and deliver the following:
- Solve all outstanding issues so that Epoptes, while still in Python 2 / GTK 2, works on Ubuntu 18.04 and Debian Buster, in all modes: standalone, thin and fat client.
- Remove all code that relies on old technologies like ifupdown or consolekit.
- Add systemd units to launch epoptes-client on network-online.
- Support the most actively developed VNC viewers that are in the Debian/Ubuntu repositories.
- Migrate all epoptes-client python scripts to Python 3 / GTK 3:
- message, lock-screen, remote-assistance, screenshot.
- Migrate standalone epoptes python scripts to Python 3 / GTK 3:
- remote-assistance
At the end of this phase, only some parts of the code base will be migrated, but all of Epoptes components, the client, the server and the UI will still be directly runnable in Ubuntu 18.04 and Debian Buster.
June 15, 2018 - July 9, 2018 | Students Continue Coding |
---|---|
July 9 - 13, 2018 | Second Evaluations |
In the second phase, I plan to migrate all the rest of Epoptes to Python 3 / GTK 3: its core and common modules, the twisted-based server, the user interface code as well as the Glade .ui files. That means that for a couple of weeks, Epoptes will not be runnable, as the migrated Python 3 scripts won't be able to import the non-migrated Python 2 ones. It will be possible though to test some of the components when they're completed, like for example the daemon, by creating small test scripts that import them.
At the end of this phase, Epoptes will be runnable in Ubuntu 18.04, but now completely in Python 3 and GTK 3. The deliverables of course will be the code and blog posts with screenshots of that progress.
July 13, 2018 - August 6, 2018 | Students Continue Coding |
---|---|
August 6 - 14, 2018 | Students Submit Code and Evaluations |
In the final phase, I aim to:
- Update setup.py so that it runs on Python 3 and the latest version of python-distutils-extra. Remove workarounds (like the potfiles-workaround directory) that are not longer needed.
- Explore the possibility of code restructuring, especially the massive gui.py, into small modules.
- Close bug reports for the issues that have been fixed.
- Submit a final version.
- Upload it the Epoptes PPA for Ubuntu 18.04 users to be able to test, and ask the Debian maintainer to upload it to Debian testing.
August 14 - 21, 2018 | Mentors Submit Final Evaluations |
---|---|
August 22, 2018 | Results Announced |
After the project is completed, I plan to continue working on Epoptes development and support. I will also try to solve any issues that arise because of the Python 3 / GTK 3 migration, even if they're discovered long after the GSoC project is finished.