mailarchive of the ptxdist mailing list
 help / color / mirror / Atom feed
From: Michael Olbrich <m.olbrich@pengutronix.de>
To: ptxdist@pengutronix.de
Subject: [ptxdist] Image Generation in PTXdist
Date: Sun, 1 Jul 2012 20:45:31 +0200	[thread overview]
Message-ID: <20120701184531.GA4959@pengutronix.de> (raw)

[-- Attachment #1: Type: text/plain, Size: 3245 bytes --]

Hi,

If you're following the changes in git a bit more closely you might have
noticed some changes about image creation since the last release. This is
something that deserves a few words of explanation.

The mechanisms to create images that we've had so far have a lot of
shortcomings and I wanted something new for a long time. What I've
committed over the last weeks is far from finished, but I thinks it's a
good start.

So what's wrong with the old mechanism:
- It's not really integrated with the build process, but rather attached at
  the end. As a result dependencies don't work correctly.
- The way things work with the one working directory makes it almost
  impossible to fill an image with anything other than the rootfs.
- With the way these rules live in rules/post, overwriting them in a BSP is
  not really possible. Even adding new ones is not really nice.
- Kconfig is not good at describing the complex possibilities for creating
  images. As a result we have lot's of options most people don't need and
  still can't do everything we want.

So how do the new style images work:
First there is a new package type "image-<pkg>". Like host- or cross-
packages it has a special meaning:
- It has one target, IMAGE_<PKG>_IMAGE that is built with 'ptxdist images'
  when selected.
- It depends on any packages listed in MAGE_<PKG>_PKGS and all files in
  MAGE_<PKG>_FILES.

It's not yet used for any package, but there are the first templates. The
image-tgz template extracts all packages and creates a .tgz from this. With
$(PTX_PACKAGES_INSTALL) as packages list we get the root.tgz we currently
have. But it's now also possible to extract a different set of packages,
e.g. for a rescue system, etc. I have plans to use collectionconfigs for
this, but this is not yet implemented.

The next piece of the puzzle is a tool called genimage. It's basically a
wrapper for all the tools needed to create images. It uses libconfuse for
its config files. The idea is to do all the complex stuff in these config
files and add the basic variables from the platformconfig.
e.g. for an ext2 image we only define the type (ext2/ext3/ext4) and the
size in the platformconfig. If you need special genext2fs or tune2fs
options, the genimage config file can be overwritten in the BSP.
The content for the image is defined by setting MAGE_<PKG>_FILES to a
tarball. The mechanism described above can be used to create it.
The template image-genimage can be used to define such images.

I've attached the files for root.tgz and root.ext2 as an example:
platforms/image-root-tgz.in
rules/image-root-tgz.make
platforms/image-root-ext.in
rules/image-root-ext.make
config/images/ext.config

I've not yet committed these because I'm not sure if I want to immediately
replace the old rules, or have them side by side for some time. So this is
something for after the next release.

Please give it a try and tell me what you think.

Regards,
Michael

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

[-- Attachment #2: image-root-ext.in --]
[-- Type: text/plain, Size: 717 bytes --]

## SECTION=image

menuconfig IMAGE_ROOT_EXT
	tristate
	select HOST_GENIMAGE
	select HOST_GENEXT2FS
	select HOST_E2FSPROGS
	select IMAGE_ROOT_TGZ
	prompt "Generate images/root.ext2     "
	help
	  FIXME

if IMAGE_ROOT_EXT

config IMAGE_ROOT_EXT_SIZE
	string
	default "20M"
	prompt "image size"
	help
	  The image size in bytes or with unit, e.g. 42M, 23G, etc.

choice
	prompt "ext2fs type          "

config IMAGE_ROOT_EXT_EXT2
	bool
	prompt "ext2"

config IMAGE_ROOT_EXT_EXT3
	bool
	prompt "ext3"

config IMAGE_ROOT_EXT_EXT4
	bool
	prompt "ext4"

endchoice

config IMAGE_ROOT_EXT_TYPE
	string
	default "ext2" if IMAGE_ROOT_EXT_EXT2
	default "ext3" if IMAGE_ROOT_EXT_EXT3
	default "ext4" if IMAGE_ROOT_EXT_EXT4

endif

[-- Attachment #3: image-root-tgz.in --]
[-- Type: text/plain, Size: 100 bytes --]

## SECTION=image

config IMAGE_ROOT_TGZ
	tristate
	prompt "Generate images/root.tgz"
	help
	  FIXME

[-- Attachment #4: image-root-ext.make --]
[-- Type: text/plain, Size: 1017 bytes --]

# -*-makefile-*-
#
# Copyright (C) 2012 by Michael Olbrich <m.olbrich@pengutronix.de>
#
# See CREDITS for details about who has contributed to this project.
#
# For further information about the PTXdist project and license conditions
# see the README file.
#

#
# We provide this package
#
IMAGE_PACKAGES-$(PTXCONF_IMAGE_ROOT_EXT) += image-root-ext

#
# Paths and names
#
IMAGE_ROOT_EXT		:= image-root-ext
IMAGE_ROOT_EXT_DIR	:= $(BUILDDIR)/$(IMAGE_ROOT_EXT)
IMAGE_ROOT_EXT_IMAGE	:= $(IMAGEDIR)/root.ext2
IMAGE_ROOT_EXT_FILES	:= $(IMAGEDIR)/root.tgz
IMAGE_ROOT_EXT_CONFIG	:= ext.config

# ----------------------------------------------------------------------------
# Image
# ----------------------------------------------------------------------------

IMAGE_ROOT_EXT_ENV := \
	SIZE=$(PTXCONF_IMAGE_ROOT_EXT_SIZE) \
	EXT_TYPE=$(PTXCONF_IMAGE_ROOT_EXT_TYPE)

ifdef PTXCONF_IMAGE_ROOT_EXT
$(IMAGE_ROOT_EXT_IMAGE):
	@$(call targetinfo)
	@$(call image/genimage, IMAGE_ROOT_EXT)
	@$(call finish)
endif

# vim: syntax=make

[-- Attachment #5: image-root-tgz.make --]
[-- Type: text/plain, Size: 875 bytes --]

# -*-makefile-*-
#
# Copyright (C) 2012 by Michael Olbrich <m.olbrich@pengutronix.de>
#
# See CREDITS for details about who has contributed to this project.
#
# For further information about the PTXdist project and license conditions
# see the README file.
#

#
# We provide this package
#
IMAGE_PACKAGES-$(PTXCONF_IMAGE_ROOT_TGZ) += image-root-tgz

#
# Paths and names
#
IMAGE_ROOT_TGZ		:= image-root-tgz
IMAGE_ROOT_TGZ_DIR	:= $(BUILDDIR)/$(IMAGE_ROOT_TGZ)
IMAGE_ROOT_TGZ_IMAGE	:= $(IMAGEDIR)/root.tgz
IMAGE_ROOT_TGZ_PKGS	= $(PTX_PACKAGES_INSTALL)

# ----------------------------------------------------------------------------
# Image
# ----------------------------------------------------------------------------

ifdef PTXCONF_IMAGE_ROOT_TGZ
$(IMAGE_ROOT_TGZ_IMAGE):
	@$(call targetinfo)
	@$(call image/archive, IMAGE_ROOT_TGZ)
	@$(call finish)
endif

# vim: syntax=make

[-- Attachment #6: ext.config --]
[-- Type: text/plain, Size: 68 bytes --]


image @IMAGE@ {
	@EXT_TYPE@ {}
	size = @SIZE@
	mountpoint = "/"
}


[-- Attachment #7: Type: text/plain, Size: 48 bytes --]

-- 
ptxdist mailing list
ptxdist@pengutronix.de

                 reply	other threads:[~2012-07-01 18:45 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120701184531.GA4959@pengutronix.de \
    --to=m.olbrich@pengutronix.de \
    --cc=ptxdist@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox