From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id uI1DDSV2aWKQPgEAbAwnHQ (envelope-from ) for ; Wed, 27 Apr 2022 18:58:13 +0200 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id wNduDSV2aWKDDAAAauVa8A (envelope-from ) for ; Wed, 27 Apr 2022 18:58:13 +0200 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 DB55526AC8 for ; Wed, 27 Apr 2022 18:58:12 +0200 (CEST) Received: from localhost ([::1]:55112 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1njkzT-0004SJ-KW for larch@yhetil.org; Wed, 27 Apr 2022 12:58:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34720) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1njkzM-0004Mt-Jy for guix-patches@gnu.org; Wed, 27 Apr 2022 12:58:04 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:50266) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1njkzL-0005Bg-C2 for guix-patches@gnu.org; Wed, 27 Apr 2022 12:58:04 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1njkzL-0003tL-Au for guix-patches@gnu.org; Wed, 27 Apr 2022 12:58:03 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#54997] [PATCH v2 03/15] linux-container: 'call-with-container' relays SIGTERM and SIGINT. Resent-From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Wed, 27 Apr 2022 16:58:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 54997 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 54997@debbugs.gnu.org Cc: Ludovic =?UTF-8?Q?Court=C3=A8s?= Received: via spool by 54997-submit@debbugs.gnu.org id=B54997.165107864514795 (code B ref 54997); Wed, 27 Apr 2022 16:58:03 +0000 Received: (at 54997) by debbugs.gnu.org; 27 Apr 2022 16:57:25 +0000 Received: from localhost ([127.0.0.1]:44133 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1njkyi-0003qS-Qf for submit@debbugs.gnu.org; Wed, 27 Apr 2022 12:57:25 -0400 Received: from eggs.gnu.org ([209.51.188.92]:41154) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1njkyG-0003nT-8a for 54997@debbugs.gnu.org; Wed, 27 Apr 2022 12:56:56 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60006) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1njkyA-000538-PF; Wed, 27 Apr 2022 12:56:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:References:In-Reply-To:Date:Subject:To: From; bh=rOh90PzYsv1YqfC5TCbLeH1wIQOt1L2So7nKBq8+ymU=; b=WP0k3oUOYeyxKhjnc1hw 9U6nKu6J9cfOVSqlnwO+nQRKdHoshoHkixyzuR9cYdvNQ0K4t9chQq9fvV+6o8Y1U2jNhtoqtcD0x afnEiStlu8CillvDoKKZnvFxqVgxw3fUZGoqMtKRBiWX5d20v+i/0oo2trG0XpL6LSR6ZgWIRJawF YRuHSLuZ1Pvg9B0Gj2t6kuX3nAN9vKORb0eOFDd81kcXc6AkLwg/P4PhsxByGiXtsrDfLBMiC6vUS AMWYWFgh1Nugia25uA52QvIE2+xn+pBpiEyPjTq291BsNj+GyAbdpg9WOV6Cwr6knewjVuhr+2Mae HKZ+9Gaemm7wUA==; Received: from 91-160-117-201.subs.proxad.net ([91.160.117.201]:64439 helo=gnu.org) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1njkyA-0000Hl-Ah; Wed, 27 Apr 2022 12:56:50 -0400 From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Date: Wed, 27 Apr 2022 18:56:23 +0200 Message-Id: <20220427165635.8015-4-ludo@gnu.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220427165635.8015-1-ludo@gnu.org> References: <878rrrk1v1.fsf_-_@gnu.org> <20220427165635.8015-1-ludo@gnu.org> 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-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1651078692; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=rOh90PzYsv1YqfC5TCbLeH1wIQOt1L2So7nKBq8+ymU=; b=ncnrj6d0ZTF8NAYy2nGU7SUa68v5pyw2BBqT/wIoYq6rqGwVRY0cOM9R7wURTiHSRkn/Q0 WLZj44JpiWBM1IT/PvSvuRvkcb1pMfbCJBRM8KxrMGkmpuBZk5RGp4EDY7foV9AcaMu26y NrF8ZuFzUoEB2UQgy8BRXK9vn2l2Bo4KM1IeIjGzYZk8WwyaBM+wuBMnC3RAoZeup8B8UU 99jif+iORhhZiXeYClb7HB3dhll233pa1buFt3v4RzbiFiD1kmbBMMKg35QfJ+8lB2ec48 1TeQF+xCh8zzmuxadSsAEOqpXokAC+8o/S2fgoMnCBmY78cWCErJFbcCxsxOMg== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1651078692; a=rsa-sha256; cv=none; b=lj0esNFv189r8ue9e+L/vN28NZvULlHqqwMkfI/miJ8qn31on0dnUQ/PxyN0BZgJjpiE38 udxtxwCYYltxuPcn5rL9Xkcu6d89dJSA+ysMnDS/2FZvQd6N6tjox82DTt2HZW212SgFnF ghunlynXGRDlAdULqKNmwUimWYGtqlynqeEoFY/eubWUbH41vB3hIOHipl0G4w9TR9QSGM k/MAThpEPG0ZbBJ8hs+UcVJNovKyOuCOhTN0R5ayQyxRlBV/d+sMoZ/SyriJoPFJXUOv8t iBXz+gdh9YK3cTH/lV1M27cr9sxLsstH2Z+R5XfS3a8sWxB0lS50IYCO4EJXFg== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gnu.org header.s=fencepost-gnu-org header.b=WP0k3oUO; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -2.40 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gnu.org header.s=fencepost-gnu-org header.b=WP0k3oUO; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: DB55526AC8 X-Spam-Score: -2.40 X-Migadu-Scanner: scn1.migadu.com X-TUID: VtOZQVb8DMP0 * gnu/build/linux-container.scm (call-with-container): Add #:relayed-signals. [install-signal-handlers]: New procedure. Call it. --- gnu/build/linux-container.scm | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/gnu/build/linux-container.scm b/gnu/build/linux-container.scm index bdeca2cdb9..03c01439ce 100644 --- a/gnu/build/linux-container.scm +++ b/gnu/build/linux-container.scm @@ -303,6 +303,7 @@ (define (call-with-temporary-directory proc) (define* (call-with-container mounts thunk #:key (namespaces %namespaces) (host-uids 1) (guest-uid 0) (guest-gid 0) + (relayed-signals (list SIGINT SIGTERM)) (process-spawned-hook (const #t))) "Run THUNK in a new container process and return its exit status; call PROCESS-SPAWNED-HOOK with the PID of the new process that has been spawned. @@ -320,20 +321,27 @@ (define* (call-with-container mounts thunk #:key (namespaces %namespaces) GUEST-UID and GUEST-GID specify the first UID (respectively GID) that host UIDs (respectively GIDs) map to in the namespace. +RELAYED-SIGNALS is the list of signals that are \"relayed\" to the container +process when caught by its parent. + Note that if THUNK needs to load any additional Guile modules, the relevant module files must be present in one of the mappings in MOUNTS and the Guile load path must be adjusted as needed." + (define (install-signal-handlers pid) + ;; Install handlers that forward signals to PID. + (define (relay-signal signal) + (false-if-exception (kill pid signal))) + + (for-each (lambda (signal) + (sigaction signal relay-signal)) + relayed-signals)) + (call-with-temporary-directory (lambda (root) (let ((pid (run-container root mounts namespaces host-uids thunk #:guest-uid guest-uid #:guest-gid guest-gid))) - ;; Catch SIGINT and kill the container process. - (sigaction SIGINT - (lambda (signum) - (false-if-exception - (kill pid SIGKILL)))) - + (install-signal-handlers pid) (process-spawned-hook pid) (match (waitpid pid) ((_ . status) status)))))) -- 2.35.1