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 qLXmAW6ny1+ZdgAA0tVLHw (envelope-from ) for ; Sat, 05 Dec 2020 15:29:50 +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 kCFWOW2ny1/CNwAA1q6Kng (envelope-from ) for ; Sat, 05 Dec 2020 15:29:49 +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 949D6940466 for ; Sat, 5 Dec 2020 15:29:49 +0000 (UTC) Received: from localhost ([::1]:57300 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klZVM-0000ZI-B3 for larch@yhetil.org; Sat, 05 Dec 2020 10:29:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36844) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klZUc-0000Z2-Ds for guix-patches@gnu.org; Sat, 05 Dec 2020 10:29:02 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:36494) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1klZUc-0001Ek-4t for guix-patches@gnu.org; Sat, 05 Dec 2020 10:29:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1klZUc-0002Ya-1E for guix-patches@gnu.org; Sat, 05 Dec 2020 10:29:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#44435] [PATCH v3 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: Sat, 05 Dec 2020 15:29: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 South Received: via spool by 44435-submit@debbugs.gnu.org id=B44435.16071821049777 (code B ref 44435); Sat, 05 Dec 2020 15:29:01 +0000 Received: (at 44435) by debbugs.gnu.org; 5 Dec 2020 15:28:24 +0000 Received: from localhost ([127.0.0.1]:48038 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1klZTw-0002XS-9M for submit@debbugs.gnu.org; Sat, 05 Dec 2020 10:28:24 -0500 Received: from mailout.easymail.ca ([64.68.200.34]:49290) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1klZTr-0002XC-O7 for 44435@debbugs.gnu.org; Sat, 05 Dec 2020 10:28:19 -0500 Received: from localhost (localhost [127.0.0.1]) by mailout.easymail.ca (Postfix) with ESMTP id 269DF2189D; Sat, 5 Dec 2020 15:28:10 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at emo06-pco.easydns.vpn Received: from mailout.easymail.ca ([127.0.0.1]) by localhost (emo06-pco.easydns.vpn [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Yq2NmQz9Rwnp; Sat, 5 Dec 2020 15:28:09 +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 6B13F208DB; Sat, 5 Dec 2020 15:28:06 +0000 (UTC) From: Simon South Date: Sat, 5 Dec 2020 10:27:54 -0500 Message-Id: X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-Migadu-Flow: FLOW_IN X-Migadu-Spam-Score: 2.70 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-Migadu-Queue-Id: 949D6940466 X-Spam-Score: 2.70 X-Migadu-Scanner: ns3122888.ip-94-23-21.eu X-TUID: 7uSTvECXxlPO Here's a new version of this patch that incorporates feedback[0] from Ludovic: - transmission-password-hash now signals an error in a more conventional manner, by raise'ing a &formatted-message condition, and uses Guile-GCrypt's "sha1" shorthand procedure along with string->utf8 for a more compact implementation. - A missing pair of parentheses in transmission-daemon-shepherd-service has been restored. - User-facing strings have been wrapped with "G_" and the file added to po/packages/POTFILES.in to permit internationalization. (I've done this for every string, not just the one in transmission-password-hash.) I've also added a small test suite that exercises the password-related procedures exported by the service module, using values captured from transmission-daemon itself. I've placed the file in tests/services, though it's not clear this is the right location; tests/networking.scm also pertains to a service, for instance. I can re-submit with the file relocated if need be. Finally, despite my earlier bravado[1] I've held off adding any system tests, only because I now realize getting the system test suite running on the machines I have available is going to be a project in and of itself. I do intend to add these at a later date. [0] https://lists.gnu.org/archive/html/guix-patches/2020-11/msg00551.html [1] https://lists.gnu.org/archive/html/guix-patches/2020-11/msg00557.html 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. Makefile.am | 1 + doc/guix.texi | 799 +++++++++++++++++++++++++++++++ gnu/local.mk | 1 + gnu/services/file-sharing.scm | 804 ++++++++++++++++++++++++++++++++ po/packages/POTFILES.in | 1 + tests/services/file-sharing.scm | 59 +++ 6 files changed, 1665 insertions(+) create mode 100644 gnu/services/file-sharing.scm create mode 100644 tests/services/file-sharing.scm -- 2.29.2