# Running complete guix system inside an Incus container

**URL:** <https://forum.systemcrafters.net/t/running-complete-guix-system-inside-an-incus-container/1783>\
**Category:** Guix\
**Created:** [September 6, 2025, 8:30pm UTC](https://forum.systemcrafters.net/t/running-complete-guix-system-inside-an-incus-container/1783 "2025-09-06T20:30:45Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![nbguixuser0](https://avatars.discourse-cdn.com/v4/letter/n/4da419/32.png) [@nbguixuser0](https://forum.systemcrafters.net/u/nbguixuser0)\
**Post date:** [September 6, 2025, 8:30pm UTC](https://forum.systemcrafters.net/t/running-complete-guix-system-inside-an-incus-container/1783/1 "2025-09-06T20:30:45Z")

</div>

Hi,

I followed steps described at [Guix in a Linux Container - Thedro Neely](https://www.thedroneely.com/posts/guix-in-a-linux-container/) . However, when I tried to start sshd, I got error message from shepherd saying that ssh-daemon depends on loopback, and loopback service cannot be started. It’s odds to me that the lo interface is setup properly inside the container and I can ping internet without problems.

Here’s the output of `ip addr show` in this container:

 ![image](https://canada1.discourse-cdn.com/flex029/uploads/systemcrafters/original/2X/5/567785dc0887855364924582b9e76dfa23b465b4.png)

and here’s the output of `herd status loopback`:

 ![image](https://canada1.discourse-cdn.com/flex029/uploads/systemcrafters/original/2X/c/c718afd0494c88d3abe270f2acea21a809e3191f.png)

These two screeshots tell me two things:

1. The `lo` interface has been setup already
2. The `loopback` service seems trying to setup `lo` but it just keeps waiting for something I have no idea about.

What workaround can be used in this case?

Thank you!

---

<div class="post-metadata">

**Author:** ![nbguixuser0](https://avatars.discourse-cdn.com/v4/letter/n/4da419/32.png) [@nbguixuser0](https://forum.systemcrafters.net/u/nbguixuser0)\
**Post date:** [September 7, 2025, 2:27pm UTC](https://forum.systemcrafters.net/t/running-complete-guix-system-inside-an-incus-container/1783/2 "2025-09-07T14:27:38Z")

</div>

The root filesystem is generated via

```auto
guix system init --no-bootloader --no-kexec config.scm ics-guix-3-rf/

```

Here’s the container’s `config.scm`:

```scheme
(use-modules (gnu) (gnu system locale))
(use-service-modules networking ssh)
(use-package-modules ssh bash package-management linux vim emacs)

(operating-system
 (host-name "ics-guix-3")
 (timezone "America/Chicago")
 (locale "en_US.utf8")
 (firmware `())
 (initrd-modules `())
 (kernel hello)
 (packages (list guix coreutils iproute procps neovim emacs))

 (essential-services (modify-services
                      (operating-system-default-essential-services this-operating-system)
                      (delete firmware-service-type)
                      (delete (service-kind %linux-bare-metal-service))))

 (locale-definitions (list (locale-definition
                            (name "en_US.utf8")
                            (source "en_US")
                            (charset "UTF-8"))))

 (bootloader (bootloader-configuration
              (bootloader grub-bootloader)
              (targets '("/dev/null"))))

 (file-systems (list (file-system
                      (device "/dev/null")
                      (mount-point "/")
                      (type "dummy"))))

 (users (cons (user-account (name "lkg")
			    (comment "Liau, Kiong-Ge")
			    (group "users")
			    (supplementary-groups '("wheel" "audio" "video")))
	      %base-user-accounts))

 (services (list (service static-networking-service-type
                          (list %loopback-static-networking))
                 (service dhcpcd-service-type)
                 (service syslog-service-type)
                 (service guix-service-type)
                                  (service special-files-service-type
                          `(("/bin/sh" ,(file-append bash "/bin/sh"))
                            ("/usr/bin/env" ,(file-append coreutils "/bin/env"))))
                 (service udev-service-type
                          (udev-configuration
                           (rules '())))
                 (service openssh-service-type
                          (openssh-configuration
                           (openssh openssh-sans-x))))))

```

---

<div class="post-metadata">

**Author:** ![nbguixuser0](https://avatars.discourse-cdn.com/v4/letter/n/4da419/32.png) [@nbguixuser0](https://forum.systemcrafters.net/u/nbguixuser0)\
**Post date:** [September 21, 2025, 8:58pm UTC](https://forum.systemcrafters.net/t/running-complete-guix-system-inside-an-incus-container/1783/3 "2025-09-21T20:58:10Z")

</div>

I just realized that I need a dummy service provide provision of `loopback` service:

```scheme
(use-modules (gnu) 
	     (gnu system locale)
	     (gnu services)
	     (gnu services shepherd))
(use-service-modules networking ssh shepherd)
(use-package-modules ssh bash package-management linux vim emacs guile)

(define (dummy-loopback-service config)
  (list 
  (shepherd-service 
	  (documentation "Dummy lookback service for incus container")
          (provision '(loopback))
	  (requirement '())
	  (one-shot? #t)
	  (start #~(make-forkexec-constructor '("true")))
	  (stop #~(make-kill-destructor)))))

(define-public dummy-loopback-service-type 
  (service-type 
    (name 'dummy-loopback) 
    (description "dummy loopback service type")
    (extensions (list (service-extension 
		       shepherd-root-service-type 
		       dummy-loopback-service)))
    (default-value #f)))

(operating-system
 (host-name "ics-guix-3")
 (timezone "America/Chicago")
 (locale "en_US.utf8")
 (firmware `())
 (initrd-modules `())
 (kernel hello)
 (packages (list guix coreutils iproute procps neovim emacs (specification->package "guile@3.0.9")))

 (essential-services (modify-services
                      (operating-system-default-essential-services this-operating-system)
                      (delete firmware-service-type)
                      (delete (service-kind %linux-bare-metal-service))))

 (locale-definitions (list (locale-definition
                            (name "en_US.utf8")
                            (source "en_US")
                            (charset "UTF-8"))))

 (bootloader (bootloader-configuration
              (bootloader grub-bootloader)
              (targets '("/dev/null"))))

 (file-systems (list (file-system
                      (device "/dev/null")
                      (mount-point "/")
                      (type "dummy"))))

 (users (cons (user-account (name "lkg")
			    (comment "Liau, Kiong-Ge")
			    (group "users")
			    (supplementary-groups '("wheel" "audio" "video")))
	      %base-user-accounts))
 

 (services (list 
                 (service dummy-loopback-service-type)
		 (service dhcpcd-service-type)
                 (service syslog-service-type)
                 (service guix-service-type)
                                  (service special-files-service-type
                          `(("/bin/sh" ,(file-append bash "/bin/sh"))
                            ("/usr/bin/env" ,(file-append coreutils "/bin/env"))))
                 (service udev-service-type
                          (udev-configuration
                           (rules '())))
                 (service openssh-service-type
                          (openssh-configuration
                           (openssh openssh-sans-x)))
		 )))

```

The last blocker for guix system incus instance is the `$GUIX_NEW_SYSTEM ` hack, which requires manual works to update the environment variable and which boot script to run:

![image](https://canada1.discourse-cdn.com/flex029/uploads/systemcrafters/original/2X/7/7b50a66674f773c59b8f430eff347381f6f806a7.png)
