Twopence is (will be) a remote execution engine for tests, able to run tests in virtual machines and real hardware through various means of communication : virtio for KVM / QEmu, ssh on top of libssh, serial lines. This library can be called from shell and ruby wrappers.

While it is already functional (and used), it still needs polishing, stabilizing, and extending. It is also planned to integrate it with Pennyworth (project Machinery) and let it go fully Open Source.

All crazy ideas and good will are welcome. It could be Python wrappers, support for multiple simultaneous tests, support for Linux containers, tests through a firewire cable, or whatever crosses your mind.

What was achieved

  • - GitHub: The project moved to GitHub and is willing to play the rules of OpenSource;
  • - Ctrl-C and other aborts: now it is possible to interrupt a remote execution with Ctrl-C, both from shell and from Ruby interface;
  • - Pennyworth integration: now Pennyworth (project Machinery) calls Twopence to execute remote commands, inject or extract files.

What was not achieved

  • - Bug: running the Twopence server for virtio or serial lines with output redirected to a file results in the whole output being repeated with each new message (probably some buffer not flushed).
  • - Better packaging: we would need at very least separate packages for client and server parts;
  • - Run over firewire: this item is a bit crazy - the idea is to use firewire to run tests and transfer files without using the network stack, by using either raw libraries or raw devices. I bought the necessary hardware but had no time to play with it :-( ;
  • - Multiplexing: enable simultaneous and independent tests running on the same machine;
  • - Ruby documentation: the Ruby API is currently undocumented.

What could be done better

  • - Ctrl-C and other aborts: enable aborting a file transfer, not only remote execution of commands;
  • - Pennyworth integration: transferring recursively a whole directory's contents is still done with Cheetah.

Looking for hackers with the skills:

c packaging ruby

This project is part of:

Hack Week 11

Activity

  • over 6 years ago: pdostal liked this project.
  • about 11 years ago: sfent joined this project.
  • about 11 years ago: mvidner liked this project.
  • about 11 years ago: osynge liked this project.
  • about 11 years ago: bergmannf liked this project.
  • about 11 years ago: RBrownSUSE liked this project.
  • about 11 years ago: oholecek liked this project.
  • about 11 years ago: ancorgs liked this project.
  • about 11 years ago: e_bischoff added keyword "c" to this project.
  • about 11 years ago: e_bischoff added keyword "packaging" to this project.
  • about 11 years ago: e_bischoff added keyword "ruby" to this project.
  • about 11 years ago: e_bischoff started this project.
  • about 11 years ago: e_bischoff originated this project.

  • Comments

    • ancorgs
      about 11 years ago by ancorgs | Reply

      Sounds really interesting. Any repository or documentation to have a look?

    • e_bischoff
      about 11 years ago by e_bischoff | Reply

      Currently only on https://build.suse.de/package/show/home:ebischoff/twopence (sources available). I was planning to move them to GitHub right for the hackweek.

    • jreidinger
      about 11 years ago by jreidinger | Reply

      I think it make good sense to also support VNC as a way how to communicate with machine as it immediatelly increase range where it is useful. BTW some comparison to openQA if it is orthogonal or if it can benefit from some synerge would be nice.

    • e_bischoff
      about 11 years ago by e_bischoff | Reply

      Twopence is used to execute remote commands and transfer files just like you would do with scp or ssh (but works even with no network, unlike ssh). It is not a remote display system like VNC. It works only with a running system, unlike OpenQA, because it either needs a SSH server or a Twopence server on the System Under Tests, so it cannot test the early stages of boot. In short, there is not much duplication of functionality - at least with those two pieces of software.

    • e_bischoff
      over 9 years ago by e_bischoff | Reply

      I'll mark this project as finished. Not everything has been done, but it is now stable and regularly used software.

    Similar Projects

    Port OTPClient to GTK >= 4.18 by pstivanin

    Project Description

    OTPClient is currently using GTK3 and cannot easily be ported to GTK4. Since GTK4 came out, there have been quite some big changes. Also, there are now some new deprecation that will take effect with GTK5 (and are active starting from 4.10 as warnings), so I need to think ahead and port OTPClient without using any of those deprecated features.

    Goal for this Hackweek

    • fix the last 3 opened issues (https://github.com/paolostivanin/OTPClient/issues/402, https://github.com/paolostivanin/OTPClient/issues/404, https://github.com/paolostivanin/OTPClient/issues/406) and release a new version
    • continue the rewrite from where we left last year
    • if possible, finally close this 6 years old issue: https://github.com/paolostivanin/OTPClient/issues/123


    pudc - A PID 1 process that barks to the internet by mssola

    Description

    As a fun exercise in order to dig deeper into the Linux kernel, its interfaces, the RISC-V architecture, and all the dragons in between; I'm building a blog site cooked like this:

    • The backend is written in a mixture of C and RISC-V assembly.
    • The backend is actually PID1 (for real, not within a container).
    • We poll and parse incoming HTTP requests ourselves.
    • The frontend is a mere HTML page with htmx.

    The project is meant to be Linux-specific, so I'm going to use io_uring, pidfs, namespaces, and Linux-specific features in order to drive all of this.

    I'm open for suggestions and so on, but this is meant to be a solo project, as this is more of a learning exercise for me than anything else.

    Goals

    • Have a better understanding of different Linux features from user space down to the kernel internals.
    • Most importantly: have fun.

    Resources


    GHC-9.14 and split Hadrian from GHC build by osukup

    Description

    Prepare openSUSE Tumbleweed project for new GHC Haskell compiler and separate builder (Hadrian) from GHC build

    Goals

    • have GHC-9.14 project with working compiler and if possible filled with packageset
    • have Hadrian in own package built with bootstrap compiler to separate Hadrian bootstrap from ghc bootstrap

    Resources

    devel:languages:haskell

    d:l:h:ghc-9.12.x

    opensuse Haskell rpm macros

    opensuse haskell package gen project


    openSUSE on ZoL from OpenZFS project by jkohoutek

    Idea is to have SUSE system with OpenZFS as root FS.

    Why ZFS

    Ways in which ZFS is better than BTRFS

    Main goal

    Have OpenZFS as install option in the installer and utilize zedenv Boot Environment Manager for SUSE updates install

    Goals

    • synergy of ZFS with dracut, so snapshots are correctly added to the grub
    • synergy of zedenv with zypper
      • before every update snapshot is created
      • when new kernel or other package which requires reboot is about to be installed, the update will be processed to the new boot environment snapshot and grub configuration changed to boot to this new one
    • integrate Root on ZFS as install option to the YaST
    • configure Kiwi for the ZFS install images

    Completed goals

    • prepare ZFS pool compatible with openSUSE installation ✓
    • install openSUSE with root on ZFS ✓
    • boot to the prepared and installed system ✓

    Current progress

    Resources:


    RMT.rs: High-Performance Registration Path for RMT using Rust by gbasso

    Description

    The SUSE Repository Mirroring Tool (RMT) is a critical component for managing software updates and subscriptions, especially for our Public Cloud Team (PCT). In a cloud environment, hundreds or even thousands of new SUSE instances (VPS/EC2) can be provisioned simultaneously. Each new instance attempts to register against an RMT server, creating a "thundering herd" scenario.

    We have observed that the current RMT server, written in Ruby, faces performance issues under this high-concurrency registration load. This can lead to request overhead, slow registration times, and outright registration failures, delaying the readiness of new cloud instances.

    This Hackweek project aims to explore a solution by re-implementing the performance-critical registration path in Rust. The goal is to leverage Rust's high performance, memory safety, and first-class concurrency handling to create an alternative registration endpoint that is fast, reliable, and can gracefully manage massive, simultaneous request spikes.

    The new Rust module will be integrated into the existing RMT Ruby application, allowing us to directly compare the performance of both implementations.

    Goals

    The primary objective is to build and benchmark a high-performance Rust-based alternative for the RMT server registration endpoint.

    Key goals for the week:

    1. Analyze & Identify: Dive into the SUSE/rmt Ruby codebase to identify and map out the exact critical path for server registration (e.g., controllers, services, database interactions).
    2. Develop in Rust: Implement a functionally equivalent version of this registration logic in Rust.
    3. Integrate: Explore and implement a method for Ruby/Rust integration to "hot-wire" the new Rust module into the RMT application. This may involve using FFI, or libraries like rb-sys or magnus.
    4. Benchmark: Create a benchmarking script (e.g., using k6, ab, or a custom tool) that simulates the high-concurrency registration load from thousands of clients.
    5. Compare & Present: Conduct a comparative performance analysis (requests per second, latency, success/error rates, CPU/memory usage) between the original Ruby path and the new Rust path. The deliverable will be this data and a summary of the findings.

    Resources

    • RMT Source Code (Ruby):
      • https://github.com/SUSE/rmt
    • RMT Documentation:
      • https://documentation.suse.com/sles/15-SP7/html/SLES-all/book-rmt.html
    • Tooling & Stacks:
      • RMT/Ruby development environment (for running the base RMT)
      • Rust development environment (rustup, cargo)
    • Potential Integration Libraries:
      • rb-sys: https://github.com/oxidize-rb/rb-sys
      • Magnus: https://github.com/matsadler/magnus
    • Benchmarking Tools:
      • k6 (https://k6.io/)
      • ab (ApacheBench)


    Recipes catalog and calculator in Rails 8 by gfilippetti

    My wife needs a website to catalog and sell the products of her upcoming bakery, and I need to learn and practice modern Rails. So I'm using this Hack Week to build a modern store using the latest Ruby on Rails best practices, ideally up to the deployment.

    TO DO

    • Index page
    • Product page
    • Admin area -- Supplies calculator based on orders -- Orders notification
    • Authentication
    • Payment
    • Deployment

    Day 1

    As my Rails knowledge was pretty outdated and I had 0 experience with Turbo (wich I want to use in the app), I started following a turbo-rails course. I completed 5 of 11 chapters.

    Day 2

    Continued the course until chapter 8 and added live updates & an empty state to the app. I should finish the course on day 3 and start my own project with the knowledge from it.

    Hackweek 24

    For this Hackweek I'll continue this project, focusing on a Catalog/Calculator for my wife's recipes so she can use for her Café.

    Day 1