head     1.1;
branch   1.1.1;
access   ;
symbols  knoppix37:1.1.1.1 knoppix:1.1.1;
locks    ; strict;
comment  @# @;


1.1
date     2005.03.14.18.47.49;  author tcheun;  state Exp;
branches 1.1.1.1;
next     ;

1.1.1.1
date     2005.03.14.18.47.49;  author tcheun;  state Exp;
branches ;
next     ;


desc
@@



1.1
log
@Initial revision
@
text
@#!/bin/bash

# mkinitrd
#
# Written by Erik Troan <ewt@@redhat.com>
#
# Contributors:
#	Elliot Lee <sopwith@@cuc.edu>
#	Miguel de Icaza <miguel@@nuclecu.unam.mx>
#	Christian 'Dr. Disk' Hechelmann <drdisk@@ds9.au.s.shuttle.de>
#	Michael K. Johnson <johnsonm@@redhat.com>
#	Pierre Habraken <Pierre.Habraken@@ujf-grenoble.fr>
#	Jakub Jelinek <jakub@@redhat.com>
#	Carlo Arenas Belon (carenas@@chasqui.lared.net.pe>
#	Keith Owens <kaos@@ocs.com.au>
#	Bernhard Rosenkraenzer <bero@@redhat.com>
#	Matt Wilson <msw@@redhat.com>
#       Trond Eivind Glomsrd <teg@@redhat.com>
#       Jeremy Katz <katzj@@redhat.com>
#       Preston Brown <pbrown@@redhat.com>
#	Bill Nottingham <notting@@redhat.com>
#       Guillaume Cottenceau <gc@@mandrakesoft.com>
#       You have to make /static directory and cp ash, rmmod.static, cloop.ko

PATH=/sbin:/usr/sbin:/bin:/usr/bin:$PATH
export PATH

VERSION=4.1.18

compress=1
allowmissing=""
target="initrd"
kernel="2.6.9-prep"
force=1
verbose=""
builtins="usbcore ide-cd ext2 iso9660 usbhid sd_mod"
PRESCSIMODS="scsi_mod.ko sr_mod.ko"
SCSI_MODULES="3w-xxxx.ko BusLogic.ko NCR53c406a.ko \
a100u2w.ko aha152x.ko aha1542.ko aic7xxx.ko aic7xxx_old.ko \
atp870u.ko dtc.ko eata.ko fdomain.ko gdth.ko initio.ko \
megaraid_mbox.ko megaraid_mm.ko pas16.ko psi240i.ko \
qlogicfas.ko qlogicfc.ko qlogicisp.ko t128.ko tmscsim.ko \
u14-34f.ko ultrastor.ko"
FS_MODULES="ext3.ko vfat.ko fat.ko jbd.ko ntfs.ko reiserfs.ko"
USB_MODULES="ohci-hcd.ko uhci-hcd.ko ehci-hcd.ko usb-storage.ko"
LOOP_MODULES="loop.ko"
CDROM_MODULES="ide-scsi.ko"
FIRE_MODULES="ieee1394.ko ohci1394.ko sbp2.ko" 
PREMODS="$PREMODS $PRESCSIMODS $SCSI_MODULES $FS_MODULES $USB_MODULES \
$LOOP_MODULES $CDROM_MODULES $FIRE_MODULES"
img_vers="yes"
pivot=1
initramfs=""
modulefile=/etc/modules.conf
rc=0

IMAGESIZE=8000
fstab="/etc/fstab"

if [ -f /etc/udev/udev.conf ]; then
    USE_UDEV="yes"
    UDEV_TMPFS="yes"
    UDEV_KEEP_DEV="yes"
    . /etc/udev/udev.conf
    [ -x /sbin/udev.static ] || USE_UDEV=
fi

usage () {
    echo "usage: `basename $0` [--version] [-v] [-f]" >&2
    echo "       [--image-version] [--fstab=<fstab>]" >&2
    echo "       [--nopivot] <initrd-image> <kernel-version>" >&2
    echo "" >&2
    echo "       (ex: `basename $0` /boot/initrd-2.2.5-15.img 2.2.5-15)" >&2
    exit 1
}

