From patchwork Thu Dec 16 13:06:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Othacehe X-Patchwork-Id: 35270 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 2802227BBEA; Thu, 16 Dec 2021 13:09:05 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id AC77427BBEA for ; Thu, 16 Dec 2021 13:09:03 +0000 (GMT) Received: from localhost ([::1]:50568 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mxqVK-0005nK-RY for patchwork@mira.cbaines.net; Thu, 16 Dec 2021 08:09:02 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59922) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqUM-0005l6-CD for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:03 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:51684) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqUL-0004aL-UL for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mxqUL-0006fM-Jg for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:01 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#52550] [PATCH 01/10] build: image: Add optional closure copy support. References: <20211216130204.29996-1-othacehe@gnu.org> In-Reply-To: <20211216130204.29996-1-othacehe@gnu.org> Resent-From: Mathieu Othacehe Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 16 Dec 2021 13:08:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52550 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 52550@debbugs.gnu.org Cc: Mathieu Othacehe Received: via spool by 52550-submit@debbugs.gnu.org id=B52550.163966002225428 (code B ref 52550); Thu, 16 Dec 2021 13:08:01 +0000 Received: (at 52550) by debbugs.gnu.org; 16 Dec 2021 13:07:02 +0000 Received: from localhost ([127.0.0.1]:34959 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTO-0006c4-JM for submit@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:02 -0500 Received: from eggs.gnu.org ([209.51.188.92]:58674) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTN-0006bV-JJ for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:01 -0500 Received: from [2001:470:142:3::e] (port=33776 helo=fencepost.gnu.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqTI-0004MO-Cf for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:06:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:Date:Subject:To:From:in-reply-to: references; bh=2dLBL6Bg7QdtZCgflS/IdgJrtgTzr3V12BcmtihRpbk=; b=DZ52+amDFonbvh mMbIDy2LkEFstMEdEFMIsngfabOqHxYlEY46QHpX2lrDweOv3m5FFAwxyIeK5FPQ1PtAcvUyS/l7c /h4sMZPLIRbFZKd6qQ8zG21FcJAJLVI1WoUC5rl+OB9nNt1VS8oXOf8TjTKUIJ1j+7dX/lBJUJySD I2nEMPnhEHPm8FFXExAs6gcQyQcYoB0e2Fo9eokEKkO3XJW+x34bsctXebgcKf+bPGi3nrhqgkjT8 IYahCmneIMIKxEHQfMvsdmY9wRYaN5A2fQyBfZnhk5uJZmO9q8nXk3djD0zEExYt8KCHD1LGQ/czn EQ0wOuM2cHu9D8e3g19g==; Received: from [2a01:e0a:19b:d9a0:2f3b:16f2:b776:3ef9] (port=57550 helo=localhost.localdomain) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqTH-0003iQ-DL; Thu, 16 Dec 2021 08:06:56 -0500 From: Mathieu Othacehe Date: Thu, 16 Dec 2021 14:06:40 +0100 Message-Id: <20211216130649.30285-1-othacehe@gnu.org> X-Mailer: git-send-email 2.34.0 MIME-Version: 1.0 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+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/build/image.scm (initialize-root-partition): Add a closure-copy? argument and honor it. --- gnu/build/image.scm | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/gnu/build/image.scm b/gnu/build/image.scm index 6eb0290256..bdd5ec25a9 100644 --- a/gnu/build/image.scm +++ b/gnu/build/image.scm @@ -166,6 +166,7 @@ (define* (initialize-root-partition root bootcfg-location bootloader-package bootloader-installer + (copy-closures? #t) (deduplicate? #t) references-graphs (register-closures? #t) @@ -176,30 +177,50 @@ (define* (initialize-root-partition root "Initialize the given ROOT directory. Use BOOTCFG and BOOTCFG-LOCATION to install the bootloader configuration. -If REGISTER-CLOSURES? is true, register REFERENCES-GRAPHS in the store. If +If COPY-CLOSURES? is true, copy all of REFERENCES-GRAPHS to the partition. If +REGISTER-CLOSURES? is true, register REFERENCES-GRAPHS in the store. If DEDUPLICATE? is true, then also deduplicate files common to CLOSURES and the rest of the store when registering the closures. SYSTEM-DIRECTORY is the name of the directory of the 'system' derivation. Pass WAL-MODE? to register-closure." + (define root-store + (string-append root (%store-directory))) + + (define tmp-store ".tmp-store") + (populate-root-file-system system-directory root) - (populate-store references-graphs root - #:deduplicate? deduplicate?) + + (when copy-closures? + (populate-store references-graphs root + #:deduplicate? deduplicate?)) ;; Populate /dev. (when make-device-nodes (make-device-nodes root)) (when register-closures? + (unless copy-closures? + ;; XXX: 'register-closure' wants to palpate the things it registers, so + ;; create a symlink to the store. + (rename-file root-store tmp-store) + (symlink (%store-directory) root-store)) + (for-each (lambda (closure) (register-closure root closure #:wal-mode? wal-mode?)) - references-graphs)) + references-graphs) + + (unless copy-closures? + (delete-file root-store) + (rename-file tmp-store root-store))) - (when bootloader-installer - (display "installing bootloader...\n") - (bootloader-installer bootloader-package #f root)) - (when bootcfg - (install-boot-config bootcfg bootcfg-location root))) + ;; There's no point installing a bootloader if we do not populate the store. + (when copy-closures? + (when bootloader-installer + (display "installing bootloader...\n") + (bootloader-installer bootloader-package #f root)) + (when bootcfg + (install-boot-config bootcfg bootcfg-location root)))) (define* (make-iso9660-image xorriso grub-mkrescue-environment grub bootcfg system-directory root target From patchwork Thu Dec 16 13:06:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Othacehe X-Patchwork-Id: 35268 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id CE2C927BBEA; Thu, 16 Dec 2021 13:09:01 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 8905827BBE9 for ; Thu, 16 Dec 2021 13:09:01 +0000 (GMT) Received: from localhost ([::1]:50552 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mxqVI-0005mt-HK for patchwork@mira.cbaines.net; Thu, 16 Dec 2021 08:09:00 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59938) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqUN-0005l7-0P for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:03 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:51686) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqUM-0004aW-Hh for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mxqUM-0006fd-E6 for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#52550] [PATCH 02/10] image: Add a shared-store? field. Resent-From: Mathieu Othacehe Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 16 Dec 2021 13:08:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52550 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 52550@debbugs.gnu.org Cc: Mathieu Othacehe Received: via spool by 52550-submit@debbugs.gnu.org id=B52550.163966002825467 (code B ref 52550); Thu, 16 Dec 2021 13:08:02 +0000 Received: (at 52550) by debbugs.gnu.org; 16 Dec 2021 13:07:08 +0000 Received: from localhost ([127.0.0.1]:34969 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTT-0006ce-3h for submit@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:08 -0500 Received: from eggs.gnu.org ([209.51.188.92]:58694) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTO-0006bW-6M for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:03 -0500 Received: from [2001:470:142:3::e] (port=33780 helo=fencepost.gnu.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqTI-0004Mw-VO for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:06:56 -0500 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=sNmSb9HWUSgWR73dlxSRSBJPlXugTLI7+fsOU2jFwXo=; b=TqiCV/jQdsaLRPNZZm50 sfeXK0MQN/q3C+pnYtgNpzmhqTZXf2w6H7t/RwfsIbrGgW0DB9niqIEo+KEm4cVcXG4gP1VUgJmCp i8AAeg29d/WtjuTBl59JMEJRTwYlGHZq9IHgd6IuJmLbcESYpmJ1lMtROMeJxhaLzDEcQBVpM6RQX 73G7K6hBbTDla1n1aoHQDsk71Tj/5fyXz9dABGKr8ybWONnBC1Yp0bTfuV1FOtHvAPs3LHBj4HEjh PlO2alYF6qwlSjF7hZHiTWG+dPX3aiB9EHKVLi6wRl2U91GsF3+l+GUWADOlD5pd4WZaHBqbAG+Pf 0q5nZlLnon69cw==; Received: from [2a01:e0a:19b:d9a0:2f3b:16f2:b776:3ef9] (port=57550 helo=localhost.localdomain) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqTI-0003iQ-UD; Thu, 16 Dec 2021 08:06:57 -0500 From: Mathieu Othacehe Date: Thu, 16 Dec 2021 14:06:41 +0100 Message-Id: <20211216130649.30285-2-othacehe@gnu.org> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211216130649.30285-1-othacehe@gnu.org> References: <20211216130649.30285-1-othacehe@gnu.org> MIME-Version: 1.0 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+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/image.scm ()[shared-store?]: New field. --- gnu/image.scm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gnu/image.scm b/gnu/image.scm index 1c954af8cf..8423cf1d9c 100644 --- a/gnu/image.scm +++ b/gnu/image.scm @@ -42,6 +42,7 @@ (define-module (gnu image) image-partitions image-compression? image-volatile-root? + image-shared-store? image-substitutable? image-type @@ -95,6 +96,8 @@ (define-record-type* (default #t)) (volatile-root? image-volatile-root? ;boolean (default #t)) + (shared-store? image-shared-store? ;boolean + (default #f)) (substitutable? image-substitutable? ;boolean (default #t))) From patchwork Thu Dec 16 13:06:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Othacehe X-Patchwork-Id: 35269 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 6526F27BBEB; Thu, 16 Dec 2021 13:09:04 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 9BA4827BBE9 for ; Thu, 16 Dec 2021 13:09:03 +0000 (GMT) Received: from localhost ([::1]:50572 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mxqVK-0005nM-Pg for patchwork@mira.cbaines.net; Thu, 16 Dec 2021 08:09:02 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59942) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqUO-0005lQ-0t for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:04 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:51685) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqUM-0004aM-65 for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mxqUM-0006fW-1N for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#52550] [PATCH 03/10] image: Add a shared-network? field. Resent-From: Mathieu Othacehe Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 16 Dec 2021 13:08:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52550 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 52550@debbugs.gnu.org Cc: Mathieu Othacehe Received: via spool by 52550-submit@debbugs.gnu.org id=B52550.163966002425447 (code B ref 52550); Thu, 16 Dec 2021 13:08:01 +0000 Received: (at 52550) by debbugs.gnu.org; 16 Dec 2021 13:07:04 +0000 Received: from localhost ([127.0.0.1]:34965 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTP-0006cN-Sz for submit@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:04 -0500 Received: from eggs.gnu.org ([209.51.188.92]:58710) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTO-0006bY-Vn for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:03 -0500 Received: from [2001:470:142:3::e] (port=33782 helo=fencepost.gnu.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqTJ-0004Nb-NL for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:06:57 -0500 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=U5OQJVPB6/JYcXRb4brNbQFDvnXPZPEombu2eIpGjk8=; b=j5/LHpBXs+V4Im3BT5sH voh77Hy97u9O4ZlQd6EYx+7HYyvlwcsuotM2Z+ouqRrnvWs4YeoynExlzWQJiSHdbsGlHas04REhe 6rNqS99GjPYjHvSi2iIax/QbuUHhbE5tjjpoYXRqWO0CcXmsCAZgULAbXSKVlSyqDtSG88foArq03 PDPu4iFvA1IbMjI1oBb5EYzlNFBFaTCL9sF18E1VHoPtB4hacsh+kXu3KFFD8JYL0jBnkmepp3tdg r5gq5wDaWwqA5jt4yGmeJi2tDW2jhs1NPlf8prGw9mQXli/Zfe+4J433VSsBqzXsLiveyxRJcAgLn d43VMGiplyMfRg==; Received: from [2a01:e0a:19b:d9a0:2f3b:16f2:b776:3ef9] (port=57550 helo=localhost.localdomain) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqTJ-0003iQ-I6; Thu, 16 Dec 2021 08:06:57 -0500 From: Mathieu Othacehe Date: Thu, 16 Dec 2021 14:06:42 +0100 Message-Id: <20211216130649.30285-3-othacehe@gnu.org> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211216130649.30285-1-othacehe@gnu.org> References: <20211216130649.30285-1-othacehe@gnu.org> MIME-Version: 1.0 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+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/image.scm ()[shared-network?]: New field. --- gnu/image.scm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gnu/image.scm b/gnu/image.scm index 8423cf1d9c..0b3a5a096b 100644 --- a/gnu/image.scm +++ b/gnu/image.scm @@ -43,6 +43,7 @@ (define-module (gnu image) image-compression? image-volatile-root? image-shared-store? + image-shared-network? image-substitutable? image-type @@ -98,6 +99,8 @@ (define-record-type* (default #t)) (shared-store? image-shared-store? ;boolean (default #f)) + (shared-network? image-shared-network? ;boolean + (default #f)) (substitutable? image-substitutable? ;boolean (default #t))) From patchwork Thu Dec 16 13:06:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Mathieu Othacehe X-Patchwork-Id: 35276 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 8B7BF27BBEA; Thu, 16 Dec 2021 13:17:21 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 43A1827BBE9 for ; Thu, 16 Dec 2021 13:17:20 +0000 (GMT) Received: from localhost ([::1]:58794 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mxqdL-0003cC-AV for patchwork@mira.cbaines.net; Thu, 16 Dec 2021 08:17:19 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59950) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqUO-0005lr-8S for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:05 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:51689) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqUN-0004aj-UZ for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:03 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mxqUM-0006fk-R6 for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#52550] [PATCH 04/10] system: image: Add docker support. Resent-From: Mathieu Othacehe Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 16 Dec 2021 13:08:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52550 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 52550@debbugs.gnu.org Cc: Mathieu Othacehe Received: via spool by 52550-submit@debbugs.gnu.org id=B52550.163966002925481 (code B ref 52550); Thu, 16 Dec 2021 13:08:02 +0000 Received: (at 52550) by debbugs.gnu.org; 16 Dec 2021 13:07:09 +0000 Received: from localhost ([127.0.0.1]:34973 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTU-0006ci-8R for submit@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:09 -0500 Received: from eggs.gnu.org ([209.51.188.92]:58726) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTS-0006bk-79 for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:06 -0500 Received: from [2001:470:142:3::e] (port=33786 helo=fencepost.gnu.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqTM-0004OY-5v for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:01 -0500 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=lP52trcD4uW/RqAL8mREiI0HFJol4baDRCCb50wGyaY=; b=XaVlg7O6yzqpyE/ITXac 6aQr13XMs4J+CYePMdNVCgfCIkZm2ijy15sA85gL/3nDHMMBpxC7pUkWbG5NySL39uJC7IsduA0lm wn5dgRUGN2V7dyXAUehQy0FBjvS0uwgRC+X5D1oNiqdjKeCz6Sq24RT/TixBSyDHOD8OeiLsgH156 ImxGxXo0pRfaYlO9AoByJXIU5S1SE17wonDhsDuVO6ThITiP498w6w1dmBeDX6AkK8njyxBNG0AUF tuf0gJ9QZTNJrvP0W5+KVusTdjdDrnGy7/mWBpn6fveR5uZpXV7VivAmQhaXgAVPmDDK8Vk2NituR 42l61WhDVC1hfg==; Received: from [2a01:e0a:19b:d9a0:2f3b:16f2:b776:3ef9] (port=57550 helo=localhost.localdomain) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqTK-0003iQ-6e; Thu, 16 Dec 2021 08:07:00 -0500 From: Mathieu Othacehe Date: Thu, 16 Dec 2021 14:06:43 +0100 Message-Id: <20211216130649.30285-4-othacehe@gnu.org> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211216130649.30285-1-othacehe@gnu.org> References: <20211216130649.30285-1-othacehe@gnu.org> MIME-Version: 1.0 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+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/system/image.scm (docker-image, docker-image-type): New variables. (system-docker-image): New procedure. (image->root-file-system): Add docker image support. (system-image): Ditto. --- gnu/system/image.scm | 125 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 116 insertions(+), 9 deletions(-) diff --git a/gnu/system/image.scm b/gnu/system/image.scm index 4b6aaf2e32..42e215f614 100644 --- a/gnu/system/image.scm +++ b/gnu/system/image.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2020 Mathieu Othacehe +;;; Copyright © 2020, 2021 Mathieu Othacehe ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen ;;; ;;; This file is part of GNU Guix. @@ -36,12 +36,14 @@ (define-module (gnu system image) #:use-module (gnu services base) #:use-module (gnu system) #:use-module (gnu system file-systems) + #:use-module (gnu system linux-container) #:use-module (gnu system uuid) #:use-module (gnu system vm) #:use-module (guix packages) #:use-module (gnu packages base) #:use-module (gnu packages bootloaders) #:use-module (gnu packages cdrom) + #:use-module (gnu packages compression) #:use-module (gnu packages disk) #:use-module (gnu packages gawk) #:use-module (gnu packages genimage) @@ -67,6 +69,7 @@ (define-module (gnu system image) efi-disk-image iso9660-image + docker-image raw-with-offset-disk-image image-with-os @@ -74,6 +77,7 @@ (define-module (gnu system image) qcow2-image-type iso-image-type uncompressed-iso-image-type + docker-image-type raw-with-offset-image-type image-with-label @@ -127,6 +131,10 @@ (define iso9660-image (label "GUIX_IMAGE") (flags '(boot))))))) +(define docker-image + (image + (format 'docker))) + (define* (raw-with-offset-disk-image #:optional (offset root-offset)) (image (format 'disk-image) @@ -179,6 +187,11 @@ (define uncompressed-iso-image-type (compression? #f)) <>)))) +(define docker-image-type + (image-type + (name 'docker) + (constructor (cut image-with-os docker-image <>)))) + (define raw-with-offset-image-type (image-type (name 'raw-with-offset) @@ -220,8 +233,7 @@ (define gcrypt-sqlite3&co (define-syntax-rule (with-imported-modules* gexp* ...) (with-extensions gcrypt-sqlite3&co (with-imported-modules `(,@(source-module-closure - '((gnu build vm) - (gnu build image) + '((gnu build image) (gnu build bootloader) (gnu build hurd-boot) (gnu build linux-boot) @@ -229,8 +241,7 @@ (define-syntax-rule (with-imported-modules* gexp* ...) #:select? not-config?) ((guix config) => ,(make-config.scm))) #~(begin - (use-modules (gnu build vm) - (gnu build image) + (use-modules (gnu build image) (gnu build bootloader) (gnu build hurd-boot) (gnu build linux-boot) @@ -337,6 +348,8 @@ (define (partition-image partition) (initializer image-root #:references-graphs '#$graph #:deduplicate? #f + #:copy-closures? (not + #$(image-shared-store? image)) #:system-directory #$os #:grub-efi #+grub-efi #:bootloader-package @@ -527,6 +540,97 @@ (define (image-with-label base-image label) (label label)) others)))))) + +;; +;; Docker image. +;; + +(define* (system-docker-image image + #:key + (name "docker-image")) + "Build a docker image for IMAGE. NAME is the base name to use for the +output file." + (define boot-program + ;; Program that runs the boot script of OS, which in turn starts shepherd. + (program-file "boot-program" + #~(let ((system (cadr (command-line)))) + (setenv "GUIX_NEW_SYSTEM" system) + (execl #$(file-append guile-3.0 "/bin/guile") + "guile" "--no-auto-compile" + (string-append system "/boot"))))) + + (define shared-network? + (image-shared-network? image)) + + (let* ((os (operating-system-with-gc-roots + (containerized-operating-system + (image-operating-system image) '() + #:shared-network? + shared-network?) + (list boot-program))) + (substitutable? (image-substitutable? image)) + (register-closures? (has-guix-service-type? os)) + (schema (and register-closures? + (local-file (search-path %load-path + "guix/store/schema.sql")))) + (name (string-append name ".tar.gz")) + (graph "system-graph")) + (define builder + (with-extensions (cons guile-json-3 ;for (guix docker) + gcrypt-sqlite3&co) ;for (guix store database) + (with-imported-modules `(,@(source-module-closure + '((guix docker) + (guix store database) + (guix build utils) + (guix build store-copy) + (gnu build image)) + #:select? not-config?) + ((guix config) => ,(make-config.scm))) + #~(begin + (use-modules (guix docker) + (guix build utils) + (gnu build image) + (srfi srfi-19) + (guix build store-copy) + (guix store database)) + + ;; Set the SQL schema location. + (sql-schema #$schema) + + ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded. + (setenv "GUIX_LOCPATH" + #+(file-append glibc-utf8-locales "/lib/locale")) + (setlocale LC_ALL "en_US.utf8") + + (set-path-environment-variable "PATH" '("bin" "sbin") '(#+tar)) + + (let ((image-root (string-append (getcwd) "/tmp-root"))) + (mkdir-p image-root) + (initialize-root-partition image-root + #:references-graphs '(#$graph) + #:copy-closures? #f + #:register-closures? #$register-closures? + #:deduplicate? #f + #:system-directory #$os) + (build-docker-image + #$output + (cons* image-root + (map store-info-item + (call-with-input-file #$graph + read-reference-graph))) + #$os + #:entry-point '(#$boot-program #$os) + #:compressor '(#+(file-append gzip "/bin/gzip") "-9n") + #:creation-time (make-time time-utc 0 1) + #:transformations `((,image-root -> "")))))))) + + (computed-file name builder + ;; Allow offloading so that this I/O-intensive process + ;; doesn't run on the build farm's head node. + #:local-build? #f + #:options `(#:references-graphs ((,graph ,os)) + #:substitutable? ,substitutable?)))) + ;; ;; Image creation. @@ -534,10 +638,11 @@ (define (image-with-label base-image label) (define (image->root-file-system image) "Return the IMAGE root partition file-system type." - (let ((format (image-format image))) - (if (eq? format 'iso9660) - "iso9660" - (partition-file-system (find-root-partition image))))) + (case (image-format image) + ((iso9660) "iso9660") + ((docker) "dummy") + (else + (partition-file-system (find-root-partition image))))) (define (root-size image) "Return the root partition size of IMAGE." @@ -671,6 +776,8 @@ (define target (cond #:register-closures? register-closures? #:inputs `(("system" ,os) ("bootcfg" ,bootcfg)))) + ((memq image-format '(docker)) + (system-docker-image image*)) ((memq image-format '(iso9660)) (system-iso9660-image image* From patchwork Thu Dec 16 13:06:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Othacehe X-Patchwork-Id: 35274 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 1078527BBEA; Thu, 16 Dec 2021 13:09:55 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 2CEF927BBE9 for ; Thu, 16 Dec 2021 13:09:51 +0000 (GMT) Received: from localhost ([::1]:52262 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mxqW6-00073C-4f for patchwork@mira.cbaines.net; Thu, 16 Dec 2021 08:09:50 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59946) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqUO-0005ll-80 for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:05 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:51687) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqUN-0004af-BL for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:03 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mxqUN-0006fr-83 for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:03 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#52550] [PATCH 05/10] system: vm: Use the image API to generate QEMU images. Resent-From: Mathieu Othacehe Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 16 Dec 2021 13:08:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52550 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 52550@debbugs.gnu.org Cc: Mathieu Othacehe Received: via spool by 52550-submit@debbugs.gnu.org id=B52550.163966003425502 (code B ref 52550); Thu, 16 Dec 2021 13:08:03 +0000 Received: (at 52550) by debbugs.gnu.org; 16 Dec 2021 13:07:14 +0000 Received: from localhost ([127.0.0.1]:34977 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTZ-0006dC-2l for submit@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:14 -0500 Received: from eggs.gnu.org ([209.51.188.92]:58772) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTT-0006cA-Um for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:08 -0500 Received: from [2001:470:142:3::e] (port=33788 helo=fencepost.gnu.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqTO-0004Pl-My for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:02 -0500 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=sSVgmgckXgmT0OqQAzKAVX9Wq1s6tjrGKEHIZfvaFrs=; b=Zgmb9ml4JnuHTVlawFNu di1WXqltOE/0GzS8Xx1BdmxX69cOtR1qWJFImbefl0l0OaNH8X9u0ORuOZ3cxQSfuWe3cjiurMqZc FlpoELpgpLkfMCbV9KaXzNFTsW+dIv8ld6pv0g/6znEsyWcddB/yxqVqGKyd4tom9XWMjpRrUDNdT vcHQnvf7GdM7k7gaUM8y5PVoLEBn7/b2jHTx/05IGHdQdKkQvkqKSjSQhPZkdkDolNfSpRmrXQ0Ek 9kxZ974yyqebBcE97Mmwh9B7libhdGjVwSjrdGInEhSe9SCxsuQX4Dg8i6mF9n7mrHnimN6gIpFHR NOKZXt14dCWBGw==; Received: from [2a01:e0a:19b:d9a0:2f3b:16f2:b776:3ef9] (port=57550 helo=localhost.localdomain) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqTM-0003iQ-OO; Thu, 16 Dec 2021 08:07:01 -0500 From: Mathieu Othacehe Date: Thu, 16 Dec 2021 14:06:44 +0100 Message-Id: <20211216130649.30285-5-othacehe@gnu.org> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211216130649.30285-1-othacehe@gnu.org> References: <20211216130649.30285-1-othacehe@gnu.org> MIME-Version: 1.0 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+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches Also add a volatile? argument to the virtual-machine record. When volatile? is true generate a QEMU script that mounts an overlay on top of a read only storage. When volatile? is false, use a persistent, read-write storage. * gnu/system/vm.scm (common-qemu-options): Add a rw-image? argument to use a persistent storage. (system-qemu-image/shared-store-script): Add a volatile? argument and honor it. Use the image API to build the QEMU image. ()[volatile?]: New field. (virtual-machine-compiler): Pass the volatile? argument to the system-qemu-image/shared-store-script procedure. --- gnu/system/vm.scm | 77 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 23 deletions(-) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 2487539b61..db5c4132c0 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -51,6 +51,8 @@ (define-module (gnu system vm) #:use-module (gnu bootloader) #:use-module (gnu bootloader grub) + #:use-module (gnu image) + #:use-module (gnu system image) #:use-module (gnu system linux-container) #:use-module (gnu system linux-initrd) #:use-module (gnu bootloader) @@ -60,7 +62,7 @@ (define-module (gnu system vm) #:use-module (gnu services base) #:use-module (gnu system uuid) - #:use-module (srfi srfi-1) + #:use-module ((srfi srfi-1) #:hide (partition)) #:use-module (srfi srfi-26) #:use-module (rnrs bytevectors) #:use-module (ice-9 match) @@ -592,7 +594,8 @@ (define (mapping->file-system mapping) (check? #f) (create-mount-point? #t))))) -(define* (virtualized-operating-system os mappings #:optional (full-boot? #f)) +(define* (virtualized-operating-system os mappings + #:key (full-boot? #f) volatile?) "Return an operating system based on OS suitable for use in a virtualized environment with the store shared with the host. MAPPINGS is a list of to realize in the virtualized OS." @@ -635,7 +638,7 @@ (define virtual-file-systems (initrd (lambda (file-systems . rest) (apply (operating-system-initrd os) file-systems - #:volatile-root? #t + #:volatile-root? volatile? rest))) ;; Disable swap. @@ -692,7 +695,8 @@ (define bootcfg #:register-closures? #f #:copy-inputs? full-boot?)) -(define* (common-qemu-options image shared-fs) +(define* (common-qemu-options image shared-fs + #:key rw-image?) "Return the a string-value gexp with the common QEMU options to boot IMAGE, with '-virtfs' options for the host file systems listed in SHARED-FS." @@ -712,8 +716,10 @@ (define (virtfs-option fs) "-device" "virtio-rng-pci,rng=guix-vm-rng" #$@(map virtfs-option shared-fs) - (format #f "-drive file=~a,if=virtio,cache=writeback,werror=report,readonly=on" - #$image))) + #$@(if rw-image? + #~((format #f "-drive file=~a,if=virtio" #$image)) + #~((format #f "-drive file=~a,if=virtio,cache=writeback,werror=report,readonly=on" + #$image))))) (define* (system-qemu-image/shared-store-script os #:key @@ -721,7 +727,8 @@ (define* (system-qemu-image/shared-store-script os (target (%current-target-system)) (qemu qemu) (graphic? #t) - (memory-size 256) + (volatile? #t) + (memory-size 2048) (mappings '()) full-boot? (disk-image-size @@ -736,20 +743,31 @@ (define* (system-qemu-image/shared-store-script os systems into the guest. When FULL-BOOT? is true, the returned script runs everything starting from the -bootloader; otherwise it directly starts the operating system kernel. The -DISK-IMAGE-SIZE parameter specifies the size in bytes of the root disk image; -it is mostly useful when FULL-BOOT? is true." - (mlet* %store-monad ((os -> (virtualized-operating-system os mappings full-boot?)) - (image (system-qemu-image/shared-store - os - #:system system - #:target target +bootloader; otherwise it directly starts the operating system kernel. When +VOLATILE? is true, an overlay is created on top of a read-only +storage. Otherwise the storage is made persistent. The DISK-IMAGE-SIZE +parameter specifies the size in bytes of the root disk image; it is mostly +useful when FULL-BOOT? is true." + (mlet* %store-monad ((os -> (virtualized-operating-system + os mappings #:full-boot? full-boot? - #:disk-image-size disk-image-size))) + #:volatile? volatile?)) + (base-image -> (system-image + (image + (inherit + (raw-with-offset-disk-image)) + (operating-system os) + (size disk-image-size) + (shared-store? + (and (not full-boot?) volatile?)) + (volatile-root? volatile?))))) (define kernel-arguments #~(list #$@(if graphic? #~() #~("console=ttyS0")) #+@(operating-system-kernel-arguments os "/dev/vda1"))) + (define rw-image + #~(format #f "/tmp/.~a-rw" (basename #$base-image))) + (define qemu-exec #~(list #+(file-append qemu "/bin/" (qemu-command (or target system))) @@ -761,17 +779,25 @@ (define qemu-exec "-initrd" #$(file-append os "/initrd") (format #f "-append ~s" (string-join #$kernel-arguments " ")))) - #$@(common-qemu-options image + #$@(common-qemu-options (if volatile? base-image rw-image) (map file-system-mapping-source - (cons %store-mapping mappings))) + (cons %store-mapping mappings)) + #:rw-image? (not volatile?)) "-m " (number->string #$memory-size) #$@options)) (define builder #~(call-with-output-file #$output (lambda (port) - (format port "#!~a~% exec ~a \"$@\"~%" - #+(file-append bash "/bin/sh") + (format port "#!~a~%" + #+(file-append bash "/bin/sh")) + (when (not #$volatile?) + (format port "~a~%" + #$(program-file "copy-image" + #~(unless (file-exists? #$rw-image) + (copy-file #$base-image #$rw-image) + (chmod #$rw-image #o640))))) + (format port "exec ~a \"$@\"~%" (string-join #$qemu-exec " ")) (chmod port #o555)))) @@ -788,6 +814,8 @@ (define-record-type* %virtual-machine (operating-system virtual-machine-operating-system) ; (qemu virtual-machine-qemu ; (default qemu-minimal)) + (volatile? virtual-machine-volatile? ;Boolean + (default #t)) (graphic? virtual-machine-graphic? ;Boolean (default #f)) (memory-size virtual-machine-memory-size ;integer (MiB) @@ -821,17 +849,19 @@ (define (port-forwardings->qemu-options forwardings) (define-gexp-compiler (virtual-machine-compiler (vm ) system target) (match vm - (($ os qemu graphic? memory-size disk-image-size ()) + (($ os qemu volatile? graphic? memory-size + disk-image-size ()) (system-qemu-image/shared-store-script os #:system system #:target target #:qemu qemu #:graphic? graphic? + #:volatile? volatile? #:memory-size memory-size #:disk-image-size disk-image-size)) - (($ os qemu graphic? memory-size disk-image-size - forwardings) + (($ os qemu volatile? graphic? memory-size + disk-image-size forwardings) (let ((options `("-nic" ,(string-append "user,model=virtio-net-pci," @@ -841,6 +871,7 @@ (define-gexp-compiler (virtual-machine-compiler (vm ) #:target target #:qemu qemu #:graphic? graphic? + #:volatile? volatile? #:memory-size memory-size #:disk-image-size disk-image-size From patchwork Thu Dec 16 13:06:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Mathieu Othacehe X-Patchwork-Id: 35273 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 6F08727BBEA; Thu, 16 Dec 2021 13:09:16 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id C8CC227BBE9 for ; Thu, 16 Dec 2021 13:09:12 +0000 (GMT) Received: from localhost ([::1]:51372 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mxqVT-0006Qr-Sl for patchwork@mira.cbaines.net; Thu, 16 Dec 2021 08:09:11 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59948) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqUO-0005lp-8D for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:05 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:51688) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqUN-0004ah-PP for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:03 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mxqUN-0006fy-Lo for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:03 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#52550] [PATCH 06/10] Remove VM generation dead-code. Resent-From: Mathieu Othacehe Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 16 Dec 2021 13:08:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52550 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 52550@debbugs.gnu.org Cc: Mathieu Othacehe Received: via spool by 52550-submit@debbugs.gnu.org id=B52550.163966004325546 (code B ref 52550); Thu, 16 Dec 2021 13:08:03 +0000 Received: (at 52550) by debbugs.gnu.org; 16 Dec 2021 13:07:23 +0000 Received: from localhost ([127.0.0.1]:34989 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTc-0006dk-AP for submit@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:23 -0500 Received: from eggs.gnu.org ([209.51.188.92]:58838) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTY-0006cf-7R for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:14 -0500 Received: from [2001:470:142:3::e] (port=33798 helo=fencepost.gnu.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqTT-0004Rp-0t for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:07 -0500 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=2uCoMcM+x4BHMGU8e6Iad/V9VA+56suh8NB0TGlcN4M=; b=a9MfBLOaUrsU2cszkAby 9uP0sw9bCn6fUU3xzEZnNShl7pdqeDcOsOMpygVqmlWxca8swslWoztcr9EnfdlF45XSaWBh2cqgb N/9rRW5+owN5xSvJlz6DWJiuKayiEDMOERYIl7M2a+1CYuXDvTLTIGEFVhaNy4/gPJA8ppi6oKXrC F55NEmcz2Fc8J9dQf+S81Xi/ioTowJ4pqhGV6Y2Ll78pmyioc/vtKOJJQkSLDRUSPHPbgKyLxV2Vg ZMtuq7bncuEjwCEBiumhkwhsud4fkXfZ0EfkO1VBisNIt4fFmZLU0eIc1WYnLWS1pkti/WE4LLfZe bIt5cVkN4ljmCw==; Received: from [2a01:e0a:19b:d9a0:2f3b:16f2:b776:3ef9] (port=57550 helo=localhost.localdomain) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqTO-0003iQ-Tg; Thu, 16 Dec 2021 08:07:03 -0500 From: Mathieu Othacehe Date: Thu, 16 Dec 2021 14:06:45 +0100 Message-Id: <20211216130649.30285-6-othacehe@gnu.org> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211216130649.30285-1-othacehe@gnu.org> References: <20211216130649.30285-1-othacehe@gnu.org> MIME-Version: 1.0 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+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches This code duplicates the (gnu system image) and (gnu build image) code. Using VM for image generation is not needed, not portable and really slow. Remove all the VM image generation code to make sure that only the image API is used. * gnu/build/vm.scm: Remove it. Move the qemu-command procedure to ... * gnu/build/marionette.scm: ... here. * gnu/local.mk (GNU_SYSTEM_MODULES): Adapt it. * tests/modules.scm: Ditto. * gnu/tests/install.scm: Ditto. * gnu/system/vm.scm: Adapt it and remove expression->derivation-in-linux-vm, qemu-img, system-qemu-image/shared-store and system-docker-image procedures. * doc/guix.texi (G-Expressions): Adapt it. --- doc/guix.texi | 4 +- gnu/build/marionette.scm | 14 +- gnu/build/vm.scm | 500 --------------------------------------- gnu/local.mk | 1 - gnu/system/vm.scm | 487 +------------------------------------- gnu/tests/install.scm | 2 +- tests/modules.scm | 6 +- 7 files changed, 21 insertions(+), 993 deletions(-) delete mode 100644 gnu/build/vm.scm diff --git a/doc/guix.texi b/doc/guix.texi index 7b1a64deb9..dd991542cf 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -10173,11 +10173,11 @@ headers, which comes in handy in this case: (with-imported-modules (source-module-closure '((guix build utils) - (gnu build vm))) + (gnu build image))) (gexp->derivation "something-with-vms" #~(begin (use-modules (guix build utils) - (gnu build vm)) + (gnu build image)) @dots{}))) @end lisp diff --git a/gnu/build/marionette.scm b/gnu/build/marionette.scm index 0ebe535526..b336024610 100644 --- a/gnu/build/marionette.scm +++ b/gnu/build/marionette.scm @@ -24,6 +24,7 @@ (define-module (gnu build marionette) #:use-module (rnrs io ports) #:use-module (ice-9 match) #:use-module (ice-9 popen) + #:use-module (ice-9 regex) #:export (marionette? make-marionette marionette-eval @@ -36,7 +37,8 @@ (define-module (gnu build marionette) %qwerty-us-keystrokes marionette-type - system-test-runner)) + system-test-runner + qemu-command)) ;;; Commentary: ;;; @@ -426,4 +428,14 @@ (define* (system-test-runner #:optional log-directory) (exit success?)))) runner)) +(define* (qemu-command #:optional (system %host-type)) + "Return the default name of the QEMU command for SYSTEM." + (let ((cpu (substring system 0 + (string-index system #\-)))) + (string-append "qemu-system-" + (cond + ((string-match "^i[3456]86$" cpu) "i386") + ((string-match "armhf" cpu) "arm") + (else cpu))))) + ;;; marionette.scm ends here diff --git a/gnu/build/vm.scm b/gnu/build/vm.scm deleted file mode 100644 index 9d32824764..0000000000 --- a/gnu/build/vm.scm +++ /dev/null @@ -1,500 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès -;;; Copyright © 2016 Christine Lemmer-Webber -;;; Copyright © 2016, 2017 Leo Famulari -;;; Copyright © 2017 Mathieu Othacehe -;;; Copyright © 2017 Marius Bakke -;;; Copyright © 2018 Chris Marusich -;;; Copyright © 2020 Tobias Geerinckx-Rice -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see . - -(define-module (gnu build vm) - #:use-module (guix build utils) - #:use-module (guix build store-copy) - #:use-module (guix build syscalls) - #:use-module (guix store database) - #:use-module (gnu build bootloader) - #:use-module (gnu build linux-boot) - #:use-module (gnu build install) - #:use-module (gnu system uuid) - #:use-module (guix records) - #:use-module ((guix combinators) #:select (fold2)) - #:use-module (ice-9 format) - #:use-module (ice-9 ftw) - #:use-module (ice-9 match) - #:use-module (ice-9 regex) - #:use-module (ice-9 popen) - #:use-module (srfi srfi-1) - #:use-module (srfi srfi-9) - #:use-module (srfi srfi-19) - #:use-module (srfi srfi-26) - #:export (qemu-command - load-in-linux-vm - format-partition - - partition - partition? - partition-device - partition-size - partition-file-system - partition-label - partition-flags - partition-initializer - - estimated-partition-size - root-partition-initializer - initialize-partition-table - initialize-hard-disk)) - -;;; Commentary: -;;; -;;; This module provides supporting code to run virtual machines and build -;;; virtual machine images using QEMU. -;;; -;;; Code: - -(define* (qemu-command #:optional (system %host-type)) - "Return the default name of the QEMU command for SYSTEM." - (let ((cpu (substring system 0 - (string-index system #\-)))) - (string-append "qemu-system-" - (cond - ((string-match "^i[3456]86$" cpu) "i386") - ((string-match "armhf" cpu) "arm") - (else cpu))))) - -(define* (load-in-linux-vm builder - #:key - output - (qemu (qemu-command)) (memory-size 512) - linux initrd - make-disk-image? - single-file-output? - (disk-image-size (* 100 (expt 2 20))) - (disk-image-format "qcow2") - (references-graphs '())) - "Run BUILDER, a Scheme file, into a VM running LINUX with INITRD, and copy -the result to OUTPUT. If SINGLE-FILE-OUTPUT? is true, copy a single file from -/xchg to OUTPUT. Otherwise, copy the contents of /xchg to a new directory -OUTPUT. - -When MAKE-DISK-IMAGE? is true, OUTPUT will contain a VM image of -DISK-IMAGE-SIZE bytes resulting from the execution of BUILDER, which may -access it via /dev/hda. - -REFERENCES-GRAPHS can specify a list of reference-graph files as produced by -the #:references-graphs parameter of 'derivation'." - - (define target-arm32? - (string-prefix? "arm-" %host-type)) - - (define target-aarch64? - (string-prefix? "aarch64-" %host-type)) - - (define target-arm? - (or target-arm32? target-aarch64?)) - - (define arch-specific-flags - `(;; On ARM, a machine has to be specified. Use "virt" machine to avoid - ;; hardware limits imposed by other machines. - ,@(if target-arm? - '("-M" "virt") - '()) - - ;; On ARM32, if the kernel is built without LPAE support, ECAM conflicts - ;; with VIRT_PCIE_MMIO causing PCI devices not to show up. Disable - ;; explicitely highmem to fix it. - ;; See: https://bugs.launchpad.net/qemu/+bug/1790975. - ,@(if target-arm32? - '("-machine" "highmem=off") - '()) - - ;; Only enable kvm if we see /dev/kvm exists. This allows users without - ;; hardware virtualization to still use these commands. KVM support is - ;; still buggy on some ARM boards. Do not use it even if available. - ,@(if (and (file-exists? "/dev/kvm") - (not target-arm?)) - '("-enable-kvm") - '()) - - ;; Pass "panic=1" so that the guest dies upon error. - "-append" - ,(string-append "panic=1 --load=" builder - - ;; The serial port name differs between emulated - ;; architectures/machines. - " console=" - (if target-arm? "ttyAMA0" "ttyS0")))) - - (when make-disk-image? - (format #t "creating ~a image of ~,2f MiB...~%" - disk-image-format (/ disk-image-size (expt 2 20))) - (force-output) - (invoke "qemu-img" "create" "-f" disk-image-format output - (number->string disk-image-size))) - - (mkdir "xchg") - (mkdir "tmp") - - (match references-graphs - ((graph-files ...) - ;; Copy the reference-graph files under xchg/ so EXP can access it. - (map (lambda (file) - (copy-file file (string-append "xchg/" file))) - graph-files)) - (_ #f)) - - (apply invoke qemu "-nographic" "-no-reboot" - ;; CPU "max" behaves as "host" when KVM is enabled, and like a system - ;; CPU with the maximum possible feature set otherwise. - "-cpu" "max" - "-m" (number->string memory-size) - "-nic" "user,model=virtio-net-pci" - "-object" "rng-random,filename=/dev/urandom,id=guix-vm-rng" - "-device" "virtio-rng-pci,rng=guix-vm-rng" - "-virtfs" - (string-append "local,id=store_dev,path=" - (%store-directory) - ",security_model=none,mount_tag=store") - "-virtfs" - (string-append "local,id=xchg_dev,path=xchg" - ",security_model=none,mount_tag=xchg") - "-virtfs" - ;; Some programs require more space in /tmp than is normally - ;; available in the guest. Accommodate such programs by sharing a - ;; temporary directory. - (string-append "local,id=tmp_dev,path=tmp" - ",security_model=none,mount_tag=tmp") - "-kernel" linux - "-initrd" initrd - (append - (if make-disk-image? - `("-device" "virtio-blk,drive=myhd" - "-drive" ,(string-append "if=none,file=" output - ",format=" disk-image-format - ",id=myhd")) - '()) - arch-specific-flags)) - - (unless (file-exists? "xchg/.exit-status") - (error "VM did not produce an exit code")) - - (match (call-with-input-file "xchg/.exit-status" read) - (0 #t) - (status (error "guest VM code exited with a non-zero status" status))) - - (delete-file "xchg/.exit-status") - - ;; When MAKE-DISK-IMAGE? is true, the image is in OUTPUT already. - (unless make-disk-image? - (if single-file-output? - (let ((graph? (lambda (name stat) - (member (basename name) references-graphs)))) - (match (find-files "xchg" (negate graph?)) - ((result) - (copy-file result output)) - (x - (error "did not find a single result file" x)))) - (begin - (mkdir output) - (copy-recursively "xchg" output))))) - -(define* (register-closure prefix closure - #:key - (schema (sql-schema))) - "Register CLOSURE in PREFIX, where PREFIX is the directory name of the -target store and CLOSURE is the name of a file containing a reference graph as -produced by #:references-graphs." - (let ((items (call-with-input-file closure read-reference-graph))) - (parameterize ((sql-schema schema)) - (with-database (store-database-file #:prefix prefix) db - (register-items db items - #:prefix prefix - #:registration-time %epoch))))) - - -;;; -;;; Partitions. -;;; - -(define-record-type* partition make-partition - partition? - (device partition-device (default #f)) - (size partition-size) - (file-system partition-file-system (default "ext4")) - (file-system-options partition-file-system-options ;passed to 'mkfs.FS' - (default '())) - (label partition-label (default #f)) - (uuid partition-uuid (default #f)) - (flags partition-flags (default '())) - (initializer partition-initializer (default (const #t)))) - -(define (estimated-partition-size graphs) - "Return the estimated size of a partition that can store the store items -given by GRAPHS, a list of file names produced by #:references-graphs." - ;; Simply add a 25% overhead. - (round (* 1.25 (closure-size graphs)))) - -(define* (initialize-partition-table device partitions - #:key - (label-type "msdos") - (offset (expt 2 20))) - "Create on DEVICE a partition table of type LABEL-TYPE, containing the given -PARTITIONS (a list of objects), starting at OFFSET bytes. On -success, return PARTITIONS with their 'device' field changed to reflect their -actual /dev name based on DEVICE." - (define (partition-options part offset index) - (cons* "mkpart" "primary" "ext2" - (format #f "~aB" offset) - (format #f "~aB" (+ offset (partition-size part))) - (append-map (lambda (flag) - (list "set" (number->string index) - (symbol->string flag) "on")) - (partition-flags part)))) - - (define (options partitions offset) - (let loop ((partitions partitions) - (offset offset) - (index 1) - (result '())) - (match partitions - (() - (concatenate (reverse result))) - ((head tail ...) - (loop tail - ;; Leave one sector (512B) between partitions to placate - ;; Parted. - (+ offset 512 (partition-size head)) - (+ 1 index) - (cons (partition-options head offset index) - result)))))) - - (format #t "creating partition table with ~a partitions (~a)...\n" - (length partitions) - (string-join (map (compose (cut string-append <> " MiB") - number->string - (lambda (size) - (round (/ size (expt 2. 20)))) - partition-size) - partitions) - ", ")) - (apply invoke "parted" "--script" - device "mklabel" label-type - (options partitions offset)) - - ;; Set the 'device' field of each partition. - (reverse - (fold2 (lambda (part result index) - (values (cons (partition - (inherit part) - (device (string-append device - (number->string index)))) - result) - (+ 1 index))) - '() - 1 - partitions))) - -(define MS_BIND 4096) ; again! - -(define* (create-ext-file-system partition type - #:key label uuid (options '())) - "Create an ext-family file system of TYPE on PARTITION. If LABEL is true, -use that as the volume name. If UUID is true, use it as the partition UUID." - (format #t "creating ~a partition... ~@[label: ~s~] ~@[uuid: ~s~]\n" - type label (and uuid (uuid->string uuid))) - (apply invoke (string-append "mkfs." type) - "-F" partition - `(,@(if label - `("-L" ,label) - '()) - ,@(if uuid - `("-U" ,(uuid->string uuid)) - '()) - ,@options))) - -(define* (create-fat-file-system partition - #:key label uuid (options '())) - "Create a FAT file system on PARTITION. The number of File Allocation Tables -will be determined based on file system size. If LABEL is true, use that as the -volume name." - ;; FIXME: UUID is ignored! - (format #t "creating FAT partition...\n") - (apply invoke "mkfs.fat" partition - (append (if label `("-n" ,label) '()) options))) - -(define* (format-partition partition type - #:key label uuid (options '())) - "Create a file system TYPE on PARTITION. If LABEL is true, use that as the -volume name. Options is a list of command-line options passed to 'mkfs.FS'." - (cond ((string-prefix? "ext" type) - (create-ext-file-system partition type #:label label #:uuid uuid - #:options options)) - ((or (string-prefix? "fat" type) (string= "vfat" type)) - (create-fat-file-system partition #:label label #:uuid uuid - #:options options)) - (else (error "Unsupported file system.")))) - -(define (initialize-partition partition) - "Format PARTITION, a object with a non-#f 'device' field, mount -it, run its initializer, and unmount it." - (let ((target "/fs")) - (format-partition (partition-device partition) - (partition-file-system partition) - #:label (partition-label partition) - #:uuid (partition-uuid partition) - #:options (partition-file-system-options partition)) - (mkdir-p target) - (mount (partition-device partition) target - (partition-file-system partition)) - - ((partition-initializer partition) target) - - (umount target) - partition)) - -(define* (root-partition-initializer #:key (closures '()) - copy-closures? - (register-closures? #t) - system-directory - (deduplicate? #t) - (make-device-nodes - make-essential-device-nodes) - (extra-directives '())) - "Return a procedure to initialize a root partition. - -If REGISTER-CLOSURES? is true, register all of CLOSURES in the partition's -store. If DEDUPLICATE? is true, then also deduplicate files common to -CLOSURES and the rest of the store when registering the closures. If -COPY-CLOSURES? is true, copy all of CLOSURES to the partition. -SYSTEM-DIRECTORY is the name of the directory of the 'system' derivation. - -EXTRA-DIRECTIVES is an optional list of directives to populate the root file -system that is passed to 'populate-root-file-system'." - (lambda (target) - (define target-store - (string-append target (%store-directory))) - - (when copy-closures? - ;; Populate the store. - (populate-store (map (cut string-append "/xchg/" <>) closures) - target - #:deduplicate? deduplicate?)) - - ;; Populate /dev. - (make-device-nodes target) - - ;; Optionally, register the inputs in the image's store. - (when register-closures? - (unless copy-closures? - ;; XXX: 'register-closure' wants to palpate the things it registers, so - ;; bind-mount the store on the target. - (mkdir-p target-store) - (mount (%store-directory) target-store "" MS_BIND)) - - (display "registering closures...\n") - (for-each (lambda (closure) - (register-closure target - (string-append "/xchg/" closure))) - closures) - (unless copy-closures? - (umount target-store))) - - ;; Add the non-store directories and files. - (display "populating...\n") - (populate-root-file-system system-directory target - #:extras extra-directives) - - ;; 'register-closure' resets timestamps and everything, so no need to do it - ;; once more in that case. - (unless register-closures? - ;; 'reset-timestamps' also resets file permissions; do that everywhere - ;; except on /dev so that /dev/null remains writable, etc. - (for-each (lambda (directory) - (reset-timestamps (string-append target "/" directory))) - (scandir target - (match-lambda - ((or "." ".." "dev") #f) - (_ #t)))) - (reset-timestamps (string-append target "/dev") - #:preserve-permissions? #t)))) - -(define (register-bootcfg-root target bootcfg) - "On file system TARGET, register BOOTCFG as a GC root." - (let ((directory (string-append target "/var/guix/gcroots"))) - (mkdir-p directory) - (symlink bootcfg (string-append directory "/bootcfg")))) - -(define* (initialize-hard-disk device - #:key - bootloader-package - bootcfg - bootcfg-location - bootloader-installer - (grub-efi #f) - (partitions '())) - "Initialize DEVICE as a disk containing all the objects listed -in PARTITIONS, and using BOOTCFG as its bootloader configuration file. - -Each partition is initialized by calling its 'initializer' procedure, -passing it a directory name where it is mounted." - - (define (partition-bootable? partition) - "Return the first partition found with the boot flag set." - (member 'boot (partition-flags partition))) - - (define (partition-esp? partition) - "Return the first EFI System Partition." - (member 'esp (partition-flags partition))) - - (let* ((partitions (initialize-partition-table device partitions)) - (root (find partition-bootable? partitions)) - (esp (find partition-esp? partitions)) - (target "/fs")) - (unless root - (error "no bootable partition specified" partitions)) - - (for-each initialize-partition partitions) - - (display "mounting root partition...\n") - (mkdir-p target) - (mount (partition-device root) target (partition-file-system root)) - (install-boot-config bootcfg bootcfg-location target) - (when bootloader-installer - (display "installing bootloader...\n") - (bootloader-installer bootloader-package device target)) - - (when esp - ;; Mount the ESP somewhere and install GRUB UEFI image. - (let ((mount-point (string-append target "/boot/efi"))) - (display "mounting EFI system partition...\n") - (mkdir-p mount-point) - (mount (partition-device esp) mount-point - (partition-file-system esp)) - - (display "creating EFI firmware image...") - (install-efi-loader grub-efi mount-point) - (display "done.\n") - - (umount mount-point))) - - ;; Register BOOTCFG as a GC root. - (register-bootcfg-root target bootcfg) - - (umount target))) - -;;; vm.scm ends here diff --git a/gnu/local.mk b/gnu/local.mk index a7106d5f77..b7db45a3b9 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -717,7 +717,6 @@ GNU_SYSTEM_MODULES = \ %D%/build/linux-modules.scm \ %D%/build/marionette.scm \ %D%/build/secret-service.scm \ - %D%/build/vm.scm \ \ %D%/tests.scm \ %D%/tests/audio.scm \ diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index db5c4132c0..3370df1c81 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -35,7 +35,7 @@ (define-module (gnu system vm) #:use-module (guix base32) #:use-module ((guix self) #:select (make-config.scm)) - #:use-module ((gnu build vm) + #:use-module ((gnu build marionette) #:select (qemu-command)) #:use-module (gnu packages base) #:use-module (gnu packages bootloaders) @@ -67,13 +67,8 @@ (define-module (gnu system vm) #:use-module (rnrs bytevectors) #:use-module (ice-9 match) - #:export (expression->derivation-in-linux-vm - qemu-image - virtualized-operating-system - - system-qemu-image/shared-store + #:export (virtualized-operating-system system-qemu-image/shared-store-script - system-docker-image virtual-machine virtual-machine?)) @@ -126,444 +121,6 @@ (define %linux-vm-file-systems %default-msize-value)) (check? #f)))) -(define not-config? - ;; Select (guix …) and (gnu …) modules, except (guix config). - (match-lambda - (('guix 'config) #f) - (('guix rest ...) #t) - (('gnu rest ...) #t) - (rest #f))) - -(define gcrypt-sqlite3&co - ;; Guile-Gcrypt, Guile-SQLite3, and their propagated inputs. - (append-map (lambda (package) - (cons package - (match (package-transitive-propagated-inputs package) - (((labels packages) ...) - packages)))) - (list guile-gcrypt guile-sqlite3))) - -(define* (expression->derivation-in-linux-vm name exp - #:key - (system (%current-system)) - (linux linux-libre) - initrd - (qemu qemu-minimal) - (env-vars '()) - (guile-for-build - (%guile-for-build)) - (file-systems - %linux-vm-file-systems) - - (single-file-output? #f) - (make-disk-image? #f) - (references-graphs #f) - (memory-size 256) - (disk-image-format "qcow2") - (disk-image-size 'guess) - - (substitutable? #t)) - "Evaluate EXP in a QEMU virtual machine running LINUX with INITRD (a -derivation). The virtual machine runs with MEMORY-SIZE MiB of memory. In the -virtual machine, EXP has access to FILE-SYSTEMS, which, by default, includes a -9p share of the store, the '/xchg' where EXP should put its output file(s), -and a 9p share of /tmp. - -If SINGLE-FILE-OUTPUT? is true, copy a single file from '/xchg' to OUTPUT. -Otherwise, copy the contents of /xchg to a new directory OUTPUT. - -When MAKE-DISK-IMAGE? is true, then create a QEMU disk image of type -DISK-IMAGE-FORMAT (e.g., 'qcow2' or 'raw'), of DISK-IMAGE-SIZE bytes and -return it. When DISK-IMAGE-SIZE is 'guess, estimate the image size based -based on the size of the closure of REFERENCES-GRAPHS. - -When REFERENCES-GRAPHS is true, it must be a list of file name/store path -pairs, as for `derivation'. The files containing the reference graphs are -made available under the /xchg CIFS share. - -SUBSTITUTABLE? determines whether the returned derivation should be marked as -substitutable." - (define user-builder - (program-file "builder-in-linux-vm" exp)) - - (define loader - ;; Invoke USER-BUILDER instead using 'primitive-load'. The reason for - ;; this is to allow USER-BUILDER to dlopen stuff by using a full-featured - ;; Guile, which it couldn't do using the statically-linked guile used in - ;; the initrd. See example at - ;; . - (program-file "linux-vm-loader" - ;; Communicate USER-BUILDER's exit status via /xchg so that - ;; the host can distinguish between success, failure, and - ;; kernel panic. - #~(let ((status (system* #$user-builder))) - (call-with-output-file "/xchg/.exit-status" - (lambda (port) - (write status port))) - (sync) - (reboot)))) - - (define-syntax-rule (check predicate) - (let-system (system target) - (predicate (or target system)))) - - (let ((initrd (or initrd - (base-initrd file-systems - #:on-error 'backtrace - #:linux linux - #:linux-modules %base-initrd-modules - #:qemu-networking? #t)))) - - (define builder - ;; Code that launches the VM that evaluates EXP. - (with-extensions gcrypt-sqlite3&co - (with-imported-modules `(,@(source-module-closure - '((guix build utils) - (gnu build vm)) - #:select? not-config?) - - ;; For consumption by (gnu store database). - ((guix config) => ,(make-config.scm))) - #~(begin - (use-modules (guix build utils) - (gnu build vm)) - - ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded - ;; by 'estimated-partition-size' below. - (setenv "GUIX_LOCPATH" - #+(file-append glibc-utf8-locales "/lib/locale")) - (setlocale LC_ALL "en_US.utf8") - - (let* ((native-inputs - '#+(list qemu (canonical-package coreutils))) - (linux (string-append - #+linux "/" - #+(system-linux-image-file-name system))) - (initrd #+initrd) - (loader #+loader) - (graphs '#$(match references-graphs - (((graph-files . _) ...) graph-files) - (_ #f))) - (target #$(let-system (system target) - (or target system))) - (size #$(if (eq? 'guess disk-image-size) - #~(+ (* 70 (expt 2 20)) ;ESP - (estimated-partition-size graphs)) - disk-image-size))) - - (set-path-environment-variable "PATH" '("bin") native-inputs) - - (load-in-linux-vm loader - #:output #$output - #:linux linux #:initrd initrd - #:qemu (qemu-command target) - #:memory-size #$memory-size - #:make-disk-image? #$make-disk-image? - #:single-file-output? #$single-file-output? - #:disk-image-format #$disk-image-format - #:disk-image-size size - #:references-graphs graphs)))))) - - (gexp->derivation name builder - ;; TODO: Require the "kvm" feature. - #:system system - #:target #f ;EXP is always executed natively - #:env-vars env-vars - #:guile-for-build guile-for-build - #:references-graphs references-graphs - #:substitutable? substitutable?))) - -(define (has-guix-service-type? os) - "Return true if OS contains a service of the type GUIX-SERVICE-TYPE." - (not (not (find (lambda (service) - (eq? (service-kind service) guix-service-type)) - (operating-system-services os))))) - -(define* (qemu-image #:key - (name "qemu-image") - (system (%current-system)) - (target (%current-target-system)) - (qemu qemu-minimal) - (disk-image-size 'guess) - (disk-image-format "qcow2") - (file-system-type "ext4") - (file-system-options '()) - (device-nodes 'linux) - (extra-directives '()) - file-system-label - file-system-uuid - os - bootcfg-drv - bootloader - (register-closures? (has-guix-service-type? os)) - (inputs '()) - copy-inputs? - (substitutable? #t)) - "Return a bootable, stand-alone QEMU image of type DISK-IMAGE-FORMAT (e.g., -'qcow2' or 'raw'), with a root partition of type FILE-SYSTEM-TYPE. -Optionally, FILE-SYSTEM-LABEL can be specified as the volume name for the root -partition; likewise FILE-SYSTEM-UUID, if true, specifies the UUID of the root -partition (a UUID object). FILE-SYSTEM-OPTIONS is an optional list of -command-line options passed to 'mkfs.ext4' (or similar). - -The returned image is a full disk image that runs OS-DERIVATION, -with a GRUB installation that uses GRUB-CONFIGURATION as its configuration -file (GRUB-CONFIGURATION must be the name of a file in the VM.) - -INPUTS is a list of inputs (as for packages). When COPY-INPUTS? is true, copy -all of INPUTS into the image being built. When REGISTER-CLOSURES? is true, -register INPUTS in the store database of the image so that Guix can be used in -the image. By default, REGISTER-CLOSURES? is set to true only if a service of -type GUIX-SERVICE-TYPE is present in the services definition of the operating -system. - -When DEVICE-NODES is 'linux, create Linux-device block and character devices -under /dev. When it is 'hurd, do Hurdish things. - -EXTRA-DIRECTIVES is an optional list of directives to populate the root file -system that is passed to 'populate-root-file-system'." - (define schema - (and register-closures? - (local-file (search-path %load-path - "guix/store/schema.sql")))) - - (define preserve-target - (if target - (lambda (obj) - (with-parameters ((%current-target-system target)) - obj)) - identity)) - - (define inputs* - (map (match-lambda - ((name thing) - `(,name ,(preserve-target thing))) - ((name thing output) - `(,name ,(preserve-target thing) ,output))) - inputs)) - - (expression->derivation-in-linux-vm - name - (with-extensions gcrypt-sqlite3&co - (with-imported-modules `(,@(source-module-closure '((gnu build vm) - (gnu build bootloader) - (gnu build hurd-boot) - (guix store database) - (guix build utils)) - #:select? not-config?) - ((guix config) => ,(make-config.scm))) - #~(begin - (use-modules (gnu build bootloader) - (gnu build vm) - ((gnu build hurd-boot) - #:select (make-hurd-device-nodes)) - ((gnu build linux-boot) - #:select (make-essential-device-nodes)) - (guix store database) - (guix build utils) - (srfi srfi-26) - (ice-9 binary-ports)) - - (sql-schema #$schema) - - ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded. - (setenv "GUIX_LOCPATH" - #+(file-append glibc-utf8-locales "/lib/locale")) - (setlocale LC_ALL "en_US.utf8") - - (let ((inputs - '#+(append (list parted e2fsprogs dosfstools) - (map canonical-package - (list sed grep coreutils findutils gawk)))) - - ;; This variable is unused but allows us to add INPUTS-TO-COPY - ;; as inputs. - (to-register - '#$(map (match-lambda - ((name thing) thing) - ((name thing output) `(,thing ,output))) - inputs*))) - - (set-path-environment-variable "PATH" '("bin" "sbin") inputs) - - (let* ((graphs '#$(match inputs - (((names . _) ...) - names))) - (initialize (root-partition-initializer - #:extra-directives '#$extra-directives - #:closures graphs - #:copy-closures? #$copy-inputs? - #:register-closures? #$register-closures? - #:system-directory #$(preserve-target os) - - #:make-device-nodes - #$(match device-nodes - ('linux #~make-essential-device-nodes) - ('hurd #~make-hurd-device-nodes)) - - ;; Disable deduplication to speed things up, - ;; and because it doesn't help much for a - ;; single system generation. - #:deduplicate? #f)) - (root-size #$(if (eq? 'guess disk-image-size) - #~(max - ;; Minimum 20 MiB root size - (* 20 (expt 2 20)) - (estimated-partition-size - (map (cut string-append "/xchg/" <>) - graphs))) - (- disk-image-size - (* 50 (expt 2 20))))) - (partitions - (append - (list (partition - (size root-size) - (label #$file-system-label) - (uuid #$(and=> file-system-uuid - uuid-bytevector)) - (file-system #$file-system-type) - (file-system-options '#$file-system-options) - (flags '(boot)) - (initializer initialize))) - ;; Append a small EFI System Partition for use with UEFI - ;; bootloaders if we are not targeting ARM because UEFI - ;; support in U-Boot is experimental. - ;; - ;; FIXME: ‘target-arm?’ may be not operate on the right - ;; system/target values. Rewrite using ‘let-system’ when - ;; available. - (if #$(target-arm?) - '() - (list (partition - ;; The standalone grub image is about 10MiB, but - ;; leave some room for custom or multiple images. - (size (* 40 (expt 2 20))) - (label "GNU-ESP") ;cosmetic only - ;; Use "vfat" here since this property is used - ;; when mounting. The actual FAT-ness is based - ;; on file system size (16 in this case). - (file-system "vfat") - (flags '(esp))))))) - (grub-efi #$(and (not (target-arm?)) grub-efi))) - (initialize-hard-disk "/dev/vda" - #:partitions partitions - #:grub-efi grub-efi - #:bootloader-package - #+(bootloader-package bootloader) - #:bootcfg #$(preserve-target bootcfg-drv) - #:bootcfg-location - #$(bootloader-configuration-file bootloader) - #:bootloader-installer - #+(bootloader-installer bootloader))))))) - #:system system - #:make-disk-image? #t - #:disk-image-size disk-image-size - #:disk-image-format disk-image-format - #:references-graphs inputs* - #:substitutable? substitutable?)) - -(define* (system-docker-image os - #:key - (name "guix-docker-image") - (memory-size 256) - (register-closures? (has-guix-service-type? os)) - shared-network?) - "Build a docker image. OS is the desired . NAME is the -base name to use for the output file. When SHARED-NETWORK? is true, assume -that the container will share network with the host and thus doesn't need a -DHCP client, nscd, and so on. - -When REGISTER-CLOSURES? is true, register the closure of OS with Guix in the -resulting Docker image. By default, REGISTER-CLOSURES? is set to true only if -a service of type GUIX-SERVICE-TYPE is present in the services definition of -the operating system." - (define schema - (and register-closures? - (local-file (search-path %load-path - "guix/store/schema.sql")))) - - (define boot-program - ;; Program that runs the boot script of OS, which in turn starts shepherd. - (program-file "boot-program" - #~(let ((system (cadr (command-line)))) - (setenv "GUIX_NEW_SYSTEM" system) - (execl #$(file-append guile-3.0 "/bin/guile") - "guile" "--no-auto-compile" - (string-append system "/boot"))))) - - - (let ((os (operating-system-with-gc-roots - (containerized-operating-system os '() - #:shared-network? - shared-network?) - (list boot-program))) - (name (string-append name ".tar.gz")) - (graph "system-graph")) - (define build - (with-extensions (cons guile-json-3 ;for (guix docker) - gcrypt-sqlite3&co) ;for (guix store database) - (with-imported-modules `(,@(source-module-closure - '((guix docker) - (guix store database) - (guix build utils) - (guix build store-copy) - (gnu build vm)) - #:select? not-config?) - ((guix config) => ,(make-config.scm))) - #~(begin - (use-modules (guix docker) - (guix build utils) - (gnu build vm) - (srfi srfi-19) - (guix build store-copy) - (guix store database)) - - ;; Set the SQL schema location. - (sql-schema #$schema) - - ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded. - (setenv "GUIX_LOCPATH" - #+(file-append glibc-utf8-locales "/lib/locale")) - (setlocale LC_ALL "en_US.utf8") - - (let* (;; This initializer requires elevated privileges that are - ;; not normally available in the build environment (e.g., - ;; it needs to create device nodes). In order to obtain - ;; such privileges, we run it as root in a VM. - (initialize (root-partition-initializer - #:closures '(#$graph) - #:register-closures? #$register-closures? - #:system-directory #$os - ;; De-duplication would fail due to - ;; cross-device link errors, so don't do it. - #:deduplicate? #f)) - ;; Even as root in a VM, the initializer would fail due to - ;; lack of privileges if we use a root-directory that is on - ;; a file system that is shared with the host (e.g., /tmp). - (root-directory "/guix-system-root")) - (set-path-environment-variable "PATH" '("bin" "sbin") '(#+tar)) - (mkdir root-directory) - (initialize root-directory) - (build-docker-image - (string-append "/xchg/" #$name) ;; The output file. - (cons* root-directory - (map store-info-item - (call-with-input-file - (string-append "/xchg/" #$graph) - read-reference-graph))) - #$os - #:entry-point '(#$boot-program #$os) - #:compressor '(#+(file-append gzip "/bin/gzip") "-9n") - #:creation-time (make-time time-utc 0 1) - #:transformations `((,root-directory -> "")))))))) - - (expression->derivation-in-linux-vm - name build - #:memory-size memory-size - #:make-disk-image? #f - #:single-file-output? #t - #:references-graphs `((,graph ,os))))) - ;;; ;;; VMs that share file systems with the host. @@ -655,46 +212,6 @@ (define virtual-file-systems (needed-for-boot? #t)) virtual-file-systems))))) -(define* (system-qemu-image/shared-store - os - #:key - (system (%current-system)) - (target (%current-target-system)) - full-boot? - (disk-image-size (* (if full-boot? 500 30) (expt 2 20)))) - "Return a derivation that builds a QEMU image of OS that shares its store -with the host. - -When FULL-BOOT? is true, return an image that does a complete boot sequence, -bootloaded included; thus, make a disk image that contains everything the -bootloader refers to: OS kernel, initrd, bootloader data, etc." - (define root-uuid - ;; Use a fixed UUID to improve determinism. - (operating-system-uuid os 'dce)) - - (define bootcfg - (operating-system-bootcfg os)) - - ;; XXX: When FULL-BOOT? is true, we end up creating an image that contains - ;; BOOTCFG and all its dependencies, including the output of OS. - ;; This is more than needed (we only need the kernel, initrd, GRUB for its - ;; font, and the background image), but it's hard to filter that. - (qemu-image #:os os - #:system system - #:target target - #:bootcfg-drv bootcfg - #:bootloader (bootloader-configuration-bootloader - (operating-system-bootloader os)) - #:disk-image-size disk-image-size - #:file-system-uuid root-uuid - #:inputs (if full-boot? - `(("bootcfg" ,bootcfg)) - '()) - - ;; XXX: Passing #t here is too slow, so let it off by default. - #:register-closures? #f - #:copy-inputs? full-boot?)) - (define* (common-qemu-options image shared-fs #:key rw-image?) "Return the a string-value gexp with the common QEMU options to boot IMAGE, diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm index 9602efebe7..154f98b2e1 100644 --- a/gnu/tests/install.scm +++ b/gnu/tests/install.scm @@ -31,7 +31,7 @@ (define-module (gnu tests install) #:use-module (gnu system image) #:use-module (gnu system install) #:use-module (gnu system vm) - #:use-module ((gnu build vm) #:select (qemu-command)) + #:use-module ((gnu build marionette) #:select (qemu-command)) #:use-module (gnu packages admin) #:use-module (gnu packages bootloaders) #:use-module (gnu packages commencement) ;for 'guile-final' diff --git a/tests/modules.scm b/tests/modules.scm index 57019c600c..e70d2d9e08 100644 --- a/tests/modules.scm +++ b/tests/modules.scm @@ -39,10 +39,10 @@ (define-module (test-modules) (live-module-closure '((gnu build install))) (source-module-closure '((gnu build install))))) -(test-assert "closure of (gnu build vm)" +(test-assert "closure of (gnu build image)" (lset= equal? - (live-module-closure '((gnu build vm))) - (source-module-closure '((gnu build vm))))) + (live-module-closure '((gnu build image))) + (source-module-closure '((gnu build image))))) (test-equal "&missing-dependency-error" '(something that does not exist) From patchwork Thu Dec 16 13:06:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Othacehe X-Patchwork-Id: 35272 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 8C2E727BBEA; Thu, 16 Dec 2021 13:09:15 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id CE6A527BBEB for ; Thu, 16 Dec 2021 13:09:13 +0000 (GMT) Received: from localhost ([::1]:51464 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mxqVU-0006UX-Sw for patchwork@mira.cbaines.net; Thu, 16 Dec 2021 08:09:12 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59952) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqUO-0005m3-Gf for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:05 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:51690) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqUO-0004b6-7s for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:04 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mxqUO-0006g6-48 for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:04 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#52550] [PATCH 07/10] scripts: system: Deprecate the docker-image command. Resent-From: Mathieu Othacehe Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 16 Dec 2021 13:08:04 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52550 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 52550@debbugs.gnu.org Cc: Mathieu Othacehe Received: via spool by 52550-submit@debbugs.gnu.org id=B52550.163966004325554 (code B ref 52550); Thu, 16 Dec 2021 13:08:04 +0000 Received: (at 52550) by debbugs.gnu.org; 16 Dec 2021 13:07:23 +0000 Received: from localhost ([127.0.0.1]:34991 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTj-0006dy-2X for submit@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:23 -0500 Received: from eggs.gnu.org ([209.51.188.92]:58882) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTa-0006cw-2Q for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:15 -0500 Received: from [2001:470:142:3::e] (port=33800 helo=fencepost.gnu.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqTU-0004SO-SD for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:08 -0500 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=KFVpiOh2Y4P+iROfb61G/X25JaI/C3MF1uD4eILvH+s=; b=V5pxMIdmMAm0GWJiwleC h7ViuxlXH2SBI7MTchRVtaUBVDHcxI/2aeiaR4/batE7msfTFasqTEPFkYFgJfDhCOHqKch2mjCKc Uco6I+FTHfW2rrO3eZsZoSEY/uRl9eNrdNjoWhmAXD3V8uYDTxPQ2roa1RSMDSBGjelj9NekcYIH5 3fsuyTTNNRhyD1iUQ83rS3Mfk9OP2Uulr12XmFMy+nXifbumEGcpy6cCUvLuVg7d6aUVifKNqsGVa G8N3IMFqyvt9azf9E/C8G20SkSka2WxI7fCKycweGR0jNji6keGYMAQnMT5rXkn6EQxzXx247WBxo CXCn6E8YefplsQ==; Received: from [2a01:e0a:19b:d9a0:2f3b:16f2:b776:3ef9] (port=57550 helo=localhost.localdomain) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqTR-0003iQ-S0; Thu, 16 Dec 2021 08:07:07 -0500 From: Mathieu Othacehe Date: Thu, 16 Dec 2021 14:06:46 +0100 Message-Id: <20211216130649.30285-7-othacehe@gnu.org> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211216130649.30285-1-othacehe@gnu.org> References: <20211216130649.30285-1-othacehe@gnu.org> MIME-Version: 1.0 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+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * guix/scripts/system.scm (system-derivation-for-action): Use the image API to generate the docker images and deprecate the docker-image command. (process-action): Ditto. * doc/guix.texi (Invoking guix system): Adapt it. --- doc/guix.texi | 19 +++++-------------- guix/scripts/system.scm | 22 ++++++++++++---------- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index dd991542cf..f0f5538427 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -34986,15 +34986,6 @@ QEMU monitor and the VM. @cindex System images, creation in various formats @cindex Creating system images in various formats @item image -@itemx docker-image -Return a virtual machine, disk image, or Docker image of the operating -system declared in @var{file} that stands alone. By default, -@command{guix system} estimates the size of the image needed to store -the system, but you can use the @option{--image-size} option to specify -a value. Docker images are built to contain exactly what they need, so -the @option{--image-size} option is ignored in the case of -@code{docker-image}. - @cindex image, creating disk images The @code{image} command can produce various image types. The image type can be selected using the @option{--image-type} option. It @@ -35040,11 +35031,11 @@ uses the SeaBIOS BIOS by default, expecting a bootloader to be installed in the Master Boot Record (MBR). @cindex docker-image, creating docker images -When using @code{docker-image}, a Docker image is produced. Guix builds -the image from scratch, not from a pre-existing Docker base image. As a -result, it contains @emph{exactly} what you define in the operating -system configuration file. You can then load the image and launch a -Docker container using commands like the following: +When using the @code{docker} image type, a Docker image is produced. +Guix builds the image from scratch, not from a pre-existing Docker base +image. As a result, it contains @emph{exactly} what you define in the +operating system configuration file. You can then load the image and +launch a Docker container using commands like the following: @example image_id="$(docker load < guix-system-docker-image.tar.gz)" diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index 1db788a534..a5d9bb4779 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -713,16 +713,14 @@ (define* (system-derivation-for-action image action image-size (* 70 (expt 2 20))) #:mappings mappings)) - ((image disk-image vm-image) + ((image disk-image vm-image docker-image) (when (eq? action 'disk-image) (warning (G_ "'disk-image' is deprecated: use 'image' instead~%"))) (when (eq? action 'vm-image) (warning (G_ "'vm-image' is deprecated: use 'image' instead~%"))) - (lower-object (system-image image))) - ((docker-image) - (system-docker-image os - #:memory-size 1024 - #:shared-network? container-shared-network?))))) + (when (eq? action 'docker-image) + (warning (G_ "'docker-image' is deprecated: use 'image' instead~%"))) + (lower-object (system-image image)))))) (define (maybe-suggest-running-guix-pull) "Suggest running 'guix pull' if this has never been done before." @@ -1214,11 +1212,14 @@ (define save-provenance? (label (assoc-ref opts 'label)) (image-type (lookup-image-type-by-name (assoc-ref opts 'image-type))) - (image (let* ((image-type (if (eq? action 'vm-image) - qcow2-image-type - image-type)) + (image (let* ((image-type (case action + ((vm-image) qcow2-image-type) + ((docker-image) docker-image-type) + (else image-type))) (image-size (assoc-ref opts 'image-size)) (volatile? (assoc-ref opts 'volatile-root?)) + (shared-network? + (assoc-ref opts 'container-shared-network?)) (base-image (if (operating-system? obj) (os->image obj #:type image-type) @@ -1228,7 +1229,8 @@ (define save-provenance? (image-with-label base-image label) base-image)) (size image-size) - (volatile-root? volatile?)))) + (volatile-root? volatile?) + (shared-network? shared-network?)))) (os (image-operating-system image)) (target-file (match args ((first second) second) From patchwork Thu Dec 16 13:06:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Othacehe X-Patchwork-Id: 35277 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id F3B2727BBEA; Thu, 16 Dec 2021 13:17:41 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 67DC227BBE9 for ; Thu, 16 Dec 2021 13:17:41 +0000 (GMT) Received: from localhost ([::1]:59234 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mxqdg-0003uo-Cq for patchwork@mira.cbaines.net; Thu, 16 Dec 2021 08:17:40 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59962) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqUQ-0005mo-3O for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:06 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:51691) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqUO-0004bH-Lq for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:05 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mxqUO-0006gE-Gu for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:04 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#52550] [PATCH 08/10] scripts: system: Pass the volatile field to VM generation. Resent-From: Mathieu Othacehe Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 16 Dec 2021 13:08:04 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52550 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 52550@debbugs.gnu.org Cc: Mathieu Othacehe Received: via spool by 52550-submit@debbugs.gnu.org id=B52550.163966004425561 (code B ref 52550); Thu, 16 Dec 2021 13:08:04 +0000 Received: (at 52550) by debbugs.gnu.org; 16 Dec 2021 13:07:24 +0000 Received: from localhost ([127.0.0.1]:34993 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTj-0006e7-NU for submit@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:23 -0500 Received: from eggs.gnu.org ([209.51.188.92]:58884) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTa-0006d2-8D for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:15 -0500 Received: from [2001:470:142:3::e] (port=33802 helo=fencepost.gnu.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqTV-0004Sd-20 for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:09 -0500 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=DKqkG+JSqnchfSJIkWAU0S3s4VOq+AGNdR/ffQsTQFs=; b=Ud5F0ppa9ajA7gJvPuIG nyIce6LaXpQlajEyDGjCxKYtjMbpwQjLgg2eelYo3DeGGbFCq+juuN079q8EuQk+Wm5tzl1bA3B/v LrDHJukugoJ492qx7qIGxZ8KGrkLcM1x7atv6Sgg69l8H03Z6PCiIJmJ3Yc4EYVKfWhiM84zIbjtX RF9iz7/oq/7WJ6A28GJyIFgp8vEjhpmLtzjVQnlP/xZhXlV2FAA0ZtNg3opk5AxaD1ROFqGcQ7CXr UHqOddp5JtwCGZ9OlB1H5U4fneu7TVwHRSffSR9mduE3PdP2h0c8d0Y9mLqa2CRmV17elPDSi04m8 TiUpKvX3tcwSTw==; Received: from [2a01:e0a:19b:d9a0:2f3b:16f2:b776:3ef9] (port=57550 helo=localhost.localdomain) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqTT-0003iQ-NX; Thu, 16 Dec 2021 08:07:09 -0500 From: Mathieu Othacehe Date: Thu, 16 Dec 2021 14:06:47 +0100 Message-Id: <20211216130649.30285-8-othacehe@gnu.org> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211216130649.30285-1-othacehe@gnu.org> References: <20211216130649.30285-1-othacehe@gnu.org> MIME-Version: 1.0 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+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * guix/scripts/system.scm (system-derivation-for-action): Add new volatile? argument and pass it to system-qemu-image/shared-store-script. (perform-action): Add new volatile? argument and pass it to system-derivation-for-action. (process-action): Pass the volatile? argument to perform-action. --- guix/scripts/system.scm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index a5d9bb4779..a73fe55418 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -689,6 +689,7 @@ (define file-systems (define* (system-derivation-for-action image action #:key full-boot? + volatile? (graphic? #t) container-shared-network? mappings) @@ -707,6 +708,7 @@ (define* (system-derivation-for-action image action ((vm) (system-qemu-image/shared-store-script os #:full-boot? full-boot? + #:volatile? volatile? #:graphic? graphic? #:disk-image-size (if full-boot? @@ -772,6 +774,7 @@ (define* (perform-action action image dry-run? derivations-only? use-substitutes? target full-boot? + volatile? (graphic? #t) container-shared-network? (mappings '()) @@ -826,6 +829,7 @@ (define bootcfg (mlet* %store-monad ((sys (system-derivation-for-action image action #:full-boot? full-boot? + #:volatile? volatile? #:graphic? graphic? #:container-shared-network? container-shared-network? #:mappings mappings)) @@ -1277,6 +1281,7 @@ (define (graph-backend) #:validate-reconfigure (assoc-ref opts 'validate-reconfigure) #:full-boot? (assoc-ref opts 'full-boot?) + #:volatile? (assoc-ref opts 'volatile-root?) #:graphic? (not (assoc-ref opts 'no-graphic?)) #:container-shared-network? (assoc-ref opts 'container-shared-network?) From patchwork Thu Dec 16 13:06:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Othacehe X-Patchwork-Id: 35275 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 6593727BBEA; Thu, 16 Dec 2021 13:10:11 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id B178B27BBE9 for ; Thu, 16 Dec 2021 13:10:07 +0000 (GMT) Received: from localhost ([::1]:52342 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mxqWK-000764-8Z for patchwork@mira.cbaines.net; Thu, 16 Dec 2021 08:10:05 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59960) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqUQ-0005mh-3Q for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:06 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:51692) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqUP-0004bJ-26 for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:05 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mxqUO-0006gL-UW for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:04 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#52550] [PATCH 09/10] scripts: system: Use the disk-image size argument for VM generation. Resent-From: Mathieu Othacehe Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 16 Dec 2021 13:08:04 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52550 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 52550@debbugs.gnu.org Cc: Mathieu Othacehe Received: via spool by 52550-submit@debbugs.gnu.org id=B52550.163966004425569 (code B ref 52550); Thu, 16 Dec 2021 13:08:04 +0000 Received: (at 52550) by debbugs.gnu.org; 16 Dec 2021 13:07:24 +0000 Received: from localhost ([127.0.0.1]:34995 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTk-0006eE-0Z for submit@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:24 -0500 Received: from eggs.gnu.org ([209.51.188.92]:58902) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTc-0006dA-0R for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:16 -0500 Received: from [2001:470:142:3::e] (port=33804 helo=fencepost.gnu.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqTV-0004Sp-RM for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:10 -0500 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=1LAqdqC8QqM0gZ724VXeCDguVqKfpTASfYWs4/EizIA=; b=l9ylw/g9h5hAXfZGaAL8 xDgb9HEp+4FZ/i3Lhf4vs6LjI4bC/vA9yjGhnQ6iVYtTBIrQMQLElPfSBNZtyTARr401xOUTDMNUd bF9O1RWTy6s1zbYufTAoUtmSRCWIdrNCGxSd/wock8FkEkux8mGgrE/hYmW9aJjdCrX2nVZTTvVa5 rJ0IQxLkjs5fH00a89zQvH7c7X2hC06fZxuzlHieGnjm+vnsKMmLnFnNXUDp9cHbQVynl1No3GSsk SgkS5JZCwg5xGWN7ryIMG1cfuTXcvzCfckH1MqKF0yMfXVS9Xy4js4h6AK4i1nMzds/jPY3bcHxxv lExI2SAuFjjepA==; Received: from [2a01:e0a:19b:d9a0:2f3b:16f2:b776:3ef9] (port=57550 helo=localhost.localdomain) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqTV-0003iQ-Io; Thu, 16 Dec 2021 08:07:10 -0500 From: Mathieu Othacehe Date: Thu, 16 Dec 2021 14:06:48 +0100 Message-Id: <20211216130649.30285-9-othacehe@gnu.org> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211216130649.30285-1-othacehe@gnu.org> References: <20211216130649.30285-1-othacehe@gnu.org> MIME-Version: 1.0 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+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * guix/scripts/system.scm (system-derivation-for-action): Use the given image-size unconditionnaly when calling system-qemu-image/shared-store-script. --- guix/scripts/system.scm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index a73fe55418..f7e17d2db4 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -710,10 +710,7 @@ (define* (system-derivation-for-action image action #:full-boot? full-boot? #:volatile? volatile? #:graphic? graphic? - #:disk-image-size - (if full-boot? - image-size - (* 70 (expt 2 20))) + #:disk-image-size image-size #:mappings mappings)) ((image disk-image vm-image docker-image) (when (eq? action 'disk-image) From patchwork Thu Dec 16 13:06:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Othacehe X-Patchwork-Id: 35271 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id A072927BBEC; Thu, 16 Dec 2021 13:09:14 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id A359B27BBEA for ; Thu, 16 Dec 2021 13:09:13 +0000 (GMT) Received: from localhost ([::1]:51490 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mxqVU-0006VP-Mk for patchwork@mira.cbaines.net; Thu, 16 Dec 2021 08:09:12 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59964) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqUQ-0005mq-4U for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:06 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:51693) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqUP-0004bK-EC for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:05 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mxqUP-0006gT-Ah for guix-patches@gnu.org; Thu, 16 Dec 2021 08:08:05 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#52550] [PATCH 10/10] tests: docker: Fix it. Resent-From: Mathieu Othacehe Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 16 Dec 2021 13:08:05 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52550 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 52550@debbugs.gnu.org Cc: Mathieu Othacehe Received: via spool by 52550-submit@debbugs.gnu.org id=B52550.163966004425575 (code B ref 52550); Thu, 16 Dec 2021 13:08:05 +0000 Received: (at 52550) by debbugs.gnu.org; 16 Dec 2021 13:07:24 +0000 Received: from localhost ([127.0.0.1]:34997 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTk-0006eL-9n for submit@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:24 -0500 Received: from eggs.gnu.org ([209.51.188.92]:58900) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mxqTc-0006d9-0L for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:16 -0500 Received: from [2001:470:142:3::e] (port=33808 helo=fencepost.gnu.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mxqTW-0004Sq-HH for 52550@debbugs.gnu.org; Thu, 16 Dec 2021 08:07:10 -0500 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=bVVB2V0YPLsWxTOB9dqUEflJkOvGOU2hD+1jtHG+gCY=; b=X02d2A80jQVGi7hsPInB dBNQcE2yjtfxMBYJ2n5MdklHK0n0I8HJgT7OEBVA2cqT3DtUwbKTV/Ka9W1wyWQF67oxq9Hac7IyU hPI1LulcsWkEwdXoDkch1tDe/IMyTyVflzq/5A0Wue6wIXa4iWvD4UYPSGhudIToiRhF+DnKbc76v QcWCLe95i0H5eSvGz7wts06Wor4efeRY9rB+z/2gYFJ5pTsXq8w0RKt9oa2m4JSQwOeEmM+neRzAA q/JvkQTePp7VUQPWs6EBWgkm/FFMYSS9j/nR9koJaG8luUbNXVWfcx4THmgHaTTEra9BzQh5HQQFg eiB52gt7noQG1A==; Received: from [2a01:e0a:19b:d9a0:2f3b:16f2:b776:3ef9] (port=57550 helo=localhost.localdomain) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mxqTW-0003iQ-Di; Thu, 16 Dec 2021 08:07:10 -0500 From: Mathieu Othacehe Date: Thu, 16 Dec 2021 14:06:49 +0100 Message-Id: <20211216130649.30285-10-othacehe@gnu.org> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211216130649.30285-1-othacehe@gnu.org> References: <20211216130649.30285-1-othacehe@gnu.org> MIME-Version: 1.0 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+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches The docker tests are broken because the docker overlay doesn't support running on our own storage overlay. Use the new volatile? field to spawn a VM with a persistent storage and no overlay. * gnu/tests/docker.scm (run-docker-test): Add the docker-tarball to the gc roots as the host store is not shared anymore. Spawn a VM without volatile storage. (run-docker-system-test): Ditto. (%test-docker-system): Adapt it to use the image API. --- gnu/tests/docker.scm | 51 +++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm index bc119988b7..6302bd0727 100644 --- a/gnu/tests/docker.scm +++ b/gnu/tests/docker.scm @@ -18,9 +18,11 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu tests docker) + #:use-module (gnu image) #:use-module (gnu tests) #:use-module (gnu system) #:use-module (gnu system file-systems) + #:use-module (gnu system image) #:use-module (gnu system vm) #:use-module (gnu services) #:use-module (gnu services dbus) @@ -35,7 +37,7 @@ (define-module (gnu tests docker) #:use-module (guix monads) #:use-module (guix packages) #:use-module (guix profiles) - #:use-module (guix scripts pack) + #:use-module ((guix scripts pack) #:prefix pack:) #:use-module (guix store) #:use-module (guix tests) #:use-module (guix build-system trivial) @@ -56,15 +58,18 @@ (define (run-docker-test docker-tarball) inside %DOCKER-OS." (define os (marionette-operating-system - %docker-os + (operating-system-with-gc-roots + %docker-os + (list docker-tarball)) #:imported-modules '((gnu services herd) (guix combinators)))) (define vm (virtual-machine (operating-system os) - (memory-size 700) - (disk-image-size (* 1500 (expt 2 20))) + (volatile? #f) + (memory-size 1024) + (disk-image-size (* 3000 (expt 2 20))) (port-forwardings '()))) (define test @@ -173,11 +178,12 @@ (define (build-tarball&run-docker-test) guest-script-package)) #:hooks '() #:locales? #f)) - (tarball (docker-image "docker-pack" profile - #:symlinks '(("/bin/Guile" -> "bin/guile") - ("aa.scm" -> "a.scm")) - #:entry-point "bin/guile" - #:localstatedir? #t))) + (tarball (pack:docker-image + "docker-pack" profile + #:symlinks '(("/bin/Guile" -> "bin/guile") + ("aa.scm" -> "a.scm")) + #:entry-point "bin/guile" + #:localstatedir? #t))) (run-docker-test tarball))) (define %test-docker @@ -192,19 +198,18 @@ (define (run-docker-system-test tarball) inside %DOCKER-OS." (define os (marionette-operating-system - %docker-os + (operating-system-with-gc-roots + %docker-os + (list tarball)) #:imported-modules '((gnu services herd) (guix combinators)))) (define vm (virtual-machine (operating-system os) - ;; FIXME: Because we're using the volatile-root setup where the root file - ;; system is a tmpfs overlaid over a small root file system, 'docker - ;; load' must be able to store the whole image into memory, hence the - ;; huge memory requirements. We should avoid the volatile-root setup - ;; instead. - (memory-size 4500) + (volatile? #f) + (disk-image-size (* 5000 (expt 2 20))) + (memory-size 2048) (port-forwardings '()))) (define test @@ -293,10 +298,12 @@ (define %test-docker-system (description "Run a system image as produced by @command{guix system docker-image} inside Docker.") (value (with-monad %store-monad - (>>= (system-docker-image (operating-system - (inherit (simple-operating-system)) - ;; Use locales for a single libc to - ;; reduce space requirements. - (locale-libcs (list glibc))) - #:memory-size 1024) + (>>= (lower-object + (system-image (os->image + (operating-system + (inherit (simple-operating-system)) + ;; Use locales for a single libc to + ;; reduce space requirements. + (locale-libcs (list glibc))) + #:type docker-image-type))) run-docker-system-test)))))