I'm running a simple home mirror, but I managed to get into a situation where I have to use a bunch of custom excludes. I think we should be able to offer what people want nowadays.\

To my knowledge, hotstuff and other pre-configured rsync modules are no longer maintained and advised not to use. This leads people to maintain their own exclusion list for the rsync.

So I'm trying to improve my current experience at home and reduce the effort for others.

Project Description

I'd like to offer people with limited storage a super-easy way how to deploy a home mirror.

Ideally, Leap Micro + preconfigured combustion script. Boot and pull a pre-configured mirror container via cockpit (unless done in the combustion script) (160GB hotstuff, 320GB, etc ...). Done in like 5-8 minutes and already serving.

That's the easier part^

The more tricky part will be that nobody really touched are pre-configured rsync modules hotstuff etc for quite some time.

So refreshment of our pre-configured hotstuff, exposing it on github.com/openSUSEm, updating docs, and advertising is the next goal. Also, make a pre-recorded demo similar to the one I've done for Micro.

Trigger Ish recently configured a mirror for the Mauritius region and he struggled with quota issues. That only confirmed that I'm not alone who sees the issue. I shared with him my exclusion list and crontab line and he was happy. I think we can do a better job and nobody should be using these exclusion lists that require maintenance.

Goal for this Hackweek

Avoid using exclude list while being on a budget. Offer up-to-date pre-configured options. Offer simple solutions via containers for (not-only) people with rasp pi or similar home NAS.

  • rsync modules for mirrors with quota up2date in git (currently located on pontifex)
  • auto-deployment of mirror config to pontifex? (bonus, otherwise manual pull via request to admin@opensuse.org)
  • Set of container images (per offered rsync module)
  • Update docs (see resources) and publish a demo

Resources

https://en.opensuse.org/openSUSE:Mirror_howto

https://www.youtube.com/watch?v=ft8UVx9elKc

Looking for hackers with the skills:

hotstuff mirror opensuse rsync leapmicro containers raspberrypi

This project is part of:

Hack Week 21 Hack Week 23

