transactional-update, the application to update read-only systems such as openSUSE MicroOS and openSUSE Kubic and the Transactional Server installations of openSUSE Leap, openSUSE Tumbleweed and SUSE Linux Enterprise Server, evolved from a POC to a fully fledged solution - and is currently completely written in Bash. This has been working really well in the past, but is gradually reaching its limits, especially when thinking about supporting additional file systems or ports to other Linux distributions - yes, we have a huge interest in other distributions adopting our technology.

A C++ version would simplify those abstractions, but would it also make maintenance of the complete application easier? Check that as part of a POC and refresh C++ knowledge on the way there.

Potential caveats:

  • How is the selfupdate supposed to work when the application is compiled against a newer version of the core libraries?

Looking for hackers with the skills:

c++

This project is part of:

Hack Week 19

Activity

  • over 5 years ago: Pharaoh_Atem liked this project.
  • over 5 years ago: cdywan liked this project.
  • over 5 years ago: fcrozat liked this project.
  • over 5 years ago: mvidner liked this project.
  • over 5 years ago: aplanas liked this project.
  • over 5 years ago: fos started this project.
  • over 5 years ago: fos added keyword "c++" to this project.
  • over 5 years ago: fos originated this project.

  • Comments

    • Pharaoh_Atem
      over 5 years ago by Pharaoh_Atem | Reply

      I'd love to see a DNF-based port of this working on Fedora and openSUSE. add-emoji

      • fos
        over 5 years ago by fos | Reply

        No, I won't do the DNF based port myself add-emoji

        But if everything works out as expected you will get an application with a clear abstraction layer, so it should be easy to port it to any other package management system.

        (I wasn't able to work on this for the last two days due to an emergency at home, but I'll continue my personal Hack Week on Monday & Tuesday.)

      • fos
        over 5 years ago by fos | Reply

        I finally found the time to finish the POC, you can find it on https://github.com/laenion/transactional-update/tree/c%2B%2B. Currently it's only barely possible to dist-upgrade a system using "dup", but the core framework skeleton exists.

        The C++ version can be found in src.

        Implementing a different package manager / porting to a different system should be quite simple now: Just put your own implementation of the PackageManager class into the Packages directory and add an appropriate selection mechanism to PackageManager.cpp.

        Would this be something feasible for you? The alternative for now would be to keep the Bash implementation - and source a different file, which will contain the commands for the corresponding platform.

    • Pharaoh_Atem
      over 5 years ago by Pharaoh_Atem | Reply

      > How is the selfupdate supposed to work when the application is compiled against a newer version of the core libraries?

      This should only be a problem if the package manager backend does something insane like use subprocesses to execute package management actions because the entire package manager code state isn't remaining in memory during the transaction.

    Similar Projects

    Port some classic game to Linux by MDoucha

    Let's pick some old classic game, reverse engineer the data formats and game rules and write an open source engine for it from scratch. Some games from 1990s are simple enough that we could have a playable prototype by the end of the week.

    Write which games you'd like to hack on in the comments. Don't forget to check e.g. on Open Source Game Clones, Github and SourceForge whether the game is ported already.

    Hack Week 25 - TBD

    It's time to pick a game for the upcoming Hack Week. Discuss in the comments what game you'd like to hack!

    Hack Week 24 - Master of Orion II: Battle at Antares & Chaos Overlords

    Work on Master of Orion II continues but we can hack more than one game. Chaos Overlords is a dystopian, lighthearted, cyberpunk turn-based strategy game originally released in 1996 for Windows 95 and Mac OS. The player takes on the role of a Chaos Overlord, attempting to control a city. Gameplay involves hiring mercenary gangs and deploying them on an 8-by-8 grid of city sectors to generate income, occupy sectors and take over the city.

    How to ~~install & play~~ observe the decompilation progress:

    • Clone the Git repository
    • A playable reimplementation does not exist yet, but when it does, it will be linked in the repository mentioned above.

    Further work needed:

    • Analyze the remaining unknown data structures, most of which are related to the AI.
    • Decompile the AI completely. The strong AI is part of the appeal of the game. It cannot be left out.
    • Reimplement the game.

    Hack Week 20, 21, 22 & 23 - Master of Orion II: Battle at Antares

    Master of Orion II is one of the greatest turn-based 4X games of the 1990s. Explore the galaxy, colonize planets, research new technologies, fight space monsters and alien empires and in the end, become the ruler of the galaxy one way or another.

    How to install & play:

    • Clone the Git repository
    • Run ./bootstrap; ./configure; make && make install
    • Copy all *.LBX files from the original Master of Orion II to the installation data directory (/usr/local/share/openorion2 by default)
    • Run openorion2

    Further work needed:

    • Analyze the rest of the original savegame format and a few remaining data files.
    • Implement most of the game. The open source engine currently supports only loading saved games from the original version and viewing the galaxy map, fleet management and list of known planets.

    Hack Week 19 - Signus: The Artifact Wars

    Signus is a Czech turn-based strategy game similar to Panzer General or Battle Isle series. Originally published in 1998 and open-sourced by the original developers in 2003.

    How to install & play:

    • Clone the Git repository
    • Run ./bootstrap; ./configure; make && make install in both signus and signus-data directories.
    • Run signus

    Further work needed: