Hi Rutherther, thank you for your reply. On 5/10/25 13:52, Rutherther wrote: > Naranden <naran...@mailbox.org> writes: >> If not, is there a way to deploy a real operating system (for example >> with guix system vm) that runs a defined container as a service? > > Definitely, see the virtual-build-machine-service-type and > hurd-vm-service-type, you basically need to make a new system service > that will make a shepherd service and the command to start is to use > linux-image-startup-command with appropriate image, where you give it > the operating-system definition you want.
It looks like these are for running virtual machines, but I need something lightweight like containers. > I think similar thing should be achievable with containers, with > container-script procedure. But I don't think there are examples for > that in Guix. Okay, I looked at container-script; I need something like that, but it just builds a script rather than configuring a service managed by Shepherd. > Depending on why you want this I should have given more information to begin with... see below. > also note that there is least authority wrapper for security. Okay, thanks, I'll look at that. Here are some more details. I am experimenting with using guix to provide a multi-container (or similar) reproducible environment from local development (with something like guix system vm or container) to deployment (with guix deploy). I am wondering about writing various container operating-system definitions, adding those as services to a host operating-system definition, and then using guix deploy to deploy the host operating-system. ``` ;; A container that runs a database service (define db-container-os (operating-system (host-name "db-container") (services (cons* (service postgresql-service-type) %base-services)))) ;; A container than runs a worker service (define worker-container-os (operating-system (host-name "worker-container") (services (cons* (service worker-service-type) %base-services)))) ;; An operating-system definition for deployment that runs the ;; above defined containers with Shepherd--this can be started ;; as a local vm (guix system vm) for development. (define host-os (operating-system (host-name "deployed-host") (services (cons* (service container-service-type (os db-container-os)) (service container-service-type (os worker-container-os)))))) ;; This can be used to deploy to a server (guix deploy). (define all-machines (list (machine (operating-system host-os)))) ``` For local development, run `guix system vm {host-os}` and run a single VM with all services running on it. For deployment, run `guix deploy {all-machines}` and it would deploy a server with the specified containers. (In reality the containers might be distributed across multiple hosts.) At this example/overview level the result is similar to simply defining services, but the containers allow for much greater control over the service environment as well as better isolation. I hope that makes it more clear what prompted the question. Most of the discussion/examples I've found use Guix to build/pack something that then gets deployed on some other host system, whether a foreign Linux or container system, etc. Surely someone has tried to set up a deployment system that uses guix deploy like this... but I just haven't found it? Or maybe guix deploy is too new...? Thanks, Naranden