moduledep() {
    if [ ! -f "/lib/modules/$kernel/modules.dep" ]; then
	echo "No dep file found for kernel $kernel" >&2
	exit 1
    fi

    [ -n "$verbose" ] && echo -n "Looking for deps of module $1"
    deps=$(awk 'BEGIN { searched=ARGV[2]; ARGV[2]=""; rc=1 } \
                function modname(filename) { match(filename, /\/([^\/]+)\.k?o:?$/, ret); return ret[1] } \
                function show() { if (orig == searched) { print dep; orig=""; rc=0; exit } } \
                /^\/lib/ { show(); \
                           orig=modname($1); dep=""; \
                           if ($2) { for (i = 2; i <= NF; i++) { dep=sprintf("%s %s", dep, modname($i)); } } } \
                /^	/ { dep=sprintf("%s %s", dep, modname($1));  } \
                END      { show(); exit(rc) }' /lib/modules/$kernel/modules.dep $1)
    [ -n "$verbose" ] && echo -e "\t$deps"
}

findmodule() {
    skiperrors=""

    local modName=$1

    if [ "$modName" = "off" -o "$modName" = "null" ]; then
	return
    fi

    if echo $builtins | egrep -q '(^| )'$modName'( |$)' ; then
	[ -n "$verbose" ] && echo "module $modName assumed to be built in"
	set +x
	return
    fi

    # special cases
    if [ "$modName" = "i2o_block" ]; then
	findmodule i2o_core
	findmodule -i2o_pci
	modName="i2o_block"
    elif [ "$modName" = "ppa" ]; then
	findmodule parport
	findmodule parport_pc
	modName="ppa"
    elif [ "$modName" = "sbp2" ]; then
	findmodule ieee1394
	findmodule ohci1394
	modName="sbp2"
    else
	moduledep $modName
	for i in $deps; do
	    findmodule $i
	done
    fi

    for modExt in ko ; do
	if [ -d /lib/modules/$kernel/updates ]; then
	    fmPath=`(cd /lib/modules/$kernel/updates; echo find . -name $modName.$modExt -type f | /sbin/nash --quiet) | /bin/awk {'print $1; exit;'}`
	fi
	
	if [ -f /lib/modules/$kernel/updates/$fmPath ]; then
	    fmPath=updates/$fmPath
	    break
	fi

#	fmPath=`(cd /lib/modules/$kernel; echo find . -name $modName.$modExt -type f | /sbin/nash --quiet) | /bin/awk {'print $1; exit;'}`
	fmPath=`(cd /lib/modules/$kernel; echo find . -name $modName -type f | /sbin/nash --quiet) | /bin/awk {'print $1; exit;'}`
	if [ -f /lib/modules/$kernel/$fmPath ]; then
	    break
	fi
    done

    if [ ! -f /lib/modules/$kernel/$fmPath ]; then
	echo "No module $modName found for kernel $kernel, aborting." >&2
	exit 1
    fi

    # only need to add each module once
    if ! echo $MODULES | grep -q "$fmPath" 2>/dev/null ; then
	MODULES="$MODULES $fmPath"
    fi
}

inst() {
    if [ "$#" != "2" ];then
        echo "usage: inst <file> <destination>"
        return
    fi 
    [ -n "$verbose" ] && echo "$1 -> $2"
    cp $1 $2
}

if [ -z "$target" -o -z "$kernel" ]; then
    usage
fi

if [ -n "$img_vers" ]; then
    target="$target-$kernel"
fi

if [ -z "$force" -a -f $target ]; then
    echo "$target already exists." >&2
    exit 1
fi

if [ ! -d /lib/modules/$kernel ]; then
    echo "/lib/modules/$kernel is not a directory." >&2
    exit 1
fi

if [ $UID != 0 ]; then
    echo "mkinitrd must be run as root"
    exit 1
fi

kernelmajor=`echo $kernel | cut -d . -f 1,2`

    if [ -n "$verbose" ]; then echo "Creating initramfs"; fi
    modulefile=/etc/modprobe.conf
    initramfs=1
    pivot=""

# if we're not using udev, don't set any of the other bits
[ -z "$USE_UDEV" ] && UDEV_TMPFS= && UDEV_KEEP_DEV=

# find a temporary directory which doesn't use tmpfs
TESTDIR="/BOOYO.build"
TMPDIR="/tmp"

for n in $PREMODS; do
	findmodule $n
done

MNTIMAGE="${TESTDIR}/initrd.tst"
if [ -d $MNTIMAGE ]; then
    rm -Rf $MNTIMAGE
