- TMP_DIR_=`mktemp -td terminalserver_initrd.XXXXXX`
- local i=''
- local tmp_loopname=''
-
- # copying original initrd into $INITRD
- execute "rm -r $INITRD_" 2>/dev/null
- execute "cp $ORIGINAL_INITRD_ $TMP_DIR_/minirt26.gz" warn || return 1
- execute "mkdir -p $INITRD_" warn || return 1
- execute "mkdir -p $PATH_/mini-root.orig" warn || return 1
- execute "gunzip $TMP_DIR_/minirt26.gz" warn || return 1
- tmp_loopname=`findNextFreeLoop die`
- execute "mount -o loop=$tmp_loopname $TMP_DIR_/minirt26 $PATH_/mini-root.orig " warn || return 1
- execute "cp -a $PATH_/mini-root.orig/* $INITRD_" warn || return 1
- execute "umount $PATH_/mini-root.orig" warn || return 1
- losetup -d $tmp_loopname &>/dev/null
- tmp_loopname=''
- execute "rmdir $PATH_/mini-root.orig" warn || return 1
- execute "rm $TMP_DIR_/minirt26" warn || return 1
-
- # implanting my initrd changes into the original initrd
-
- # copy programs, check if there are already links with this name to busybox
- for i in $USR_SHARE_/timeout $USR_SHARE_/udhcpc $USR_SHARE_/udhcp-config.sh $USR_SHARE_/cdir $USR_SHARE_/rdir; do
- tmp_name_="${i##*/}"
- isNotExistent "$INITRD_/static/$tmp_name_" eprint || execute "rm $INITRD_/static/$tmp_name_"
- cp $i "$INITRD_/static/$tmp_name_"
- done
- cp $USR_SHARE_/linuxrc $INITRD_/
- mkdir -p $INITRD_/mylib
-
- #
- # which modules should i put into the ramdisk
- #
-
- # find *all* network drivers, but do not include wlan/pcmcia/... related ones
- # blacklist: proteon and depca as they seem to cause problems with udevsettle
- find ${MODULES_PATH_}/${KERNEL_VERSION_}/kernel/drivers/net/ -name \*.ko | \
- grep -v 'wireless\|wan\|hamradio\|wlan\|ppp\|irda\|pcmcia\|depca\|proteon' | \
- sed 's#.*./## ; s#\.ko##' | sort | uniq > $CARDS_DETECTED_BY_DISCOVER
-
- local modules="`cat $CARDS_DETECTED_BY_DISCOVER |xargs` af_packet"
- local modules_dep=""
-
- # get paths of modules + paths of all dependent modules
- echo -n "" >"$TMP_"
- for i in $modules; do
- tmp_=`awk -F: '{if($1~/'"$i".ko'/) {print $0}}' $MODULES_PATH_/$KERNEL_VERSION_/modules.dep`
- echo "${tmp_%%:*}"
- # FIXME ugly sed hack :(
- echo "${tmp_#*:}" | xargs -n1 echo | sed 's/://'
- done \
- | sort | uniq | while read module relax; do
- if [ -n "$module" ]; then
- echo "$module" >> $TMP_
- fi
- done
-
- # copy modules + dependend modules into ramdisk
- local mod_path_="$INITRD_/mylib/modules/$KERNEL_VERSION_"
- local tmp_dst_path_="$mod_path_/kernel"
- mkdir -p $tmp_dst_path_
- cat $TMP_ |sort |uniq |while read module; do
- local tmp_path=${module#*/kernel/}
- tmp_path=$tmp_dst_path_/${tmp_path%/*.ko}
- local module_path=$tmp_path/${module##/*/}
-
- isNotExistent "$tmp_path" dprint && mkdir -p "$tmp_path"
- isNotExistent "$module_path" dprint && cp "$MODULES_PATH_ROOT_DIFF_/$module" "$module_path"
- done
-
- # copying additional modules
- for i in fs/nfs/nfs.ko net/sunrpc/sunrpc.ko fs/lockd/lockd.ko net/packet/af_packet.ko; do
- local tmp_path="$tmp_dst_path_/${i%/*}"
- mkdir -p $tmp_path
- cp $MODULES_PATH_/$KERNEL_VERSION_/kernel/$i "$tmp_path"
- done
-
- # copying modules.*
- cp $MODULES_PATH_/$KERNEL_VERSION_/modules.dep $mod_path_
- cp $MODULES_PATH_/$KERNEL_VERSION_/modules.alias $mod_path_
- #grep "^\/lib\/modules\/$KERNEL_VERSION_\/kernel\/" $MODULES_PATH_/$KERNEL_VERSION_/modules.dep |\
- # sed "s/\/lib\/modules\/$KERNEL_VERSION_\/kernel\//\/modules\//g" > $mod_path_/modules.dep
-
- # put everything into the new initrd
- local tmp_size=`du -s $INITRD_ |awk '{print $1}'` # in kB
- let tmp_size=$tmp_size+1000
- local max_size=24000
- if (( $tmp_size >= $max_size )); then
- warn "Your initrd is $tmp_size kByte large => TOO BIG (should be <= ${max_size}kB)"
- warn "Please remove a few modules from $CARDS_DETECTED_BY_DISCOVER or edit $INITRD_ manually"
- return 1