From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 02 13:25:10 2022 Received: (at 54786) by debbugs.gnu.org; 2 Jun 2022 17:25:10 +0000 Received: from localhost ([127.0.0.1]:54543 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nwoZI-00081D-A0 for submit@debbugs.gnu.org; Thu, 02 Jun 2022 13:25:10 -0400 Received: from mail-qk1-f176.google.com ([209.85.222.176]:46046) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nwoZD-00080c-Vq for 54786@debbugs.gnu.org; Thu, 02 Jun 2022 13:25:07 -0400 Received: by mail-qk1-f176.google.com with SMTP id x75so728422qkb.12 for <54786@debbugs.gnu.org>; Thu, 02 Jun 2022 10:25:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=bVLJBtojytgsfxyU0gynshP7AydmIhQ7uHNF/U25XGI=; b=QCeTQoj6P/agjQ+b8ILbrxdjwe9UtJOPYnjRhQcOTnQ4V/BlAt2q54lRga0KpXtbhi 7t82aJ69jgwXq3su0IE9wO3fP0/mi8EkIdyN/fJvFUWHt/oVNX9RaT9HdpWvb7H7Zh3I lNAe4h0Spt2yxYh4b2Dwa/9iT+szeZecwRYLIWyeMDkv7tYjzyAJtKUgxnXIWGo00q/J 6nz236bXdtZU7K+sxO4HNEx4GSRg/9u2zXg73ArIpw0v+DCl3JGXczkwcn4xTtLr+UPA /z4ngl6JgI4n02XOzAiW2cp4Ai12U4JMPq5IYj6U6xAjmRD5BMz6gPFeKNJPYqEEL9Ce XpOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=bVLJBtojytgsfxyU0gynshP7AydmIhQ7uHNF/U25XGI=; b=DvZEGeTqVOzkBi6omVDj5tn01HmxBqKvhhuz9N0GYbCtN42ADWHEB+qdZuqCUyweQJ 4GzeWkVD9Y5s7aYFDKJra6rZfT4x4zC2rHpn4PXug6qGtn8t4hOnOe1jc0UGDJuH/sVF 7UDoJpcTlE3fIXk0XslKqQ6Pda3kFa43Jl0vUs2olA+ebyrpjMOCo04ip9tRNzmM8pAe HDNCqMvxp+cREiVYgrVaqnb7pDBsx95iyz6CHYgqpuaGsn1RVlZDkW5qnOU/wOMgL/Fx W6hpYwrD/37o4uYtWzxnqbR0HzVUDMbmNmerKnxkVLNzhCJnt7r1FUmCYmexgv3sC+uh 3P4w== X-Gm-Message-State: AOAM530L2jWsOn7GlhSIYk8RVsAEHGf7UHbbNoAWjhB2PGy/bT14oq+6 BesGLlwAvLURuFDYC9d0xRByZvQnDJ09N6dv X-Google-Smtp-Source: ABdhPJzuth4OCVF8NAQjsMgJEv9KZRSd5AIZ2jpAet+heF51wXoFjJRk5GHlbMTXuna42HJTL9sU8g== X-Received: by 2002:a05:620a:4152:b0:6a5:8ae2:da8e with SMTP id k18-20020a05620a415200b006a58ae2da8emr4199935qko.116.1654190698117; Thu, 02 Jun 2022 10:24:58 -0700 (PDT) Received: from hurd (dsl-158-168.b2b2c.ca. [66.158.158.168]) by smtp.gmail.com with ESMTPSA id e123-20020a378281000000b0069fe1dfbeffsm3485800qkd.92.2022.06.02.10.24.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jun 2022 10:24:56 -0700 (PDT) From: Maxim Cournoyer To: Ludovic =?utf-8?Q?Court=C3=A8s?= Subject: Re: bug#54786: Installation tests are failing References: <878rql9wh9.fsf@gnu.org> <20220531164407.13914-1-maxim.cournoyer@gmail.com> <87o7zcwvy6.fsf_-_@gnu.org> <878rqgr0l4.fsf@gmail.com> <8735gnqkcp.fsf@gnu.org> Date: Thu, 02 Jun 2022 13:24:54 -0400 In-Reply-To: <8735gnqkcp.fsf@gnu.org> ("Ludovic =?utf-8?Q?Court=C3=A8s=22'?= =?utf-8?Q?s?= message of "Thu, 02 Jun 2022 15:13:26 +0200") Message-ID: <877d5zx9jt.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.1 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 54786 Cc: othacehe@gnu.org, 54786@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Ludovic, Ludovic Court=C3=A8s writes: > Hi Maxim, > > Maxim Cournoyer skribis: > >> Ludovic Court=C3=A8s writes: > > [...] > >>> Before going further, I=E2=80=99d like to understand: this does more th= an just >>> fix the Jami system tests, right? >>> >>> It would have been nice to have surgical changes to =E2=80=9Cjust=E2=80= =9D fix the >>> tests, along the lines of , >>> possibly followed by a rework of the whole machinery, if that=E2=80=99s >>> possible. >> >> It's not really possible unfortunately, because the rework from talking >> to the D-Bus API via the 'dbus-send' binary to using Guile AC/D-bus was >> needed or at least simplified fixing the issues. > > So am I right that the =E2=80=9Cissues=E2=80=9D were not specifically rel= ated to the > Shepherd 0.9.0 switch, or at least not just to that? (Just to make sure > I understand the context.) I tried capturing the issue in the commit message, but I'll provide another more hands-on view: the Jami service was broken due to changes in Shepherd 0.9.0 that caused the blocking sleeps + concurrent make+forkexec-constructor/container and fork+exec-command combination used to not work anymore. This problem can be manually observed by spawning a VM with the Jami service: $(guix system vm --no-graphic -e '(@@ (gnu tests telephony) %jami-os)') -m = 512 Then you'll see the service doesn't even start: --8<---------------cut here---------------start------------->8--- root@jami ~# herd status [...] Stopped: - jami [...] root@jami ~# pgrep jamid 192 root@jami ~# killall jamid root@jami ~# herd start jami Jami Daemon 11.0.0, by Savoir-faire Linux 2004-2019 https://jami.net/ [Video support enabled] [Plugins support enabled] 12:53:47.144 os_core_unix.c !pjlib 2.11 for POSIX initialized herd: exception caught while executing 'start' on service 'jami': Throw to key `match-error' with args `("match" "no matching pattern" #f)'. --8<---------------cut here---------------end--------------->8--- I've ran this: herd start jami& strace -p1 -f -s800 -o strace.out Attached is the last 10% of the gzip'd file. I couldn't explain this failure very clearly, but when I tried investigating it was failing on the '(dbus-service-available? "cx.ring.Ring")' call, if I recall correctly. --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=strace.out.gz Content-Transfer-Encoding: base64 Content-Description: shepherd pid1 strace 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 sjlUhaAgLGRzSA5BQVjI5tAjgoKwkM0hVgQFYSGbQ8kICsJCNofMERSEhWwODSQoCAvZHAJJUBAW sjnUk6AgLGRzSCtBQVjI5tBdgoKwkM0hygQFYSGbQ7EJCsJCNoecExSEhWwOrScoCAvZHEJQUBAW sjlUoqAgLGRzeEZBQVjI5vCMgoKwkM0hIQUFYSGbQ0IKCsJCNoeEFBSEhWwOCSkoCAvZHBJSUBAW sjkkpKAgLGRzSEhBQVjI5pCQgoKwkM0hIQUFYSGbQ0IKCsJCNoeEFBSEhWwOCSkoCAvZHBJSUBAW sjkkpKAgLGRzSEhBQVjI5pCQgoKQkA1YHCRgcZCAxUECFgcJWBwkYHGQgMVBAhYHCVgcJGBxkIDF QQIWBwlYHCRgcZCAxUECFgcJWBwkYHGQgMVBAhYHCVgcJGBxkIDFQQIWBwlYHCRgcZCAxUECFgcJ WBwkYHGQgMVBAhYHCVgcJGBxkIDFQQIWBwlYHCRgcZCAxUECFgcJWBwkYHGQgMVBAhYHCVgcJGBx kIDFQQIWBwlYHCRgcZCAxUECFgcJWBwkYHGQgMVBAhYHCVgcJGBxkIDFQQIWBwlYHCRgcZCAxUEC FgcJWBwkYHGQgMVBAhYHCVgcJGBxkIDFQQIWBwlYHCRgcZCAxUECFgcJWBwkYHGQgMVBAhYHCVgc JGBxkIDFQQIWBwlYHCRgcZCAxUECFgcJWBwkYHGQgMVBAhYHCVgcJGBxkIDFQQIWBwlYHCRgcZCA xUECFgdJsDhIgsVBEiwOkmBxkASLgyT/x969dqeN5GkAf7+fQus522N3+yKp7j1Ntt0xdth2sNcm m2RNlhYgbDoYCAjHuX33qZLERRISxn7ck3PW4SSgUqlKKpVKf+knCMogCcogCcogCcogCcogCcog CcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcog CcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcog CcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcog CcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcog CcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogCcogKcogKcogKcogKcogKcogKcog KcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcog KcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcog KcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcog KcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcog KcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogKcogGcog GcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcog GcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcog GcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcog GcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcog GcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcogGcog GcogGcogGcogGcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcog OcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcog OcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcog OcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcog OcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcogOcog OcogOcogOcogOcogOcogOcogOcogOcogOcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcog BcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcog BcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcog BcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcogBcog BcogxYMMklKd7Zfd3V1rOPZ7fivg1sgfT6799rOtREG2tVnrXvuDSZCuXlm/TPqdbr87vvLbli7q WVzstMRNtW1dyHfbVvXV8fH03y/BTWPst0r2tqU/9c1HZsd/vkWZlpQbVhyublj70nVduwFRZCpQ ZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQ ZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpQZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpR ZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpR ZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpR ZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpRZCpR ZCpRZCpRX9uUqK9tSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRB SpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBSpRBKpRBKpRBKpRBKpRB KpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRB KpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRB KpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRB KpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRB KpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRBKpRB KpRBOnY+Qq5bUG7XXreg3K69bkG5XXvdgnK79roF5XbtdQvK7drrFpTbtdctKLdrr1tQbtdes6B8 hFy3IFTPzkfIdQtC9ex8hFy3IFTPzkfIdQtC9ex8hFy3IFTPzkfIdQtC9ex8hFy3oIf2bP/Wb934 mxt7l/3J3ljP8PeuP3fsz3zkOp/Y5/ZHjzjXn9xL1VRMdewPXKqddnMy3nF2HXfXtfea3f5emDD2 ++2NbesCV9TGzo6eKk363dufh15wVdq78UZ7o0l/70/vurun50WZhqNuP9gZ+cPepyhBb2ZQGowu dzsj39cT74PBcPfgtyj/np6xtzBjbzpj2QK7x91xUPWu/fHGu23LvhWdNndahHnKsa29Hy3H0qtk /bi3pdvbjpu0OXq/aX4pKjfkMHlvnZbv62giXub62htuRr9BJR3lblunZye1xll5/+Br+On1WaVW 3rZe7p82Ts8q/7NfK381n/erJ9W3L09enW/rva3XL1wNvZKkyTzbbs7L91otfzzWu9kPWnu99u54 sDsc+b2BZ9r5rHHy+1bcYaon5WrN2qwOrPGkdRX1msHIandHfkvv0k/TfjPyvXav23+vixyOBq29 sd/r7OnOFLYwqgNQ28SkJUtMN2Mw9PtesLlfaxwePH998JC65g3R8lpXZr1PGmcHJ9Xjt19PGs+P T8pvys9N3SSuuu9/7IwDT782ia5X5/8yDhrXg7ZfOm9UDs/KR19tSum2pVPH3c9+yXFdam+bnwj7 tm3pNS6/PK29bZzu114sdpaFHR8vMNvzid29bZHM/pXz/RuNB/nXJtZClcBG7HWb5m+cptuSrGxH 03HCFqw7QpSPD+tu3dEvO/MidfuZfotnWXUi2OL8X5PZZZ1wu86y5fxq5tn1frQEMTkInZdbp0uq vtuLELEyxU1OTiudryehmWJXpUzqLiWmeXIT8iueb63rprd9ZYo8WtxRyan8Knn0PqwTVyzuIJ1A ixPqrjB/k6Xq5nCLG3k6O654U+8WtlisTmDFCfpPPVFJJsGsR/JFU+/hiiY3505JpqrEK5OQqftc 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 j/uR0i5dI8qL40of2inVXNhla26aQsls91SuqK74YWuFmN32pWvcl9MdVV6qrtKMXq+aUtjpDgor VHxFU9js33LUsDtEfCeP3y4qXgndoqfDhhU6viL80yxVMrcia0f5R8285g0tb86jVmVVlX7mVszV /S7sOD3s/H9U/Xam6ixnZo7CJSu2/jT9Znlp9uD876I2M9Mq6mcmker75a17UgqLuZ22YNXs+Dcs sk2EoSr/7WT8WVMUWRl95n+Kgs1ygN25Q3Nmy/5zJp0nQ8xm+Y3OeLsaRXvE6LfBJLAsPlA09PXo 5T9Gxer1ItpXo5c34+2qF8XDqF505o/jlhhTVCb17Ngs1LhxUs6eNOT4CBVGjFur1DiUGfeJqJuZ D/ZHy8/CiTpMvrJnqF5kL8Xp6io7Xxk1OmMV7akVnyxifrn7TdGFjdCKh6QdzrZ+rsRMt2czHhdO 9E7kf/b/RVhKmHxorR8mH9I36lKkzD6kl7o08ZyfbW5t735fTERnJyO605qZzE7e6brwzmpNqIYx am5im00P5mt6/ea77a1Fdd528xtwUxXn4RdVbITMK3YmXCNHt6u6NuVnqhsFXVidHG1nyvS9umLd ma1YVm6nbOUVhyMpvd74BUTrM0ww614dHbV+NifnRy1nThsd1X7fMLennZ45PhPvz9dO2u21Rn1d rtfXiull9m9YezjIZpiNzzXDbNazwWzq/ZkZZhj8suFDLAo1M8lU+QjV/PRJZhju1+Irlk8xl5/V Z1Y8b36Y3saZxeoaJxv513L5+KKsz0zn5lYsmVg2ha7/VooZVjRFQy9dJ3V9dtas6nOTi/jsMhvP y7VnA/xcTQvWidkp5dyKpXPMsAE/z25RfAUwu/w/qXR2Xims2invveUrGmqmL+fX/L7ml0/O5O/K ifPdbB7NNUNOYs3sgWJq8++jl3p95qNfjF5Wy2u3Hrm5D70sJhfKQs1cs/8yeWPyqaLs7ejlZlJg dqIlJhUKMRP1fycfKrZoZ/RyMF7fKPr8dPRyNXo5KUf50yTKZOyZzEiFmmxSUcV/jV74ieWH2f08 V2LxxNIrM7qfljSvLN/UqtetSburVZfKx+dfsXllu141r2yPpndhk+T8hCt1Wilnp5Xtqnme7qi8 3kaYkaknTisbara6POji6shpZcPOVew+wxxPn4qP6ueePz1r/Hx/f9JrfAx5L+p3ncF5r3+tBmsn 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 ZZCOMkhHGaSjDNJRBukog3SUQTrKIB1lkI4ySEcZpKMM0lEG6SiDdJRBOsogHWWQjjJIRxmkowzS UQbpKIN0lEE6yiAdZZCOMkhHGaSjDNJRBukog3SUQTrKIB1lkI4yyIwyyIwyyIwyyIwyyIwyyIwy yIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwy yIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwy yIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwyyIwy yIwyyIwyyIwyyP9l7+rf2sax9e/7V/iyz50NMyHYlvyh2Ul3mBIoz9DAQrrTuaQ3YxIHMg1JmjiU lvZ/v5LtGH/KUnAqcYf6KbZlWXqlc3T0SjpWUFVrkKiqNUhU1RokqmoNElW1BomqWoNEVa1BoqrW IFFVa5CoqjVIVNUaJKpqDRJVtQaJqlqDRFWtQaKq1iBRVWuQqKo1SFTVGiSqag0SVbUGiapag0RV rUGiqtYgUVVrkKiqNUhU1RokqmoNElW1BomqWoNEVa1BoqrWIFFVa5CoqjVITS1ehORNqFC1eRMq VG3ehApVmzehQtXmTahQtXkTKlRt3oQKVZs3oULV5k2oULU5EypehORNqCrNLl6E5E2oKs0uXoTk TagqzS5ehORNqCrNLl6E5E2oKs0uXoTkTagqzS5ehORN6LGa7d65/Vu3trV7NVnuLvADd/fm81D9 bM517ZPxefDRAdrNJ/0KXSIDDdUPpo12BpfLxY7W0PSGru5ejia7fsDCnQy26spFdUlt7ezgu+Zy Mrr7ceZ4183dW2e+O19Odv90bka7+FkQaTYfTbyduTsbfwoCcDG95nR+1RjOXRffvPems8b+L0H8 XfxgN/Zgd/Ug74XG8WjhtZ0bd7H1rq6od9ZwYGqXuM91L1Vl93tFUzAk5fvdbVzfalill/P3tfab 4+NCykHi3g10nMzqlZsbZ+a/U1dsDel15fTspNM7a+3tf/Gvfjs76rTqyuu9097p2dF/9jqtL+R6 r33S/v31yZvzOhY2huejwBgtFw11YD2k7/T77mKBpex6/d3xoLGYNmZzdzx1SDWf9U5+3Q71pX3S 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 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable [...] >>> What do you think is missing upstream so that starting Jami is >>> simpler? >> >> 1) Lack of D-Bus support in Shepherd to easily start D-Bus services. >> The upstream systemd service definition for the Jami daemon (jamid) is >> this: >> >> # net.jami.daemon.service >> [D-BUS Service] >> Name=3Dcx.ring.Ring >> Exec=3D@LIBDIR@/jamid >> >> But that's nearly not where the complexity of our jami-service-type >> lies. > > But that should be fine: we have dozens of D-Bus services that happily > get started by dbus-daemon. I guess that works (minus races like we've had with elogind) if the other services are also D-Bus services sharing the same bus. But here the code talking with Jami are in the Shepherd service actions and more critically in the start slot itself -- so it's important the D-Bus service has been acquired and ready to service D-Bus calls otherwise they'd fail (that's what the loop polling for (jami-service-available?) ensures). >> Rather, it's in the following: >> >> 2) The lack of a way to declaratively configure Jami and the need to use >> D-Bus API to issue commands to Jami non-interactively. For example, to >> have Jami import an account it's necessary to go via either >> >> a) the GUI or >> b) the D-Bus API >> >> The Jami service in Guix makes use of b), which introduces the need for >> some Scheme bindings wrapping the low-level D-Bus interface. Perhaps >> such bindings could live in Jami itself. >> >> The second point (2) could be addressed upstream, but since it's a >> rather niche use case (the common use case is simply running the client >> GUI), is already achievable via D-Bus, and would probably require a >> considerable amount of work in Jami itself, I think we can keep it as is >> for now, as a Guix System exclusive feature ;-). Note that even if Jami >> could be configured via configuration files, we'd still want to be able >> to communicate with it via D-Bus to maintain the possible actions >> currently available in our Shepherd service (listing/enabling/disable >> accounts, etc.), so it'd only really help to reduce the start slot, and >> that's it. We'd still need most of the D-Bus bindings, so it wouldn't >> help that much anyway. > > Ah I see. > >> I hope that clarifies how our jami-service-type is both complex but also >> unique. > > Sure, the ability to configure Jami in a declarative and stateless > fashion is a plus, that=E2=80=99s really cool. > > Longer-term I think this should go in Jami proper though. It=E2=80=99s g= reat > that Guix has an edge over the competition :-), but having to maintain > it is less nice. Perhaps with the Scheme bindings introduced by Olivier for the Jami tests (that work via an embedded libguile), it could be possible to add the ability to pass an init script to 'jamid' at launch time, which would automate importing the account. Proper 'Scheme' bindings would be nice though, and I'd like to look into the feasibility to add these via Swig. Food for thought. > Also, in more concrete terms: one goal of the least-authority work at > is to remove > =E2=80=98make-forkexec-constructor/container=E2=80=99 and the whole (gnu = build shepherd) > module. Jami is one of its last remaining users (adjusting it felt like > beyond my abilities, precisely because it=E2=80=99s much more complex tha= n the > other services I adjusted). > > Could you take a look at that eventually, once this patch has been > reviewed? I reviewed how that works, and it'd be easy; I just didn't see the incentive yet (there's no composition needed for the service, and it'd make the definition slightly less readable). If you tell me mark+forkexec-constructor/container is going the way of the Dodo though, that's a good enough incentive :-). Thanks for having a look! Maxim --=-=-=--