systeminit/si

[BUG-23] Support using podman instead of docker

dkliban opened this issue · 8 comments

Is this issue related to an issue?.

[dkliban@fedora ~]$ si --version
si 20230816.151117.0-sha.fae4e1c44

[dkliban@fedora ~]$ si start
Error: 
   0: failed to determine Docker socket location; candidates=["/home/dkliban/.docker/run/docker.sock", "/var/run/docker.sock"]

Location:
   bin/si/src/main.rs:47

Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.

Describe the outcome you'd like from us

Add support for running si using podman.

Describe alternatives you've considered

None. I don't want to install docker.

Code of Conduct

  • I agree to follow this project's Code of Conduct

Additional context

No response

BUG-23

Hi @dkliban! Thanks for filing this issue.

As a Fedora user myself, I agree that Podman would be great. We would like to add functionality at some point.

For those interested in taking a look, here is the primary library used for the si CLI. It will likely be best to use this library to talk to Podman since we use that author's Docker library.

Thanks for raising this issue!

I made a little progress with podman on Fedora by setting export SI_DOCKER_SOCK=/run/podman/podman.sock. si installs, but it still complains about having trouble connecting to Docker later on. There is an -e podman option that generates an error stating that podman support is "coming soon". Interestingly, it says that container updates were found and si update initially looks like it might do something. si install successfully downloads containers and looking at the source code, it's passing the docker object for that command, so it's probably close.

So @AnnaAtMax and I had a conversation about this issue today and wanted to put some context behind it for the community to ensure that we are all aligned. The YouTube video of the conversation is here https://www.youtube.com/watch?v=ObUEubhqFvI

The opportunity canvas for this is:

Screenshot 2023-08-22 at 02 10 30

Feel free to ask either of us for any further information

This conditional will need removed to make it work as well:

if let Engine::Podman = args.engine() {

Could an alternative be to provide a way to install si on Kubernetes? It is 1 more thing to manage but it also ads options because

  1. kind already supports podman or docker
  2. minikube supports running in VMs without a container runtime
  3. docker desktop and rancher desktop offer kubernetes options on Windows, Mac, or Linux
  4. k3s can be run (binary) with any CRI compatible container runtime

It seems like that could be more flexible than adding direct podman support

While the ability to deploy SI on Kubernetes would let me finally start using SI, there is additional value in being able to run SI on a laptop without Kubernetes. Should I open a separate issue for Kubernetes support?

Yeah I am going to suggest we keep this specific to podman and then we follow up with any other container engines in separate issues - that way we can focus on the specific outcome :)

Could an alternative be to provide a way to install si on Kubernetes? It is 1 more thing to manage but it also ads options because

1. `kind` already [supports podman](https://kind.sigs.k8s.io/docs/user/rootless/) or docker

2. minikube supports running in VMs without a container runtime

3. docker desktop and rancher desktop offer kubernetes options on Windows, Mac, or Linux

4. k3s can be run (binary) with any CRI compatible container runtime

It seems like that could be more flexible than adding direct podman support

I'm doing plenty with Rancher ecosystem these days and am definitely up for helping with getting this working on k3s. A helm chart and/or operator could also keep it relatively portable to support other k8s environments (kind, k0s, etc) from there. I'm happy to create a new issue for it to not hijack this issue any more 🙂.