From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mathieu Othacehe Subject: Use genimage for disk-image creation. Date: Wed, 25 Mar 2020 14:18:01 +0100 Message-ID: <87eetgo9o6.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:470:142:3::10]:53302) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jH5v7-0000bL-3o for guix-devel@gnu.org; Wed, 25 Mar 2020 09:18:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jH5v5-0007cO-MY for guix-devel@gnu.org; Wed, 25 Mar 2020 09:18:08 -0400 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-mx.org@gnu.org Sender: "Guix-devel" To: guix-devel Hello, I recently spent some time generating a lot of Guix System disk-images (embedded system images, installation tests). The mechanism Guix and Nix are using: spawning a VM to create the disk-image does not scale at all when the disk-image size increase. So, I looked at what the competition does. Buildroot is using genimage[1] to generate disk-images. Yocto is using wic[2], that's based on mic[3]. Both are able to create disk-images as unprivileged users, without resorting to VM. While, Yocto solution is tied to the rest of their framework, genimage is standalone. In fact, Danny has already packaged it and made some research about it. I think we could use genimage to replace our current mechanism to generate disk-images. Here's a small proof of concept. Let say I want to create a disk-image with one ext4 partition starting at offset 10M. I can write the following genimage config file: --8<---------------cut here---------------start------------->8--- image system { hdimage {} partition rootfs { partition-type = 0x83 image = "rootfs.ext4" size = 8G offset = 10M } } image rootfs.ext4 { name = "rootfs" ext4 { label = "rootfs" use-mke2fs = true } size = 8G mountpoint = "/" } --8<---------------cut here---------------end--------------->8--- and run the command: --8<---------------cut here---------------start------------->8--- fakeroot genimage --config ~/tmp/genimage.cfg --rootpath=/home/mathieu/image-root/ --8<---------------cut here---------------end--------------->8--- where image-root is a directory containing the result of a `guix system init`. The directory size is about 6GiB. It takes 8 minutes to generate this disk-image, versus 2h30 using `guix system disk-image`. I'm aware that this might not be a fair comparison but, I think its already significant. Danny, Ludo, WDYT? Could we modify "system-disk-image" to use genimage as a backend instead of spawning a VM? Thanks, Mathieu [1]: https://github.com/pengutronix/genimage [2]: https://www.yoctoproject.org/docs/2.4.2/dev-manual/dev-manual.html#creating-partitioned-images-using-wic [3]: https://source.tizen.org/documentation/reference/mic-image-creator [4]: https://lists.gnu.org/archive/html/guix-devel/2019-09/msg00009.html