#!/bin/bash #NOBUILDROOT #DEP:busybox #DEP:xfsprogs #DEP:linux #DEP:linux_src #DEP:lvm2 #DEP:pciutils #DEP:udev #DEP:hotplug #DEP:multipath_tools #DEP:splashutils #DEP:syn3splash #DEP:drbd8 #DEP:drbd_utils ##DEP:drv_r1000 ##DEP:drv_e1000e ##DEP:drv_e1000 #DEP:synwatchdog #DEP:v86d #DEP:open_vm_tools #DEP:initrd_scripts #DEP:util_linux #DEP:linkbeep #DEP:firmware #DEP:fping #DEP:network_scripts #DEP:kmod ##DEP:drv_3w_sas ##DEP:drv_r8168 ##DEP:drv_r8169 ##DEP:cmospwd #uitgeschakeld, ivm compile problemen: ##DEP:drv_viafb CWD=`pwd` INITROOT=/tmp/initrd.tmp rm -r $INITROOT &>/dev/null mkdir $INITROOT || exit 1 export ROOT=$INITROOT ##############base packages er in installpkg `../../findpkg busybox` || exit 1 installpkg `../../findpkg glibc_solibs` || exit 1 installpkg `../../findpkg mdadm` || exit 1 installpkg `../../findpkg udev` || exit 1 installpkg `../../findpkg multipath_tools` || exit 1 installpkg `../../findpkg e2fsprogs` || exit 1 installpkg `../../findpkg lvm2` || exit 1 installpkg `../../findpkg drbd8` || exit 1 installpkg `../../findpkg drbd_utils` || exit 1 installpkg `../../findpkg xfsprogs` || exit 1 installpkg `../../findpkg linux` || exit 1 installpkg `../../findpkg synwatchdog` || exit 1 installpkg `../../findpkg util_linux` || exit 1 installpkg `../../findpkg linkbeep` || exit 1 installpkg `../../findpkg firmware` || exit 1 installpkg `../../findpkg fping` || exit 1 installpkg `../../findpkg network_scripts` || exit 1 #for fping mv $INITROOT/etc/protocols.new $INITROOT/etc/protocols || exit 1 #installpkg `../../findpkg hwsetup` || exit 1 #installpkg `../../findpkg hwdata` || exit 1 #pci utils NA hwdata, omdat deze nieuwe pci.ids heeft op dit moment #installpkg `../../findpkg pciutils` || exit 1 #strip drivers from native kernel #bepaalde modules zijn niet nodig, of zelfs ongewenst #net WEL omdat we nf_conntrack nodig zijn voor drbd! #rm -r $INITROOT/lib/modules/*/kernel/net || exit 1 rm -r `find $INITROOT/lib/modules/*/kernel/fs/* -type d -not -name '*fat*' -not -name '*cifs*' -not -name '*fscache*'` #rm -r $INITROOT/lib/modules/*/kernel/drivers/usb/serial || exit 1 #rm -r $INITROOT/lib/modules/*/kernel/drivers/usb/storage || exit 1 #rm -r $INITROOT/lib/modules/*/pcmcia || exit 1 #wel: is nodig voor cpu throttling enzo: rm -r $INITROOT/lib/modules/*/kernel/drivers/hwmon || exit 1 #rm -r $INITROOT/lib/modules/*/kernel/drivers/media || exit 1 #rm -r $INITROOT/lib/modules/*/kernel/drivers/ieee1394 || exit 1 #rm -r $INITROOT/lib/modules/*/kernel/drivers/parport || exit 1 #rm -r $INITROOT/lib/modules/*/kernel/drivers/char/agp || exit 1 #rm -r $INITROOT/lib/modules/*/kernel/drivers/gpu || exit 1 #rm -r $INITROOT/lib/modules/*/kernel/sound || exit 1 #rm -r $INITROOT/lib/modules/*/kernel/drivers/bluetooth || exit 1 #rm -r $INITROOT/lib/modules/*/kernel/net/bluetooth || exit 1 #rm -r $INITROOT/lib/modules/*/kernel/drivers/input/touchscreen || exit 1 #rm -r $INITROOT/lib/modules/*/kernel/drivers/char/ppdev.ko || exit 1 #rm -r $INITROOT/lib/modules/*/kernel/drivers/char/lp.ko || exit 1 #extra drivers #installpkg `../../findpkg drv_r1000` || exit 1 installpkg `../../findpkg open_vm_tools` || exit 1 installpkg `../../findpkg drv_e1000e` || exit 1 #installpkg `../../findpkg drv_e1000` || exit 1 #installpkg `../../findpkg drv_viafb` || exit 1 #installpkg `../../findpkg drv_3w_sas` || exit 1 #installpkg `../../findpkg drv_r8168` || exit 1 #r8169 8.00 driver is buggy en werkt niet goed met deze kaart: #02:00.0 0200: 10ec:8168 (rev 06) #02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06) #(workaround gemaakt in initrd_scripts die eerst 8168 laad) #installpkg `../../findpkg drv_r8169` || exit 1 #splashscreen installpkg `../../findpkg syn3splash` || exit 1 installpkg `../../findpkg splashutils` || exit 1 #installpkg `../../findpkg freetype2` || exit 1 #installpkg `../../findpkg libjpeg` || exit 1 #installpkg `../../findpkg zlib` || exit 1 installpkg `../../findpkg v86d` || exit 1 #installpkg `../../findpkg gcc` || exit 1 #only need S-theme: rm -rf $INITROOT/etc/splash/{B,A,H,E,P,V,K,X} || exit 1 #installpkg `../../findpkg libtermcap` || exit 1 #installpkg `../../findpkg bash` || exit 1 # gebruik bash standaard ipv ash #ln -sf bash $INITROOT/bin/sh || exit 1 #de echte modprobe ivm modaliassen TGZ=`../../findpkg kmod` || exit 1 ( cd $INITROOT && rm sbin/modprobe sbin/depmod &>/dev/null && tar -xzf "$TGZ" 'sbin/kmod' && ln -s /sbin/kmod sbin/modprobe && ln -s /sbin/kmod sbin/depmod ) || exit 1 #shadow, group, passwd voor udevd TGZ=`../../findpkg etc` || exit 1 ( cd $INITROOT && tar -xzf "$TGZ" etc/passwd.new etc/shadow.new etc/group.new && mv etc/passwd.new etc/passwd && mv etc/group.new etc/group && mv etc/shadow.new etc/shadow ) || exit 1 #de echte mount ivm norecovery optie #TGZ=`../../findpkg util_linux` || exit 1 #(# # cd $INITROOT && # tar -xzf "$TGZ" 'bin/mount' #) || exit 1 ################addons #niet nodig, genzaptelcfg doet dit wel #installpkg `../../findpkg zaptel` || exit 1 #very small and very usefull in debugging installpkg `../../findpkg strace` || exit 1 installpkg `../../findpkg gzip` || exit 1 #installpkg `../../findpkg cmospwd` || exit 1 #################eject er in #TGZ=`../../findpkg bin` || exit 1 #( # cd $INITROOT # tar -xzf $TGZ usr/bin/eject #) || exit 1 #################speciale mount voor netwerk boot. #De busybox mount kan geen subdir mounts aan. #NOTE: zit nu in cifstools package #TGZ=`../../findpkg samba` || exit 1 #( # cd $INITROOT # tar -xzf $TGZ usr/sbin/mount.cifs #) || exit 1 ###################init scripts er in installpkg `../../findpkg initrd_scripts` || exit 1 ####################lib configuratie touch $INITROOT/etc/ld.so.conf ldconfig -r $INITROOT || exit 1 #####################bepaal versie (adhv kernel nummer) VERSION=`cat ../linux/linux.version` || exit 1 echo "Version $VERSION" ####################depmod runnen #hiervoor moeten we ff tijdelijk depmod installen # workaround for bug or feature in modprobe. modprobe looks in the 'extra' dir first, but busyboxs modprobe doesnt: # pushd $INITROOT/lib/modules/$VERSION/extra || exit 1 # for EMOD in *; do # OMOD=`find $INITROOT/lib/modules/$VERSION -name $EMOD |grep -v extra` # if [ "$OMOD" != "" ];then # mv $EMOD $OMOD || exit 1 # fi # done # popd #edwin: replaced by kmod, uses one binary for all # TGZ=`../../findpkg module_init_tools` || exit 1 # ( # cd $INITROOT && # tar -xzf $TGZ --wildcards '*sbin/depmod*' # ) || exit 1 echo "Running depmod..." chroot $INITROOT /sbin/depmod -e -a $VERSION || exit 1 # echo "done" # # #depmod kan weer weg # rm $INITROOT/sbin/depmod* #####################overbodige zooi eruit strippen rm -r $INITROOT/var/log rm -r $INITROOT/usr/include rm -r $INITROOT/usr/share/locale rm -r $INITROOT/usr/man rm -r $INITROOT/usr/doc rm -r $INITROOT/usr/share/doc rm -r $INITROOT/usr/share/man rm -r $INITROOT/boot rm -r $INITROOT/service 2>/dev/null rm `find $INITROOT -type f -name *.static` 2>/dev/null rm `find $INITROOT -name *.a` 2>/dev/null rm -r $INITROOT/usr/share/bash-completion rm -r $INITROOT/home rm -r $INITROOT/usr/src ####################binaries strippen voor als dit nog niet gebeurd is echo "stripping binaries" pushd $INITROOT find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded || exit 1 find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded || exit 1 find lib/modules/*/kernel -type f | xargs strip --strip-unneeded || exit 1 popd ##################### ongebruikte libs verwijderen USED=used.tmp #bepaal alle GEBRUIKTE libs echo "* finding library dependencies" echo "Size now:" du -hs $INITROOT find $INITROOT|grep -v dev|while read FILE;do ldd "$FILE" 2>/dev/null;done|sed 's/^\t//g'|sed 's/\..*$//g' |sort|uniq > $USED #bepaal alle aanwezige libs en wis ze indien niet gebruikt echo "* deleting unused libs" find $INITROOT -name '*.so*'|while read NAME; do SHORTNAME=`echo "$NAME"|sed 's/.*\///g'|sed 's/\..*$//g'|sed 's/-.*$//g'` if ! grep $SHORTNAME $USED >/dev/null; then rm "$NAME" fi done rm $USED echo "Size after:" du -hs $INITROOT ##################### in een initrd proppen #vrije ruimte die ongeveer overblijft: #SIZE=`du -s $INITROOT|cut -f 1` || exit 1 #echo "Size van alles files: $SIZE" #(( SIZE+=3000 )) #echo "* initrd fixen van $SIZE kbytes." #mkdir initrd.mnt &>/dev/null #umount -l initrd.mnt &>/dev/null #dd bs=1024 if=/dev/zero of=$INITROOT.dsk count=$SIZE >/dev/null || exit 1 #mkfs.ext2 -F $INITROOT.dsk >/dev/null || exit 1 #mount -o loop $INITROOT.dsk initrd.mnt || exit 1 #if ! cp -a $INITROOT/* initrd.mnt ; then# # umount initrd.mnt # exit 1 #fi #echo "Space usage op initrd:" #df -h initrd.mnt #sleep 1 #umount initrd.mnt || exit 1 #fsck.ext2 -n -f $INITROOT.dsk || exit 1 #testen if [ "$1" == "test" ]; then echo TESTMODE exit 1 fi #rm initrd.gz &>/dev/null #gzip -9 $INITROOT.dsk || exit 1 #mv $INITROOT.dsk.gz initrd.gz || exit 1 echo "Compressing initrd.gz.." ( cd $INITROOT ; find . | cpio -o -H newc --quiet | xz --check=crc32 ) > initrd.gz || exit 1 #( cd $INITROOT ; find . | cpio -o -H newc --quiet | gzip -9 ) > initrd.gz || exit 1 rm -r "$INITROOT" || exit 1 #################### maak er een nette package van PKG=/tmp/initrd rm -r $PKG &>/dev/null mkdir -p $PKG/boot || exit 1 mv initrd.gz $PKG/boot/initrd.gz.test || exit 1 #postinstaller mkdir -p $PKG/etc/postinst.d cp $CWD/post.initrd $PKG/etc/postinst.d || exit 1 chmod +x $PKG/etc/postinst.d/* || exit 1 NAME=initrd cd $PKG /sbin/makepkg -l y -c n $CWD/$NAME.pkg >/dev/null && echo $VERSION > $CWD/$NAME.version