fi
IMAGE=`mktemp ${TMPDIR}/initrd.img.XXXXXX`
MNTPOINT=`mktemp -d ${TMPDIR}/initrd.mnt.XXXXXX`
RCFILE=$MNTIMAGE/linuxrc

if [ -z "$MNTIMAGE" -o -z "$IMAGE" ]; then
    echo "Error creating temporaries.  Try again" >&2
    exit 1
fi

dd if=/dev/zero of=$IMAGE bs=1k count=$IMAGESIZE 2> /dev/null || exit 1

LODEV=$(echo findlodev | /sbin/nash --quiet)

if [ -z "$LODEV" ]; then
  rm -rf $MNTIMAGE $MNTPOINT $IMAGE
  echo "All of your loopback devices are in use." >&2
  exit 1
fi

losetup ${LODEV} $IMAGE || exit 1

# We have to "echo y |" so that it doesn't complain about $IMAGE not
# being a block device
echo y | mke2fs $LODEV $IMAGESIZE >/dev/null 2>/dev/null
tune2fs -i0 $LODEV >/dev/null

if [ -n "$verbose" ]; then
    echo "Using loopback device $LODEV"
fi

mkdir -p $MNTPOINT
mount -t ext2 $LODEV $MNTPOINT || {
  echo "Can't get a loopback device"
  exit 1
}

  # We don't need this directory, so let's save space
rmdir $MNTPOINT/lost+found >/dev/null 2>&1

mkdir -p $MNTIMAGE
mkdir -p $MNTIMAGE/BOOYO
mkdir -p $MNTIMAGE/bin
mkdir -p $MNTIMAGE/boot
mkdir -p $MNTIMAGE/dev
mkdir -p $MNTIMAGE/etc
mkdir -p $MNTIMAGE/lib
mkdir -p $MNTIMAGE/modules
mkdir -p $MNTIMAGE/opt
mkdir -p $MNTIMAGE/proc
mkdir -p $MNTIMAGE/sbin
mkdir -p $MNTIMAGE/static
mkdir -p $MNTIMAGE/sys
mkdir -p $MNTIMAGE/sysroot
mkdir -p $MNTIMAGE/usr
ln -s /BOOYO/bin $MNTIMAGE/bin
ln -s /BOOYO/boot $MNTIMAGE/boot
ln -s /BOOYO/lib $MNTIMAGE/lib
ln -s /BOOYO/opt $MNTIMAGE/opt
ln -s /BOOYO/sbin $MNTIMAGE/sbin
ln -s /BOOYO/usr $MNTIMAGE/usr

inst /static/ash "$MNTIMAGE/static/ash"
ln -s /static/ash $MNTIMAGE/static/sh
inst /static/rmmod.static "$MNTIMAGE/static/rmmod"
inst /sbin/insmod.static "$MNTIMAGE/static/insmod"

for MODULE in $MODULES; do
    if [ -x /usr/bin/strip ]; then
	/usr/bin/strip -g $verbose /lib/modules/$kernel/$MODULE -o $MNTIMAGE/modules/$(basename $MODULE)
    else
	cp $verbose -a /lib/modules/$kernel/$MODULE $MNTIMAGE/modules
    fi
done

if [ -x /usr/bin/strip ]; then
    /usr/bin/strip -g $verbose /static/cloop.ko -o $MNTIMAGE/modules/cloop.ko
else
	cp $verbose -a /static/cloop.ko $MNTIMAGE/modules/cloop.ko
fi
# mknod'ing the devices instead of copying them works both with and
# without devfs...
mknod $MNTIMAGE/dev/console c 5 1
mknod $MNTIMAGE/dev/null c 1 3
mknod $MNTIMAGE/dev/ram b 1 1
mknod $MNTIMAGE/dev/systty c 4 0
for i in 1 2 3 4; do
    mknod $MNTIMAGE/dev/tty$i c 4 $i
done

cp $verbose -a /static/linuxrc $MNTIMAGE/linuxrc
chmod +x $RCFILE

(cd $MNTIMAGE; tar cf - .) | (cd $MNTPOINT; tar xf -) || exit 1

umount $MNTPOINT
losetup -d $LODEV

gzip -9 < $IMAGE > $target || rc=1

#rm -rf $MNTIMAGE $IMAGE
rm -rf $IMAGE
if [ -n "$MNTPOINT" ]; then rm -rf $MNTPOINT ; fi

exit $rc
@


1.1.1.1
log
@import BOOYO.build
@
text
@@
