What is the recommended way to set up environment variables for a shepherd 
service?  Is there a profile associated to the environment of a shepherd 
service where I could/should install required packages and have the correct 
environment variables set up automatically?  Specifically, I have a service 
which uses gobject-introspection (from Python / python-pygobject), and had some 
difficulty to get it to run recently.

context (a bit long unfortunately):

I have a shepherd-service which runs a Python script.  The Python script 
listens on dbus to check if my external backup hard disk is mounted, and starts 
rsnapshot.

This worked reliably for many years, until a recent guix pull / system 
reconfigure (moving from guix commit 461d773adead955e2daead70cee4415f7f0f00be 
-- january 2025 -- to  d8aa9af09f901d1745470caa45ffe2178a9afce1 -- april 2025 
--so a rather large range of commits unfortunately).  Suddenly, the Python 
import statement

import gi.repository.GLib

would fail with exception 'ImportError: cannot import name GLib, introspection 
typelib not found'.  This seemed to be due to a missing GI_TYPELIB_PATH 
enviroment variable, which I was able to fix manually by setting it in a 
wrap-executable phase

(wrap-program (string-append out "/bin/listen_dbus.py")
                `("PATH" ":" prefix
                  (,(string-append rsnapshot "/bin")))
                `("GI_TYPELIB_PATH" ":" prefix
                  (,(string-append glib "/lib/girepository-1.0"))))

I'm wondering if this is the proper way to do this kind of thing?  When 
installing gobject-instrospection etc in a profile, I know these environment 
variables are set automatically.

I'm also wondering which change caused it to stop working without setting 
GI_TYPELIB_PATH after January... but that might be difficult to track down (I 
see an update of python-pygobject happened in that timeframe).

Thanks for reading this far!

Thomas

Reply via email to