From 77838eab1f8f770c86cb9a9e3db3d95ccb9f32de Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sat, 2 Feb 2008 22:46:35 +0000 Subject: * 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 --- initramfs/mkdxsinitrd | 801 -------------------------------------------------- 1 file changed, 801 deletions(-) delete mode 100755 initramfs/mkdxsinitrd (limited to 'initramfs') diff --git a/initramfs/mkdxsinitrd b/initramfs/mkdxsinitrd deleted file mode 100755 index 64c244e5..00000000 --- a/initramfs/mkdxsinitrd +++ /dev/null @@ -1,801 +0,0 @@ -#!/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="" -D_ETCEXCL="" -D_BINDMPTS="" -D_DIRINBINDMNT="" -D_RODIRSINRW="" -D_DIRINDXS="" -D_BINDMNT="" -D_INITDIR="" -D_INITBOOTD="" -D_RCDIRS="" -D_RCDIRSINRW="" -D_INITSCRIPTS="" -D_XF86CONFFILE="" -D_XORGBIN="" -D_XFONTPATH="" -D_DEFAULTCOUNTRY="" -# 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 - -- cgit v1.2.3-55-g7522