public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Hannes Reinecke <hare@suse.de>
To: Seewer Philippe <philippe.seewer@bfh.ch>
Cc: Bernhard Walle <bwalle@suse.de>,
	Christoph Hellwig <hch@infradead.org>,
	initramfs@vger.kernel.org, linux-kernel@vger.kernel.org,
	Kay Sievers <kay.sievers@vrfy.org>, Dave Jones <davej@redhat.com>,
	cjwatson@ubuntu.com, Bernhard Walle <bwalle@novell.com>
Subject: Re: Dracut -- Cross distribution initramfs infrastructure
Date: Fri, 19 Dec 2008 14:55:26 +0100	[thread overview]
Message-ID: <494BA7CE.2020007@suse.de> (raw)
In-Reply-To: <20081219091841.207bc951@kopernikus.site>

Hi all,

Bernhard Walle wrote:
> * Seewer Philippe [2008-12-19 08:41]:
>> Hannes Reinecke wrote:
>> [snip]
>>> If anyone is interested I can give a short overview of it.
>> Please do so, would be appreciated.
> 
> A good start is the manual page in section 5:
> http://git.opensuse.org/?p=projects/mkinitrd.git;a=blob_plain;f=man/mkinitrd.5.txt;hb=7583c3cc047edc3e8f1a06e8b7925bd27ac0228c
> 
> (The git.kernel.org and the opensuse.org repos are basically the same,
> we just switched to opensuse.org after the internal maintainership has
> been transferred from Hannes to myself because it was easier to add
> new users there. The opensuse.org git repo site didn't exist when the
> kernel.org mkinitrd repo was created.)
> 
> Anyway:
> 
> The basic idea is to have most stuff not in the main 'mkinitrd' script
> but in modules. Each module has (normally) a setup script part that is
> executed when the initrd is created, and a boot part that is executed
> when the initrd is running. For example, NFS root is in the 'nfs-util'
> package, not in 'mkinitrd'. Same for iSCSI. Or the kdump part is
> not in the main mkinitrd but in our 'kdump' package [1]. So the main
> initrd  package is quite small but still very flexible.
> 
> It's also flexible enough to use Busybox as module that resides in the
> 'busybox' package and can then be enabled with -F busybox (feature)
> when building the initrd.
> 
> Only documentation is at the current time a bit weak, one has to fiddle
> some stuff from the sources when writing new modules. But that's easy
> to fix. :-)
> 
> Hannes may explain more ...
> 
Yes, quite so. The design principles are as follows:

The goal of the initrd is to activate and mount the root fs.
And the root fs _only_. Every other system should be configured
once the main system is running.

So mkinitrd has two parts:
a) Detect the configuration of the rootfs and create the
   initramfs
b) Configure the rootfs on boot.

Therefore there are two distinct script types:

setup-XXX.sh - run during initrd creation time to detect
  and record the configuration

boot-XXX.sh - run during boot to configure the subsystem

The setup scripts have these tasks:
- Detect the rootfs
- Unwind the storage stack and record the configuration
  on each level
- Copy the required contents into the initramfs
- Pack initramfs for use

The boot scripts have these tasks:
- Initial configuration (create required device nodes, start udev)
- Configure the storage stack
- fsck and mount the root fs

So basically the boot scripts have to be called in reverse
order to the setup scripts.
To ensure the order is preserved during each run I've
introduced some 'stages', which are run consecutively.
These stages are documented in mkinitrd.5

The neat thing here is that we've split off each
configuration into small scripts, which will be called
if present. This allows for a pretty modular setup
and avoid the massive requirement setting of an
monolithic script.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		      zSeries & Storage
hare@suse.de			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Markus Rex, HRB 16746 (AG Nürnberg)

  reply	other threads:[~2008-12-19 13:55 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-17 18:54 Dracut -- Cross distribution initramfs infrastructure Jeremy Katz
2008-12-17 19:07 ` Christoph Hellwig
2008-12-18  7:36   ` Hannes Reinecke
2008-12-19  7:41     ` Seewer Philippe
2008-12-19  8:18       ` Bernhard Walle
2008-12-19 13:55         ` Hannes Reinecke [this message]
2008-12-19 15:27           ` Theodore Tso
2008-12-19 16:56             ` Jeremy Katz
2008-12-20 13:50               ` Daniel Pittman
2008-12-20 18:22                 ` Dave Jones
2009-01-07 16:04                   ` Hannes Reinecke
2008-12-17 19:31 ` Neil Horman
2008-12-18  9:27   ` Loïc Grenié

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=494BA7CE.2020007@suse.de \
    --to=hare@suse.de \
    --cc=bwalle@novell.com \
    --cc=bwalle@suse.de \
    --cc=cjwatson@ubuntu.com \
    --cc=davej@redhat.com \
    --cc=hch@infradead.org \
    --cc=initramfs@vger.kernel.org \
    --cc=kay.sievers@vrfy.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=philippe.seewer@bfh.ch \
    /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