Activity

  • over 2 years ago: tjyrinki_suse liked this project.
  • over 2 years ago: avicenzi joined this project.
  • over 2 years ago: pdostal joined this project.
  • over 2 years ago: pdostal liked this project.
  • over 2 years ago: Pharaoh_Atem liked this project.
  • over 2 years ago: Ishwon joined this project.
  • over 2 years ago: lkocman started this project.
  • over 2 years ago: lkocman added keyword "raspberrypi" to this project.
  • over 2 years ago: lkocman added keyword "hotstuff" to this project.
  • over 2 years ago: lkocman added keyword "mirror" to this project.
  • over 2 years ago: lkocman added keyword "opensuse" to this project.
  • over 2 years ago: lkocman added keyword "rsync" to this project.
  • over 2 years ago: lkocman added keyword "leapmicro" to this project.
  • over 2 years ago: lkocman added keyword "containers" to this project.
  • over 2 years ago: lkocman originated this project.

  • Comments

    • lrupp
      over 2 years ago by lrupp | Reply

      Really love to see this happening! Just one note: if possible, please provide an RPM package that can easily be installed and updated on the download mirror (pontifex). Single scripts, deployed at some time on a machine and not maintained any longer are a way we really should avoid. I had/have this experience especially with pontifex too often in the past....

      • lkocman
        over 2 years ago by lkocman | Reply

        Will keep that in mind. Yes I also think we want github and rpm deployment.

    • pjessen
      over 2 years ago by pjessen | Reply

      I can't remember when, but I hardwired the hotstuff modules, after I realised no one had the insight to fix the knapsack stuff. I try to maintain the other rsync modules, but I don't spend much time on it. Wrt this project, I say go for it, as long as it doesn't mean any extra ongoing maintenance.

      • lkocman
        over 2 years ago by lkocman | Reply

        Absolutely the goal is to simplify work. There will be some effort initially (refresh itself, initial bugfixes and rework deployment). That's what the hackweek is about.

    • lkocman
      over 2 years ago by lkocman | Reply

      Initial drop of the current configuration (previously was under svn) https://github.com/openSUSE/opensuse-hotstuff (openSUSE Heroes can commit)

      Very simple rpm utilizing obs_scm and explicit listing of individual files https://build.opensuse.org/request/show/975806 If infra team accepts this I'd like to start deploying via update from the infra repo.

      Next step is refresh of the files :-)

    • lkocman
      over 2 years ago by lkocman | Reply

      Perhaps a related project https://github.com/Firstyear/opensuse-proxy-cache

    • simotek
      over 2 years ago by simotek | Reply

      The cache @firstyear wrote (https://github.com/Firstyear/opensuse-proxy-cache) might be more useful for alot of people rather then syncing as a fully populated mirror it fetches packages etc on demand the first time they are requested and caches them for future use. A number of people in Australia are already using it with decent success, I have it running in a container on one of my machines and the rest point to that as there main repo. It means you don't have to download the whole mirror just the stuff you actually use.

    • avicenzi
      over 2 years ago by avicenzi | Reply

      Hi, just fix hotstuff modules, other problems are solved in https://github.com/opensuse-brasil/mirror-images (I think).

      I still need to clean up and upload my swarm/compose files and create some k8s files.

      I've been running my mirror for probably over a year now on containers, no issues, it works really well.

      My mirror current runs on this repo https://github.com/alexandrevicenzi/opensuse-mirror-docker/, it has some flaws.

      I would really love if modules just included versions for example:

      • Leap 15.4 oss/non-oss and updates
      • TW oss/non-oss and updates

      In my mirror I have current (15.4), current -1 (15.3) and TW, no ports, no debugs, no sources. Just Leap 15.4 with updates uses about 75 GB, that's really good even if you want to host at home. If you add 15.3, and TW that goes up to 700 GB, and if you add debug, source, ports, that goes over 2 TB. Would be nice if it was easier to filter architectures, I have zero interest in hosting IBM/PPC packages, that's often mainframe, and most people would not use openSUSE TW in a mainframe.

      I don't really like the idea that I need to update my include/exclude file every new release, if we can avoid that with hotstuff, that is better. It's easier to maintain modules on our side, than expect many to update their configs every new release.

    • avicenzi
      over 2 years ago by avicenzi | Reply

      I just had an idea, maybe a silly one, but what if we had a service where the user chooses what he wants to mirror, and they get a custom url that is plain text, and with this url, they can just wget before they run rsync in cron to get their desired include/exclude list.

      I would like sometime like that, and to be honest, not that difficult to be achieved. I would be willing, or I may implement that myself, just for fun.

    • lkocman
      over 2 years ago by lkocman | Reply

      I'm spending initial 2-3 days on the https://hackweek.opensuse.org/21/projects/opensuse-build-supported-by-suse-it

      I'll be looking into this on Wednesday.

      I did get an access to MySQL database for mirrorcache from Andrii, so scripting this should be possible

    • lkocman
      about 1 year ago by lkocman | Reply

      Oky I've spent some extra time on this yesterday. So I'm making it part of this year's hackweek again :-)

      Refreshed https://build.opensuse.org/package/show/home:lkocman:Images/opensuse-mirror I plan to rework it to use exclusively exclude lists and offer user a decent choice.

      next task would be to have a convenient hack with openSUSE-repos to use my local mirror on my local network only. I was thinking of repo priority and passing url to service fiel as a zypper variable.

    Similar Projects

    New migration tool for Leap by lkocman

    Update

    I will call a meeting with other interested people at 11:00 CET https://meet.opensuse.org/migrationtool

    Description

    SLES 16 plans to have no yast tool in it. Leap 16 might keep some bits, however, we need a new tool for Leap to SLES migration, as this was previously handled by a yast2-migration-sle

    Goals

    A tool able to migrate Leap 16 to SLES 16, I would like to cover also other scenarios within openSUSE, as in many cases users would have to edit repository files manually.

    • Leap -> Leap n+1 (minor and major version updates)
    • Leap -> SLES docs
    • Leap -> Tumbleweed
    • Leap -> Slowroll
    • Leap Micro -> Leap Micro n+1 (minor and major version updates)
    • Leap Micro -> MicroOS

    Hackweek 24 update

    Marcela and I were working on the project from Brno coworking as well as finalizing pieces after the hackweek. We've tested several migration scenarios and it works. But it needs further polishing and testing.

    Projected was renamed to opensuse-migration-tool and was submitted to devel project https://build.opensuse.org/requests/1227281

    Repository

    https://github.com/openSUSE/opensuse-migration-tool

    Out of scope is any migration to an immutable system. I know Richard already has some tool for that.

    Resources

    Tracker for yast stack reduction code-o-o/leap/features#173 YaST stack reduction


    Enlightenment in Leap 16 by simotek

    Description

    Get the Enlightenment stack + X11 building and running on the Leap 16 codebase.

    Goals

    • Get enlightenment / terminology compiling for Leap 16
    • Test that they are running correctly in a Virtual Machine.

    Resources


    Update Haskell ecosystem in Tumbleweed to GHC-9.10.x by psimons

    Description

    We are currently at GHC-9.8.x, which a bit old. So I'd like to take a shot at the latest version of the compiler, GHC-9.10.x. This is gonna be interesting because the new version requires major updates to all kinds of libraries and base packages, which typically means patching lots of packages to make them build again.

    Goals

    Have working builds of GHC-9.10.x and the required Haskell packages in 'devel:languages:haskell` so that we can compile:

    • git-annex
    • pandoc
    • xmonad
    • cabal-install

    Resources

    • https://build.opensuse.org/project/show/devel:languages:haskell/
    • https://github.com/opensuse-haskell/configuration/
    • #discuss-haskell
    • https://www.twitch.tv/peti343


    YQPkg - Bringing the Single Package Selection Back to Life by shundhammer

    tl;dr

    Rip out the high-level YQPackageSelector widget from YaST and make it a standalone Qt program without any YaST dependencies.

    See section "Result" at the bottom for the current status after the hack week.

    Current Status

    See the development status issue at the GitHub repo.

    tl;dr: It's usable now with all the key features.

    It does real package installation / removal / update with reasonable user feedback.

    The Past and the Present

    We used to have and still have a powerful software selection with the YaST sw_single module (and the YaST patterns counterpart): You can select software down to the package level, you can easily select one of many available package versions, you can select entire patterns - or just view them and pick individual packages from patterns.

    You can search packages based on name, description, "requires" or "provides" level, and many more things.

    The Future

    YaST is on its way out, to be replaced by the new Agama installer and Cockpit for system administration. Those tools can do many things, but fine-grained package selection is not among them. And there are also no other Open Source tools available for that purpose that even come close to the YaST package selection.

    Many aspects of YaST have become obsolete over the years; many subsystems now come with a good default configuration, or they can configure themselves automatically. Just think about sound or X11 configuration; when did you last need to touch them?

    For others, the desktops bring their own tools (e.g. printers), or there are FOSS configuration tools (NetworkManager, BlueMan). Most YaST modules are no longer needed, and for many others there is a replacement in tools like Cockpit.

    But no longer having a powerful fine-grained package selection like in YaST sw_single will hurt. Big time. At least until there is an adequate replacement, many users will want to keep it.

    The Idea

    YaST sw_single always revolved around a powerful high-level widget on the abstract UI level. Libyui has low-level widgets like YPushButton, YCheckBox, YInputField, more advanced ones like YTable, YTree; and some few very high-level ones like YPackageSelector and YPatternSelector that do the whole package selection thing alone, working just on the libzypp level and changing the status of packages or patterns there.

    For the YaST Qt UI, the YQPackageSelector / YQPatternSelector widgets work purely on the Qt and libzypp level; no other YaST infrastructure involved, in particular no Ruby (or formerly YCP) interpreter, no libyui-level widgets, no bindings between Qt / C++ and Ruby / YaST-core, nothing. So it's not too hard to rip all that part out of YaST and create a standalone program from it.

    For the NCurses UI, the NCPackageSelector / NCPatternSelector create a lot of libyui widgets (inheriting YWidget / NCWidget) and use a lot of libyui calls to glue them together; and all that of course still needs a lot of YaST / libyui / libyui-ncurses infrastructure. So NCurses is out of scope here.

    Preparatory Work: Initializing the Package Subsystem

    To see if this is feasible at all, the existing UI examples needed some fixing to check what is needed on that level. That was the make-or-break decision: Would it be realistically possible to set the needed environment in libzypp up (without being stranded in the middle of that task alone at the end of the hack week)?

    Yes, it is: That part is already working:

    https://github.com/yast/yast-ycp-ui-bindings/pull/71


    Create openSUSE images for Arm/RISC-V boards by avicenzi

    Project Description

    Create openSUSE images (or test generic EFI images) for Arm and/or RISC-V boards that are not yet supported.

    Goal for this Hackweek

    Create bootable images of Tumbleweed for SBCs that currently have no images available or are untested.

    Consider generic EFI images where possible, as some boards can hold a bootloader.

    Document in the openSUSE Wiki how to flash and use the image for a given board.

    Boards that I have around and there are no images:

    • Rock 3B
    • Nano PC T3 Plus
    • Lichee RV D1
    • StartFive VisionFive (has some image needs testing)

    Hack Week 22

    Hack Week 21

    Resources


    SUSE AI Meets the Game Board by moio

    Use tabletopgames.ai’s open source TAG and PyTAG frameworks to apply Statistical Forward Planning and Deep Reinforcement Learning to two board games of our own design. On an all-green, all-open source, all-AWS stack!
    A chameleon playing chess in a train car, as a metaphor of SUSE AI applied to games


    Results: Infrastructure Achievements

    We successfully built and automated a containerized stack to support our AI experiments. This included:

    A screenshot of k9s and nvtop showing PyTAG running in Kubernetes with GPU acceleration

    ./deploy.sh and voilà - Kubernetes running PyTAG (k9s, above) with GPU acceleration (nvtop, below)

    Results: Game Design Insights

    Our project focused on modeling and analyzing two card games of our own design within the TAG framework:

    • Game Modeling: We implemented models for Dario's "Bamboo" and Silvio's "Totoro" and "R3" games, enabling AI agents to play thousands of games ...in minutes!
    • AI-driven optimization: By analyzing statistical data on moves, strategies, and outcomes, we iteratively tweaked the game mechanics and rules to achieve better balance and player engagement.
    • Advanced analytics: Leveraging AI agents with Monte Carlo Tree Search (MCTS) and random action selection, we compared performance metrics to identify optimal strategies and uncover opportunities for game refinement .

    Cards from the three games

    A family picture of our card games in progress. From the top: Bamboo, Totoro, R3

    Results: Learning, Collaboration, and Innovation

    Beyond technical accomplishments, the project showcased innovative approaches to coding, learning, and teamwork:

    • "Trio programming" with AI assistance: Our "trio programming" approach—two developers and GitHub Copilot—was a standout success, especially in handling slightly-repetitive but not-quite-exactly-copypaste tasks. Java as a language tends to be verbose and we found it to be fitting particularly well.
    • AI tools for reporting and documentation: We extensively used AI chatbots to streamline writing and reporting. (Including writing this report! ...but this note was added manually during edit!)
    • GPU compute expertise: Overcoming challenges with CUDA drivers and cloud infrastructure deepened our understanding of GPU-accelerated workloads in the open-source ecosystem.
    • Game design as a learning platform: By blending AI techniques with creative game design, we learned not only about AI strategies but also about making games fun, engaging, and balanced.

    Last but not least we had a lot of fun! ...and this was definitely not a chatbot generated line!

    The Context: AI + Board Games


    ClusterOps - Easily install and manage your personal kubernetes cluster by andreabenini

    Description

    ClusterOps is a Kubernetes installer and operator designed to streamline the initial configuration and ongoing maintenance of kubernetes clusters. The focus of this project is primarily on personal or local installations. However, the goal is to expand its use to encompass all installations of Kubernetes for local development purposes.
    It simplifies cluster management by automating tasks and providing just one user-friendly YAML-based configuration config.yml.

    Overview

    • Simplified Configuration: Define your desired cluster state in a simple YAML file, and ClusterOps will handle the rest.
    • Automated Setup: Automates initial cluster configuration, including network settings, storage provisioning, special requirements (for example GPUs) and essential components installation.
    • Ongoing Maintenance: Performs routine maintenance tasks such as upgrades, security updates, and resource monitoring.
    • Extensibility: Easily extend functionality with custom plugins and configurations.
    • Self-Healing: Detects and recovers from common cluster issues, ensuring stability, idempotence and reliability. Same operation can be performed multiple times without changing the result.
    • Discreet: It works only on what it knows, if you are manually configuring parts of your kubernetes and this configuration does not interfere with it you can happily continue to work on several parts and use this tool only for what is needed.

    Features

    • distribution and engine independence. Install your favorite kubernetes engine with your package manager, execute one script and you'll have a complete working environment at your disposal.
    • Basic config approach. One single config.yml file with configuration requirements (add/remove features): human readable, plain and simple. All fancy configs managed automatically (ingress, balancers, services, proxy, ...).
    • Local Builtin ContainerHub. The default installation provides a fully configured ContainerHub available locally along with the kubernetes installation. This configuration allows the user to build, upload and deploy custom container images as they were provided from external sources. Internet public sources are still available but local development can be kept in this localhost server. Builtin ClusterOps operator will be fetched from this ContainerHub registry too.
    • Kubernetes official dashboard installed as a plugin, others planned too (k9s for example).
    • Kubevirt plugin installed and properly configured. Unleash the power of classic virtualization (KVM+QEMU) on top of Kubernetes and manage your entire system from there, libvirtd and virsh libs are required.
    • One operator to rule them all. The installation script configures your machine automatically during installation and adds one kubernetes operator to manage your local cluster. From there the operator takes care of the cluster on your behalf.
    • Clean installation and removal. Just test it, when you are done just use the same program to uninstall everything without leaving configs (or pods) behind.

    Planned features (Wishlist / TODOs)

    • Containerized Data Importer (CDI). Persistent storage management add-on for Kubernetes to provide a declarative way of building and importing Virtual Machine Disks on PVCs for


    Port the classic browser game HackTheNet to PHP 8 by dgedon

    Description

    The classic browser game HackTheNet from 2004 still runs on PHP 4/5 and MySQL 5 and needs a port to PHP 8 and e.g. MariaDB.

    Goals

    • Port the game to PHP 8 and MariaDB 11
    • Create a container where the game server can simply be started/stopped

    Resources

    • https://github.com/nodeg/hackthenet


    ADS-B receiver with MicroOS by epaolantonio

    I would like to put one of my spare Raspberry Pis to good use, and what better way to see what flies above my head at any time? add-emoji

    There are various ready-to-use distros already set-up to provide feeder data to platforms like Flightradar24, ADS-B Exchange, FlightAware etc... The goal here would be to do it using MicroOS as a base and containerized decoding of ADS-B data (via tools like dump1090) and web frontend (tar1090).

    Goals

    • Create a working receiver using MicroOS as a base, and containers based on Tumbleweed
    • Make it easy to install
    • Optimize for maximum laziness (i.e. it should take care of itself with minimum intervention)

    Resources

    • 1x Small Board Computer capable of running MicroOS
    • 1x RTL2832U DVB-T dongle
    • 1x MicroSD card
    • https://github.com/antirez/dump1090
    • https://github.com/flightaware/dump1090 (dump1090 fork by FlightAware)
    • https://github.com/wiedehopf/tar1090

    Project status (2024-11-22)

    So I'd say that I'm pretty satisfied with how it turned out. I've packaged readsb (as a replacement for dump1090), tar1090, tar1090-db and mlat-client (not used yet).

    Current status:

    • Able to set-up a working receiver using combustion+ignition (web app based on Fuel Ignition)
    • Able to feed to various feeds using the Beast protocol (Airplanes.live, ADSB.fi, ADSB.lol, ADSBExchange.com, Flyitalyadsb.com, Planespotters.net)
    • Able to feed to Flightradar24 (initial-setup available but NOT tested! I've only tested using a key I already had)
    • Local web interface (tar1090) to easily visualize the results
    • Cockpit pre-configured to ease maintenance

    What's missing:

    • MLAT (Multilateration) support. I've packaged mlat-client already, but I have to wire it up
    • FlightAware support

    Give it a go at https://g7.github.io/adsbreceiver/ !

    Project links


    Technical talks at universities by agamez

    Description

    This project aims to empower the next generation of tech professionals by offering hands-on workshops on containerization and Kubernetes, with a strong focus on open-source technologies. By providing practical experience with these cutting-edge tools and fostering a deep understanding of open-source principles, we aim to bridge the gap between academia and industry.

    For now, the scope is limited to Spanish universities, since we already have the contacts and have started some conversations.

    Goals

    • Technical Skill Development: equip students with the fundamental knowledge and skills to build, deploy, and manage containerized applications using open-source tools like Kubernetes.
    • Open-Source Mindset: foster a passion for open-source software, encouraging students to contribute to open-source projects and collaborate with the global developer community.
    • Career Readiness: prepare students for industry-relevant roles by exposing them to real-world use cases, best practices, and open-source in companies.

    Resources

    • Instructors: experienced open-source professionals with deep knowledge of containerization and Kubernetes.
    • SUSE Expertise: leverage SUSE's expertise in open-source technologies to provide insights into industry trends and best practices.