From mboxrd@z Thu Jan 1 00:00:00 1970 From: Danny Milosavljevic Subject: Re: GuixSD bootable ISO-9669 image (was: Re: GuixSD on servers [Fwd: [rtracker.1984.is #131647] A question about VServer system specific requirements]) Date: Fri, 28 Apr 2017 10:18:44 +0200 Message-ID: <20170428101844.540ce399@scratchpost.org> References: <20170418141719.llp77itz7vyq5rij@abyayala> <87k26hwxt0.fsf@gmail.com> <8760i0m7vg.fsf@gnu.org> <87pog3u3ms.fsf@gmail.com> <87k26afl07.fsf_-_@gmail.com> <20170427190840.79bcaa76@scratchpost.org> <20170427220009.1d0d4607@scratchpost.org> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:34863) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d417B-0007dN-Np for guix-devel@gnu.org; Fri, 28 Apr 2017 04:18:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d4177-0000ia-Pa for guix-devel@gnu.org; Fri, 28 Apr 2017 04:18:57 -0400 Received: from dd1012.kasserver.com ([85.13.128.8]:34526) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d4177-0000iV-If for guix-devel@gnu.org; Fri, 28 Apr 2017 04:18:53 -0400 In-Reply-To: <20170427220009.1d0d4607@scratchpost.org> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: Chris Marusich Cc: guix-devel@gnu.org Small fix below On Thu, 27 Apr 2017 22:00:09 +0200 Danny Milosavljevic wrote: > Something like this (totally untested): > > diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm > index 0cb84b8aa..be512d59c 100644 > --- a/gnu/build/file-systems.scm > +++ b/gnu/build/file-systems.scm > @@ -230,6 +230,55 @@ Trailing spaces are trimmed." > > ^L > ;;; > +;;; ISO9660 file systems. > +;;; > + > +;; . > + > +;(define-syntax %iso9660-endianness > +; ;; Endianness of iso9660 file systems that we use. > +; ;; Actually, iso9660 has redundant data (i.e. data for both endiannesses). > +; (identifier-syntax (endianness little))) > + > +(define (iso9660-superblock? sblock) > + "Return #t when SBLOCK is a iso9660 superblock." > + (bytevector=? (sub-bytevector sblock 1 6) > + ;; Note: "\x01" is the volume descriptor format version > + (string->utf8 "CD001\x01"))) > + > +(define (read-iso9660-primary-volume-descriptor device offset) > + "Find and read the first primary volume descriptor, starting at OFFSET. > + Return #f if not found." > + (let* ((sblock (read-superblock device offset 2048 iso9660-superblock?)) > + (type-code (array-ref sblock 0))) ; FIXME if sblock + (type-code (if sblock (array-ref sblock 0) 255))) > + (match type-code > + (255 #f) ; Volume Descriptor Set Terminator. > + (1 sblock) ; Primary Volume Descriptor > + (_ (read-iso9660-primary-volume-descriptor device (+ offset 2048)))))) > + > +(define (read-iso9660-superblock device) > + "Return the raw contents of DEVICE's iso9660 superblock as a bytevector, or > +#f if DEVICE does not contain a iso9660 file system." > + ;; Start reading at sector 16. > + (read-iso9660-primary-volume-descriptor device (* 2048 16))) > + > +(define (iso9660-superblock-uuid sblock) > + "Return the Volume ID of a iso9660 superblock SBLOCK as a 4-byte bytevector." > + ;; Note: The field is the volume creation time. > + ;; FIXME Use only certain parts (See grub). > + ;; FIXME treat "all 0" as invalid. > + (sub-bytevector sblock 813 17)) > + > +;; FIXME make result human-readable (See grub). > +;(define (iso9660-uuid->string uuid) > + > +(define (iso9660-superblock-volume-name sblock) > + "Return the volume name of SBLOCK as a string. The volume name is an ASCII > +string. Trailing spaces are trimmed." > + (string-trim-right (latin1->string (sub-bytevector sblock 40 32) (lambda (c) #f)) #\space)) > + > +^L > +;;; > ;;; LUKS encrypted devices. > ;;; > > @@ -340,7 +389,9 @@ partition field reader that returned a value." > (_ #f))) > > (define %partition-label-readers > - (list (partition-field-reader read-ext2-superblock > + (list (partition-field-reader read-iso9660-superblock > + iso9660-superblock-volume-name) > + (partition-field-reader read-ext2-superblock > ext2-superblock-volume-name) > (partition-field-reader read-btrfs-superblock > btrfs-superblock-volume-name) > @@ -348,7 +399,9 @@ partition field reader that returned a value." > fat32-superblock-volume-name))) > > (define %partition-uuid-readers > - (list (partition-field-reader read-ext2-superblock > + (list (partition-field-reader read-iso9660-superblock > + iso9660-superblock-uuid) > + (partition-field-reader read-ext2-superblock > ext2-superblock-uuid) > (partition-field-reader read-btrfs-superblock > btrfs-superblock-uuid)