--- mkinitrd.orig 2006-06-12 21:32:06 +0400 +++ mkinitrd 2006-09-04 15:16:46 +0400 @@ -139,6 +139,7 @@ MODULES_DIR= MODULES_CONF= HAVE_RAID= +HAVE_EVMS= FOUND_NON_PCI_IDE= LSPCI=/usr/bin/lspci @@ -154,6 +155,11 @@ IGNORE_MODNAMES=" $IGNORE_MODNAMES ppa imm ide_scsi usb_storage" LOADED_MODNAMES= +PRE_EVMS_MODNAMES="dm_mod" +EVMS_ACTIVATE="/sbin/evms_activate" +EVMS_CONFIG="/etc/evms.conf" +EVMS_PLUGINS_REG="/(aix)|(bbr)|(bsd)|(disk)|(dos)|(drivelink)|(gpt)|(lvm)|(md)|(os2)|(s390)|(snapshot)[^[:space:]]*\.so" + loopDev= loopFs= loopFile= @@ -183,6 +189,59 @@ fi } +LIBS_REG="/lib\(\|64\)/[^[:space:]]*\.so\(\.[^[:space:]]*\|\)" +AddLibs() +{ + local list="$@" i + ( + ldd $list | \ + grep -s "${LIBS_REG}[[:space:]]" | \ + sed -e "s@^.*[[:space:]]\(${LIBS_REG}\)[[:space:]].*@\1@" + for i in $list; do + echo "$i" + done + ) | sort | uniq +} + +AddLibsAll() +{ + local list="$@" newlist + newlist=`AddLibs "$list"` + while [ "x$list" != "x$newlist" ] ; do + list="$newlist" + newlist=`AddLibs "$list"` + done + echo $list +} + +LinksAndFiles() +{ + local list="$@" i + for i in $list ; do + echo "$i" + readlink -f "$i" + done | sort | uniq +} + +EvmsLibdir() +{ + local list="$@" i + for i in $list ; do + echo "$i" + done | sed -n '\@/lib\(\|64\)/libevms@s@.*\(/lib\(\|64\)\)/libevms.*@\1@p' | head -n1 +} + +EVMS_FILES_ALL= +ListEvmsFilesAll() +{ + local list libdir list_plug list_all + list=`AddLibs $EVMS_ACTIVATE` + libdir=`EvmsLibdir $list` + list_plug=`find $libdir/evms -name '*.so' | egrep -s "$EVMS_PLUGINS_REG"` + list=`AddLibsAll $list_plug $list` + EVMS_FILES_ALL=`LinksAndFiles $list $EVMS_CONFIG` +} + InList() { local value="$1" list="$2" i @@ -927,6 +986,24 @@ echo $(( ($2 & 0xff) | ($1 << 8) | (($2 & ~0xff) << 12) )) } /bin/mount -t proc proc /proc +EOF + + if [ -n "$HAVE_EVMS" ]; then + Mkdir -p "$MNTDIR/dev/evms/" + Mkdir -p "$MNTDIR/var/lock/" + ListEvmsFilesAll + Cp --parents -d $EVMS_FILES_ALL "$MNTDIR/" + + cat >>"$RCFILE" <<'EOF' +echo mounting /dev/evms +/bin/mount -t tmpfs -o size=16k evms /dev/evms +echo mounting /var/lock +/bin/mount -t tmpfs -o size=16k tmpfs /var/lock +echo Starting EVMS +/sbin/evms_activate +EOF + fi + cat >>"$RCFILE" <<'EOF' read cmdline >"$RCFILE" <<'EOF' +/bin/umount /var/lock +/bin/umount /dev/evms +EOF + fi + + cat >>"$RCFILE" <<'EOF' /bin/umount /proc EOF @@ -1080,6 +1167,7 @@ --preload MODULENAME load MODULENAME before all found automatically. --with MODULENAME load MODULENAME after all found automatically. --with-raid enable software RAID (md) support. +--with-evms enable EVMS (/dev/evms) support. --omit-scsi-modules do not load any SCSI modules. --omit-ide-modules do not load any IDE modules. --omit-raid-modules do not load any raid modules. @@ -1101,7 +1189,7 @@ [ -n "$1" ] && Exit "$1" || Exit } -TEMP=`getopt -n "$PROG" -o fhvd -l help,version,verbose,debug,force,ifneeded,omit-scsi-modules,omit-ide-modules,omit-raid-modules,with-raid,pause,image-version,nocompress,nobootsplash,strict,fstab:,before:,preload:,with:,after: -- "$@"` || Usage 1 +TEMP=`getopt -n "$PROG" -o fhvd -l help,version,verbose,debug,force,ifneeded,omit-scsi-modules,omit-ide-modules,omit-raid-modules,with-raid,with-evms,pause,image-version,nocompress,nobootsplash,strict,fstab:,before:,preload:,with:,after: -- "$@"` || Usage 1 eval set -- "$TEMP" img_vers= @@ -1155,6 +1243,11 @@ HAVE_RAID=1 shift ;; + --with-evms) + HAVE_EVMS=1 + POSTLOAD_MODNAMES="$POSTLOAD_MODNAMES $PRE_EVMS_MODNAMES" + shift + ;; --pause) pause=1 shift