source: bootcd/mkcd @ 3b59591

Last change on this file since 3b59591 was 929bb42, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

trying kernel 5.14

  • Property mode set to 100755
File size: 14.8 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
263
264#isolinux booter (BIOS mode)
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#grub2 booter (UEFI mode)
270cp -r EFI $CDROOT/ || exit 1
271cp -r boot $CDROOT/ || exit 1
272
273
274#kernel op cd
275echo "Kernel fixen...";
276KVER=`echo $CDPKG/linux-* | cut -f2 -d-`
277echo "Kernel versie $KVER"
278tar -C $CDROOT --wildcards -xvzf $CDPKG/linux-* "*bzImage.test" || exit 1
279mv $CDROOT/boot/bzImage.test $CDROOT/boot/bzImage || exit 1
280
281#initrd op cd
282tar -C $CDROOT --wildcards -xvzf $CDPKG/initrd-* "*initrd.gz.test" || exit 1
283mv $CDROOT/boot/initrd.gz.test $CDROOT/boot/initrd.gz || exit 1
284
285#memtest op cd
286cp memtest $CDROOT/boot || exit 1
287
288
289###########################################
290########################################### LIVECD IMAGE
291###########################################
292
293mkdir $CDROOT &>/dev/null
294
295SQUASHROOT="/tmp/live"
296SQUASHIMAGE="$CDROOT/livecd.img"
297CONFIGDIR="$BUILDROOT/config"
298
299if [ "$nolive" ] ; then
300    rm -rf $SQUASHIMAGE
301fi
302
303if [ ! "$nolive" ] && [ ! -f "$SQUASHIMAGE" ]; then
304        echo   
305        echo "* LIVE CD image moet opnieuw gemaakt worden: (gebruik nonewcd om te gecachde versie te gebruiken)"
306        rm -rf "$SQUASHROOT" &>/dev/null
307       
308        #kijk eerst in $CDPKG en gebruik anders git versie
309        for SHORTPKG in `cat livecd.list`; do
310                echo -n "Installeren $SHORTPKG..."
311                if ! [ -e $CDPKG/$SHORTPKG-* ]; then
312                        echo  -n "$SHORTPKG update ontbreekt. GIT: "
313                        TGZ=`../npl/findpkg "$SHORTPKG"` || exit 1
314                else
315                        TGZ=`echo $CDPKG/$SHORTPKG-*`
316                fi
317                echo -n "$TGZ..."
318                $INSTALLPACKAGE -root $SQUASHROOT "$TGZ" >/dev/null || exit 1
319                echo "OK"
320        done
321       
322       
323        echo "$SQUASHROOT configureren..."
324        cp -a $CONFIGDIR/* $SQUASHROOT || exit 1
325        chown -R 0:0 $SQUASHROOT/root || exit 1
326        chmod 700 $SQUASHROOT/root || exit 1
327
328        #internet startupscript maken, zodat regressietester er bij kan:
329        if [ "$regres" ]; then
330                if ! [ "$IP" ]; then
331                        echo "Geef IP op via environment, voor remote access en regressie testing!"
332                        exit 1
333                fi
334                #Als deze file bestaat zal de rc.local de rest voor ons fixen:
335                echo "IP=$IP" > $SQUASHROOT/etc/remote.conf || exit 1
336        fi
337
338       
339        #blackbox menu inkorten
340        #cp -a $CONFIGDIR/var/menu $SQUASHROOT/usr/X11R6/share/blackbox/menu || exit 1
341       
342        ldconfig -r $SQUASHROOT || exit 1
343       
344        #belangrijk voor usbkeyboard/muis support
345        chroot $SQUASHROOT bash -c "depmod $KVER" || exit 1
346
347        #font cache
348#       chroot $SQUASHROOT fc-cache -fv || exit 1
349#chroot $SQUASHROOT
350       
351        #we maken alles gewoon executable ivm bootscripts en zo
352        chmod -R +x $SQUASHROOT/etc/rc.d || exit 1
353
354        #stip onzinnige zooi eruit
355        find $SQUASHROOT -type d -name 'man?' -exec rm -r "{}" \; 2>/dev/null
356        find $SQUASHROOT -type d -name 'doc' -exec rm -r "{}" \; 2>/dev/null
357        find $SQUASHROOT -type d -name 'include' -exec rm -r "{}" \; 2>/dev/null
358        find $SQUASHROOT -type d -name 'gtk-doc' -exec rm -r "{}" \; 2>/dev/null
359        find $SQUASHROOT -type f -name '*.ps' -exec rm -r "{}" \; 2>/dev/null
360        #word aangeroepen door glibc doinst en start nog een xserver (busybox )
361        rm $SQUASHROOT/sbin/telinit || exit 1
362
363        echo "Squash image genereren..."
364        cd $SQUASHROOT
365        #mksquashfs . "$SQUASHIMAGE" -noI -noD -noF >/dev/null || exit 1;
366        mksquashfs . "$SQUASHIMAGE" || exit 1;
367        #mkcramfs . "$SQUASHIMAGE" >/dev/null || exit 1;
368        #genromfs -d $SQUASHROOT -f $SQUASHIMAGE || exit 1
369        cd ..
370       
371        echo "Squash root weer weghalen..."
372        rm -rf "$SQUASHROOT"
373fi
374
375
376
377
378###########################################
379########################################### INSTALLER OP CD
380###########################################
381
382echo "* Installer kopieren..."
383cd $BUILDROOT
384mkdir $CDROOT/installer 2>/dev/null
385cp ../install/*.sh $CDROOT/installer || exit 1
386rm $CDROOT/installer/updatelang.sh
387cp ../install/*.txt $CDROOT/installer || exit 1
388echo "$UPDATE_VERSION" > $CDROOT/installer/version
389chmod +x $CDROOT/installer/* || exit 1
390
391###########################################
392########################################### CD IMAGE GENEREREN OF BOOTABLE USBSTICK
393###########################################
394
395echo
396
397#partitioneer, formateer en installeer op bootable USB
398#UBER! :D
399if [ "$USBSTICK" ]; then
400    REMOVABLE=/sys/block/`echo $USBSTICK|sed s#.*/##`/removable
401    if [ "`cat $REMOVABLE`" != "1" ]; then
402        echo "EY KIJK JE WEL FF UIT?? $USBSTICK IS GEEN REMOVABLE DEVICE? :)"
403        exit 1
404    fi
405
406    pushd ../install
407    sh ./copyinstaller.sh $CDROOT $USBSTICK
408    exit $?
409#Maak bootable ISO
410else
411    echo "* Iso image builden..."
412    mkdir $BUILDROOT/iso 2>/dev/null
413    ISO="$BUILDROOT/iso/$VERSION.iso"
414
415    #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
416#    mkisofs \
417#        -no-emul-boot \
418#        -boot-load-size 4 \
419#        -V "Syn-3 installer" \
420#        -boot-info-table \
421#        -R \
422#        -J \
423#        -r \
424#        -b isolinux/isolinux.bin \
425#        -c isolinux/boot.cat \
426#        -eltorito-alt-boot \
427#        -eltorito-platform 0xEF \
428#        -eltorito-boot isolinux/efiboot.img \
429#        -o $ISO \
430#        $CDROOT \
431#    >/dev/null || exit 1
432
433    xorriso -as mkisofs -r -V "SYN-3 installer" \
434            -cache-inodes -J -l \
435            -isohybrid-mbr isohybrid_mbr.img \
436            -c isolinux/boot.cat \
437            -b isolinux/isolinux.bin \
438               -no-emul-boot -boot-load-size 4 -boot-info-table \
439            -eltorito-alt-boot \
440            -e boot/grub/efi.img \
441               -no-emul-boot -isohybrid-gpt-basdat \
442            -o "$ISO" \
443            "$CDROOT" || exit 1
444
445
446    #maak hem ook bootable als harddisk image op usb stick. (tool uit syslinux-utils package)
447#    isohybrid --uefi $ISO || exit 1
448
449    ln -sf `basename $ISO` $BUILDROOT/iso/latest.iso || exit 1
450
451    echo
452    echo "Alles gefixed, je iso staat in $ISO"
453    echo
454fi
455
456###########################################
457########################################### CD FIKKEN of TESTEN
458###########################################
459
460if [ "$qemu" ]; then
461        #qemu...
462        HDA=/tmp/hda.dsk
463        HDB=/tmp/hdb.dsk
464        HDD=/tmp/hdd.dsk
465        rm $HDA $HDB $HDD &>/dev/null
466        dd if=/dev/zero of=$HDA seek=20000000 count=1
467        dd if=/dev/zero of=$HDB seek=20000000 count=1
468        dd if=/dev/zero of=$HDD seek=20000000 count=1
469        qemu -hda $HDA -cdrom /tmp/$VERSION.iso -boot d
470elif [ "$vmwarepsy" ]; then
471        ssh  psy@192.168.0.96 "export DISPLAY=:0;vmware -x ~/vmware/syn3/syn3.vmx"
472elif [ "$vmware" ]; then
473        vmware -x /root/vmware/syn-3/syn-3.vmx
474elif [ "$fik" ]; then
475        #blank || exit 1
476        fik iso/latest.iso || exit 1
477fi
478
479echo -e "ISO gefixed\a"
480exit 0
Note: See TracBrowser for help on using the repository browser.