[PATCH] Add version number in release ISO

  • Done
  • quality assurance status badge
Details
3 participants
  • Julien Lepiller
  • Ludovic Courtès
  • Mathieu Othacehe
Owner
unassigned
Submitted by
Julien Lepiller
Severity
normal
J
J
Julien Lepiller wrote on 29 Aug 2020 15:44
(address . guix-patches@gnu.org)
20200829154445.5512d99a@tachikoma.lepiller.eu
Hi,

I've recently proposed a patch to libosinfo database, and they
suggested that we add the version number to the ISO label, so the tool
can differentiate and identify the ISOs. See

The first patch adds the --label option to guix system, and it sets the
label for the boot partition. The second patch simply uses it and adds
a --label option to the release target in the Makefile.
From a6d4cb90825b9e45c0baeaeaa653c57a9100b21a Mon Sep 17 00:00:00 2001
From: Julien Lepiller <julien@lepiller.eu>
Date: Sat, 29 Aug 2020 15:34:56 +0200
Subject: [PATCH 1/2] guix: system: Add `--label' option.

* guix/scripts/system.scm (%options): Add `--label'.
---
guix/scripts/system.scm | 24 ++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)

Toggle diff (93 lines)
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index f6d20382b6..c9cee2e2a2 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -662,7 +662,7 @@ checking this by themselves in their 'check' procedure."
(define* (system-derivation-for-action os base-image action
#:key image-size file-system-type
full-boot? container-shared-network?
- mappings)
+ mappings label)
"Return as a monadic value the derivation for OS according to ACTION."
(case action
((build init reconfigure)
@@ -688,7 +688,14 @@ checking this by themselves in their 'check' procedure."
(image
(inherit base-image)
(size image-size)
- (operating-system os)))))
+ (operating-system os)
+ (partitions (match (image-partitions base-image)
+ ((boot others ...)
+ (cons
+ ((@ (gnu image) partition)
+ (inherit boot)
+ (label (or label (partition-label boot))))
+ others))))))))
((docker-image)
(system-docker-image os #:shared-network? container-shared-network?))))
@@ -741,7 +748,7 @@ and TARGET arguments."
install-bootloader?
dry-run? derivations-only?
use-substitutes? bootloader-target target
- image-size file-system-type full-boot?
+ image-size file-system-type full-boot? label
container-shared-network?
(mappings '())
(gc-root #f))
@@ -795,6 +802,7 @@ static checks."
((target* (current-target-system))
(image -> (find-image file-system-type target*))
(sys (system-derivation-for-action os image action
+ #:label label
#:file-system-type file-system-type
#:image-size image-size
#:full-boot? full-boot?
@@ -942,6 +950,8 @@ Some ACTIONS support additional ARGS.\n"))
--image-size=SIZE for 'vm-image', produce an image of SIZE"))
(display (G_ "
--no-bootloader for 'init', do not install a bootloader"))
+ (display (G_ "
+ --label=LABEL for 'disk-image', label disk image with LABEL"))
(display (G_ "
--save-provenance save provenance information"))
(display (G_ "
@@ -1008,6 +1018,9 @@ Some ACTIONS support additional ARGS.\n"))
(option '("no-bootloader" "no-grub") #f #f
(lambda (opt name arg result)
(alist-cons 'install-bootloader? #f result)))
+ (option '("label") #t #f
+ (lambda (opt name arg result)
+ (alist-cons 'label arg result)))
(option '("full-boot") #f #f
(lambda (opt name arg result)
(alist-cons 'full-boot? #t result)))
@@ -1065,7 +1078,8 @@ Some ACTIONS support additional ARGS.\n"))
(validate-reconfigure . ,ensure-forward-reconfigure)
(file-system-type . "ext4")
(image-size . guess)
- (install-bootloader? . #t)))
+ (install-bootloader? . #t)
+ (label . #f)))
(define (verbosity-level opts)
"Return the verbosity level based on OPTS, the alist of parsed options."
@@ -1119,6 +1133,7 @@ resulting from command-line parsing."
(dry? (assoc-ref opts 'dry-run?))
(bootloader? (assoc-ref opts 'install-bootloader?))
+ (label (assoc-ref opts 'label))
(target-file (match args
((first second) second)
(_ #f)))
@@ -1169,6 +1184,7 @@ resulting from command-line parsing."
(_ #f))
opts)
#:install-bootloader? bootloader?
+ #:label label
#:target target-file
#:bootloader-target bootloader-target
#:gc-root (assoc-ref opts 'gc-root)))))
--
2.28.0
From cd47229d93b6dd0d7a793230e6a103a40034f6a7 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <julien@lepiller.eu>
Date: Sat, 29 Aug 2020 15:36:40 +0200
Subject: [PATCH 2/2] Makefile.am: Set iso label.

* Makefile.am (release): Add version number in disk image label.
---
Makefile.am | 1 +
1 file changed, 1 insertion(+)

Toggle diff (14 lines)
diff --git a/Makefile.am b/Makefile.am
index 9c38c2f83c..7a658d157b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -838,6 +838,7 @@ release: dist-with-updated-version
image=`$(top_builddir)/pre-inst-env \
guix system disk-image \
--file-system-type=iso9660 \
+ --label="GUIX_IMAGE_$(VERSION)" \
--system=$$system --fallback \
gnu/system/install.scm` ; \
if [ ! -f "$$image" ] ; then \
--
2.28.0
L
L
Ludovic Courtès wrote on 30 Aug 2020 15:47
(name . Julien Lepiller)(address . julien@lepiller.eu)(address . 43101@debbugs.gnu.org)
87d038i6uf.fsf@gnu.org
Hi,

Julien Lepiller <julien@lepiller.eu> skribis:

Toggle quote (5 lines)
> I've recently proposed a patch to libosinfo database, and they
> suggested that we add the version number to the ISO label, so the tool
> can differentiate and identify the ISOs. See
> https://gitlab.com/libosinfo/osinfo-db/-/merge_requests/202

Good idea.

Toggle quote (7 lines)
>>From a6d4cb90825b9e45c0baeaeaa653c57a9100b21a Mon Sep 17 00:00:00 2001
> From: Julien Lepiller <julien@lepiller.eu>
> Date: Sat, 29 Aug 2020 15:34:56 +0200
> Subject: [PATCH 1/2] guix: system: Add `--label' option.
>
> * guix/scripts/system.scm (%options): Add `--label'.

Please describe the other changes (to ‘system-derivation-for-action’,
etc.)

Toggle quote (7 lines)
> + (partitions (match (image-partitions base-image)
> + ((boot others ...)
> + (cons
> + ((@ (gnu image) partition)
> + (inherit boot)
> + (label (or label (partition-label boot))))

Please include (gnu image) and avoid ‘@’.

Toggle quote (3 lines)
> + (display (G_ "
> + --label=LABEL for 'disk-image', label disk image with LABEL"))

Make sure to add it to doc/guix.texi as well.

Toggle quote (7 lines)
>>From cd47229d93b6dd0d7a793230e6a103a40034f6a7 Mon Sep 17 00:00:00 2001
> From: Julien Lepiller <julien@lepiller.eu>
> Date: Sat, 29 Aug 2020 15:36:40 +0200
> Subject: [PATCH 2/2] Makefile.am: Set iso label.
>
> * Makefile.am (release): Add version number in disk image label.

LGTM.

Thank you! :-)

Ludo’.
J
J
Julien Lepiller wrote on 30 Aug 2020 16:35
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 43101@debbugs.gnu.org)
904ADAD9-76B7-4C7F-A0DF-39CEB6E3477D@lepiller.eu
Le 30 août 2020 09:47:04 GMT-04:00, "Ludovic Courtès" <ludo@gnu.org> a écrit :
Toggle quote (33 lines)
>Hi,
>
>Julien Lepiller <julien@lepiller.eu> skribis:
>
>> I've recently proposed a patch to libosinfo database, and they
>> suggested that we add the version number to the ISO label, so the
>tool
>> can differentiate and identify the ISOs. See
>> https://gitlab.com/libosinfo/osinfo-db/-/merge_requests/202
>
>Good idea.
>
>>>From a6d4cb90825b9e45c0baeaeaa653c57a9100b21a Mon Sep 17 00:00:00
>2001
>> From: Julien Lepiller <julien@lepiller.eu>
>> Date: Sat, 29 Aug 2020 15:34:56 +0200
>> Subject: [PATCH 1/2] guix: system: Add `--label' option.
>>
>> * guix/scripts/system.scm (%options): Add `--label'.
>
>Please describe the other changes (to ‘system-derivation-for-action’,
>etc.)
>
>> + (partitions (match (image-partitions base-image)
>> + ((boot others ...)
>> + (cons
>> + ((@ (gnu image) partition)
>> + (inherit boot)
>> + (label (or label (partition-label
>boot))))
>
>Please include (gnu image) and avoid ‘@’.

(gnu image) is already imported, but conflicts with another module for partition, leading to a compilation error. What should I do?

Toggle quote (17 lines)
>
>> + (display (G_ "
>> + --label=LABEL for 'disk-image', label disk image with
>LABEL"))
>
>Make sure to add it to doc/guix.texi as well.
>
>>>From cd47229d93b6dd0d7a793230e6a103a40034f6a7 Mon Sep 17 00:00:00
>2001
>> From: Julien Lepiller <julien@lepiller.eu>
>> Date: Sat, 29 Aug 2020 15:36:40 +0200
>> Subject: [PATCH 2/2] Makefile.am: Set iso label.
>>
>> * Makefile.am (release): Add version number in disk image label.
>
>LGTM.

I'll add the architecture in there too, as per discussion in the osinfo-db MR.

Toggle quote (4 lines)
>
>Thank you! :-)
>
>Ludo’.
M
M
Mathieu Othacehe wrote on 30 Aug 2020 17:05
(name . Julien Lepiller)(address . julien@lepiller.eu)
87v9h0p420.fsf@gnu.org
Hello Julien,

Thanks for this patch!

Toggle quote (4 lines)
>>Please include (gnu image) and avoid ‘@’.
>
> (gnu image) is already imported, but conflicts with another module for partition, leading to a compilation error. What should I do?

You can maybe write something like:

Toggle snippet (3 lines)
#:use-module ((srfi srfi-1) #:hide (partition))

Toggle quote (2 lines)
> I'll add the architecture in there too, as per discussion in the osinfo-db MR.

Do you think it could be useful to add the same mechanism to ISO images
built by the CI? In that case, you could maybe use the same mechanism in
(gnu ci) and label the boot partition with %guix-version?

Thanks,

Mathieu
J
J
Julien Lepiller wrote on 30 Aug 2020 17:11
(name . Mathieu Othacehe)(address . othacehe@gnu.org)
DBC8BFE8-EADF-4F6D-BF6D-F17427825623@lepiller.eu
Yes, it makes sense! I'll send a patch for that too. Thank you!

Le 30 août 2020 11:05:27 GMT-04:00, Mathieu Othacehe <othacehe@gnu.org> a écrit :
Toggle quote (27 lines)
>
>Hello Julien,
>
>Thanks for this patch!
>
>>>Please include (gnu image) and avoid ‘@’.
>>
>> (gnu image) is already imported, but conflicts with another module
>for partition, leading to a compilation error. What should I do?
>
>You can maybe write something like:
>
>--8<---------------cut here---------------start------------->8---
>#:use-module ((srfi srfi-1) #:hide (partition))
>--8<---------------cut here---------------end--------------->8---
>
>> I'll add the architecture in there too, as per discussion in the
>osinfo-db MR.
>
>Do you think it could be useful to add the same mechanism to ISO images
>built by the CI? In that case, you could maybe use the same mechanism
>in
>(gnu ci) and label the boot partition with %guix-version?
>
>Thanks,
>
>Mathieu
Attachment: file
J
J
Julien Lepiller wrote on 30 Aug 2020 21:52
Re: [bug#43101] [PATCH v2] Add version number in release ISO
(name . Mathieu Othacehe)(address . othacehe@gnu.org)
20200830215230.3dd526fd@tachikoma.lepiller.eu
Here's v2 of the patch series. I've added one patch to (gnu ci) to set
the version number in generated ISOs, and fixed other issues in the
previous version of the patches.

Le Sun, 30 Aug 2020 11:11:08 -0400,
Julien Lepiller <julien@lepiller.eu> a écrit :

Toggle quote (32 lines)
> Yes, it makes sense! I'll send a patch for that too. Thank you!
>
> Le 30 août 2020 11:05:27 GMT-04:00, Mathieu Othacehe
> <othacehe@gnu.org> a écrit :
> >
> >Hello Julien,
> >
> >Thanks for this patch!
> >
> >>>Please include (gnu image) and avoid ‘@’.
> >>
> >> (gnu image) is already imported, but conflicts with another module
> >>
> >for partition, leading to a compilation error. What should I do?
> >
> >You can maybe write something like:
> >
> >--8<---------------cut here---------------start------------->8---
> >#:use-module ((srfi srfi-1) #:hide (partition))
> >--8<---------------cut here---------------end--------------->8---
> >
> >> I'll add the architecture in there too, as per discussion in the
> >osinfo-db MR.
> >
> >Do you think it could be useful to add the same mechanism to ISO
> >images built by the CI? In that case, you could maybe use the same
> >mechanism in
> >(gnu ci) and label the boot partition with %guix-version?
> >
> >Thanks,
> >
> >Mathieu
From d98a5b9d36a74d47348a5a838209993f6b2539e0 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <julien@lepiller.eu>
Date: Sun, 30 Aug 2020 20:43:42 +0200
Subject: [PATCH 2/3] gnu: ci: Set label in iso9660 jobs.

* gnu/ci.scm (image-jobs): Set label of generated ISOs.
---
gnu/ci.scm | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

Toggle diff (39 lines)
diff --git a/gnu/ci.scm b/gnu/ci.scm
index af0bb66775..c15baa99d3 100644
--- a/gnu/ci.scm
+++ b/gnu/ci.scm
@@ -2,6 +2,7 @@
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -25,6 +26,7 @@
#:use-module (guix profiles)
#:use-module (guix packages)
#:use-module (guix channels)
+ #:use-module (guix config)
#:use-module (guix derivations)
#:use-module (guix build-system)
#:use-module (guix monads)
@@ -234,7 +236,15 @@ system.")
(build-image
(image
(inherit iso9660-image)
- (operating-system installation-os))))
+ (operating-system installation-os)
+ (partitions (match (image-partitions iso9660-image)
+ ((boot others ...)
+ (cons
+ (partition
+ (inherit boot)
+ (label (string-append "GUIX_" system "_"
+ %guix-version)))
+ others)))))))
;; Only cross-compile Guix System images from x86_64-linux for now.
,@(if (string=? system "x86_64-linux")
(map (lambda (image)
--
2.28.0
From 2e8ca2e8ece588932d00d1bc12182e9a9a7f53e3 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <julien@lepiller.eu>
Date: Sat, 29 Aug 2020 15:36:40 +0200
Subject: [PATCH 3/3] Makefile.am: Set iso label.

* Makefile.am (release): Add version number in disk image label.
---
Makefile.am | 1 +
1 file changed, 1 insertion(+)

Toggle diff (14 lines)
diff --git a/Makefile.am b/Makefile.am
index 4c10bd37bc..063556c7ac 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -834,6 +834,7 @@ release: dist-with-updated-version
image=`$(top_builddir)/pre-inst-env \
guix system disk-image \
--file-system-type=iso9660 \
+ --label="GUIX_$${system}_$(VERSION)" \
--system=$$system --fallback \
gnu/system/install.scm` ; \
if [ ! -f "$$image" ] ; then \
--
2.28.0
M
M
Mathieu Othacehe wrote on 31 Aug 2020 08:18
(name . Julien Lepiller)(address . julien@lepiller.eu)
87r1rnibi3.fsf@gnu.org
Hey Julien,

Thanks for the v2 :)

Toggle quote (12 lines)
> (inherit iso9660-image)
> - (operating-system installation-os))))
> + (operating-system installation-os)
> + (partitions (match (image-partitions iso9660-image)
> + ((boot others ...)
> + (cons
> + (partition
> + (inherit boot)
> + (label (string-append "GUIX_" system "_"
> + %guix-version)))
> + others)))))))

We could maybe factorize this in something like:

Toggle snippet (4 lines)
(define (image-with-label image label)
...)

that would be put in (gnu system image).

Otherwise, looks fine to me :)

Thanks again,

Mathieu
L
L
Ludovic Courtès wrote on 31 Aug 2020 14:12
(name . Julien Lepiller)(address . julien@lepiller.eu)
877dtfdnfa.fsf@gnu.org
Hi!

Julien Lepiller <julien@lepiller.eu> skribis:

Toggle quote (14 lines)
> From a502fa70b0230d3f91ddf05410f24a1f4fcad521 Mon Sep 17 00:00:00 2001
> From: Julien Lepiller <julien@lepiller.eu>
> Date: Sat, 29 Aug 2020 15:34:56 +0200
> Subject: [PATCH 1/3] guix: system: Add `--label' option.
>
> * guix/scripts/system.scm (%options): Add `--label'.
> (system-derivation-for-action): Take a #:label key to set volume ID.
> (perform-action): Take a #:label key.
> (%default-options): Add default label value.
> (process-action): Pass label value from command-line to perform-action.
> ---
> doc/guix.texi | 4 +++-
> guix/scripts/system.scm | 27 ++++++++++++++++++++++-----

Please mention the doc/guix.texi changes as well in the log. :-)

Toggle quote (11 lines)
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -28836,7 +28836,9 @@ the @option{--image-size} option is ignored in the case of
> @code{docker-image}.
>
> You can specify the root file system type by using the
> -@option{--file-system-type} option. It defaults to @code{ext4}.
> +@option{--file-system-type} option. It defaults to @code{ext4}. When its
> +value is @code{iso9660}, the @option{--label} option can be used to specify
> +a volume ID with @code{disk-image}.

Could you also add an @item for --label, just like we have for the other
options?

I’m also fine with what Mathieu suggests.

OK for me with changes along these lines!

Thank you,
Ludo’.
J
J
Julien Lepiller wrote on 31 Aug 2020 16:13
(address . 43101-done@debbugs.gnu.org)
20200831161346.5ed7ac86@tachikoma.lepiller.eu
Le Mon, 31 Aug 2020 08:18:44 +0200,
Mathieu Othacehe <othacehe@gnu.org> a écrit :

Toggle quote (34 lines)
> Hey Julien,
>
> Thanks for the v2 :)
>
> > (inherit iso9660-image)
> > - (operating-system installation-os))))
> > + (operating-system installation-os)
> > + (partitions (match (image-partitions
> > iso9660-image)
> > + ((boot others ...)
> > + (cons
> > + (partition
> > + (inherit boot)
> > + (label (string-append "GUIX_"
> > system "_"
> > +
> > %guix-version)))
> > + others)))))))
>
> We could maybe factorize this in something like:
>
> --8<---------------cut here---------------start------------->8---
> (define (image-with-label image label)
> ...)
> --8<---------------cut here---------------end--------------->8---
>
> that would be put in (gnu system image).
>
> Otherwise, looks fine to me :)
>
> Thanks again,
>
> Mathieu

Pushed as 036f23f053ee6bd34c6d387debb4a9166561dd02 to
7b2ac4768721ccab1782daad99a7cb1be0ed01ee, thank you!
Closed
M
M
Mathieu Othacehe wrote on 3 Sep 2020 13:10
Re: bug#43101: [PATCH v2] Add version number in release ISO
(address . 43101@debbugs.gnu.org)(address . julien@lepiller.eu)
87a6y7dsk5.fsf@gnu.org
Hello Julien,

Toggle quote (3 lines)
> Pushed as 036f23f053ee6bd34c6d387debb4a9166561dd02 to
> 7b2ac4768721ccab1782daad99a7cb1be0ed01ee, thank you!

It seems that the new ISO labels are hitting a 32 characters limit, see:

I would propose to truncate the commit hash to 7 characters. Could you
have a look?

Thanks,

Mathieu
J
J
Julien Lepiller wrote on 3 Sep 2020 14:10
(name . Mathieu Othacehe)(address . othacehe@gnu.org)(address . 43101@debbugs.gnu.org)
20200903141053.010f2ce1@tachikoma.lepiller.eu
Le Thu, 03 Sep 2020 13:10:34 +0200,
Mathieu Othacehe <othacehe@gnu.org> a écrit :

Toggle quote (16 lines)
> Hello Julien,
>
> > Pushed as 036f23f053ee6bd34c6d387debb4a9166561dd02 to
> > 7b2ac4768721ccab1782daad99a7cb1be0ed01ee, thank you!
>
> It seems that the new ISO labels are hitting a 32 characters limit,
> see:
> https://ci.guix.gnu.org/log/alcb138l3gk5hzb0s2idgbkx5kg9n1ja-iso9660-image.
>
> I would propose to truncate the commit hash to 7 characters. Could you
> have a look?
>
> Thanks,
>
> Mathieu

Thanks for the heads up, I pushed another commit to reduce the number
of characters as 7596ae1034a6878ecbe9e65a642a1434a78b1cf0
?