From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id oCKeNQs1qF/oNwAA0tVLHw (envelope-from ) for ; Sun, 08 Nov 2020 18:12:27 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id sNmeMQs1qF9JUQAA1q6Kng (envelope-from ) for ; Sun, 08 Nov 2020 18:12:27 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 497BD94042C for ; Sun, 8 Nov 2020 18:12:27 +0000 (UTC) Received: from localhost ([::1]:59636 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kbpAw-0005OO-1E for larch@yhetil.org; Sun, 08 Nov 2020 13:12:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:33118) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kbpAY-0005O9-Ai for guix-patches@gnu.org; Sun, 08 Nov 2020 13:12:02 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:49705) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kbpAY-0000X2-24 for guix-patches@gnu.org; Sun, 08 Nov 2020 13:12:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kbpAX-0005st-U2 for guix-patches@gnu.org; Sun, 08 Nov 2020 13:12:01 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#44435] [PATCH v2 0/1] services: Add Transmission Daemon References: In-Reply-To: Resent-From: Simon South Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sun, 08 Nov 2020 18:12:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 44435 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 44435@debbugs.gnu.org Cc: simon@simonsouth.net Received: via spool by 44435-submit@debbugs.gnu.org id=B44435.160485908822568 (code B ref 44435); Sun, 08 Nov 2020 18:12:01 +0000 Received: (at 44435) by debbugs.gnu.org; 8 Nov 2020 18:11:28 +0000 Received: from localhost ([127.0.0.1]:33015 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kbp9w-0005rr-L6 for submit@debbugs.gnu.org; Sun, 08 Nov 2020 13:11:28 -0500 Received: from mailout.easymail.ca ([64.68.200.34]:41630) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kbp9r-0005ra-NX for 44435@debbugs.gnu.org; Sun, 08 Nov 2020 13:11:23 -0500 Received: from localhost (localhost [127.0.0.1]) by mailout.easymail.ca (Postfix) with ESMTP id 1A494A02EF; Sun, 8 Nov 2020 18:11:14 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at emo05-pco.easydns.vpn Received: from mailout.easymail.ca ([127.0.0.1]) by localhost (emo05-pco.easydns.vpn [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id P8CG6MqKNoPL; Sun, 8 Nov 2020 18:11:13 +0000 (UTC) Received: from localhost.localdomain (unknown [108.162.141.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mailout.easymail.ca (Postfix) with ESMTPSA id B4346A02DC; Sun, 8 Nov 2020 18:11:11 +0000 (UTC) From: Simon South Date: Sun, 8 Nov 2020 13:06:10 -0500 Message-Id: X-Mailer: git-send-email 2.25.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Spam-Score: -3.3 (---) X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Scanner: ns3122888.ip-94-23-21.eu Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Spam-Score: 3.99 X-TUID: HFOFWOcNvbBA Here's an updated version of the patch that - Fixes the "importing module from host" warning by removing an unnecessary import of (guix gexp) in transmission-daemon-computed-settings-file; and - Moves the execution of getpwnam in transmission-daemon-activation from the host side to the build side, where it belongs. Everything else is unchanged. For convenience, here's my original cover letter: This patch adds a service type for Transmission Daemon, the headless variant of the Transmission BitTorrent client (https://transmissionbt.com/). Running the client as a service this way makes it possible to share files over BitTorrent continuously without requiring a user be logged in. I've tried to make this as complete as possible but am especially interested in geting feedback as this is my first attempt at creating a service definition. A few things to point out: - I've placed the code in a new "(gnu services file-sharing)" module and the documentation in a new "File-Sharing Services" section of the manual, only because these names seemed the most natural to me. ("Peer-to-peer" would be too broad a categorization, I think, while "BitTorrent" too narrow.) - The module exports two procedures, "transmission-password-hash" and "transmission-random-salt", that together are my solution to the problem of assigning a value to the daemon's "rpc-password" configuration setting. Transmission clients seem to expect the user to supply a password in plaintext in their "settings.json" file. At startup, the client generates a random, eight-character salt value; hashes it and the password together; and writes the result back to the settings file, after which the password remains obscured. This obviously violates the functional nature of Guix, as we don't expect services to be rewriting their own configuration files and the use of a random salt value makes the process non-repeatable anyway. I've documented in the manual how a user can use these two procedures to create a suitable value for "rpc-password" that remains stable across system reconfigurations, but perhaps you know of a better (or more conventional) approach. - I've added a custom "stop" procedure to the Shepherd service that gives the daemon time to shut down before eventually killing its process. This is necessary since the daemon performs some housekeeping and sends a final update to BitTorrent trackers before it exits, which can take several seconds or more; without this code, restarting the service usually fails as the new daemon process finds the old one is still running and attached to the port used for peer connections. Again, the approach I've used to handle this seems reasonable to me but perhaps you know of something better. -- Simon South simon@simonsouth.net Simon South (1): services: Add transmission-daemon service. doc/guix.texi | 799 +++++++++++++++++++++++++++++++++ gnu/local.mk | 1 + gnu/services/file-sharing.scm | 803 ++++++++++++++++++++++++++++++++++ 3 files changed, 1603 insertions(+) create mode 100644 gnu/services/file-sharing.scm -- 2.29.2