91 lines
4.0 KiB
Markdown
91 lines
4.0 KiB
Markdown
|
---
|
||
|
title: "Hilde - The Idea"
|
||
|
date: "2021-06-26"
|
||
|
tags: [ 'rust', 'api', 'linux' ]
|
||
|
---
|
||
|
|
||
|
Welcome to the first devlog about Hilde, my latest passion project. This post
|
||
|
will be diving into what exactly Hilde is, and what I currently have planned
|
||
|
for the project.
|
||
|
|
||
|
## The idea
|
||
|
|
||
|
My idea behind Hilde is to create a smarter & more modern version of a Debian
|
||
|
repository. Currently, a repository simply consists of a file server (e.g.
|
||
|
Apache for the official repositories) that serves a strict directory structure.
|
||
|
Lots of the files & data stored in this system could however be perfectly
|
||
|
stored inside a database. Therefore, I'd like to take a different approach.
|
||
|
Instead of just using a file server, my plan is to "mimic" the official
|
||
|
structure of the file server, while serving as much content as possible from a
|
||
|
database. Control file data, file hashes, indexes, and many other types of
|
||
|
metadata could just be indexed and returned when requested.
|
||
|
|
||
|
I initially thought of this while brainstorming about which distro I should
|
||
|
switch to. I've been running Arch on my laptops for about a year now, but I've
|
||
|
come to distrust it (partially because I don't use it safely enough probably).
|
||
|
As I'm a CS student, I require a stable computer that I can rely on when
|
||
|
needed. Therefore, I'd like to switch to Debian. I would however like to keep
|
||
|
the luxury of the AUR or something similar, so my idea was to host my own Hilde
|
||
|
server that could serve this purpose.
|
||
|
|
||
|
## Roadmap
|
||
|
|
||
|
I have a broad idea of which features I would like to add to Hilde (if
|
||
|
possible):
|
||
|
|
||
|
### Mimic a Debian repository
|
||
|
|
||
|
The first part is pretty self-explanatory. Before I can do anything else, I
|
||
|
need to make sure the idea is possible, so I'll have to make a proof of concept
|
||
|
that works. My end goal is to have Hilde be the most compliant server possible,
|
||
|
by which I mean that it supports every feature that a Debian repository could
|
||
|
support. This includes:
|
||
|
|
||
|
* Arbitrarily nested dists & components
|
||
|
* Support for multiple architectures
|
||
|
* Support for `by-hash` directories
|
||
|
* ...
|
||
|
|
||
|
A full description of the Debian repository format can be found
|
||
|
[here](https://wiki.debian.org/DebianRepository/Format). Not all features are
|
||
|
required for the initial release, but eventually I would like to comply with
|
||
|
the entire document. The initial release will also contain a folder scanner, so
|
||
|
that existing packages can be added on startup.
|
||
|
|
||
|
### Allowing for package uploads
|
||
|
|
||
|
The second part of my "AUR" idea requires me to be able to add new packages to
|
||
|
the server (e.g. from a CI pipeline). Therefore, I want to be able to send HTTP
|
||
|
requests to the server to upload new binary or source packages. I don't have a
|
||
|
full grasp yet on how I plan to achieve this (e.g. what endpoints etc.) but the
|
||
|
basic idea is to be able to upload deb files to the server and it automatically
|
||
|
parsing them.
|
||
|
|
||
|
### Authentification
|
||
|
|
||
|
We can't just open up a server that allows uploads to the public, so I'll have
|
||
|
to add a form of authentification. I'm still debating on exactly how I plan on
|
||
|
doing this, but the basic idea is to use JWT tokens & a login endpoint that can
|
||
|
generate said tokens. Initially, I'll probably just use a single admin account,
|
||
|
but I have ideas for adding a user system that can generate tokens for specific
|
||
|
actions on specific packages (e.g. a token that allows for writing to a
|
||
|
particular package).
|
||
|
|
||
|
### Federation
|
||
|
|
||
|
This one is one of my more ambitious ideas, but it sounds really interesting to
|
||
|
work on. I have this idea of a network of Hilde servers communicating with each
|
||
|
other about which packages they have. When a user then requests a certain
|
||
|
package, the server can forward the package from another server.
|
||
|
|
||
|
I know this idea might be quite impossible for me, and it's still far down the
|
||
|
road, but it just sounded way too cool to not include it in this introduction
|
||
|
devlog.
|
||
|
|
||
|
## Conclusion
|
||
|
|
||
|
In my eyes, Hilde looks like a very interesting & fun project to work on, and I
|
||
|
hope to be posting a lot more of these devlogs as development progresses!
|
||
|
Speaking of development, the Git repo can be found
|
||
|
[here](https://git.roosens.me/Chewing_Bever/hilde). See you next time!
|