#!/bin/bash if [ ! "$1" ]; then echo "Syntax: $0 [nonewcd] [nobuild] [...] [extra.list]" echo " updateversie: versie uit de shop die je wilt maken. " echo " nonewcd: maak live omgeving niet opnieuw (sneller)" echo " qemu: niet fikken, maar qemu runnen" echo " vmware: niet fikken, maar vmware runnen" echo " nopkg: geen packages op cd, alleen initrd testen" echo " nolive: geen live omgeving op cd (sneller voor initrd tests)" echo " fast: recompress alle package met minimale compressie, zodat installen sneller gaat" echo " regres: Start installer automatisch en fix ssh toegang op \$IP. (omgevings variabelle)" echo " fik: Fik een cd aan het einde, met het fik commando." echo " nointernet: Als je momenteel geen internet hebt. gebruik gecachede versie" echo " minimal: Kopieer alleen de base packages, zodat je een kleinere install cd hebt maar wel meer moet downloaden tijdens het installeren. Handig voor kleine usb sticks en minicds" echo echo "USBSTICK=/dev/... ./mkcd blabla om BOOTABLE USB stick/harddisk te maken ipv .iso" echo echo echo "Standaard syn-3 cd:" echo "./mkcd 4.1rc3" echo "Geeft eventueel extra .list files op voor specifieke project cd's:" echo "./mkcd 4.1rc3 onvelvet.list" echo "./mkcd 4.1rc3 ismart.list" echo "Regressie test cd:" echo "IP=10.73.57.2 ./mkcd 4.1rc3 regres" exit 1 fi UPDATE_VERSION=$1 shift for PAR in $*; do eval "$PAR=1" &>/dev/null; done if ! which tar-1.13; then echo "Je hebt geen tar-1.13 in je path! Zie wiki." exit 1 fi if ! mksquashfs -version; then echo "You need mksquashfs version 3.x. Version 4 is NOT SUPPORTED!"; exit 1 fi ########################################### ########################################### VOORBEREIDING ########################################### #Niet rm-en, omdat anders alle gedownloade dingen ook weggaan! #rm -r ../npl/.tmp &>/dev/null rm ../npl/.tmp/builded &>/dev/null mkdir ../npl/.tmp &>/dev/null BUILDROOT=`pwd` INSTALLPACKAGE=/sbin/installpkg ISOLINUXDIR="$BUILDROOT/isolinux" CDROOT=/tmp/cdroot PKGCACHE=$BUILDROOT/.pkgcache mkdir $PKGCACHE &>/dev/null URL_LIST="http://www.syn-3.eu/mosaddphp/regserver_2/regserver/getlatestupdates.php?version=$UPDATE_VERSION" URL_GET="http://www.syn-3.eu/mosaddphp/regserver_2/regserver/getupdate.php?noauth=1&pkgname=" # Kijken of de shit gecleaned moet worden voor een nieuwe cd :-) if ! [ "$nonewcd" ]; then rm -rf $CDROOT fi # Controleer of we als root werken, ivm het gebruik van pkgtools if [ $UID != "0" ]; then echo "You are not root, type \"su -\" and try again! :-) " exit 0 fi #Bepaal EXTRA custom listfiles die op cd moeten en geinstalled moeten worden: EXTRA_LISTS= for PAR in $*; do if echo $PAR | grep list >/dev/null; then EXTRA_LISTS="$EXTRA_LISTS $PAR" fi done ########################################### ########################################### PACKAGES VERZAMELLEN ########################################### en controleren #Het verzamellen van pakketjes gaat als volgt: # 1. Alle laatste versies van de shop van alle pakketjes, met de gespecifiseerde update versie. # 2. Er word gezorgt dat we in elk geval alles uit base.list hebben. Zoniet dan gebruiken # we de lokale versie. # 3. De extra lists worden toegevoegd: hiervoor word altijd de lokale versie gebruikt! # Met deze lists kun je dus ook versies uit de shop 'overrulen'. # # Aan de hand van baselist en de extra lists word een install.list gemaakt voor de installer met # daarin de specifiek te installeren versie nummers. # # De rest van de CD word aan de hand van de bovenstaande packages gemaakt. # Dus de kernel, en livecd installer omgeving. # # Niet alle pakketjes komen op de CD ivm ruimte besparing. De pakketjes in de extra list files # zullen uiteraard NOOIT gefilterd worden. CDPKG="$CDROOT/packages" rm -r "$CDPKG" 2>/dev/null mkdir -p $CDPKG if [ ! "$nointernet" ]; then echo -n "* Update lijst ophalen..." lynx -source "$URL_LIST" > $PKGCACHE/download if grep "initrd-" $PKGCACHE/download >/dev/null; then mv $PKGCACHE/download $PKGCACHE/list echo "OK" else echo "Mislukt! Gebruik 'nointernet' als je internet problemen hebt:" cat $PKGCACHE/download exit 1 fi fi if ! [ -e $PKGCACHE/list ]; then echo "Laatst gedownloade update list niet gevonden!" exit 1 fi #download alle pakketjes uit de list naar de lokale cache. echo " * Lokale cache van shop updates bijwerken:" cat $PKGCACHE/list | while read UPDATE; do PKGNAME=`echo "$UPDATE" | cut -f1 -d' '` PKGOPT=`echo "$UPDATE" | cut -f2 -d' '` SIZE=`echo "$UPDATE" | cut -f3 -d' '` echo -n "$PKGNAME..." CACHESIZE=`stat -c %s $PKGCACHE/$PKGNAME.tgz 2>/dev/null` if [ "$CACHESIZE" == "$SIZE" ]; then echo "OK" else URL="$URL_GET`echo "$PKGNAME" | sed 's/+/%2B/g'`" echo -n "downloading $URL :" lynx -source "$URL" > $PKGCACHE/download || exit 1 gzip -t $PKGCACHE/download || exit 1 #verwijder alle andere versies van het zelfde pakketje: SHORTPKG=`echo $PKGNAME | cut -f1 -d-` rm $PKGCACHE/$SHORTPKG-* &>/dev/null #move gedownloade versie in place mv "$PKGCACHE/download" "$PKGCACHE/$PKGNAME.tgz" || exit 1 echo "OK" fi done || exit 1 #verwijderen oude zooi for TGZ in $PKGCACHE/*.tgz; do PKGNAME=`basename $TGZ | sed 's/.tgz$//'` if ! grep $PKGNAME $PKGCACHE/list >/dev/null; then echo "Deleting old $PKGNAME from cache." rm $TGZ || exit 1 fi done if [ "$nopkg" != 1 ] && [ "$minimal" != 1 ]; then echo echo " * Update packages op cd kopieren (gebruik 'minimal' om deze er niet op te zetten, of nopkg als je helemaal geen pakketjes wilt)..." cat $PKGCACHE/list | while read UPDATE; do PKGNAME=`echo $UPDATE | cut -f1 -d' '` PKGOPT=`echo $UPDATE | cut -f2 -d' '` #Filteren van bepaalde packages ivm ruimtebesparing. #Onderandere X word niet gebruikt in bijna alle producten. echo -n "$PKGNAME: " if echo $PKGOPT | egrep '^X|^PP|^PI|^D|^O|^MO|^WSC' >/dev/null; then echo "Filtered" else cp $PKGCACHE/$PKGNAME.tgz $CDPKG || exit 1 echo "OK" fi done fi echo echo " * Zorgendat base.list in elk geval op de CD staat (nopkg om te skippen):" for SHORTPKG in `cat base.list`; do #staat nog niet op cd? if ! [ -e $CDPKG/$SHORTPKG-* ]; then echo -n "$SHORTPKG: " if [ "$nopkg" ] && [ "$SHORTPKG" != "linux" ] && [ "$SHORTPKG" != "initrd" ]; then echo "(skipped by nopkg-option)" elif ! [ -e $PKGCACHE/$SHORTPKG-* ]; then echo -n "$SHORTPKG update ontbreekt. git: " TGZ=`../npl/findpkg "$SHORTPKG"` || exit 1 gzip -t $TGZ || exit 1 echo -n "$TGZ..." cp "$TGZ" "$CDPKG" || exit 1 echo "OK" else echo -n $PKGCACHE/$SHORTPKG-* ... cp $PKGCACHE/$SHORTPKG-* $CDPKG || exit 1 echo "OK" fi fi done if [ "$EXTRA_LISTS" ]; then echo echo " * Packages uit $EXTRA_LISTS op CD overulen met git versies:" for SHORTPKG in `cat $EXTRA_LISTS`; do echo -n "$SHORTPKG..." TGZ=`../npl/findpkg "$SHORTPKG"` || exit 1 echo -n "$TGZ..." if rm $CDPKG/$SHORTPKG-* &>/dev/null; then echo -n "Replacing..." else echo -n "Adding..." fi gzip -t $TGZ || exit 1 cp "$TGZ" "$CDPKG" || exit 1 echo "OK" done fi #listfile voor de installer op cd zetten cat base.list $EXTRA_LISTS |sort | uniq > $CDPKG/install.list || exit 1 ########################################### ########################################### VERSIE BEPALEN ########################################### echo "* Versie nummer van deze CD bepalen... (nover om over te slaan)"; if [ "$nover" ]; then BUILD='none' else BUILD=`git describe --always` fi VERSION="syn3-$UPDATE_VERSION-$BUILD-`date +%d%m%Y-%H%M`" || exit 1 VERSION=`echo "$VERSION"|sed s/:/to/|sed 's/ //g'` || exit 1 echo "Versie: $VERSION"; ########################################### ########################################### GRUB BOOTLOADER ########################################### echo echo "* Initrd en kernel en grub fixen op cd" #installeer grub op CD #rm -r $CDROOT/boot/grub &>/dev/null #mkdir -p $CDROOT/boot/grub &>/dev/null #cp grub/*stage* $CDROOT/boot/grub || exit 1 #cp grub/syn3installer.xpm.gz $CDROOT/boot/grub || exit 1 #dynamisch opgebouwd grub menu #( # #bij een regressietest booten we gelijk door: # if [ "$regres" ]; then # echo "timeout 1" # echo "default 1" # fi # cat grub/menu.lst || exit 1 #) | sed "s/%v/$UPDATE_VERSION/g" > $CDROOT/boot/grub/menu.lst || exit 1 #cat grub/menutxt.lst | sed "s/%v/$UPDATE_VERSION/g" > $CDROOT/boot/grub/menutxt.lst || exit 1 cp -r isolinux $CDROOT/ || exit 1 sed "s/%major%/$UPDATE_VERSION/g" -i $CDROOT/isolinux/*.cfg || exit 1 sed "s/%version%/$VERSION/g" -i $CDROOT/isolinux/*.cfg || exit 1 #kernel op cd echo "Kernel fixen..."; KVER=`echo $CDPKG/linux-* | cut -f2 -d-` echo "Kernel versie $KVER" tar -C $CDROOT --wildcards -xvzf $CDPKG/linux-* "*bzImage.test" || exit 1 mv $CDROOT/boot/bzImage.test $CDROOT/boot/bzImage || exit 1 #initrd op cd tar -C $CDROOT --wildcards -xvzf $CDPKG/initrd-* "*initrd.gz.test" || exit 1 mv $CDROOT/boot/initrd.gz.test $CDROOT/boot/initrd.gz || exit 1 #memtest op cd cp memtest $CDROOT/boot || exit 1 ########################################### ########################################### LIVECD IMAGE ########################################### mkdir $CDROOT &>/dev/null SQUASHROOT="/tmp/live" SQUASHIMAGE="$CDROOT/livecd.img" CONFIGDIR="$BUILDROOT/config" if [ "$nolive" ] ; then rm -rf $SQUASHIMAGE fi if [ ! "$nolive" ] && [ ! -f "$SQUASHIMAGE" ]; then echo echo "* LIVE CD image moet opnieuw gemaakt worden: (gebruik nonewcd om te gecachde versie te gebruiken)" rm -rf "$SQUASHROOT" &>/dev/null #kijk eerst in $CDPKG en gebruik anders git versie for SHORTPKG in `cat livecd.list`; do echo -n "Installeren $SHORTPKG..." if ! [ -e $CDPKG/$SHORTPKG-* ]; then echo -n "$SHORTPKG update ontbreekt. GIT: " TGZ=`../npl/findpkg "$SHORTPKG"` || exit 1 else TGZ=`echo $CDPKG/$SHORTPKG-*` fi echo -n "$TGZ..." $INSTALLPACKAGE -root $SQUASHROOT "$TGZ" >/dev/null || exit 1 echo "OK" done echo "$SQUASHROOT configureren..." cp -a $CONFIGDIR/* $SQUASHROOT || exit 1 chown -R 0:0 $SQUASHROOT/root || exit 1 chmod 700 $SQUASHROOT/root || exit 1 #internet startupscript maken, zodat regressietester er bij kan: if [ "$regres" ]; then if ! [ "$IP" ]; then echo "Geef IP op via environment, voor remote access en regressie testing!" exit 1 fi #Als deze file bestaat zal de rc.local de rest voor ons fixen: echo "IP=$IP" > $SQUASHROOT/etc/remote.conf || exit 1 fi #blackbox menu inkorten #cp -a $CONFIGDIR/var/menu $SQUASHROOT/usr/X11R6/share/blackbox/menu || exit 1 ldconfig -r $SQUASHROOT || exit 1 #belangrijk voor usbkeyboard/muis support chroot $SQUASHROOT bash -c "depmod $KVER" || exit 1 #font cache # chroot $SQUASHROOT fc-cache -fv || exit 1 #chroot $SQUASHROOT #we maken alles gewoon executable ivm bootscripts en zo chmod -R +x $SQUASHROOT/etc/rc.d || exit 1 #stip onzinnige zooi eruit find $SQUASHROOT -type d -name 'man?' -exec rm -r "{}" \; 2>/dev/null find $SQUASHROOT -type d -name 'doc' -exec rm -r "{}" \; 2>/dev/null find $SQUASHROOT -type d -name 'include' -exec rm -r "{}" \; 2>/dev/null find $SQUASHROOT -type d -name 'gtk-doc' -exec rm -r "{}" \; 2>/dev/null find $SQUASHROOT -type f -name '*.ps' -exec rm -r "{}" \; 2>/dev/null #word aangeroepen door glibc doinst en start nog een xserver (busybox ) rm $SQUASHROOT/sbin/telinit || exit 1 echo "Squash image genereren..." cd $SQUASHROOT #mksquashfs . "$SQUASHIMAGE" -noI -noD -noF >/dev/null || exit 1; mksquashfs . "$SQUASHIMAGE" || exit 1; #mkcramfs . "$SQUASHIMAGE" >/dev/null || exit 1; #genromfs -d $SQUASHROOT -f $SQUASHIMAGE || exit 1 cd .. echo "Squash root weer weghalen..." rm -rf "$SQUASHROOT" fi ########################################### ########################################### INSTALLER OP CD ########################################### echo "* Installer kopieren..." cd $BUILDROOT mkdir $CDROOT/installer 2>/dev/null cp ../install/*.sh $CDROOT/installer || exit 1 rm $CDROOT/installer/updatelang.sh cp ../install/*.txt $CDROOT/installer || exit 1 echo "$UPDATE_VERSION" > $CDROOT/installer/version chmod +x $CDROOT/installer/* || exit 1 ########################################### ########################################### CD IMAGE GENEREREN OF BOOTABLE USBSTICK ########################################### echo #partitioneer, formateer en installeer op bootable USB #UBER! :D if [ "$USBSTICK" ]; then REMOVABLE=/sys/block/`echo $USBSTICK|sed s#.*/##`/removable if [ "`cat $REMOVABLE`" != "1" ]; then echo "EY KIJK JE WEL FF UIT?? $USBSTICK IS GEEN REMOVABLE DEVICE? :)" exit 1 fi pushd ../install sh ./copyinstaller.sh $CDROOT $USBSTICK exit $? #Maak bootable ISO else echo "* Iso image builden..." mkdir $BUILDROOT/iso 2>/dev/null ISO="$BUILDROOT/iso/$VERSION.iso" #mkisofs -no-emul-boot -boot-load-size 4 -V "Syn-3 installer" -boot-info-table -R -J -r -b boot/grub/stage2_eltorito -o $ISO $CDROOT >/dev/null|| exit 1 mkisofs -no-emul-boot -boot-load-size 4 -V "Syn-3 installer" -boot-info-table -R -J -r -b isolinux/isolinux.bin -c isolinux/boot.cat -o $ISO $CDROOT >/dev/null|| exit 1 #maak hem ook bootable als harddisk image op usb stick ./isohybrid.pl $ISO || exit 1 ln -sf `basename $ISO` $BUILDROOT/iso/latest.iso || exit 1 echo echo "Alles gefixed, je iso staat in $ISO" echo fi ########################################### ########################################### CD FIKKEN of TESTEN ########################################### if [ "$qemu" ]; then #qemu... HDA=/tmp/hda.dsk HDB=/tmp/hdb.dsk HDD=/tmp/hdd.dsk rm $HDA $HDB $HDD &>/dev/null dd if=/dev/zero of=$HDA seek=20000000 count=1 dd if=/dev/zero of=$HDB seek=20000000 count=1 dd if=/dev/zero of=$HDD seek=20000000 count=1 qemu -hda $HDA -cdrom /tmp/$VERSION.iso -boot d elif [ "$vmwarepsy" ]; then ssh psy@192.168.0.96 "export DISPLAY=:0;vmware -x ~/vmware/syn3/syn3.vmx" elif [ "$vmware" ]; then vmware -x /root/vmware/syn-3/syn-3.vmx elif [ "$fik" ]; then #blank || exit 1 fik iso/latest.iso || exit 1 fi echo -e "ISO gefixed\a" exit 0