So, good morning everyone. This is talk about Geeksforge. So, first let me explain what
Geeksforge is about. So, Geeksforge is a Geeks channel that has services that will allow
you to run a complete GitHub like software forge, but fully on free software and using
existing free software components like Seagate and Git, of course, the laminar continuous
integration system, something like public inbox and so on. So, usually when we try to
build GitHub alternatives, we have monolithic systems like GitLab or GitE, Gox and so on.
What Geeksforge tries to do different is use old and existing very stable components like
Seagate and assemble it all together into a system that resembles a software forge. And
it is assembled together using Geeks. So, you have a nice declarative configuration that
you can just deploy practically anywhere. So, in a sense, it's like million a box if
you have heard of the project, million a box, they set up complete mail server on a
system using by integrating many different components. It's like that, but for software
forges and using Geeks. So, first I'll start with a quick demo of the Geeks system containers.
This is quite widely used as a package manager, but as a means to deploy Geeks, a full operating
system and operating system containers, it's not so widely used. So, I just want to quickly
show you a demo of how it works. So, this is a really simple operating system configuration.
It just has an engine service that listens on 8080 and serves static directory. So, let
me build that. So, the static directory has a simple HTML file that I just wrote up. So,
first let's build the container. You build it using Geeks system container. And the hyphen
capital N is to enable network access. And the container is completely stateless, something
like Docker where you have attached storage somehow. So, you have to mount all storage,
all state into the container. And that's why we have the expose here. So, you have this
script that has been returned. So, if you open it, it's really just a guy's script that
sets up the container and has all the dependencies built into the store itself. So, let me now
run it. So, pseudo... Yeah. It says that my Geeks is two worlds, older than 30 days. So, I have started
up the container. Let's just go to localhost 8080. And it works. So, this is just the static
HTML page. Now, let's try to set up a container that actually uses the Geeks 4 channel. So, this
is a more complicated configuration, operating system configuration. Here, I want to show you
the Seagate service that Geeks 4 provides. So, it's really simple and it just takes a server name,
which is the domain name. And then the repository directory where all the gate repositories are
stored. And then you have something called a Forge engine X service, which is similar to the
basic engine X service that you have in Geeks upstream. But it automatically handles things
like HTTPS, acquiring a TLS certificate, setting up a crown job to periodically renew the certificate,
automatic redirection from HTTP to HTTPS and so on. So, it does a lot of things in a very
turnkey, fully automated way. You just push the button and you get it essentially. And this is
the Acme service configuration. So, Acme is the protocol behind the Let's Encrypt. You have to
register an email ID of that. So, that's my email ID. So, in this configuration, I'm currently
using the staging URL. It's good for testing because you won't run into any rate limits.
So, I'll actually take the risk and delete that. We'll try to build with a real Acme server. So,
here again, I'll build a container and run it. I'm mounting a couple of state directories,
Acme directory and the GitR Poster directory. So, there it is. It started. So, I'll go to
git.demo.system.rego.net. So, initially, the container set up with a self-signed certificate.
So, it doesn't work. So, let's actually get real certificates. So, find the shepherd.
So, the PID of the container is 19.262. I drop into a shell. Get some source and profile. So,
GitX4 sets up a script under user bin. Acme is any... Yeah, I'm inside the container. Yeah. So,
around the script. And the script has been automatically configured with all the domain
names that need certificates. And now it is actually getting certificates from Let's Encrypt. If you
can see the logs, it's telling you what it's doing. Yeah, that it has a certificate and it has
restarted the Nginx service as well. Now, if I reload this, it should work with proper certificates.
Let's try. Yeah, there you go. So, this is Git. And you can browse some repositories that I put in
there. So, Git is really simple, but it doesn't come with all features properly enabled by default.
And you have to do a lot of manual tinkering to get it to work. For example, by default,
it only serves the dumb HTTP transport protocol for Git. So, but the C Git Nginx 4G is set up
with the smart HTTP protocol. That's one. And then you have things like... So, this C Git can render
org mode readme files, which the basics it can't do. So, this is actually an org mode readme file
in this repo. Then you have things like syntax highlighting that is automatically set up again.
So, let's just look at the make file maybe. Yeah, so, yeah, you see the syntax highlighting.
So, for that it uses Python pigments. So, my point is that Gitx 4G tries to do all this for you and
doesn't expose all this complexity to the administrator. And all you're really saying here in this
configuration is domain name and the directory where the repositories are. So, it handles a lot of
things with very sensible defaults behind your back. So, that's that. Yeah. How much time do I have?
Okay. Okay. So, the philosophy behind Gitx 4G is that it has to be really minimalistic.
I don't want to be running a full database server just to publish a few GitHub postries and run a
small project. And it should be as stateless as possible. Of course, you need a little bit of
state for if you need a mailing list or if you need to backup your Git reports, of course.
But it should not have hard to backup state like a database that you have to be
that takes a lot of cognitive overhead to keep working successfully.
As to, should be as donkey as possible, but it should still be able to inspect it and fit it
in your head. It should not be something that is so complex that you cannot hold it in your head.
And effectively, what the, what Geeks 4 and the, the Geeks 4 channel is doing is that it's,
it's crowdsourcing server management in some sense. So, the regular server which you are always,
which have, for which you have to mutate configuration files, you are the only one
who's in charge of the server. But when you have Geeks 4 doing a lot of things for you,
you're essentially getting a community to help you with managing your server.
And so hopefully that will reduce configuration errors and let you run a polished server setup
without putting in too much work. So that's it. Thank you.
Nobody complains when the speaker is too quick, right?
Is this a replacement from GitHub? Yeah, it's meant to be.
What about the fast pushing process and we having these things?
Can we support them with this Geeks 4? Do you mean the email workflow?
Yeah. Yeah, so I don't mean to support public inbox based mailing list.
Instead of pull request based model. I think that's easy to set up using existing tools and
personally I think it's better than the pull request based model.
Questions?
Yeah.
So I think you mentioned it's in a separate channel.
Yeah.
And are you planning to upstream it and what would be needed for that?
So, can we repeat the question?
Yes. Yes. Yes. Sorry.
So I'm planning to upstream it into Geeks upstream instead of having a separate channel.
So certainly there are some parts that can be upstream.
For example, the automatic HTTPS that I demo it can certainly it should be upstreamed.
But the all the other services I'm not really sure.
So I'm not sure how much of this fits into Geeks upstream itself.
We already have a Seagate service in Geeks upstream that doesn't do as much as the Seagate
service in Geeks 4. So upstreaming this will essentially break the old service.
Maybe it should be called something else now.
So that's a difficult conversation to have.
Could you have a Meta service?
Sorry?
Do you have a service with all your special services?
I do have a 4 service. It's not fully integrated but it aims to be a full Meta service.
Yeah.
Can you show Laminar?
Oh yes. I can show it in the browser.
So this is Laminar which is a continuous integration system.
So this is a system that we are already running.
It's not running on this laptop. It's running on a different server.
And it's a really simple continuous integration system that is very easy to set up.
Like most continuous integration systems are so complex that they read the very
enterpracy projects that are not meant for a single person to set up.
But Laminar is really easy and you should have a look at the documentation itself.
It's just a single page of documentation and you can set it up.
So we use that in Geeks 4.
And it fits in with the philosophy of using very minimal tools.
We also have class in Geeks 4.
Class is another Git reviewer which is written in Python.
So you have even a choice for...
If you don't like CGIT you can use class and maybe you can support Git delay and other Git viewers too.
Sure.
So these are the Git logs. Maybe... Yeah, make file again.
So class is just a Git reviewer. It doesn't do anything else.
Yeah, it supports the Smart HTTP protocol.
Yeah.
So you mentioned that the TLS stuff is automated as well.
But with the demo there was something that seemed kind of manual?
Oh yeah. So the manual step that I showed you is only the first time.
And after that that same script is ran as a cron job.
I need to get rid of the first manual step but I think I need to patch something in Geeks upstream for it to happen.
So yeah.
Question.
Would it be easy to use this process to set up your own channel and then auto build your packages and then deliver that as a substitute?
Yeah.
Get them to end the flow?
Yeah. So we already do that in my Geeks 4 instance.
And we also have the...
So that is the Geeks bioinformatics channel which Pewter runs.
And we already do that for all the packages in Geeks bioinformatics.
For example, here you see names of many packages.
Some of them build, some of them fail.
And I think it's...
Using laminar and Geeks 4 is simpler than something as complicated as...
As Geeks is quicker as CIS.
And I really don't want to be running Postgres to have...
To just provide substitutes for my channel.
So we have a replacement here for many things, right?
Yeah.
Including GitHub CI.
We don't use GitHub CI anymore.
Yeah, we don't use GitHub CI anymore.
Alright.
Thank you.