source: bootcd/mkcd @ 5fedc40

gcc484perl-5.22
Last change on this file since 5fedc40 was c5c522c, checked in by Edwin Eefting <edwin@datux.nl>, 8 years ago

initial commit, transferred from cleaned syn3 svn tree

  • Property mode set to 100755
File size: 14.0 KB
Line 
1#!/bin/bash
2if [ ! "$1" ]; then
3    echo "Syntax: $0 <updateversie>  [nonewcd] [nobuild] [...] [extra.list]"
4    echo " updateversie: versie uit de shop die je wilt maken. "
5    echo " nonewcd:     maak live omgeving niet opnieuw (sneller)"
6    echo " qemu:        niet fikken, maar qemu runnen"
7    echo " vmware:      niet fikken, maar vmware runnen"
8    echo " nopkg:       geen packages op cd, alleen initrd testen"
9    echo " nolive:      geen live omgeving op cd (sneller voor initrd tests)"
10    echo " fast:        recompress alle package met minimale compressie, zodat installen sneller gaat"
11    echo " regres:      Start installer automatisch en fix ssh toegang op \$IP. (omgevings variabelle)"
12    echo " fik:         Fik een cd aan het einde, met het fik commando."
13    echo " nointernet: Als je momenteel geen internet hebt. gebruik gecachede versie"
14    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"
15    echo
16    echo "USBSTICK=/dev/... ./mkcd blabla om BOOTABLE USB stick/harddisk te maken ipv .iso"
17    echo
18    echo
19    echo "Standaard syn-3 cd:"
20    echo "./mkcd 4.1rc3"
21    echo "Geeft eventueel extra .list files op voor specifieke project cd's:"
22    echo "./mkcd 4.1rc3 onvelvet.list"
23    echo "./mkcd 4.1rc3 ismart.list"
24    echo "Regressie test cd:"
25    echo "IP=10.73.57.2 ./mkcd 4.1rc3 regres"
26    exit 1
27fi
28UPDATE_VERSION=$1
29shift
30for PAR in $*; do eval "$PAR=1" &>/dev/null; done
31
32if ! which tar-1.13; then
33    echo "Je hebt geen tar-1.13 in je path! Zie wiki."
34    exit 1
35fi
36
37
38if ! mksquashfs -version; then
39    echo "You need mksquashfs version 3.x. Version 4 is NOT SUPPORTED!";
40    exit 1
41fi
42
43###########################################
44########################################### VOORBEREIDING
45###########################################
46
47#Niet rm-en, omdat anders alle gedownloade dingen ook weggaan!
48#rm -r ../npl/.tmp &>/dev/null
49rm ../npl/.tmp/builded &>/dev/null
50mkdir ../npl/.tmp  &>/dev/null
51
52BUILDROOT=`pwd`
53INSTALLPACKAGE=/sbin/installpkg
54ISOLINUXDIR="$BUILDROOT/isolinux"
55CDROOT=/tmp/cdroot
56PKGCACHE=$BUILDROOT/.pkgcache
57mkdir $PKGCACHE &>/dev/null
58
59URL_LIST="http://www.syn-3.eu/mosaddphp/regserver_2/regserver/getlatestupdates.php?version=$UPDATE_VERSION"
60URL_GET="http://www.syn-3.eu/mosaddphp/regserver_2/regserver/getupdate.php?noauth=1&pkgname="
61
62# Kijken of de shit gecleaned moet worden voor een nieuwe cd :-)
63if ! [ "$nonewcd" ]; then
64    rm -rf $CDROOT
65fi
66
67
68# Controleer of we als root werken, ivm het gebruik van pkgtools
69if [ $UID != "0" ]; then
70        echo "You are not root, type \"su -\" and try again! :-) "
71        exit 0
72fi
73
74#Bepaal EXTRA custom listfiles die op cd moeten en geinstalled moeten worden:
75EXTRA_LISTS=
76for PAR in $*; do
77        if echo $PAR | grep list >/dev/null; then
78                EXTRA_LISTS="$EXTRA_LISTS $PAR"
79        fi
80done
81
82
83###########################################
84########################################### PACKAGES VERZAMELLEN
85########################################### en controleren
86
87#Het verzamellen van pakketjes gaat als volgt:
88# 1. Alle laatste versies van de shop van alle pakketjes, met de gespecifiseerde update versie.
89# 2. Er word gezorgt dat we in elk geval alles uit base.list hebben. Zoniet dan gebruiken
90#    we de lokale versie.
91# 3. De extra lists worden toegevoegd: hiervoor word altijd de lokale versie gebruikt!
92#    Met deze lists kun je dus ook versies uit de shop 'overrulen'.
93#
94# Aan de hand van baselist en de extra lists word een install.list gemaakt voor de installer met
95# daarin de specifiek te installeren versie nummers.
96#
97# De rest van de CD word aan de hand van de bovenstaande packages gemaakt.
98# Dus de kernel, en livecd installer omgeving.
99#
100# Niet alle pakketjes komen op de CD ivm ruimte besparing. De pakketjes in de extra list files
101# zullen uiteraard NOOIT gefilterd worden.
102
103CDPKG="$CDROOT/packages"
104rm -r "$CDPKG" 2>/dev/null
105mkdir -p $CDPKG
106
107if [ ! "$nointernet" ]; then
108        echo -n "* Update lijst ophalen..."
109        lynx -source "$URL_LIST" > $PKGCACHE/download
110        if grep "initrd-" $PKGCACHE/download >/dev/null; then
111                mv $PKGCACHE/download $PKGCACHE/list
112                echo "OK"
113        else
114                echo "Mislukt! Gebruik 'nointernet' als je internet problemen hebt:"
115                cat $PKGCACHE/download
116                exit 1
117        fi
118fi
119
120if ! [ -e $PKGCACHE/list ]; then
121        echo "Laatst gedownloade update list niet gevonden!"
122        exit 1
123fi
124
125
126#download alle pakketjes uit de list naar de lokale cache.
127        echo " * Lokale cache van shop updates bijwerken:"
128        cat $PKGCACHE/list | while read UPDATE; do
129                PKGNAME=`echo "$UPDATE" | cut -f1 -d' '`
130                PKGOPT=`echo "$UPDATE" | cut -f2 -d' '`
131                SIZE=`echo "$UPDATE" | cut -f3 -d' '`
132                echo -n "$PKGNAME..."
133                CACHESIZE=`stat -c %s $PKGCACHE/$PKGNAME.tgz 2>/dev/null`
134                if [ "$CACHESIZE" == "$SIZE" ]; then
135                        echo "OK"
136                else
137                        URL="$URL_GET`echo "$PKGNAME" | sed 's/+/%2B/g'`"
138                        echo -n "downloading $URL :"
139                        lynx -source "$URL" > $PKGCACHE/download || exit 1
140                        gzip -t $PKGCACHE/download || exit 1
141                        #verwijder alle andere versies van het zelfde pakketje:
142                        SHORTPKG=`echo $PKGNAME | cut -f1 -d-`
143                        rm $PKGCACHE/$SHORTPKG-* &>/dev/null
144                        #move gedownloade versie in place
145                        mv "$PKGCACHE/download" "$PKGCACHE/$PKGNAME.tgz" || exit 1
146                        echo "OK"
147                fi
148        done || exit 1
149
150        #verwijderen oude zooi
151        for TGZ in $PKGCACHE/*.tgz; do
152                PKGNAME=`basename $TGZ | sed 's/.tgz$//'`
153                if ! grep $PKGNAME $PKGCACHE/list >/dev/null; then
154                        echo "Deleting old $PKGNAME from cache."
155                        rm $TGZ || exit 1
156                fi
157        done
158
159
160if [ "$nopkg" != 1 ] && [ "$minimal" != 1 ]; then
161        echo
162        echo " * Update packages op cd kopieren (gebruik 'minimal' om deze er niet op te zetten, of nopkg als je helemaal geen pakketjes wilt)..."
163        cat $PKGCACHE/list | while read UPDATE; do
164                PKGNAME=`echo $UPDATE | cut -f1 -d' '`
165                PKGOPT=`echo $UPDATE | cut -f2 -d' '`
166                #Filteren van bepaalde packages ivm ruimtebesparing.
167                #Onderandere X word niet gebruikt in bijna alle producten.
168                echo -n "$PKGNAME: "
169                if echo $PKGOPT | egrep '^X|^PP|^PI|^D|^O|^MO|^WSC' >/dev/null; then
170                        echo "Filtered"
171                else
172                        cp $PKGCACHE/$PKGNAME.tgz $CDPKG || exit 1
173                        echo "OK"
174                fi
175        done
176fi
177
178echo
179echo " * Zorgendat base.list in elk geval op de CD staat (nopkg om te skippen):"
180for SHORTPKG in `cat base.list`; do
181        #staat nog niet op cd?
182        if ! [ -e $CDPKG/$SHORTPKG-* ]; then
183                echo -n "$SHORTPKG: "
184                if [ "$nopkg" ] && [ "$SHORTPKG" != "linux" ] && [ "$SHORTPKG" != "initrd" ]; then
185                        echo "(skipped by nopkg-option)"
186                elif ! [ -e $PKGCACHE/$SHORTPKG-* ]; then
187                        echo  -n "$SHORTPKG update ontbreekt. SVN: "
188                        TGZ=`../npl/findpkg "$SHORTPKG"` || exit 1
189                        gzip -t $TGZ || exit 1
190                        echo -n "$TGZ..."
191                        cp "$TGZ" "$CDPKG" || exit 1
192                        echo "OK"
193                else
194                        echo -n $PKGCACHE/$SHORTPKG-* ...
195                        cp $PKGCACHE/$SHORTPKG-* $CDPKG || exit 1
196                        echo "OK"
197                fi
198        fi
199done
200
201if [ "$EXTRA_LISTS" ]; then
202        echo
203        echo " * Packages uit $EXTRA_LISTS op CD overulen met SVN versies:"
204        for SHORTPKG in `cat $EXTRA_LISTS`; do
205                echo -n "$SHORTPKG..."
206                TGZ=`../npl/findpkg "$SHORTPKG"` || exit 1
207                echo -n "$TGZ..."
208                if rm $CDPKG/$SHORTPKG-* &>/dev/null; then
209                        echo -n "Replacing..."
210                else
211                        echo -n "Adding..."
212                fi
213                gzip -t $TGZ || exit 1
214                cp "$TGZ" "$CDPKG" || exit 1
215                echo "OK"
216        done
217fi
218
219#listfile voor de installer op cd zetten
220cat base.list $EXTRA_LISTS |sort | uniq > $CDPKG/install.list || exit 1
221
222###########################################
223########################################### VERSIE BEPALEN
224###########################################
225
226echo "* Versie nummer van deze CD bepalen... (nover om over te slaan)";
227#SVNSTATUS=`svn status -v "../npl/version"` || exit 1
228#BUILD=`echo "$SVNSTATUS" | cut -b14- | cut -f1 -d' '`
229if [ "$nover" ]; then
230        BUILD='none'
231else
232        BUILD=`svnversion ..`
233fi
234
235VERSION="syn3-$UPDATE_VERSION-$BUILD-`date +%d%m%Y-%H%M`" || exit 1
236VERSION=`echo "$VERSION"|sed s/:/to/|sed 's/ //g'` || exit 1
237
238echo "Versie: $VERSION";
239
240###########################################
241########################################### GRUB BOOTLOADER
242###########################################
243
244echo
245echo "* Initrd en kernel en grub fixen op cd"
246
247
248#installeer grub op CD
249#rm -r $CDROOT/boot/grub &>/dev/null
250#mkdir -p $CDROOT/boot/grub &>/dev/null
251#cp grub/*stage* $CDROOT/boot/grub || exit 1
252#cp grub/syn3installer.xpm.gz $CDROOT/boot/grub || exit 1
253
254#dynamisch opgebouwd grub menu
255#(
256#       #bij een regressietest booten we gelijk door:
257#       if [ "$regres" ]; then
258#               echo "timeout 1"
259#               echo "default 1"       
260#       fi
261#       cat grub/menu.lst  || exit 1
262#) | sed "s/%v/$UPDATE_VERSION/g" > $CDROOT/boot/grub/menu.lst || exit 1
263
264#cat grub/menutxt.lst | sed "s/%v/$UPDATE_VERSION/g" > $CDROOT/boot/grub/menutxt.lst || exit 1
265cp -r isolinux $CDROOT/ || exit 1
266sed "s/%major%/$UPDATE_VERSION/g" -i $CDROOT/isolinux/*.cfg || exit 1
267sed "s/%version%/$VERSION/g" -i  $CDROOT/isolinux/*.cfg || exit 1
268
269
270#kernel op cd
271echo "Kernel fixen...";
272KVER=`echo $CDPKG/linux-* | cut -f2 -d-`
273echo "Kernel versie $KVER"
274tar -C $CDROOT --wildcards -xvzf $CDPKG/linux-* "*bzImage.test" || exit 1
275mv $CDROOT/boot/bzImage.test $CDROOT/boot/bzImage || exit 1
276
277#initrd op cd
278tar -C $CDROOT --wildcards -xvzf $CDPKG/initrd-* "*initrd.gz.test" || exit 1
279mv $CDROOT/boot/initrd.gz.test $CDROOT/boot/initrd.gz || exit 1
280
281#memtest op cd
282cp memtest $CDROOT/boot || exit 1
283
284
285###########################################
286########################################### LIVECD IMAGE
287###########################################
288
289mkdir $CDROOT &>/dev/null
290
291SQUASHROOT="/tmp/live"
292SQUASHIMAGE="$CDROOT/livecd.img"
293CONFIGDIR="$BUILDROOT/config"
294
295if [ "$nolive" ] ; then
296    rm -rf $SQUASHIMAGE
297fi
298
299if [ ! "$nolive" ] && [ ! -f "$SQUASHIMAGE" ]; then
300        echo   
301        echo "* LIVE CD image moet opnieuw gemaakt worden: (gebruik nonewcd om te gecachde versie te gebruiken)"
302        rm -rf "$SQUASHROOT" &>/dev/null
303       
304        #kijk eerst in $CDPKG en gebruik anders svn versie
305        for SHORTPKG in `cat livecd.list`; do
306                echo -n "Installeren $SHORTPKG..."
307                if ! [ -e $CDPKG/$SHORTPKG-* ]; then
308                        echo  -n "$SHORTPKG update ontbreekt. SVN: "
309                        TGZ=`../npl/findpkg "$SHORTPKG"` || exit 1
310                else
311                        TGZ=`echo $CDPKG/$SHORTPKG-*`
312                fi
313                echo -n "$TGZ..."
314                $INSTALLPACKAGE -root $SQUASHROOT "$TGZ" >/dev/null || exit 1
315                echo "OK"
316        done
317       
318       
319        echo "$SQUASHROOT configureren..."
320        cp -a $CONFIGDIR/* $SQUASHROOT || exit 1
321        chown -R 0:0 $SQUASHROOT/root || exit 1
322        chmod 700 $SQUASHROOT/root || exit 1
323
324        #internet startupscript maken, zodat regressietester er bij kan:
325        if [ "$regres" ]; then
326                if ! [ "$IP" ]; then
327                        echo "Geef IP op via environment, voor remote access en regressie testing!"
328                        exit 1
329                fi
330                #Als deze file bestaat zal de rc.local de rest voor ons fixen:
331                echo "IP=$IP" > $SQUASHROOT/etc/remote.conf || exit 1
332        fi
333
334       
335        #blackbox menu inkorten
336        #cp -a $CONFIGDIR/var/menu $SQUASHROOT/usr/X11R6/share/blackbox/menu || exit 1
337       
338        ldconfig -r $SQUASHROOT || exit 1
339       
340        #belangrijk voor usbkeyboard/muis support
341        chroot $SQUASHROOT bash -c "depmod $KVER" || exit 1
342
343        #font cache
344#       chroot $SQUASHROOT fc-cache -fv || exit 1
345#chroot $SQUASHROOT
346       
347        #we maken alles gewoon executable ivm bootscripts en zo
348        chmod -R +x $SQUASHROOT/etc/rc.d || exit 1
349
350        #stip onzinnige zooi eruit
351        find $SQUASHROOT -type d -name 'man?' -exec rm -r "{}" \; 2>/dev/null
352        find $SQUASHROOT -type d -name 'doc' -exec rm -r "{}" \; 2>/dev/null
353        find $SQUASHROOT -type d -name 'include' -exec rm -r "{}" \; 2>/dev/null
354        find $SQUASHROOT -type d -name 'gtk-doc' -exec rm -r "{}" \; 2>/dev/null
355        find $SQUASHROOT -type f -name '*.ps' -exec rm -r "{}" \; 2>/dev/null
356        #word aangeroepen door glibc doinst en start nog een xserver (busybox )
357        rm $SQUASHROOT/sbin/telinit || exit 1
358
359        echo "Squash image genereren..."
360        cd $SQUASHROOT
361        #mksquashfs . "$SQUASHIMAGE" -noI -noD -noF >/dev/null || exit 1;
362        mksquashfs . "$SQUASHIMAGE" || exit 1;
363        #mkcramfs . "$SQUASHIMAGE" >/dev/null || exit 1;
364        #genromfs -d $SQUASHROOT -f $SQUASHIMAGE || exit 1
365        cd ..
366       
367        echo "Squash root weer weghalen..."
368        rm -rf "$SQUASHROOT"
369fi
370
371
372
373
374###########################################
375########################################### INSTALLER OP CD
376###########################################
377
378echo "* Installer kopieren..."
379cd $BUILDROOT
380mkdir $CDROOT/installer 2>/dev/null
381cp ../install/*.sh $CDROOT/installer || exit 1
382rm $CDROOT/installer/updatelang.sh
383cp ../install/*.txt $CDROOT/installer || exit 1
384echo "$UPDATE_VERSION" > $CDROOT/installer/version
385chmod +x $CDROOT/installer/* || exit 1
386
387###########################################
388########################################### CD IMAGE GENEREREN OF BOOTABLE USBSTICK
389###########################################
390
391echo
392
393#partitioneer, formateer en installeer op bootable USB
394#UBER! :D
395if [ "$USBSTICK" ]; then
396    REMOVABLE=/sys/block/`echo $USBSTICK|sed s#.*/##`/removable
397    if [ "`cat $REMOVABLE`" != "1" ]; then
398        echo "EY KIJK JE WEL FF UIT?? $USBSTICK IS GEEN REMOVABLE DEVICE? :)"
399        exit 1
400    fi
401
402    pushd ../install
403    sh ./copyinstaller.sh $CDROOT $USBSTICK
404    exit $?
405#Maak bootable ISO
406else
407    echo "* Iso image builden..."
408    mkdir $BUILDROOT/iso 2>/dev/null
409    ISO="$BUILDROOT/iso/$VERSION.iso"
410
411    #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
412    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
413    #maak hem ook bootable als harddisk image op usb stick
414    ./isohybrid.pl $ISO || exit 1
415
416    ln -sf `basename $ISO` $BUILDROOT/iso/latest.iso || exit 1
417
418    echo
419    echo "Alles gefixed, je iso staat in $ISO"
420    echo
421fi
422
423###########################################
424########################################### CD FIKKEN of TESTEN
425###########################################
426
427if [ "$qemu" ]; then
428        #qemu...
429        HDA=/tmp/hda.dsk
430        HDB=/tmp/hdb.dsk
431        HDD=/tmp/hdd.dsk
432        rm $HDA $HDB $HDD &>/dev/null
433        dd if=/dev/zero of=$HDA seek=20000000 count=1
434        dd if=/dev/zero of=$HDB seek=20000000 count=1
435        dd if=/dev/zero of=$HDD seek=20000000 count=1
436        qemu -hda $HDA -cdrom /tmp/$VERSION.iso -boot d
437elif [ "$vmwarepsy" ]; then
438        ssh  psy@192.168.0.96 "export DISPLAY=:0;vmware -x ~/vmware/syn3/syn3.vmx"
439elif [ "$vmware" ]; then
440        vmware -x /root/vmware/syn-3/syn-3.vmx
441elif [ "$fik" ]; then
442        #blank || exit 1
443        fik iso/latest.iso || exit 1
444fi
445
446echo -e "ISO gefixed\a"
447exit 0
Note: See TracBrowser for help on using the repository browser.