source: bootcd/mkcd @ b7b790b

perl-5.22
Last change on this file since b7b790b was 18182a8, checked in by Edwin Eefting <edwin@datux.nl>, 7 years ago

fix

  • Property mode set to 100755
File size: 13.9 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. git: "
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 git 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)";
227if [ "$nover" ]; then
228        BUILD='none'
229else
230        BUILD=`git describe --always`
231fi
232
233VERSION="syn3-$UPDATE_VERSION-$BUILD-`date +%d%m%Y-%H%M`" || exit 1
234VERSION=`echo "$VERSION"|sed s/:/to/|sed 's/ //g'` || exit 1
235
236echo "Versie: $VERSION";
237
238###########################################
239########################################### GRUB BOOTLOADER
240###########################################
241
242echo
243echo "* Initrd en kernel en grub fixen op cd"
244
245
246#installeer grub op CD
247#rm -r $CDROOT/boot/grub &>/dev/null
248#mkdir -p $CDROOT/boot/grub &>/dev/null
249#cp grub/*stage* $CDROOT/boot/grub || exit 1
250#cp grub/syn3installer.xpm.gz $CDROOT/boot/grub || exit 1
251
252#dynamisch opgebouwd grub menu
253#(
254#       #bij een regressietest booten we gelijk door:
255#       if [ "$regres" ]; then
256#               echo "timeout 1"
257#               echo "default 1"       
258#       fi
259#       cat grub/menu.lst  || exit 1
260#) | sed "s/%v/$UPDATE_VERSION/g" > $CDROOT/boot/grub/menu.lst || exit 1
261
262#cat grub/menutxt.lst | sed "s/%v/$UPDATE_VERSION/g" > $CDROOT/boot/grub/menutxt.lst || exit 1
263cp -r isolinux $CDROOT/ || exit 1
264sed "s/%major%/$UPDATE_VERSION/g" -i $CDROOT/isolinux/*.cfg || exit 1
265sed "s/%version%/$VERSION/g" -i  $CDROOT/isolinux/*.cfg || exit 1
266
267
268#kernel op cd
269echo "Kernel fixen...";
270KVER=`echo $CDPKG/linux-* | cut -f2 -d-`
271echo "Kernel versie $KVER"
272tar -C $CDROOT --wildcards -xvzf $CDPKG/linux-* "*bzImage.test" || exit 1
273mv $CDROOT/boot/bzImage.test $CDROOT/boot/bzImage || exit 1
274
275#initrd op cd
276tar -C $CDROOT --wildcards -xvzf $CDPKG/initrd-* "*initrd.gz.test" || exit 1
277mv $CDROOT/boot/initrd.gz.test $CDROOT/boot/initrd.gz || exit 1
278
279#memtest op cd
280cp memtest $CDROOT/boot || exit 1
281
282
283###########################################
284########################################### LIVECD IMAGE
285###########################################
286
287mkdir $CDROOT &>/dev/null
288
289SQUASHROOT="/tmp/live"
290SQUASHIMAGE="$CDROOT/livecd.img"
291CONFIGDIR="$BUILDROOT/config"
292
293if [ "$nolive" ] ; then
294    rm -rf $SQUASHIMAGE
295fi
296
297if [ ! "$nolive" ] && [ ! -f "$SQUASHIMAGE" ]; then
298        echo   
299        echo "* LIVE CD image moet opnieuw gemaakt worden: (gebruik nonewcd om te gecachde versie te gebruiken)"
300        rm -rf "$SQUASHROOT" &>/dev/null
301       
302        #kijk eerst in $CDPKG en gebruik anders git versie
303        for SHORTPKG in `cat livecd.list`; do
304                echo -n "Installeren $SHORTPKG..."
305                if ! [ -e $CDPKG/$SHORTPKG-* ]; then
306                        echo  -n "$SHORTPKG update ontbreekt. GIT: "
307                        TGZ=`../npl/findpkg "$SHORTPKG"` || exit 1
308                else
309                        TGZ=`echo $CDPKG/$SHORTPKG-*`
310                fi
311                echo -n "$TGZ..."
312                $INSTALLPACKAGE -root $SQUASHROOT "$TGZ" >/dev/null || exit 1
313                echo "OK"
314        done
315       
316       
317        echo "$SQUASHROOT configureren..."
318        cp -a $CONFIGDIR/* $SQUASHROOT || exit 1
319        chown -R 0:0 $SQUASHROOT/root || exit 1
320        chmod 700 $SQUASHROOT/root || exit 1
321
322        #internet startupscript maken, zodat regressietester er bij kan:
323        if [ "$regres" ]; then
324                if ! [ "$IP" ]; then
325                        echo "Geef IP op via environment, voor remote access en regressie testing!"
326                        exit 1
327                fi
328                #Als deze file bestaat zal de rc.local de rest voor ons fixen:
329                echo "IP=$IP" > $SQUASHROOT/etc/remote.conf || exit 1
330        fi
331
332       
333        #blackbox menu inkorten
334        #cp -a $CONFIGDIR/var/menu $SQUASHROOT/usr/X11R6/share/blackbox/menu || exit 1
335       
336        ldconfig -r $SQUASHROOT || exit 1
337       
338        #belangrijk voor usbkeyboard/muis support
339        chroot $SQUASHROOT bash -c "depmod $KVER" || exit 1
340
341        #font cache
342#       chroot $SQUASHROOT fc-cache -fv || exit 1
343#chroot $SQUASHROOT
344       
345        #we maken alles gewoon executable ivm bootscripts en zo
346        chmod -R +x $SQUASHROOT/etc/rc.d || exit 1
347
348        #stip onzinnige zooi eruit
349        find $SQUASHROOT -type d -name 'man?' -exec rm -r "{}" \; 2>/dev/null
350        find $SQUASHROOT -type d -name 'doc' -exec rm -r "{}" \; 2>/dev/null
351        find $SQUASHROOT -type d -name 'include' -exec rm -r "{}" \; 2>/dev/null
352        find $SQUASHROOT -type d -name 'gtk-doc' -exec rm -r "{}" \; 2>/dev/null
353        find $SQUASHROOT -type f -name '*.ps' -exec rm -r "{}" \; 2>/dev/null
354        #word aangeroepen door glibc doinst en start nog een xserver (busybox )
355        rm $SQUASHROOT/sbin/telinit || exit 1
356
357        echo "Squash image genereren..."
358        cd $SQUASHROOT
359        #mksquashfs . "$SQUASHIMAGE" -noI -noD -noF >/dev/null || exit 1;
360        mksquashfs . "$SQUASHIMAGE" || exit 1;
361        #mkcramfs . "$SQUASHIMAGE" >/dev/null || exit 1;
362        #genromfs -d $SQUASHROOT -f $SQUASHIMAGE || exit 1
363        cd ..
364       
365        echo "Squash root weer weghalen..."
366        rm -rf "$SQUASHROOT"
367fi
368
369
370
371
372###########################################
373########################################### INSTALLER OP CD
374###########################################
375
376echo "* Installer kopieren..."
377cd $BUILDROOT
378mkdir $CDROOT/installer 2>/dev/null
379cp ../install/*.sh $CDROOT/installer || exit 1
380rm $CDROOT/installer/updatelang.sh
381cp ../install/*.txt $CDROOT/installer || exit 1
382echo "$UPDATE_VERSION" > $CDROOT/installer/version
383chmod +x $CDROOT/installer/* || exit 1
384
385###########################################
386########################################### CD IMAGE GENEREREN OF BOOTABLE USBSTICK
387###########################################
388
389echo
390
391#partitioneer, formateer en installeer op bootable USB
392#UBER! :D
393if [ "$USBSTICK" ]; then
394    REMOVABLE=/sys/block/`echo $USBSTICK|sed s#.*/##`/removable
395    if [ "`cat $REMOVABLE`" != "1" ]; then
396        echo "EY KIJK JE WEL FF UIT?? $USBSTICK IS GEEN REMOVABLE DEVICE? :)"
397        exit 1
398    fi
399
400    pushd ../install
401    sh ./copyinstaller.sh $CDROOT $USBSTICK
402    exit $?
403#Maak bootable ISO
404else
405    echo "* Iso image builden..."
406    mkdir $BUILDROOT/iso 2>/dev/null
407    ISO="$BUILDROOT/iso/$VERSION.iso"
408
409    #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
410    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
411    #maak hem ook bootable als harddisk image op usb stick
412    ./isohybrid.pl $ISO || exit 1
413
414    ln -sf `basename $ISO` $BUILDROOT/iso/latest.iso || exit 1
415
416    echo
417    echo "Alles gefixed, je iso staat in $ISO"
418    echo
419fi
420
421###########################################
422########################################### CD FIKKEN of TESTEN
423###########################################
424
425if [ "$qemu" ]; then
426        #qemu...
427        HDA=/tmp/hda.dsk
428        HDB=/tmp/hdb.dsk
429        HDD=/tmp/hdd.dsk
430        rm $HDA $HDB $HDD &>/dev/null
431        dd if=/dev/zero of=$HDA seek=20000000 count=1
432        dd if=/dev/zero of=$HDB seek=20000000 count=1
433        dd if=/dev/zero of=$HDD seek=20000000 count=1
434        qemu -hda $HDA -cdrom /tmp/$VERSION.iso -boot d
435elif [ "$vmwarepsy" ]; then
436        ssh  psy@192.168.0.96 "export DISPLAY=:0;vmware -x ~/vmware/syn3/syn3.vmx"
437elif [ "$vmware" ]; then
438        vmware -x /root/vmware/syn-3/syn-3.vmx
439elif [ "$fik" ]; then
440        #blank || exit 1
441        fik iso/latest.iso || exit 1
442fi
443
444echo -e "ISO gefixed\a"
445exit 0
Note: See TracBrowser for help on using the repository browser.