summaryrefslogtreecommitdiffstats
path: root/installer
diff options
context:
space:
mode:
authorOliver Tappe2008-02-02 23:46:35 +0100
committerOliver Tappe2008-02-02 23:46:35 +0100
commit77838eab1f8f770c86cb9a9e3db3d95ccb9f32de (patch)
tree46c90f5630b80a2db8c49d2a1f770106e03e12a5 /installer
parent* fixed bugs that stopped new-style initramfs from working (diff)
downloadcore-77838eab1f8f770c86cb9a9e3db3d95ccb9f32de.tar.gz
core-77838eab1f8f770c86cb9a9e3db3d95ccb9f32de.tar.xz
core-77838eab1f8f770c86cb9a9e3db3d95ccb9f32de.zip
* switched config-demuxer over to internal generation of initramfs
* obsoleted mkdxsinitrd git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1511 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'installer')
-rwxr-xr-xinstaller/obsolete/mkdxsinitrd801
1 files changed, 801 insertions, 0 deletions
diff --git a/installer/obsolete/mkdxsinitrd b/installer/obsolete/mkdxsinitrd
new file mode 100755
index 00000000..64c244e5
--- /dev/null
+++ b/installer/obsolete/mkdxsinitrd
@@ -0,0 +1,801 @@
+#!/bin/bash
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org
+#
+# Main script for generating the InitRamFS of OpenSLX clients, to constitute
+# the Stage3 boot stadium
+
+# debug level of script itself
+DEBUG=1
+# debug level of the initramfs (to trigger the addition of specific
+# binaries and kernel modules)
+IRFSDEBUG=1
+COMETCEXCL="XF86Config*\nissue*\nmtab*\nfstab*\n"
+COMDIRINDXS="/tmp/scratch /var/lib/nobody"
+
+# distro specific settings read from configuration file
+# D_SYSCONFDIR - system wide configuration settings in /etc - sysconfig in
+# SuSE and RedHat, default in Debian and Ubuntu, conf.d in Gentoo
+# D_ETCEXCL - list of files, wildcards to be excluded from /etc when using
+# bind mounts
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw
+# part of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present
+# anyhow
+# D_BINDMNT - any code which is specific in bind mount environment
+# D_RCDIRS - runlevel directories relative to /etc
+# D_HWMODTOIGNORE -
+
+# just ensure that variables are set and the user gets an idea if
+# something fails
+D_SYSCONFDIR="<set in ~/distro-config/distro file>"
+D_ETCEXCL="<set in ~/distro-config/distro file>"
+D_BINDMPTS="<set in ~/distro-config/distro file>"
+D_DIRINBINDMNT="<set in ~/distro-config/distro file>"
+D_RODIRSINRW="<set in ~/distro-config/distro file>"
+D_DIRINDXS="<set in ~/distro-config/distro file>"
+D_BINDMNT="<set in ~/distro-config/distro file>"
+D_INITDIR="<set in ~/distro-config/distro file>"
+D_INITBOOTD="<set in ~/distro-config/distro file>"
+D_RCDIRS="<set in ~/distro-config/distro file>"
+D_RCDIRSINRW="<set in ~/distro-config/distro file>"
+D_INITSCRIPTS="<set in ~/distro-config/distro file>"
+D_XF86CONFFILE="<set in ~/distro-config/distro file>"
+D_XORGBIN="<set in ~/distro-config/distro file>"
+D_XFONTPATH="<set in ~/distro-config/distro file>"
+D_DEFAULTCOUNTRY="<set in ~/distro-config/distro file>"
+# read in the global settings
+SLX_CONFIG_PATH=@@@SLX_CONFIG_PATH@@@
+SLX_SHARE_PATH=@@@SLX_BASE_PATH@@@/share
+[ -f $SLX_SHARE_PATH/settings.default ] && \
+ . $SLX_SHARE_PATH/settings.default
+[ -f $SLX_CONFIG_PATH/settings ] && \
+ . $SLX_CONFIG_PATH/settings
+
+#########################################################################
+# End of global variable declaration, nothing needed to be changed at
+# default below that line
+
+testmkd () {
+ test -d $1 || mkdir -p $1 >/dev/null 2>&1
+}
+
+usage()
+{
+ echo -e "mkdxsinitrd [-C] [-dh] [-k kernel version] [-i path/file] \
+[-f module(s)] [-n module(s)] [-m module(s)] -r path [-s theme]\n\
+[-c initramfs-setup] -S system_name"
+ echo "OPTIONEN"
+ echo " -C create special initramfs for CD/DVD syslinux demo mode"
+ echo " -c location of initramfs configuration file (initramfs-setup)"
+ echo " -d use ISC dhclient instead of udhcpcd of busybox"
+ echo " -h show usage information"
+ echo " -k kernel version"
+ echo " -i path/file optional information where to write initramfs file"
+ echo " -f list of blockdev/filesystem modules"
+ echo " -n list of network adaptor modules"
+ echo " -m list of misc modules not covered by -f or -n"
+ echo " -p list of active plugins"
+ echo " -r path to stage1 root (vendor OS, e.g. /var/opt/openslx/stage1/suse-..."
+ echo " -S name of the system for which the initramfs is built"
+ echo " -s theme (for splash)"
+ echo " -t tpm support (client security)"
+ echo " -w enable WLAN support. Put WLAN kernel drivers to the network module"
+ echo " list"
+ exit 0
+}
+
+# check needed things for installation
+precheck() {
+ # check if running as root
+ if [ "`id -u`" != "0" ]; then
+ echo -e "\nYou don't have the needed permission. Please rerun as root user!\n"
+ exit 1
+ fi
+ # Check for correct settings of SLX-Variables
+ if [ "x" == "x$SLX_BASE_PATH" ]; then
+ if [ "x$SLX_CONFIG_PATH" == "x@@@SLX_CONFIG_PATH@@@" ]; then
+ echo "Please make sure you install the Open SLX Software properly,"
+ echo "i.e. install it using the provided Makefile. Thanks."
+ else
+ echo "Essential configuration is missing. Please verify"
+ echo "existence and correctness of $SLX_SHARE_PATH/settings.default"
+ fi
+ exit 1
+ fi
+}
+
+# replaces which command to find executables inside ROOTDIR
+binfinder()
+{
+local PROGRAM="$1"
+local RET=1
+for ELEMENT in bin sbin usr/bin usr/sbin usr/local/bin \
+ usr/local/sbin usr/bin/X11; do
+ if [ -f "${ROOTDIR}/$ELEMENT/$PROGRAM" ] && \
+ [ -x "${ROOTDIR}/$ELEMENT/$PROGRAM" ]; then
+ printf '%s\n' "${ROOTDIR}/$ELEMENT/$PROGRAM"
+ RET=0
+ break
+ fi
+done
+return $RET
+}
+
+# copy some binary to given destination. Takes binary in $1 and
+# destination in $2
+cobi()
+{
+local DEST=$2
+local FPTB=`binfinder $1`
+if [ -z ${FPTB} ] ; then
+ return 1;
+elif [ -L ${FPTB} ] ; then
+ # do not copy the link but the binary the link points to
+ local LINKDEST=`ls -la ${FPTB} | sed -e "s,.* ,,"`
+ case $LINKDEST in
+ /*) FPTB=${ROOTDIR}${LINKDEST}
+ ;;
+ *) ;;
+ esac
+ cp ${FPTB} ${INSTDIR}/${DEST}
+else
+ cp ${FPTB} ${INSTDIR}/${DEST}
+fi
+slxldd --root-path=${ROOTDIR} ${FPTB} >>${INSTDIR}/tmp/libraries
+return 0
+}
+
+# replace copy
+repco()
+{
+local FILENAME=$1
+DATE=`date +%m-%d-%Y`
+# do not forget to define all variables which should be replaced within
+# the start and configuration scripts. All comment lines will be deleted.
+if [ -d ${SLX_SHARE_PATH}/initramfs/${FILENAME} ] ; then
+ testmkd ${INSTDIR}/${FILENAME}
+else
+ if file ${SLX_SHARE_PATH}/initramfs/${FILENAME}| grep "ELF" &>/dev/null ; then
+ cp ${SLX_SHARE_PATH}/initramfs/${FILENAME} ${INSTDIR}/${FILENAME}
+ elif [ -L ${SLX_SHARE_PATH}/initramfs/${FILENAME} ] ; then
+ cp -a ${SLX_SHARE_PATH}/initramfs/${FILENAME} ${INSTDIR}/${FILENAME%/*}
+ else
+ if [ -z ${SLX_VERSION} ] ; then
+ SLX_VERSION=$(slxversion)
+ fi
+ sed -e "s,@@@INSTDIR@@@,${INSTDIR},g;s,@@@KERNVER@@@,${KERNVER},g" \
+ -e "s,@@@DISTRO_NAME@@@,${DISTRO_NAME},g" \
+ -e "s,@@@DISTRO_VER@@@,${DISTRO_VER},g" \
+ -e "s,@@@NETIF@@@,${NET_IF},g" \
+ -e "s,@@@NWMODULES@@@,${NWMODULES},g" \
+ -e "s,@@@COMDIRINDXS@@@,${COMDIRINDXS},g" \
+ -e "s,@@@COMETCEXCL@@@,${COMETCEXCL},g" \
+ -e "s,@@@DATE@@@,${DATE},g;/^#[^!].*/d" \
+ ${SLX_SHARE_PATH}/initramfs/${FILENAME} >> ${INSTDIR}/${FILENAME}
+ # ugly hack for creating a general slx config file instead of "patching"
+ # the stage3 init
+ echo -e "slxconf_date=${DATE}\nslxconf_kernver=${KERNVER}\n\
+slxconf_listnwmod=\"${NWMODULES}\"\nslxconf_distro_name=${DISTRO_NAME}\n\
+slxconf_distro_ver=${DISTRO_VER}\nslxconf_system_name=${SYSTEM_NAME}\n\
+slxconf_slxver=\"${SLX_VERSION}\"" \ > ${INSTDIR}/etc/sysconfig/slxsystem.conf
+ sed -e "s,^#!/bin/sh,#!/bin/ash," -i ${INSTDIR}/${FILENAME}
+ fi
+fi
+}
+
+copy_distro_stuff() {
+ # copy first the default distro dependent configuration (variables) and
+ # function files, then append to each the distro/version specific file
+ # variables, functions set in default might that way be overwritten by
+ # definitions in distro/version specific files
+ cat ${SLX_SHARE_PATH}/distro-specs/$1/config-default >${INSTDIR}/etc/sysconfig/config
+ cat ${SLX_SHARE_PATH}/distro-specs/$1/config-$2 >>${INSTDIR}/etc/sysconfig/config
+ #[ -f $SLX_SHARE_PATH/settings.default ] && \
+ # cat $SLX_SHARE_PATH/settings.default >>${INSTDIR}/etc/sysconfig/config
+ #[ -f $SLX_CONFIG_PATH/settings ] && \
+ # cat $SLX_CONFIG_PATH/settings >>${INSTDIR}/etc/sysconfig/config
+ cat ${SLX_SHARE_PATH}/distro-specs/$1/functions-default >${INSTDIR}/etc/distro-functions
+ cat ${SLX_SHARE_PATH}/distro-specs/$1/functions-$2 >>${INSTDIR}/etc/distro-functions
+ # would be cool not to copy .svn here ...
+ # fixme!! works only for etc directories. If dir exists then next copy places
+ # file into the existing dir
+ cp -a distro-specs/$1/files-default ${INSTDIR}/etc/sysconfig/files 2>/dev/null
+ # ... so remove them afterwards ...
+ find ${INSTDIR}/etc/sysconfig/files \
+ -regex ".*/\..*" -exec rm -rf {} 2>/dev/null \;
+}
+# copy kernel modules even if links (first parameter is source, second
+# destination and third source prefix)
+modcp () {
+if [ -L $1 ] ; then
+ cp $3/$(readlink $1) $2
+else
+ cp $1 $2
+fi
+}
+# This function makes the directory of this script to the present working
+# directory
+# Does also work when called by symbolic links (even for nested links).
+goto_script_dir()
+{
+ [ $DEBUG -ge 2 ] && echo "Aufgerufen wurde $0, checking if it is a link"
+ calleddetails=`ls -l $0` # get the file flags (e.g. lrwxrwxrwx)
+ [ $DEBUG -ge 2 ] && echo $calleddetails
+
+ calleddir=${0%/*} # Strip the filename from path
+ [ $DEBUG -ge 2 ] && echo "Wechsele ins Verzeichnis des aufgerufenen scripts/links ($calleddir)"
+ cd $calleddir
+
+ while index=`expr index "$calleddetails" "l"`;
+ [ $index -eq 1 ]; do
+
+ [ $DEBUG -ge 2 ] && echo "It is a link"
+ target=`echo $calleddetails | awk '{print $NF}'`
+ [ $DEBUG -ge 2 ] && echo "The target of the link is: $target"
+ hasslash=`expr index "$target" "/"`
+ if [ $hasslash -ne 0 ]; then
+ targetpath=${target%/*} # extract the pathname
+ [ $DEBUG -ge 2 ] && echo "Following link to $targetpath"
+ cd $targetpath
+ else
+ [ $DEBUG -ge 2 ] && echo "It is in the same directory as the link"
+ fi
+ targetfile=`basename $target`
+ [ $DEBUG -ge 2 ] && echo "The target file of the link is: $targetfile"
+ calleddetails=`ls -l $targetfile` # get the file flags (e.g. lrwxrwxrwx)
+ [ $DEBUG -ge 2 ] && echo $calleddetails
+ done
+ [ $DEBUG -ge 2 ] && pwd
+
+}
+
+# theming
+# add a bootsplash image to the initial ramdisk
+# add a displaymanager theme to use
+add_theme() {
+
+theme="${theme}"
+themes_dir="${SLX_SHARE_PATH}/themes/openslx"
+if [ -d "${SLX_SHARE_PATH}/themes/${theme}" ]; then
+ themes_dir="${SLX_SHARE_PATH}/themes/${theme}"
+fi
+echo -e "\n\tUsing ${themes_dir} for themes."
+
+echo -e "\tBootsplash theme found:\c"
+if [ -d "${SLX_SHARE_PATH}/themes/${theme}/bootsplash" ]; then
+ echo -e "\t\tyes"
+ cp -a ${SLX_SHARE_PATH}/splashy/* ${INSTDIR}/bin
+ mkdir -p ${INSTDIR}/etc/splashy
+ cp -a ${themes_dir}/bootsplash/* ${INSTDIR}/etc/splashy
+ any_themes=1
+else echo -e "\tno"
+fi
+
+echo -e "\tDisplaymanager theme found:\c"
+if [ -d "${SLX_SHARE_PATH}/themes/${theme}/displaymanager" ]; then
+ echo -e "\tyes"
+ cp -a ${themes_dir}/displaymanager ${INSTDIR}/usr/share/themes
+ any_themes=1
+else echo -e "\tno"
+fi
+
+if [ -z ${any_themes} ]; then
+ echo -e "Neither bootsplash nor displaymanager theme found in"
+ echo -e "\t${themes_dir}"
+fi
+
+echo
+}
+
+
+#########################################################################
+# End of function declaration
+
+while getopts :Cdhk:c:i:r:o:s:f:n:m:p:S:tu:wI:a: a ; do
+ case $a in
+ \:|\?)
+ case $OPTARG in
+ c) echo "-c requires location of initramfs-setup file";;
+ k) echo "-k requires kernel version parameter";;
+ i) echo "-i requires initramfs path parameter";;
+ f) echo "-f requires file system module (list) parameter";;
+ n) echo "-n requires network module (list) parameter";;
+ m) echo "-m requires misc module (list) parameter";;
+ p) echo "-p requires plugins (list) parameter";;
+ r) echo "-r requires root dir parameter";;
+ s) echo "-s may require theme name";;
+ I) echo "-I requires network interface parameter";;
+ S) echo "-S requires the system name";;
+ V) echo "-V requires an executable to run inside linuxrc";;
+ *) echo "Unknown option: -$OPTARG"
+ echo "Try mkinitrd -h";;
+ esac
+ exit 1
+ ;;
+ C) cdboot=1;;
+ c) CLCONFFILE=$OPTARG;;
+ d) use_dhclient=1;;
+ k) KERNVER=$OPTARG;;
+ i) INITRD_PATH=$OPTARG;;
+ f) FSMODULES=$OPTARG;;
+ n) NWMODULES=$OPTARG;;
+ m) MISCMODULES=$OPTARG;;
+ p) PLUGINS=$OPTARG;;
+ r) ROOTDIR=$OPTARG;;
+ s) theme=$OPTARG;;
+ S) SYSTEM_NAME=$OPTARG;;
+ t) use_tpm=1;;
+ w) enable_wlan=1;;
+ d) IRFSDEBUG=$OPTARG;;
+ l) local_init_script="$OPTARG";; # use for pre/postinit.local?
+ h) usage;;
+ esac
+done
+shift $(expr $OPTIND - 1)
+
+
+#########################################################################
+# End of parameter, argument interpretation
+
+# Check for superuser id
+precheck
+#Change to the directory this script is located in
+goto_script_dir
+
+if [ -z "$ROOTDIR" ] ; then
+ echo "No ROOTDIR given - please use the -r flag! Exiting..."
+ exit 1
+fi
+if [ -z "$SYSTEM_NAME" -a -z "$cdboot" ] ; then
+ echo "No system name given - please use the -S flag! Exiting..."
+ exit 1
+fi
+# set temporary setup directory, clean it and setup basic directory
+# structure
+if [ -z "$INSTDIR" ] ; then
+ INSTDIR=/tmp/slx-tmpramfs
+fi
+rm -rf ${INSTDIR}
+mkdir -p ${INSTDIR}/{dev,proc,tmp,mnt,root,bin,sys,lib}
+mkdir -p ${INSTDIR}/var/{lib,run} ${INSTDIR}/var/lib/nfs/state
+ln -s /bin ${INSTDIR}/sbin
+mkdir -p ${INSTDIR}/usr/share
+# needed for KNOPPIX hwsetup tool not to be confused with ${D_SYSCONFDIR}
+mkdir -p ${INSTDIR}/etc/sysconfig
+
+# slx init or cdboot init
+if [ -z "$cdboot" ] ; then
+ # set DISTRO_NAME & DISTRO_VER from ROOTDIR:
+ VENDOR_OS=$(basename $ROOTDIR)
+ DISTRO_NAME=${VENDOR_OS%%-*}
+ # select distro type
+ DISTRO_VER=${VENDOR_OS#*-}
+ # drop distro type, keep from version onwards
+ DISTRO_VER=${DISTRO_VER%%-*}
+ # remove any optional stuff after version
+ DISTRO_VER=${DISTRO_VER%%_*}
+ # remove any architecture specification after version
+ copy_distro_stuff ${DISTRO_NAME} ${DISTRO_VER}
+
+ # initial ramdisk scripts: init, functions, servconfig, hwautocfg, ...
+ # copy and replace variable names
+ for dirs in `find ${SLX_SHARE_PATH}/initramfs/* ! -regex ".*/\..*"` ; do
+ repco ${dirs##*initramfs/}
+ done
+ chmod 755 ${INSTDIR}/init \
+ ${INSTDIR}/bin/{servconfig,hwautocfg,xconfig,dhcpmkconfig}
+else
+ cp ${SLX_SHARE_PATH}/cdboot/init ${INSTDIR}/init
+ chmod 755 ${INSTDIR}/init
+fi
+
+# quickhack architecture detection of target system
+if [ -d ${ROOTDIR}/lib64 ] ; then
+ ARCH=x86_64
+else
+ ARCH=i586
+fi
+
+# copy the proper busybox, ddcprobe, 915resolution depending on architecture
+# (i586 for 32bit and x86_64 for 64bit)
+# fixme: At the moment the busybox does not support ext2 filesystem tools
+cp ${SLX_SHARE_PATH}/busybox/busybox.${ARCH} ${INSTDIR}/bin/busybox
+cp ${SLX_SHARE_PATH}/ramfstools/ddcprobe.${ARCH} ${INSTDIR}/bin/ddcprobe
+cp ${SLX_SHARE_PATH}/ramfstools/915resolution.${ARCH} ${INSTDIR}/bin/915resolution
+slxldd --root-path=${ROOTDIR} ${INSTDIR}/bin/busybox >>${INSTDIR}/tmp/libraries
+for bbins in [ ar arping ash bunzip2 cat chmod chown chroot cp cpio cut \
+ date dd df dmesg du echo env expr fdisk free grep gunzip hwclock \
+ insmod id ip kill killall ln ls lsmod mdev mkdir \
+ mknod mkswap modprobe mount mv nice ping printf ps rdate \
+ rm rmmod sed sleep sort swapoff swapon switch_root tar test tftp \
+ time touch tr udhcpc umount uptime usleep vconfig vi wget zcat zcip; do
+ ln -fs /bin/busybox ${INSTDIR}/bin/$bbins
+done
+# fake the sh link in busybox environment
+echo -e "#!/bin/ash\n/bin/ash \$@" > ${INSTDIR}/bin/sh
+chmod a+x ${INSTDIR}/bin/sh
+
+# binaries useful for debugging purposes
+if [ $IRFSDEBUG -gt 2 ] ; then
+ for bbins in \
+ strace
+ do
+ cobi ${bbins} bin || echo "Program ${bbins} not found"
+ done
+fi
+
+# slx init or cdboot init
+if [ -z "$cdboot" ] ; then
+ # one of the dhcp clients (do we really need any other dhcp client?)
+ if [ -n "${use_dhclient}" ] ; then
+ if binfinder dhclient ; then
+ cobi dhclient bin
+ if [ "$DISTRO_NAME" = "ubuntu" ] ; then
+ #Dhclient auf Ubu 6.10 streikt ohne libnss_compat
+ echo "/lib/libnss_compat.so.2" >> ${INSTDIR}/tmp/libraries
+ echo "/lib/libnsl.so.1" >> ${INSTDIR}/tmp/libraries
+ fi
+ else
+ echo "dhclient is not available"
+ fi
+ fi
+
+ # if nbd or dnbd is used as clients root filesystem
+ if [ -n "${FSMODULES}" ] ; then
+ for i in ${FSMODULES}; do
+ case "$i" in
+ dnbd)
+ cobi dnbd-client bin
+ ;;
+ nbd)
+ cobi nbd-client bin
+ ;;
+ esac
+ done
+ fi
+ # if tpm should be used within InitRamFS ...
+ if [ -n "${use_tpm}" ] ; then
+ MISCMODULES="${MISCMODULES} tpm"
+ # copy the other stuff
+ fi
+ # if unionfs
+ cobi unionctl bin &>/dev/null || \
+ echo "Program unionctl not found; could be ignored ..."
+
+ # if cowloop
+ cobi cowdev bin &>/dev/null || \
+ echo "Program cowdev not found; could be ignored ..."
+
+ # if iscsi (or just with modules)??
+ # cobi iscsiadm iscsid bin &>/dev/null || \
+ # echo "Program iscsid not found; could be ignored ..."
+
+ # distro specific additional stuff
+ case "${DISTRO_NAME}" in
+ debian*)
+ cp ${ROOTDIR}/lib/libnss_compat.so.2 ${INSTDIR}/lib;;
+ esac
+ # add libpci.so to the libraries, as we are going to copy it manually:
+ slxldd --root-path=${ROOTDIR} ${SLX_SHARE_PATH}/initramfs/lib/libpci.so.2 \
+ >>${INSTDIR}/tmp/libraries
+else
+ # fast kernel switch tool
+ cobi kexec bin
+fi
+
+# if wlan should be supported in stage3
+if [ -n "${enable_wlan}" ] ; then
+ cobi iwconfig bin
+fi
+
+# if tpm should be used within InitRamFS ...
+if [ -n "${use_tpm}" ] ; then
+ MISCMODULES="${MISCMODULES} tpm"
+
+ ########## platform-independent stuff ##########
+ SLX_TPM_PATH="$SLX_SHARE_PATH/tpm"
+ if [ ! -d "$SLX_TPM_PATH" ] ; then
+ echo "ERROR: can't find platform-independent tpm-files: $SLX_TPM_PATH"
+ exit 1
+ fi
+
+ # copy files with directory-hierarchy
+ for TPM_FILE in $(find ${SLX_TPM_PATH} -type f) ; do
+ path=$(dirname $TPM_FILE | sed "s,$SLX_TPM_PATH,,")
+ mkdir -p ${INSTDIR}/$path
+ cp $TPM_FILE ${INSTDIR}/$path
+ done
+ ################################################
+
+ ########### platform-dependent stuff ###########
+ # TPM_BINPATH contains path to platform-dependent stuff
+ TPM_BINPATH="${ROOTDIR}/usr/local/share/tpm"
+ if [ ! -d "$TPM_BINPATH" ] ; then
+ echo "ERROR: can't find platform-dependent tpm-files: $TPM_BINPATH"
+ exit 1
+ fi
+ # copy platform-dependent directory structure and files
+ for TPM_FILE in $(find ${TPM_BINPATH} -type f) ; do
+ path=$(dirname $TPM_FILE | sed "s,${ROOTDIR},,")
+ mkdir -p ${INSTDIR}/$path
+ cp $TPM_FILE ${INSTDIR}/$path
+ done
+ ################################################
+
+ # include the shared libraries required for various binaries
+ ### echo "adding shared libs:"
+ SHLIBS="$(grep -v '^#' ${SLX_TPM_PATH}/etc/libdeps)"
+ for lib in $SHLIBS ; do
+ ### cp ${ROOTDIR}/$lib ${INSTDIR}/lib/ && echo $lib
+ echo ${ROOTDIR}/$lib >>${INSTDIR}/tmp/libraries
+ done
+
+ # trousers and tpm-tools
+ cobi tcsd bin
+ TPM_TOOLS="tpm_sealdata tpm_changeownerauth tpm_clear
+ tpm_restrictpubek tpm_selftest tpm_setactive
+ tpm_setclearable tpm_setenable tpm_setownable
+ tpm_setpresence tpm_takeownership tpm_version
+ tpm_createek tpm_getpubek tpm_unseal"
+ for tool in $TPM_TOOLS ; do
+ cobi $tool bin
+ done
+ # ssh stuff
+ cobi ssh bin
+ cobi scp bin
+
+ # just debugging tools, can be safely removed...
+ cobi bash bin
+ cp ${ROOTDIR}/usr/bin/ldd /${INSTDIR}/bin
+ cobi strace bin
+fi
+
+# if unionfs
+cobi unionctl bin &>/dev/null || \
+ echo "Program unionctl not found; could be ignored ..."
+
+# if cowloop
+cobi cowdev bin &>/dev/null || \
+ echo "Program cowdev not found; could be ignored ..."
+
+# if iscsi (or just with modules)??
+# cobi iscsiadm iscsid bin &>/dev/null || \
+# echo "Program iscsid not found; could be ignored ..."
+
+# distro specific additional stuff
+case "${DISTRO_NAME}" in
+ debian*)
+ cp ${ROOTDIR}/lib/libnss_compat.so.2 ${INSTDIR}/lib;;
+esac
+
+#### end tpm-stuff ####
+
+# now copy all libraries that have been determined to be required:
+# first we handle all 64-bit libs...
+for lib in $(fgrep /lib64/ ${INSTDIR}/tmp/libraries 2>/dev/null|sort -u); do
+ if ! [ -d ${INSTDIR}/lib64 ] ; then
+ mkdir ${INSTDIR}/lib64
+ fi
+ cp ${lib} ${INSTDIR}/lib64
+done
+# ...now copy 32-bit libs:
+for lib in $(fgrep -v /lib64/ ${INSTDIR}/tmp/libraries 2>/dev/null|sort -u); do
+ cp ${lib} ${INSTDIR}/lib
+done
+rm -f ${INSTDIR}/tmp/libraries
+
+# add kernel modules and dependency files
+if [ -z "$KERNVER" ] ; then
+ KERNVER=$(ls -l ${ROOTDIR}/boot/vmlinuz | grep vmlinuz | sed "s/.*vmlinuz-//")
+fi
+if [ -z "$KERNVER" ] ; then
+ KERNVER=$(ls -l ${ROOTDIR}/vmlinuz | grep vmlinuz | sed "s/.*vmlinuz-//")
+fi
+# if no vmlinuz found, go for vmlinuz-x.yz.uv...
+if [ -z "$KERNVER" ] ; then
+ KERNVER=$(ls -lt ${ROOTDIR}/boot/vmlinuz* | grep vmlinuz | \
+ sed -n "1,1s/.*vmlinuz-//p")
+ echo "No vmlinuz-link found. Using kernel version "$KERNVER
+fi
+
+if [ -z "$KERNVER" ] ; then
+ echo "No kernel version set or detected - please use the -k flag! Exiting..."
+ exit 1
+fi
+if [ -z "$INITRD_PATH" ] ; then
+ INITRD_PATH="/tmp/slxinitramfs.gz"
+fi
+if [ -z "$NWMODULES" ] ; then
+ #NWMODULES="forcedeth e1000 e100 tg3 via-rhine r8169 pcnet32 8139too 8139cp"
+ NWMODULES="forcedeth e1000 e100 tg3 3c59x via-rhine r8169 pcnet32 b44 8139too"
+fi
+# slx init or cdboot init
+if [ -z "$cdboot" ] ; then
+ # base filesystem modules
+ if [ -z "$FSMODULES" ] ; then
+ FSMODULES="nbd squashfs nfs"
+ fi
+ # put all needed modules into initial ramdisk
+ mkdir -p ${INSTDIR}/lib/modules/${KERNVER}
+ for module in af_packet unix ${NWMODULES} ${FSMODULES} ${MISCMODULES} \
+ ${DEBUGMODULES} usbcore hid usbhid uhci-hcd ohci-hcd; do
+ mod=( $(cd /${ROOTDIR}; find "lib/modules/${KERNVER}" -name ${module}.ko \
+ 2>/dev/null) )
+
+ mod_nr=${#mod[*]}
+ declare -i counter=0
+ while [ ${counter} -lt ${mod_nr} ]; do
+ mpath=${INSTDIR}/${mod[$counter]%/*}
+ mkdir -p ${mpath}
+ # specific function which can follow a link
+ modcp ${ROOTDIR}/${mod[$counter]} ${mpath} ${ROOTDIR}
+ # fixmee!! selection of dependent modules could be handled a little bit
+ # more clever
+ rdirprefix="${ROOTDIR}/lib/modules/${KERNVER}/kernel"
+ ddirprefix="${INSTDIR}/lib/modules/${KERNVER}/kernel"
+ case "$module" in
+ e100|8139too|via-rhine|sis900|epic100|sundance|8139cp|eepro100|pcnet32)
+ cp ${rdirprefix}/drivers/net/mii.ko \
+ ${ddirprefix}/drivers/net &>/dev/null
+ ;;
+ # WLAN module block
+ #ipw3945|...)
+ # cp ${rdirprefix}/net/wireless ...
+ #;;
+ ath_pci)
+ for wlanmodule in ath_rate_sample ath_hal wlan wlan_scan_sta ; do
+ mod=$(cd /${ROOTDIR}; find "lib/modules/${KERNVER}" \
+ -name ${wlanmodule}.ko 2>/dev/null)
+ mkdir -p ${INSTDIR}/${mod%/*}
+ # specific function which can follow a link
+ modcp ${ROOTDIR}/$mod ${INSTDIR}/${mod%/*} ${ROOTDIR}
+ done
+ ;;
+ # for unsupported WLAN devices
+ ndiswrapper)
+ cp -a ${ROOTDIR}/etc/ndiswrapper ${INSTDIR}/etc
+ ;;
+ nfs)
+ # create directory structure for modules needed and copy them
+ # to the proper place (as expected by modprobe/modules.dep)
+ mkdir -p ${ddirprefix}/net/sunrpc
+ mkdir -p ${ddirprefix}/fs/lockd ${ddirprefix}/fs/nfs_common
+ cp ${rdirprefix}/net/sunrpc/sunrpc.ko \
+ ${ddirprefix}/net/sunrpc &>/dev/null
+ cp ${rdirprefix}/fs/lockd/lockd.ko \
+ ${ddirprefix}/fs/lockd &>/dev/null
+ cp ${rdirprefix}/fs/nfs_common/nfs_acl.ko \
+ ${ddirprefix}/fs/nfs_common &>/dev/null
+ ;;
+ ext3)
+ # needed for ext2 support
+ mkdir -p ${ddirprefix}/fs/jbd
+ cp ${rdirprefix}/fs/jbd/jbd.ko \
+ ${ddirprefix}/fs/jbd
+ ;;
+ netloop)
+ # needed for xen stuff
+ cobi brctl bin &>/dev/null || \
+ echo "Program brctl not found; could be ignored ..."
+ mkdir -p ${ddirprefix}/net/bridge
+ cp ${rdirprefix}/net/bridge/bridge.ko \
+ ${ddirprefix}/net/bridge &>/dev/null
+ ;;
+ iscsi_tcp)
+ # iscsi modules
+ # cobi cobi iscsiadm iscsid bin &>/dev/null
+ #mkdir -p ${ddirprefix}/drivers/scsi
+ #for i in scsi_mod scsi_transport_iscsi libiscsi iscsi_tcp; do
+ # cp ${rdirprefix}/drivers/scsi/$i.ko
+ # ${ddirprefix}/drivers/scsi
+ #done
+ ;;
+ tpm)
+ # complete the tpm modules
+ for mod in tpm_atmel tpm_bios tpm_nsc tpm_infineon tpm_tis ; do
+ cp ${rdirprefix}/drivers/char/tpm/$mod.ko \
+ ${ddirprefix}/drivers/char/tpm/
+ done
+ ;;
+ sata_sil|sata_nv|sata_via)
+ # serial ata local disk support
+ mkdir -p ${ddirprefix}/drivers/scsi ${ddirprefix}/drivers/ata
+ cp ${rdirprefix}/drivers/scsi/{scsi,sd}_mod.ko \
+ ${ddirprefix}/drivers/scsi
+ cp ${rdirprefix}/drivers/ata/libata.ko ${ddirprefix}/drivers/ata
+ ;;
+ vesafb)
+ # vesa framebuffer support
+ mkdir -p ${ddirprefix}/drivers/video/console
+ for i in bitblit fbcon font mdacon softcursor tileblit; do
+ cp ${rdirprefix}/drivers/video/console/$i.ko \
+ ${ddirprefix}/drivers/video/console
+ done
+ ;;
+ esac
+ counter=${counter}+1
+ done
+ done
+ # copy user-supplied preinit files. The client specific one overwrites the
+ # system default one. postinit.local may be part of fileget tgz (in stage3)
+ for cfg in default/initramfs/preinit.local \
+ ${SYSTEM_NAME}/initramfs/preinit.local \
+ default/initramfs/postinit.local \
+ ${SYSTEM_NAME}/initramfs/postinit.local ; do
+ test -f ${SLX_PRIVATE_PATH}/config/$cfg && \
+ cp ${SLX_PRIVATE_PATH}/config/$cfg ${INSTDIR}/bin
+ done
+ # copy init-hooks from all plugins which are going to be executed in stage3
+ mkdir -p ${INSTDIR}/etc/init-hooks
+ PLUGINS=$(echo ${PLUGINS} | sed -e "s/,/ /g")
+ for plugin in $PLUGINS ; do
+ test -d ${SLX_BASE_PATH}/lib/plugins/$plugin/init-hooks && \
+ cp -r ${SLX_BASE_PATH}/lib/plugins/$plugin/init-hooks/* \
+ ${INSTDIR}/etc/init-hooks/
+ done
+ # custom hardware configuration files pcitable.local and Cards.local
+ # fixme!! New source for these files (instead of templates)!
+ if [ -f ${SLX_SHARE_PATH}/templates/pcitable.local ] ; then
+ cat ${SLX_SHARE_PATH}/templates/pcitable.local > \
+ ${INSTDIR}/usr/share/hwdata/pcitable.new
+ cat ${INSTDIR}/usr/share/hwdata/pcitable >>\
+ ${INSTDIR}/usr/share/hwdata/pcitable.new
+ mv ${INSTDIR}/usr/share/hwdata/pcitable.new \
+ ${INSTDIR}/usr/share/hwdata/pcitable
+ fi
+ if [ -f ${SLX_SHARE_PATH}/templates/Cards.local ] ; then
+ cat ${SLX_SHARE_PATH}/templates/Cards.local > \
+ ${INSTDIR}/usr/share/hwdata/Cards.new
+ cat ${INSTDIR}/usr/share/hwdata/Cards >>\
+ ${INSTDIR}/usr/share/hwdata/Cards.new
+ mv ${INSTDIR}/usr/share/hwdata/Cards.new \
+ ${INSTDIR}/usr/share/hwdata/Cards
+ fi
+else
+ # just copy the several ethernet drivers
+ mkdir -p ${INSTDIR}/lib/modules/${KERNVER}/kernel/drivers/net
+ for module in af_packet unix ${NWMODULES} mii ; do
+ mod=$(cd /${ROOTDIR}; find "lib/modules/${KERNVER}" -name ${module}.ko \
+2>/dev/null)
+ mpath=${INSTDIR}/${mod%/*}
+ mkdir -p ${mpath}
+ # specific function which can follow a link
+ modcp ${ROOTDIR}/$mod ${mpath} ${ROOTDIR}
+ done
+fi
+
+cp ${ROOTDIR}/lib/modules/${KERNVER}/modules.* \
+ ${INSTDIR}/lib/modules/${KERNVER}
+
+# add the common default client configuration file - just to ensure to
+# have all major variables defined.
+echo "## common settings for clients sharing an InitRamFS" \
+ > ${INSTDIR}/etc/initramfs-setup
+if [ -n "${CLCONFFILE}" ] ; then
+ cat ${CLCONFFILE} >>${INSTDIR}/etc/initramfs-setup
+ echo "Using ${CLCONFFILE}"
+elif [ -n "$cdboot" ] ; then
+ echo -e "ramfs_nicmods=\"${NWMODULES}\"\nramfs_kernver=\"${KERNVER}\"" \
+ >>${INSTDIR}/etc/initramfs-setup
+fi
+echo "## end of common initramfs-setup" >>${INSTDIR}/etc/initramfs-setup
+
+#########################################################################
+# End of file copy procedures
+
+[ -n "${theme}" ] && add_theme
+
+# finally create the compressed initial ramdisk cpio archive
+pushd . > /dev/null 2>&1
+ cd ${INSTDIR}
+ find . ! -name "*~" | cpio -H newc --create | gzip -9 > $INITRD_PATH
+popd > /dev/null 2>&1
+