[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#41350] [PATCH 0/3] Use native qemu to build vm-image.
From: |
Jan Nieuwenhuizen |
Subject: |
[bug#41350] [PATCH 0/3] Use native qemu to build vm-image. |
Date: |
Wed, 20 May 2020 17:09:07 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) |
Mathieu Othacehe writes:
Hello Mathieu!
>> The conclusion here is that, I think that we very few adaptations to
>> your branch, we should be able to produce Hurd ISO images or Hurd EFI
>> compatible disk-images. Maybe it would be a first step.
>>
>> Then, we could find a way to create "MBR compatible" Hurd and Linux
>> disk-images in (gnu system image).
>
> Ok, I made further progress. Turns out the Hurd EFI solution was a
> dead-end, because I have a "no console will be available to os" message
> in Qemu, instead of Hurd console output. I don't feel like debugging
> this.
Ah, well that's the only result that I also came up with and wanted to
share. Maybe Ludo has an idea how to fix that; I could not find
anything helpful yet.
> So, back to the MBR solution. I had another look to what OpenWrt is
> doing. They found a really nice work-around! As I stated, we cannot use
> "grub-install", but this command is in reality a wrapper around
> "grub-mkimage" and "grub-bios-setup".
Ah! That's good to know.
> #######################################
> # # # #
> # MBR # MBR-GAP # FIRST PARTITION #
> # # # #
> #######################################
>
>
> grub-mkimage generates a Grub image, small enough so that it can fit in
> the MBR-GAP (the space between the MBR and the first partition).
Okay...
> It cannot contain all Grub modules, but that's not an issue, because
> Grub will be able to find missing modules from the first partition when
> started.
aha...
> They also patched grub-bios-setup[1] so that it can work on a raw
> disk-image, and install the previously generated "grub.img".
So, this is one aspect of what we're avoiding by running grub-install
in a qemu vm, right? Any idea on the upstream status of this patch?
(I don't think it matters all that much for us, let's use it :-)
> So with the following commands:
>
> grub-mkimage -O i386-pc -o core.img biosdisk part_msdos ext2
> echo "(hd0) /tmp/my-disk-image" > device.map
> grub-bios-setup -m device.map -r "hd0,msdos1" -d tmp /tmp/qemu-image2
>
> I'm able to make a Guix system image bootable, without root
> permissions. It then starts the Hurd kernel and crashes, but that's
> another story :p
Thats *great*, no really!
> So, if it's ok for you, I can integrate this stuff cleanly, and we won't
> need the vm-image stuff anymore.
>
> WDYT?
That seems a very good idea, I'm cc'ing Ludo to ping him about this.
I'm attaching some hacky work that I did on the patch that you paste'd
to me via IRC, adding som Hurd'y things. Maybe the pointers are
helpful, but it's all pretty obvious.
Greetings,
Janneke
> [1]:
> https://github.com/openwrt/openwrt/blob/master/package/boot/grub2/patches/100-grub_setup_root.patch
>From 9bd218f4d91f79b26ad32cc6c4c1f479febd28de Mon Sep 17 00:00:00 2001
From: "Jan (janneke) Nieuwenhuizen" <address@hidden>
Date: Tue, 19 May 2020 16:01:42 +0200
Subject: [PATCH] WIP: disk-image
qemu-system-i386 -enable-kvm
-bios $(guix build ovmf)/share/firmware/ovmf_ia32.bin -hda
/tmp/qemu-image -m 1024
<mothacehe> janneke: With this patch on top of your branch:
https://paste.debian.net/1147629/, I'm able to generate an EFI
disk-image. [15:54]
<mothacehe> That I start with this command: qemu-system-i386 -enable-kvm
-bios $(guix build ovmf)/share/firmware/ovmf_ia32.bin -hda
/tmp/qemu-image -m 1024
<mothacehe> janneke: Sadly, just after Grub, the virtual machine restarts,
nothing is printed. [15:55]
---
gnu/build/bootloader.scm | 2 +-
gnu/build/image.scm | 18 ++++++++++--------
gnu/system/examples/bare-hurd.tmpl | 2 +-
gnu/system/image.scm | 10 ++++++----
4 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/gnu/build/bootloader.scm b/gnu/build/bootloader.scm
index 498022f6db..68b68c4b47 100644
--- a/gnu/build/bootloader.scm
+++ b/gnu/build/bootloader.scm
@@ -56,7 +56,7 @@
(efi-directory (string-append esp "/EFI/BOOT"))
;; Map grub target names to boot file names.
(efi-targets (cond ((string-prefix? "x86_64" system)
- '("x86_64-efi" . "BOOTX64.EFI"))
+ '("i386-efi" . "BOOTIA32.EFI"))
((string-prefix? "i686" system)
'("i386-efi" . "BOOTIA32.EFI"))
((string-prefix? "armhf" system)
diff --git a/gnu/build/image.scm b/gnu/build/image.scm
index fe8e11aa1b..23fc56571f 100644
--- a/gnu/build/image.scm
+++ b/gnu/build/image.scm
@@ -63,16 +63,18 @@
take the partition metadata size into account, take a 25% margin."
(* 1.25 (file-size root)))
-(define* (make-ext4-image partition target root
- #:key
- (owner-uid 0)
- (owner-gid 0))
- "Handle the creation of EXT4 partition images. See 'make-partition-image'."
+(define* (make-ext-image partition target root
+ #:key
+ (owner-uid 0)
+ (owner-gid 0))
+ "Handle the creation of EXT2/3/4 partition images. See
+'make-partition-image'."
(let ((size (partition-size partition))
+ (fs (partition-file-system partition))
(label (partition-label partition))
(uuid (partition-uuid partition))
(options "lazy_itable_init=1,lazy_journal_init=1"))
- (invoke "mke2fs" "-t" "ext4" "-d" root
+ (invoke "mke2fs" "-t" fs "-d" root
"-L" label "-U" (uuid->string uuid)
"-E" (format #f "root_owner=~a:~a,~a"
owner-uid owner-gid options)
@@ -105,8 +107,8 @@ ROOT directory to populate the image."
(let* ((partition (sexp->partition partition-sexp))
(type (partition-file-system partition)))
(cond
- ((string=? type "ext4")
- (make-ext4-image partition target root))
+ ((string-prefix? "ext" type)
+ (make-ext-image partition target root))
((string=? type "vfat")
(make-vfat-image partition target root))
(else
diff --git a/gnu/system/examples/bare-hurd.tmpl
b/gnu/system/examples/bare-hurd.tmpl
index d4c40e6841..c3adf03a7f 100644
--- a/gnu/system/examples/bare-hurd.tmpl
+++ b/gnu/system/examples/bare-hurd.tmpl
@@ -11,7 +11,7 @@
(operating-system
(inherit %hurd-default-operating-system)
(bootloader (bootloader-configuration
- (bootloader grub-minimal-bootloader)
+ (bootloader grub-efi-bootloader)
(target "/dev/sdX")))
(file-systems (cons (file-system
(device (file-system-label "my-root"))
diff --git a/gnu/system/image.scm b/gnu/system/image.scm
index 571b7af5f3..888099dae5 100644
--- a/gnu/system/image.scm
+++ b/gnu/system/image.scm
@@ -79,7 +79,7 @@
(partition
(size 'guess)
(label "Guix_image")
- (file-system "ext4")
+ (file-system "ext2")
(flags '(boot))
(initializer (gexp initialize-root-partition))))
@@ -222,7 +222,9 @@ used in the image."
#:deduplicate? #f
#:system-directory #$os
#:bootloader-package
- #$(bootloader-package bootloader)
+ #+(with-parameters
+ ((%current-system "i686-linux"))
+ (bootloader-package bootloader))
#:bootcfg #$bootcfg
#:bootcfg-location
#$(bootloader-configuration-file bootloader)))))
@@ -232,7 +234,7 @@ used in the image."
(type (partition-file-system partition))
(image-builder
(with-imported-modules*
- (let ((inputs '#$(list e2fsprogs dosfstools mtools)))
+ (let ((inputs '#+(list e2fsprogs dosfstools mtools)))
(set-path-environment-variable "PATH" '("bin" "sbin") inputs)
(make-partition-image #$(partition->gexp partition)
#$output
@@ -269,7 +271,7 @@ image ~a {
(let* ((substitutable? (image-substitutable? image))
(builder
(with-imported-modules*
- (let ((inputs '#$(list genimage coreutils findutils)))
+ (let ((inputs '#+(list genimage coreutils findutils)))
(set-path-environment-variable "PATH" '("bin" "sbin") inputs)
(genimage #$(image->genimage-cfg image) #$output))))
(image-dir (computed-file "image-dir" builder)))
--
2.26.2
--
Jan Nieuwenhuizen <address@hidden> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
[bug#41350] [PATCH v2 1/3] utils: Move 'reset-timestamps' out of database., Jan (janneke) Nieuwenhuizen, 2020/05/19
- [bug#41350] [PATCH v2 2/3] system: vm: Do not register-closures when cross-building to the Hurd., Jan (janneke) Nieuwenhuizen, 2020/05/19
- [bug#41350] [PATCH v2 3/3] system: vm: Build vm-image using native qemu, for the Hurd., Jan (janneke) Nieuwenhuizen, 2020/05/19
- [bug#41350] [PATCH v2 3/3] system: vm: Build vm-image using native qemu, for the Hurd., Mathieu Othacehe, 2020/05/19
- [bug#41350] [PATCH v2 3/3] system: vm: Build vm-image using native qemu, for the Hurd., Ludovic Courtès, 2020/05/20
- [bug#41350] [PATCH v2 3/3] system: vm: Build vm-image using native qemu, for the Hurd., Jan Nieuwenhuizen, 2020/05/23
- [bug#41350] [PATCH v2 3/3] system: vm: Build vm-image using native qemu, for the Hurd., Mathieu Othacehe, 2020/05/23
- [bug#41350] [PATCH v2 3/3] system: vm: Build vm-image using native qemu, for the Hurd., Jan Nieuwenhuizen, 2020/05/23
- [bug#41350] [PATCH v2 3/3] system: vm: Build vm-image using native qemu, for the Hurd., Mathieu Othacehe, 2020/05/24
- [bug#41350] [PATCH v2 3/3] system: vm: Build vm-image using native qemu, for the Hurd., Ludovic Courtès, 2020/05/27