A protocol native SPICE VDI proxy
Project description
Kerbside, a SPICE VDI proxy
Kerbside is a SPICE VDI protocol proxy written in python. The long term idea is that this would sit out the front of your Shaken Fist cluster and provide VDI access to VMs running inside the cluster. It does this by determining what VM to proxy your traffic to based on the password you provide when connecting.
Kerbside currently knows how to proxy console sessions for Shaken Fist, OpenStack, and oVirt. Ironically, OpenStack is probably the best documented of those at the moment because there are patches to add deployment support for Kerbside to Kolla-Ansible, whereas there is no deployment support for Shaken Fist just yet.
Documentation
- ARCHITECTURE.md - High-level system architecture
- AGENTS.md - AI agent guidelines for working on this codebase
- docs/ - Full documentation:
- Documentation Index - Full documentation index with overview and introduction
- Operator documentation:
- Configuration - Configuration reference
- Console Sources - Configuring sources.yaml
- Protocol documentation:
- Protocol Overview - SPICE protocol fundamentals
- Link Protocol - Connection handshake and authentication
- Channel Protocols - Per-channel message formats (main, display, inputs, cursor, audio, smartcard)
- Keyboard Scancodes - IBM PC XT scancode reference for the inputs channel
- Compression Protocols - LZ and GLZ image compression formats
- Capabilities - Channel capability negotiation
- USB Redirection - USB device redirection protocol
- VD Agent Protocol - Guest agent for clipboard, file transfer, and display configuration
- Proxy Architecture - Internal proxy design
Bootstrap CSS
Kerbside uses bootstrap CSS for styling. This was constructed by downloading
Bootstrap 5.3 and jQuery 3.7.0 and then installing to kerbside/api/static/js.
Axios
Kerbside's web administration API uses Axios for HTTP requests. Version 1.6.5
is cached at kerbside/api/static/js.
Ryll
Ryll, located in the testclient/ directory, is a simple python native SPICE
client used to implement various load tests. It has its own README file in that
subdirectory.
Build the load testing OCI container images
There are a series of OCI container images intended for load testing. These need
to be build from this top level directory however because of the way
docker build likes to constrain what files you can copy into a container image.
Latency load test
This is the first load test that was implemented. It uses a UEFI binary as a test target, and sends keystrokes every two seconds to the instance running that binary. It then measures how long it takes to receive a display update back.
To build this OCI image, do this:
docker build . -f loadtests/latency/Dockerfile -t kerbside-latency:latest
For your convenience, there is also a version of this image at https://images.shakenfist.com/testimages/kerbside-latency.tar.gz
Database Migrations
Kerbside uses Alembic for database schema migrations. The migration files are
located in the alembic/versions/ directory.
Creating a New Migration
To create a new migration:
cd /path/to/shakenfist/kerbside
alembic revision -m "description_of_your_changes"
This will create a new migration file in alembic/versions/. Edit the generated
file to add your schema changes in the upgrade() and downgrade() functions.
Example:
def upgrade() -> None:
op.add_column('table_name', sa.Column('column_name', sa.Type()))
def downgrade() -> None:
op.drop_column('table_name', 'column_name')
Applying Migrations
To apply all pending migrations:
alembic upgrade head
To rollback one migration:
alembic downgrade -1
Note: Alembic automatically uses the database URL from the kerbside configuration, so ensure your kerbside config is properly set up before running migrations.
Checking OS Package Dependencies
Kerbside requires certain OS-level packages to be installed. You can check for missing dependencies using bindep via tox.
Check for Missing OS Packages
To check which OS packages are required but not installed:
tox -e bindep
This will read the bindep.txt file and report any missing system packages
that need to be installed for your platform. The bindep tool automatically
detects your operating system and checks for platform-specific packages.
Installing Missing Packages
After running the bindep check, install any missing packages using your system's package manager:
Debian/Ubuntu:
sudo apt-get install <package-names>
RHEL/CentOS/Fedora:
sudo dnf install <package-names>
The bindep.txt file includes dependencies for MariaDB/MySQL client libraries,
XML parsing libraries, and build tools needed for compiling Python extensions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kerbside-0.2.5.tar.gz.
File metadata
- Download URL: kerbside-0.2.5.tar.gz
- Upload date:
- Size: 1.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
766dd3a90bfd0ae3ca8dd51b329d2d31eda5be20f800229ff4bebdc6be715634
|
|
| MD5 |
f8d96af130cfcf4641646e2ef7d4a239
|
|
| BLAKE2b-256 |
da1107fee7021a34cae7bca9b8e7ff2e72c5e58ebb89fef12db8645fb2d982fd
|
Provenance
The following attestation bundles were made for kerbside-0.2.5.tar.gz:
Publisher:
release.yml on shakenfist/kerbside
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kerbside-0.2.5.tar.gz -
Subject digest:
766dd3a90bfd0ae3ca8dd51b329d2d31eda5be20f800229ff4bebdc6be715634 - Sigstore transparency entry: 899895807
- Sigstore integration time:
-
Permalink:
shakenfist/kerbside@2fc7d6536cd079154f6569cc0302ec0971a2260e -
Branch / Tag:
refs/tags/v0.2.5 - Owner: https://github.com/shakenfist
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
self-hosted -
Publication workflow:
release.yml@2fc7d6536cd079154f6569cc0302ec0971a2260e -
Trigger Event:
push
-
Statement type:
File details
Details for the file kerbside-0.2.5-py3-none-any.whl.
File metadata
- Download URL: kerbside-0.2.5-py3-none-any.whl
- Upload date:
- Size: 1.7 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d21ae0ad6813cbb828310e8216ed4345be2c95df02b9c5cf779dbf638bef023a
|
|
| MD5 |
b954b0bf9401c9e06c66a332a7c9b072
|
|
| BLAKE2b-256 |
86b4979851e80d48f21c705027f7f6ef38c123a8aeb7d00720533812353257e0
|
Provenance
The following attestation bundles were made for kerbside-0.2.5-py3-none-any.whl:
Publisher:
release.yml on shakenfist/kerbside
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kerbside-0.2.5-py3-none-any.whl -
Subject digest:
d21ae0ad6813cbb828310e8216ed4345be2c95df02b9c5cf779dbf638bef023a - Sigstore transparency entry: 899895874
- Sigstore integration time:
-
Permalink:
shakenfist/kerbside@2fc7d6536cd079154f6569cc0302ec0971a2260e -
Branch / Tag:
refs/tags/v0.2.5 - Owner: https://github.com/shakenfist
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
self-hosted -
Publication workflow:
release.yml@2fc7d6536cd079154f6569cc0302ec0971a2260e -
Trigger Event:
push
-
Statement type: