+++ /dev/null
-
-YAIRD -- Yet Another MkInitRd
-=============================
-
-This is a proof of concept rewrite of mkinitrd, intended to test the
-idea that we can get a more accurate picture of the modules needed
-to boot a linux system by fully utilizing the information in sysfs.
-It comes with templates that make it possible to generate different
-initrd images for different distributions.
-
-Proof of concept means this software is barely tested: it may
-produce a working initrd image, or it may eat your disk. This
-is a good moment to re-read the "NO WARRANTY" part of the licence,
-and decide whether you want to test this software.
-
-
-Installation
-============
-
-You'll need HTML::Template to run the application; a standard package
-under Debian, in Fedora FC3 available via extras.
-
-Unpack, then configure and install:
-
- $ ./configure --prefix=$HOME/local --enable-template=Debian
- $ make install
-
-The --enable-template option is required; it picks one of the templates
-from the template directory to install.
-
-If you want to regenerate the html documentation, you need the xmlto
-package.
-
-If you're installing from version control rather than a tarball,
-you'll also need to have autmake and autoconf available, and
-need to run bootstrap.sh before doing 'configure; make'.
-
-
-Installing with klibc
-=====================
-
-Yaird comes with a small C program to manage the transfer from the initial
-root file system to the real root. To avoid the overhead of the GNU
-C library, you may want to compile this with klibc. Note however that
-this is only effective if every other program that is copied to the
-initial root filesystem (such as mount, mknod and a shell) is compiled
-in the same manner.
-
-Recent versions of klibc provide klcc, a wrapper around gcc that makes
-it easier to port programs to klibc. Installation is faily simple;
-the most important point is to make a symlink to a configured linux
-source tree. The SHLIBDIR determines where the shared library version
-ends up. If you want to use klibc for programs used early in the
-boot process it makes sense to put it on the root file system.
-
- $ cd klibc-0.207
- $ ln -s /usr/src/linux... linux
- $ make bindir=$HOME/local/bin \
- mandir=$HOME/local/man \
- INSTALLDIR=$HOME/local \
- SHLIBDIR=$HOME/local/shlib \
- install
- $
-
-Once you have klibc, you can configure yaird to make use of it
-as follows:
-
- $ ./configure CFLAGS=-static CC=$HOME/local/bin/klcc \
- --prefix=$HOME/local --enable-template=Debian
- ...
- $ make install
-
-The use of CFLAGS=-shared is optional.
-
-
-Using the application
-=====================
-
-To make a new initrd image for the current kernel:
-
- # yaird --format directory --output initrd.d
-
-This creates a directory initrd.d to look at or to package
-manually to a form suitable for booting.
-
-To get an image suitable for use under debian:
-
- # yaird --format cramfs --output /boot/initrd.img
-
-For Fedora, a cpio file is needed:
-
- # yaird --format cpio --output /boot/initrd.img
-
-Note that there is no strong relation between distribution
-and image format: nothing stops you from building a template
-that uses initramfs and cpio under Debian. However, the template
-and the image format do have to match.
-
-To produce a boot image for another kernel:
-
- # yaird --format directory --output initrd.d 2.6.10-1-686-smp
-
-There is also a '--test' option that will produce an overview
-of block special files, devices, modules etc that may be helpful
-in debugging boot problems.
-
-If you want the generated image to boot into something other than
-the current root, use the --root option. The block device specified
-must occur in /etc/fstab to allow yaird to find the required file system
-type.
-
- # yaird --format cramfs --output /boot/tst.img --root /dev/hdb7
-
-Use '--help' for an overview of other command line options.
-
-
-Using yaird as a replacement for mkinitrd
-=========================================
-
-If you install a new kernel from your distribution, that means
-making a new initial boot image. The postinstall script that
-comes with the kernel will normally do this using mkinitrd;
-if you want yaird to be used instead, some tweaking is necessary.
-
-In Debian, there are a lot of configuration options for the kernel
-installation, but replacing mkinitrd is not among them, so you'll
-have to replace /usr/sbin/mkinitrd with a wrapper around yaird.
-The following worked with debian 2.6.10-1-686:
-
- #!/bin/sh
- #
- # mkinitrd - emulate mkinitrd with yaird for kernel-image installs.
- #
- # Copyright (C) 2001-2003 Herbert Xu <herbert@debian.org>
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- #
- # $Id$
-
- PROG=mkinitrd-shimmy
- outfile=''
-
- while getopts "d:km:o:r:" flag; do
- case $flag in
- d)
- echo "$PROG: -d unsupported"
- exit 1
- ;;
- k)
- echo "$PROG: -k unsupported"
- exit 1
- ;;
- m)
- # ignore
- ;;
- o)
- outfile="$OPTARG"
- ;;
- r)
- echo "$PROG: -d unsupported"
- exit 1
- ;;
- *)
- echo "$PROG: unknown option $flag"
- exit 1
- ;;
- esac
- done
- shift $(($OPTIND - 1))
-
- if [ "$outfile" = "" ]; then
- echo "$PROG: no output file specified"
- exit 1
- fi
- if [ $# -gt 1 ]; then
- echo "$PROG: extra arguments found"
- exit 1
- fi
-
- # Note that version may be a pathname;
- # this is used by the installer for Debian kernel image packages.
- VERSION=$1
- [ $# -gt 0 ] || unset VERSION
- case $VERSION in
- /lib/modules/*/[!/]*)
- ;;
- /lib/modules/[!/]*)
- VERSION=${VERSION#/lib/modules/}
- VERSION=${VERSION%%/*}
- ;;
- esac
-
- case $VERSION in
- */*)
- echo $PROG: $VERSION is not a valid kernel version >&2
- exit 1
- ;;
- esac
-
- VERSION="${VERSION-$(uname -r)}"
-
- exec $HOME/local/sbin/yaird \
- --verbose --format cpio --output "$outfile" "$VERSION"
-
-For Fedora, you'll have to modify /sbin/new-kernel-package;
-not tested yet.