Magellan Linux

Annotation of /trunk/installer-simple/bin/installer.sh.in

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2344 - (hide annotations) (download)
Fri Jan 3 15:01:06 2014 UTC (10 years, 4 months ago) by niro
File size: 24683 byte(s)
use hwdetection via hwinfo with run_hardware_detection_disks() function
1 niro 2323 #!/bin/bash
2 niro 2322 # $Id$
3 niro 2320 #
4 niro 2322 # Simple Installation Script
5     # merged from alxinstall-ng and mcore-installer
6 niro 2320 #
7     # Niels Rogalla <niro@magellan-linux.de>
8     #
9    
10 niro 2339 # ignore the environment
11     LC_ALL=C
12 niro 2340 # include dir
13 niro 2333 INSTALLER_LIBDIR="%LIBDIR%"
14    
15 niro 2340 # TOTALLINES=linecount of ${CDIMAGENAME}-tarball -1 !
16     # -> now in images.conf
17     CURRENTLINE=0
18    
19 niro 2334 # configuration
20     if [ -e %SYSCONFDIR%/installer.conf ]
21     then
22     source %SYSCONFDIR%/installer.conf
23     else
24     die "/etc/installer.conf not found"
25     fi
26 niro 2332
27 niro 2340 # TOTALLINES=linecount of ${CDIMAGENAME}-tarball -1 !
28     # -> now in images.conf
29     CDIMAGENAME=""
30     TOTALLINES=""
31     CURRENTLINE=0
32 niro 2334 if [ -e /mnt/cdrom/system/images.conf ]
33     then
34     source /mnt/cdrom/system/images.conf
35 niro 2340 # check if all required variables are set
36     [[ -z ${CDIMAGENAME} ]] && die "CDIMAGENAME is empty in /mnt/cdrom/system/images.conf"
37     [[ -z ${TOTALLINES} ]] && die "TOTALLINES is empty in /mnt/cdrom/system/images.conf"
38 niro 2334 else
39     die "/mnt/cdrom/system/images.conf not found"
40     fi
41 niro 2320
42 niro 2335 # includes
43     source ${INSTALLER_LIBDIR}/functions/hwdetection.sh
44 niro 2334
45 niro 2320 ### System/Config Version
46     VERSION="%VERSIONTAG%"
47 niro 2332 TITLE="${DEFAULT_TITLE} - ${VERSION}"
48 niro 2320
49 niro 2343 CDROOT="${DEFAULT_CDROOT}"
50 niro 2342 INSTALLROOT="${DEFAULT_INSTALLROOT}"
51 niro 2320
52     # standard kernel opts
53     KERNELOPTS="quiet video=1024x768"
54    
55     # grub options
56     GRUBLEGACYOPTS=""
57     GRUB2OPTS=""
58    
59     # fdisk options
60     FDISKPARTIONBELOW256MB=0
61    
62     # default specialdevices
63     SPECIALDEVICE=""
64     FORMFACTOR="desktop"
65    
66     # target filesystem
67 niro 2332 FORMAT_FILESYSTEM="${DEFAULT_FILESYSTEM}"
68 niro 2320
69     #################################################
70     # DIALOG BOXEN #
71     #################################################
72    
73     die()
74     {
75 niro 2336 echo "Error: $@"
76     exit 1
77     }
78    
79     dialog_die()
80     {
81 niro 2341 ERROR="$1"
82     RETVAL="$?"
83 niro 2320 dialog_install_failure
84     exit 1
85     }
86    
87     dialog_warning()
88     {
89     dialog \
90     --backtitle "${TITLE}" \
91     --colors \
92     --defaultno \
93     --yesno "\Z1 !!! Achtung !!! \Zn\n\n\
94     Diese Festplatte wird unwiederruflich geloescht werden.\n\n\
95     Soll ich wirklich fortfahren ?" 10 70
96     RES=$?
97     if [[ ${RES} -eq 1 ]]
98     then
99     clear
100     echo "Der Vorgang wurde abgebrochen."
101     exit 1
102     fi
103     }
104    
105     dialog_setup_hdd_info()
106     {
107     local SHDD="$(echo ${HDD} | sed 's/\/dev\///')"
108    
109     dialog \
110     --colors \
111     --title "[ Festplatten Partitionierung ]" \
112     --backtitle "${TITLE}" \
113     --ok-label "Weiter" \
114     --msgbox "\nBitte legen Sie 3 Partitionen an.\n\n\
115     [ \Z3${SHDD}1\Zn ] Typ: \Z3Linux\Zn mit ca. 50MB\n\
116     [ \Z3${SHDD}2\Zn ] Typ: \Z3Linux Swap\Zn mit ca. 256MB\n\
117     [ \Z3${SHDD}3\Zn ] Typ: \Z3Linux \Zn mit dem Rest (min. 256MB)\n\n\
118     Bitte ${SHDD}1 als \Z3bootable\Zn markieren." 12 81
119     }
120    
121     dialog_setup_hdd_info_flash()
122     {
123     local SHDD="$(echo $HDD | sed 's/\/dev\///')"
124    
125     dialog \
126     --colors \
127     --title "[ Festplatten Partitionierung ]" \
128     --backtitle "${TITLE}" \
129     --ok-label "Weiter" \
130     --msgbox "\nBitte legen Sie 1 Partition an.\n\n\
131     [ \Z3${SHDD}1\Zn ] Typ: \Z3Linux\Zn mit dem gesamten Speicher\n\
132     Bitte ${SHDD}1 als \Z3bootable\Zn markieren." 12 81
133     }
134    
135     dialog_setup_hdd_info_auto()
136     {
137     local SHDD="$(echo $HDD | sed 's/\/dev\///')"
138    
139     dialog \
140     --colors \
141     --title "[ Festplatten Partitionierung ]" \
142     --backtitle "${TITLE}" \
143     --ok-label "Weiter" \
144     --msgbox "\nAchtung!\n\
145     Alle Daten werden von der Disk [ \Z3${HDD}\Zn ] gelöscht!" 12 81
146     }
147    
148     dialog_setup_system_menu()
149     {
150     local i
151    
152     i=$(dialog \
153     --backtitle "${TITLE}" \
154     --title "[ Festplatten Partitionierung ]" \
155     --cancel-label "Abbrechen" \
156     --ok-label "Weiter" \
157     --stdout \
158     --colors \
159     --menu "\nWaehlen Sie die Installations-Methode" 14 70 5 \
160     "1" "Automatisches Setup (Empfohlen)" \
161     "" "" \
162     "" "\Z1Experten Modi:\Zn" \
163     "2" "Normale IDE-Disk (Manuell)" \
164     "3" "Flash-Speicher (Manuell)")
165     RES=$?
166     [[ ${RES} -eq 1 ]] && return 1
167     if [[ ${RES} -eq 0 ]]
168     then
169     case "${i}" in
170     "1") run_install_auto ;;
171 niro 2341 "2") run_install_normal ;;
172 niro 2320 "3") run_install_flash ;;
173     "") dialog_setup_system_menu;;
174     esac
175     fi
176     }
177    
178     dialog_hardware_detection()
179     {
180     local i
181     local hwtmp
182    
183     if [ -x $(which mktemp &> /dev/null) ]
184     then
185     hwtmp="$(mktemp)"
186     else
187     hwtmp="/tmp/hwtmp.sh"
188     fi
189    
190 niro 2344 run_hardware_detection_disks
191 niro 2320
192     echo "dialog \\" > ${hwtmp}
193     echo "--backtitle \"${TITLE}\" \\" >> ${hwtmp}
194     echo "--ok-label \"Weiter\" \\" >> ${hwtmp}
195     echo "--stdout \\" >> ${hwtmp}
196     echo "--colors \\" >> ${hwtmp}
197     echo "--msgbox \"Gefundene Hardware:\n\n \\" >> ${hwtmp}
198     echo " Festplatten:\n \\" >> ${hwtmp}
199    
200 niro 2344 if [[ ! -z ${ALL_DISKS} ]]
201 niro 2320 then
202 niro 2344 for i in ${ALL_DISKS}
203 niro 2320 do
204 niro 2344 echo " \\Z3${i}\\Zn\n \\" >> ${hwtmp}
205 niro 2320 done
206     fi
207    
208 niro 2344 if [[ ! -z ${ALL_CDROMS} ]]
209 niro 2320 then
210 niro 2344 echo " \n \\" >> ${hwtmp}
211     echo " CDROM Laufwerke:\n \\" >> ${hwtmp}
212     for i in ${ALL_CDROMS}
213 niro 2320 do
214 niro 2344 echo " \\Z3${i}\\Zn\n \\" >> ${hwtmp}
215 niro 2320 done
216     fi
217    
218     # other devices
219     run_hardware_detection
220     case "${SPECIALDEVICE}" in
221     zotac*) echo " \n\n\n \\Z2Zotac Device erkannt.\\Zn \\" >> ${hwtmp} ;;
222     rangee) echo " \n\n\n \\Z2Rangee Device erkannt.\\Zn \\" >> ${hwtmp} ;;
223     maxdata) echo " \n\n\n \\Z2Maxdata Device erkannt.\\Zn \\" >> ${hwtmp} ;;
224     *) echo " \n\n\n \\ZnStandard Device erkannt.\\Zn \\" >> ${hwtmp} ;;
225     esac
226     if [[ ${FORMFACTOR} = laptop ]]
227     then
228     echo " \n \\ZnFormfactor Laptop, Powersave Modus 'ondemand' wird aktiviert.\\Zn \\" >> ${hwtmp}
229     fi
230    
231     echo " \" 14 70" >> ${hwtmp}
232     chmod a+x ${hwtmp}
233     ${hwtmp}
234    
235     # remove tmp file
236     if [[ -f ${hwtmp} ]]
237     then
238     rm ${hwtmp}
239     fi
240     }
241    
242     dialog_setup_hdd_partitions_manuell()
243     {
244     local i
245    
246     if [[ -z ${installdevs} ]]
247     then
248     dialog \
249     --backtitle "${TITLE}" \
250     --ok-label "Beenden" \
251     --msgbox "Kein geeignetes Laufwerk gefunden.\nDie Installation ist fehlgeschlagen." 6 70
252     exit 1
253     else
254    
255     echo "dialog \\" > /tmp/hddtmp.sh
256     echo "--backtitle \"${TITLE}\" \\" >> /tmp/hddtmp.sh
257     echo "--ok-label \"Weiter\" \\" >> /tmp/hddtmp.sh
258     echo "--cancel-label \"Beenden\" \\" >> /tmp/hddtmp.sh
259     echo "--stdout \\" >> /tmp/hddtmp.sh
260     echo "--menu \"Installations Laufwerk auswaehlen:\" 10 70 3 \\" >> /tmp/hddtmp.sh
261    
262     for i in ${installdevs}
263     do
264     echo "\"${i}\" \"\" \\" >> /tmp/hddtmp.sh
265     done
266     echo -e "\n" >> /tmp/hddtmp.sh
267    
268     chmod a+x /tmp/hddtmp.sh
269     HDD="$(/tmp/hddtmp.sh)"
270     RES=$?
271     [[ ${RES} -eq 1 ]] && return 1
272     if [[ ${RES} -eq 0 ]]
273     then
274     dialog_setup_hdd_info
275     setup_hdd_partitions_manuell
276     fi
277     fi
278     }
279    
280     dialog_setup_hdd_partitions_manuell_flash()
281     {
282     local i
283    
284     if [[ -z ${installdevs} ]]
285     then
286     dialog \
287     --backtitle "${TITLE}" \
288     --ok-label "Beenden" \
289     --msgbox "Kein geeignetes Laufwerk gefunden.\nDie Installation ist fehlgeschlagen." 6 70
290     exit 1
291     else
292    
293     echo "dialog \\" > /tmp/hddtmp.sh
294     echo "--backtitle \"${TITLE}\" \\" >> /tmp/hddtmp.sh
295     echo "--ok-label \"Weiter\" \\" >> /tmp/hddtmp.sh
296     echo "--cancel-label \"Beenden\" \\" >> /tmp/hddtmp.sh
297     echo "--stdout \\" >> /tmp/hddtmp.sh
298     echo "--menu \"Installations Laufwerk auswaehlen:\" 10 70 3 \\" >> /tmp/hddtmp.sh
299    
300     for i in ${installdevs}
301     do
302     echo "\"${i}\" \"\" \\" >> /tmp/hddtmp.sh
303     done
304     echo -e "\n" >> /tmp/hddtmp.sh
305    
306     chmod a+x /tmp/hddtmp.sh
307     HDD="$(/tmp/hddtmp.sh)"
308     RES=$?
309     [[ ${RES} -eq 1 ]] && return 1
310     if [[ ${RES} -eq 0 ]]
311     then
312     dialog_setup_hdd_info_flash
313     setup_hdd_partitions_manuell_flash
314     fi
315     fi
316     }
317    
318     dialog_setup_hdd_partitions_auto()
319     {
320     local i
321    
322     if [[ -z ${installdevs} ]]
323     then
324     dialog \
325     --backtitle "${TITLE}" \
326     --ok-label "Beenden" \
327     --msgbox "Kein geeignetes Laufwerk gefunden.\nDie Installation ist fehlgeschlagen." 6 70
328     exit 1
329     else
330    
331     echo "dialog \\" > /tmp/hddtmp.sh
332     echo "--backtitle \"${TITLE}\" \\" >> /tmp/hddtmp.sh
333     echo "--ok-label \"Weiter\" \\" >> /tmp/hddtmp.sh
334     echo "--cancel-label \"Beenden\" \\" >> /tmp/hddtmp.sh
335     echo "--stdout \\" >> /tmp/hddtmp.sh
336     echo "--menu \"Installations Laufwerk auswaehlen:\" 10 70 3 \\" >> /tmp/hddtmp.sh
337    
338     for i in ${installdevs}
339     do
340     echo "\"${i}\" \"\" \\" >> /tmp/hddtmp.sh
341     done
342     echo -e "\n" >> /tmp/hddtmp.sh
343    
344     chmod a+x /tmp/hddtmp.sh
345     HDD="$(/tmp/hddtmp.sh)"
346     RES=$?
347     [[ ${RES} -eq 1 ]] && return 1
348     if [[ ${RES} -eq 0 ]]
349     then
350     dialog_setup_hdd_info_auto
351     dialog_setup_hdd_create_partitions
352     setup_hdd_partitions_auto
353     fi
354     fi
355     }
356    
357 niro 2344 run_hardware_detection_disks()
358     {
359     local bootdev
360    
361     # all disks but exclude ramdisks
362     export ALL_DISKS=$(get_hwinfo disk | sed '/\/dev\/ram[0-9].*/d')
363     # remove the boot device from ALL_DISKS if it was an usbstick
364     if [[ $(grep '[[:space:]]/mnt/cdrom[[:space:]]' /proc/mounts | cut -d' ' -f3) != iso9660 ]]
365     then
366     bootdev="$(grep '[[:space:]]/mnt/cdrom[[:space:]]' /proc/mounts | cut -d' ' -f1 | sed 's:[0-9]::g')"
367     export ALL_DISKS=$(echo "${ALL_DISKS}" | grep -v "${bootdev}")
368     fi
369     export ALL_CDROMS="$(get_hwinfo cdrom)"
370     }
371    
372 niro 2320 dialog_setup_hdd_create_partitions()
373     {
374     dialog \
375     --backtitle "${TITLE}" \
376     --infobox "Erstelle Disk Partitionen ..." 3 70
377     }
378    
379     dialog_setup_hdd_format()
380     {
381     dialog \
382     --backtitle "${TITLE}" \
383     --infobox "Erstelle Datei-Systeme ..." 3 70
384     }
385    
386     dialog_install_settings()
387     {
388     dialog \
389     --backtitle "${TITLE}" \
390     --infobox "Speichere System-Einstellungen ..." 3 70
391     }
392    
393     dialog_install_system_image()
394     {
395     dialog \
396     --backtitle "${TITLE}" \
397     --gauge "Kopiere System-Image ..." 6 80
398     }
399    
400     dialog_install_meter()
401     {
402     while [[ ${CURRENTLINE} != ${TOTALLINES} ]]
403     do
404     CURRENTLINE=$(grep -c . /tmp/install.log)
405     PERCENT=$(( ${CURRENTLINE} * 100 / ${TOTALLINES}))
406     echo ${PERCENT}
407     sleep 1
408     done
409     rm -f /tmp/install.log
410     return 0
411     }
412    
413    
414     dialog_install_bootsector()
415     {
416     dialog \
417     --backtitle "${TITLE}" \
418     --infobox "Schreibe den Bootsektor ..." 3 70
419     }
420    
421     dialog_install_successful()
422     {
423     dialog \
424     --backtitle "${TITLE}" \
425     --colors \
426     --msgbox "Die Installation war \Z2erfolgreich\Zn." 5 81
427     }
428    
429     dialog_install_failure()
430     {
431     dialog \
432     --backtitle "${TITLE}" \
433     --colors \
434     --msgbox "Die Installation ist \Z1Fehlgeschlagen\Zn.\n\n\
435     Fehler bei ${ERROR}, RetVal: ${RETVAL} \
436     " 10 81
437     }
438    
439     dialog_main()
440     {
441     METHOD=0
442    
443     while [[ ${METHOD} -le 2 ]]
444     do
445     METHOD=$(dialog \
446     --backtitle "${TITLE}" \
447     --no-cancel \
448     --ok-label "Weiter" \
449     --stdout \
450     --menu "Konfiguration" 14 70 5 \
451     "1" "AutoSta_LX installieren" \
452     "2" "Uebersicht gefundener Laufwerke" \
453     "3" "Beenden und neustarten" \
454     "4" "Beenden und eine Shell starten")
455     RES=$?
456     [[ ${RES} -eq 1 ]] && exit 1
457     if [[ ${RES} -eq 0 ]]
458     then
459     case ${METHOD} in
460 niro 2341 "1") dialog_setup_system_menu ;;
461 niro 2320 "2") dialog_hardware_detection ;;
462     "3") install_do_reboot ;;
463     "4") /bin/bash --login -i ;;
464     esac
465     fi
466     done
467     }
468    
469     #################################################
470     # Install Komandos #
471     #################################################
472     run_hardware_detection()
473     {
474     local hwinfo
475    
476     hwinfo="$(hwinfo --bios --storage --pci --gfxcard --sys)"
477    
478     # check for special devices/clients:
479     # if zotac a zotac and the disk is a removeable device, then add rootdelay to kernelcmd
480     local removable=0
481     if [[ ! -z $(echo "${hwinfo}" | grep -i zotac) ]]
482     then
483     for i in /sys/block/[hs]d*/removable
484     do
485     if [[ $(< ${i}) = 1 ]]
486     then
487     removable=1
488     fi
489     done
490    
491     # only add this for grub legacy, grub2 detect these settings on its own
492     export GRUBLEGACYOPTS="rootdelay=8"
493     # there are to zotac types in the wild, nvidia based gfx and intel
494     if [[ ! -z $(echo "${hwinfo}" | grep -i nouveau) ]]
495     then
496     export SPECIALDEVICE="zotac_nvidia"
497     else
498     export SPECIALDEVICE="zotac_intel"
499     fi
500     fi
501    
502     # check for special devices/clients:
503     # if a rangee and disk ist smaller then 256mb move partion one block further ahead
504     if [[ ! -z $(echo "${hwinfo}" | grep -i CLE266) ]]
505     then
506     # for a rangee always define partion startblock +1
507     export FDISKPARTIONBELOW256MB="1"
508     export SPECIALDEVICE="rangee"
509     export GRUBLEGACYOPTS=""
510     fi
511    
512     # check for special devices/clients:
513     # check for maxdata / i810/ i815 Chipsets and disable KMS and use i810fb frambuffer
514     if [[ ! -z $(echo "${hwinfo}" | grep -i i810) ]] || [[ ! -z $(echo "${hwinfo}" | grep -i i815) ]]
515     then
516     export SPECIALDEVICE="maxdata"
517     export GRUBLEGACYOPTS=""
518     fi
519    
520     # check for special devices/clients:
521     # check for laptops and activate cpufreq scaling
522     if [[ $(echo "${hwinfo}" | grep 'Formfactor:' | sed 's:.*Formfactor\:\ \"\(.*\)\":\1:') = laptop ]]
523     then
524     export FORMFACTOR="laptop"
525     export KERNELOPTS="${KERNELOPTS} cpufreq.governor=ondemand"
526     fi
527     }
528    
529     hdd_size_below_256mb()
530     {
531     local hdd="$1"
532     local size
533     local retval
534 niro 2336 [[ -z ${hdd} ]] && dialog_die "Error: get_hdd_size() no \$hdd given!"
535 niro 2320
536     size=$(fdisk -l ${hdd} | grep "Disk.*${hdd}" | sed 's:.*,\ \(.*\)\ byte.*:\1:')
537     if [[ ${size} -le 257000000 ]]
538     then
539     retval="0"
540     else
541     retval="1"
542     fi
543    
544     return "${retval}"
545     }
546    
547     setup_hdd_partitions_auto()
548     {
549     ROOTHDD="${HDD}1"
550    
551     # run this only if FDISKPARTITIONBELOW256MB is not already 1
552     if [[ ${FDISKPARTIONBELOW256MB} != 1 ]]
553     then
554     if hdd_size_below_256mb ${HDD}
555     then
556     FDISKPARTIONBELOW256MB=1
557     else
558     FDISKPARTIONBELOW256MB=0
559     fi
560     fi
561    
562     ## delete disk
563 niro 2336 dd if=/dev/zero of=${HDD} count=1 &> /dev/null || dialog_die
564 niro 2320
565     if [[ ${FDISKPARTIONBELOW256MB} = 1 ]]
566     then
567     ## setup one bootable partition
568     #1. n= new disk
569     #2. p= primary disk
570     #3. 1= first partition
571     #4. 2= default sector start // small disk needs more space for grub2 mbr sector
572     #5. ''= defaul sector end
573     #6. a= bootable flag
574     #7. 1= boot flag for partition 1
575     #8. w= write/quit
576     fdisk ${HDD} &> /dev/null << EOF
577     n
578     p
579     1
580     2
581    
582     a
583     1
584     w
585     EOF
586     else
587     ## setup one bootable partition
588     #1. n= new disk
589     #2. p= primary disk
590     #3. 1= first partition
591     #4. ''= default sector start
592     #5. ''= defaul sector end
593     #6. a= bootable flag
594     #7. 1= boot flag for partition 1
595     #8. w= write/quit
596     fdisk ${HDD} &> /dev/null << EOF
597     n
598     p
599     1
600    
601    
602     a
603     1
604     w
605     EOF
606     fi
607     }
608    
609     setup_hdd_partitions_manuell()
610     {
611     BOOTHDD="${HDD}1"
612     SWAPHDD="${HDD}2"
613     ROOTHDD="${HDD}3"
614    
615     ## hdds partitionieren manuell
616 niro 2336 cfdisk ${HDD} || dialog_die
617 niro 2320 }
618    
619     setup_hdd_partitions_manuell_flash()
620     {
621     ROOTHDD="${HDD}1"
622    
623     ## hdds partitionieren manuell
624 niro 2336 cfdisk ${HDD} || dialog_die
625 niro 2320 }
626    
627     setup_hdd_format()
628     {
629 niro 2336 mkswap ${SWAPHDD} || dialog_die
630     mke2fs -j -q ${BOOTHDD} || dialog_die
631     mke2fs -j -q ${ROOTHDD} || dialog_die
632 niro 2320 }
633    
634     setup_hdd_format_flash()
635     {
636 niro 2336 mke2fs -j -q ${ROOTHDD} || dialog_die
637 niro 2320 }
638    
639     install_mount_rootfs()
640     {
641 niro 2336 swapon ${SWAPHDD} || dialog_die
642 niro 2342 mount ${ROOTHDD} ${INSTALLROOT} || dialog_die
643     install -d ${INSTALLROOT}/boot || dialog_die
644     mount ${BOOTHDD} ${INSTALLROOT}/boot || dialog_die
645     cd ${INSTALLROOT} || dialog_die
646 niro 2320 }
647    
648     install_mount_rootfs_flash()
649     {
650 niro 2342 mount ${ROOTHDD} ${INSTALLROOT} || dialog_die
651     install -d ${INSTALLROOT}/boot || dialog_die
652     cd ${INSTALLROOT} || dialog_die
653 niro 2320 }
654    
655     install_system_image()
656     {
657 niro 2343 tar xvjpf ${CDROOT}/system/${CDIMAGENAME} -C ${INSTALLROOT}
658 niro 2320 }
659    
660     install_bootsector_chroot()
661     {
662     local my_roothdd
663 niro 2342 local grubconf=${INSTALLROOT}/boot/grub/grub.conf
664 niro 2320 local grub2conf=/boot/grub/grub.cfg
665    
666     # check for grub2
667 niro 2342 if [[ -f ${INSTALLROOT}/sbin/grub-mkconfig ]]
668 niro 2320 then
669     # needed by grub-mkconfig on the first run
670 niro 2342 if [[ ! -f ${INSTALLROOT}/boot/grub/video.lst ]]
671 niro 2320 then
672 niro 2342 install -m0644 ${INSTALLROOT}/lib/grub/*/video.lst ${INSTALLROOT}/boot/grub/video.lst || dialog_die
673 niro 2320 fi
674    
675     # set kernelopts
676 niro 2342 if [[ -f ${INSTALLROOT}/etc/conf.d/grub ]]
677 niro 2320 then
678 niro 2342 sed -i "s:^\(export GRUB_CMDLINE_LINUX_DEFAULT=\).*:\1\"${KERNELOPTS}\":" ${INSTALLROOT}/etc/conf.d/grub || dialog_die
679 niro 2320 else
680 niro 2342 echo "export GRUB_CMDLINE_LINUX_DEFAULT=\"${KERNELOPTS}\"" > ${INSTALLROOT}/etc/conf.d/grub || dialog_die
681 niro 2320 fi
682 niro 2342 echo 'grub-mkdevicemap' > ${INSTALLROOT}/root/.installrc || dialog_die
683     echo "LC_ALL=C grub-mkconfig -o ${grub2conf} &> /dev/null" >> ${INSTALLROOT}/root/.installrc || dialog_die
684     echo "grub-install --no-floppy ${HDD} &> /dev/null" >> ${INSTALLROOT}/root/.installrc || dialog_die
685     echo "exit 0" >> ${INSTALLROOT}/root/.installrc || dialog_die
686 niro 2320
687     # grub-legacy
688     else
689     ### grubconf schreiben
690 niro 2342 source ${INSTALLROOT}/boot/kernelversion
691 niro 2320
692     #for alx only
693 niro 2342 if [ -e ${INSTALLROOT}/etc/alx_version ]
694 niro 2320 then
695     OLD_ALXVER="${ALXVER}"
696 niro 2342 source ${INSTALLROOT}/etc/alx_version
697 niro 2320 KRNVER="ALX-${ALXVER}"
698     ALXVER="${OLD_ALXVER}"
699     fi
700    
701     [[ -z ${KRNVER} ]] && KRNVER="AutoSta_LX"
702     [[ -z ${KRNINITRD} ]] && KRNINITRD="initrd"
703     [[ -z ${KRNIMG} ]] && KRNIMG="vmlinuz"
704    
705     # uuid support
706     if is_uuid_supported
707     then
708     my_roothdd="UUID=$(get_uuid ${ROOTHDD})"
709     else
710     my_roothdd="${ROOTHDD}"
711     fi
712    
713 niro 2336 : > ${grubconf} || dialog_die
714     echo "default 0" >> ${grubconf} || dialog_die
715     echo "timeout 3" >> ${grubconf} || dialog_die
716 niro 2320 # using current root password
717 niro 2342 echo "password --md5 $(cat ${INSTALLROOT}/etc/shadow | grep root | cut -d: -f2)" >> ${grubconf} || dialog_die
718 niro 2320
719 niro 2336 echo >> ${grubconf} || dialog_die
720     echo "# normal boot" >> ${grubconf} || dialog_die
721     echo "title ${KRNVER}" >> ${grubconf} || dialog_die
722     echo "root (hd0,0)" >> ${grubconf} || dialog_die
723     echo "kernel /boot/${KRNIMG} root=${my_roothdd} ${KERNELOPTS} ${GRUBLEGACYOPTS}" >> ${grubconf} || dialog_die
724 niro 2320 if is_initrd_supported
725     then
726 niro 2336 echo "initrd /boot/${KRNINITRD}" >> ${grubconf} || dialog_die
727 niro 2320 fi
728    
729 niro 2336 echo >> ${grubconf} || dialog_die
730     echo "# admin boot" >> ${grubconf} || dialog_die
731     echo "title ${KRNVER} - Re-run hardware-detection" >> ${grubconf} || dialog_die
732     echo "lock" >> ${grubconf} || dialog_die
733     echo "root (hd0,0)" >> ${grubconf} || dialog_die
734     echo "kernel /boot/${KRNIMG} root=${my_roothdd} ${KERNELOPTS} ${GRUBLEGACYOPTS} hardware-auto-detection" >> ${grubconf} || dialog_die
735 niro 2320 if is_initrd_supported
736     then
737 niro 2336 echo "initrd /boot/${KRNINITRD}" >> ${grubconf} || dialog_die
738 niro 2320 fi
739    
740 niro 2336 echo >> ${grubconf} || dialog_die
741     echo "title ${KRNVER} - Reset *all* local settings" >> ${grubconf} || dialog_die
742     echo "lock" >> ${grubconf} || dialog_die
743     echo "root (hd0,0)" >> ${grubconf} || dialog_die
744     echo "kernel /boot/${KRNIMG} root=${my_roothdd} ${KERNELOPTS} ${GRUBLEGACYOPTS} alx-reset-settings" >> ${grubconf} || dialog_die
745 niro 2320 if is_initrd_supported
746     then
747 niro 2336 echo "initrd /boot/${KRNINITRD}" >> ${grubconf} || dialog_die
748 niro 2320 fi
749    
750     # bootsector schreiben chrooted schreiben (lfs/magellan)
751 niro 2342 cat > ${INSTALLROOT}/root/.installrc << CHROOTEOF
752 niro 2320 /usr/sbin/grub --no-floppy --batch << "EOF" 1> /dev/null 2> /dev/null
753     root (hd0,0)
754     setup (hd0)
755     quit
756     EOF
757     exit 0
758     CHROOTEOF
759     fi
760    
761 niro 2336 ## enter chroot
762 niro 2342 mount -t proc proc ${INSTALLROOT}/proc
763     mount -t sysfs sysfs ${INSTALLROOT}/sys
764     mount -o bind /dev ${INSTALLROOT}/dev
765     chroot ${INSTALLROOT} /bin/bash --rcfile /root/.installrc -i
766     umount ${INSTALLROOT}/proc
767     umount ${INSTALLROOT}/sys
768     umount ${INSTALLROOT}/dev
769     rm ${INSTALLROOT}/root/.installrc
770 niro 2320 }
771    
772     is_initrd_supported()
773     {
774     # only generate initrds if the cmd exists
775 niro 2342 [[ -x ${INSTALLROOT}/sbin/mkinitrd ]] && return 0
776 niro 2320 return 1
777     }
778    
779     install_initrd_chroot()
780     {
781     # only generate initrds if the cmd exists
782     is_initrd_supported || return 0
783    
784     DISKMODS="sd_mod"
785     OLDPATAMODS="amd74xx piix sis5513 via82cxxx"
786     PATAMODS="ata_piix pata_amd pata_mpiix pata_oldpiix pata_sis pata_via"
787     SATAMODS="sata_via sata_sis sata_nv"
788     DRMMODS="i915 mga nouveau r128 radeon savage sis tdfx ttm via"
789     OTHERMODS=""
790     case ${SPECIALDEVICE} in
791     zotac_intel) FBMODS=""; DRMMODS="i915" ;;
792     zotac_nvidia) FBMODS=""; DRMMODS="nouveau" ;;
793     rangee) FBMODS="" ;; ## fallback to vesafb, viafb does not run on all CLE266 boards
794     # not working with kms enabled drivers -> segfaults
795     #maxdata) FBMODS="i810fb" ;; ## check for maxdata / i810/ i815 Chipsets and disable KMS and use i810fb frambuffer
796     maxdata) FBMODS="" ;;
797     *) FBMODS="uvesafb" ;;
798     esac
799    
800     if [[ ${FORMFACTOR} = laptop ]]
801     then
802     OTHERMODS="acpi-cpufreq cpufreq_ondemand cpufreq_conservative cpufreq_powersave"
803     fi
804    
805     # install an appropriate uvesafb.conf
806 niro 2342 install -d ${INSTALLROOT}/etc/modprobe.d || dialog_die
807     echo "options uvesafb mode_option=1024x768-32@60 scroll=ywrap" > ${INSTALLROOT}/etc/modprobe.d/uvesafb.conf || dialog_die
808 niro 2320
809     # install an appropriate viafb.conf
810 niro 2342 echo "options viafb viafb_mode=1024x768 viafb_refresh=60" > ${INSTALLROOT}/etc/modprobe.d/viafb.conf || dialog_die
811 niro 2320
812     # install an appropriate i810fb.conf
813 niro 2342 echo "options i810fb xres=1024 yres=768 bpp=16 mtrr=1 hsync1=30 hsync2=62 vsync1=30 vsync2=60" > ${INSTALLROOT}/etc/modprobe.d/i810fb.conf || dialog_die
814 niro 2320
815 niro 2342 cat > ${INSTALLROOT}/root/.installrc << CHROOTEOF
816 niro 2320 echo "MODULES=\"${FORMAT_FILESYSTEM} ${DISKMODS} ${OLDATAMODS} ${PATAMODS} ${SATAMODS} ${DRMMODS} ${FBMODS} ${OTHERMODS}\"" > /etc/conf.d/mkinitrd
817     mkinitrd -f /boot/$(readlink /boot/initrd) $(readlink /boot/vmlinuz | sed "s:kernel-::g") > /dev/null
818     exit 0
819     CHROOTEOF
820    
821     ## enters chroot
822 niro 2342 mount -t proc proc ${INSTALLROOT}/proc
823     mount -t sysfs sysfs ${INSTALLROOT}/sys
824     mount -o bind /dev ${INSTALLROOT}/dev
825     chroot ${INSTALLROOT} /bin/bash --rcfile /root/.installrc -i
826     umount ${INSTALLROOT}/proc
827     umount ${INSTALLROOT}/sys
828     umount ${INSTALLROOT}/dev
829     rm ${INSTALLROOT}/root/.installrc
830 niro 2320 }
831    
832     is_uuid_supported()
833     {
834     if [[ -x $(which busybox.mkinitrd &> /dev/null) ]]
835     then
836     # only detect uuids if supported
837     if [[ ! -z $(busybox.mkinitrd | grep blkid) ]]
838     then
839     return 0
840     fi
841     fi
842    
843     return 1
844     }
845    
846     get_uuid()
847     {
848     local UUID
849     local SEC_TYPE
850     local TYPE
851    
852     local dev="$1"
853 niro 2336 [[ -z ${dev} ]] && dialog_die "no dev given"
854 niro 2320
855     # check if given device is already an UUID
856     if [[ ${dev/UUID=/}x != ${dev}x ]]
857     then
858     eval "${dev}"
859     else
860     eval $(busybox.mkinitrd blkid ${dev} | grep "${dev}:" | sed 's/.*:\ //')
861     fi
862     echo "${UUID}"
863     }
864    
865     install_system_settings()
866     {
867     # schreibe fstab
868     if is_uuid_supported
869     then
870 niro 2342 echo -e "UUID=$(get_uuid ${BOOTHDD})\t/boot\t${FORMAT_FILESYSTEM}\tnoatime,noauto\t1 1" > ${INSTALLROOT}/etc/fstab || dialog_die
871     echo -e "UUID=$(get_uuid ${ROOTHDD})\t/\t${FORMAT_FILESYSTEM}\tnoatime\t0 0" >> ${INSTALLROOT}/etc/fstab || dialog_die
872 niro 2320 else
873 niro 2342 echo -e "${BOOTHDD}\t/boot\t${FORMAT_FILESYSTEM}\tnoatime,noauto\t1 1" > ${INSTALLROOT}/etc/fstab || dialog_die
874     echo -e "${ROOTHDD}\t/\t${FORMAT_FILESYSTEM}\tnoatime\t0 0" >> ${INSTALLROOT}/etc/fstab || dialog_die
875 niro 2320 fi
876     # not needed busybox loads all with swapon -a, even if not mentioned in fstab
877 niro 2342 #echo -e "UUID='$(get_uuid ${SWAPHDD})'\tswap\tswap\tpri=1\t0 0" >> ${INSTALLROOT}/etc/fstab || dialog_die
878     echo -e "proc\t/proc\tproc\tdefaults\t0 0" >> ${INSTALLROOT}/etc/fstab || dialog_die
879     echo -e "shm\t/dev/shm\ttmpfs\tdefaults\t0 0" >> ${INSTALLROOT}/etc/fstab || dialog_die
880 niro 2320
881     # install network config skeleton
882 niro 2342 install -m0644 ${INSTALLROOT}/etc/alxconfig-ng/skel/net/net.eth0 ${INSTALLROOT}/etc/conf.d/ || dialog_die
883 niro 2320
884     # intel framebufer quirk
885     if [[ -e /proc/fb ]]
886     then
887     if [[ ! -z $(grep 'inteldrmfb' /proc/fb) ]]
888     then
889     fbdev=$(grep 'inteldrmfb' /proc/fb | sed 's:\([0-9]\).*:\1:')
890     if [[ ${fbdev} != 0 ]]
891     then
892 niro 2342 sed -i "s:^\(SPLASH_DEV=\).*:\1\"/dev/fb${fbdev}\":" ${INSTALLROOT}/etc/splash/splash.conf || dialog_die
893 niro 2320 fi
894     fi
895     fi
896     }
897    
898     install_system_settings_flash()
899     {
900     # schreibe fstab
901     if is_uuid_supported
902     then
903 niro 2342 echo -e "UUID=$(get_uuid ${ROOTHDD})\t/\t${FORMAT_FILESYSTEM}\tnoatime\t0 0" > ${INSTALLROOT}/etc/fstab || dialog_die
904 niro 2320 else
905 niro 2342 echo -e "${ROOTHDD}\t/\t${FORMAT_FILESYSTEM}\tnoatime\t0 0" > ${INSTALLROOT}/etc/fstab || dialog_die
906 niro 2320 fi
907 niro 2342 echo -e "proc\t/proc\tproc\tdefaults\t0 0" >> ${INSTALLROOT}/etc/fstab || dialog_die
908     echo -e "shm\t/dev/shm\ttmpfs\tdefaults\t0 0" >> ${INSTALLROOT}/etc/fstab || dialog_die
909 niro 2320 }
910    
911     install_umount_rootfs()
912     {
913     cd /
914 niro 2342 umount ${INSTALLROOT}/boot || dialog_die
915     umount ${INSTALLROOT} || dialog_die
916 niro 2336 swapoff ${SWAPHDD} || dialog_die
917 niro 2320 }
918    
919     install_umount_rootfs_flash()
920     {
921     cd /
922 niro 2342 umount ${INSTALLROOT} || dialog_die
923 niro 2320 }
924    
925     install_do_reboot()
926     {
927     reboot
928     }
929    
930     #################################################
931     # Install Ablauf Scripte #
932     #################################################
933    
934     run_install_normal()
935     {
936     dialog_hardware_detection
937    
938     dialog_setup_hdd_partitions_manuell
939     dialog_setup_hdd_format
940     setup_hdd_format > /dev/null
941     install_mount_rootfs
942     (install_system_image > /tmp/install.log) 2> /tmp/install_errors.log | dialog_install_meter | dialog_install_system_image
943    
944     dialog_install_settings
945     sleep 1
946     install_system_settings
947     install_initrd_chroot
948    
949     dialog_install_bootsector
950     install_bootsector_chroot
951    
952     install_umount_rootfs
953     dialog_install_successful
954     }
955    
956     run_install_flash()
957     {
958     dialog_hardware_detection
959    
960     dialog_setup_hdd_partitions_manuell_flash
961     dialog_setup_hdd_format
962     setup_hdd_format_flash > /dev/null
963     install_mount_rootfs_flash
964     (install_system_image > /tmp/install.log) 2> /tmp/install_errors.log | dialog_install_meter | dialog_install_system_image
965    
966     dialog_install_settings
967     sleep 1
968     install_system_settings_flash
969     install_initrd_chroot
970    
971     dialog_install_bootsector
972     install_bootsector_chroot
973    
974     install_umount_rootfs_flash
975     dialog_install_successful
976     }
977    
978     run_install_auto()
979     {
980     dialog_hardware_detection
981    
982     dialog_setup_hdd_partitions_auto
983     dialog_setup_hdd_format
984     setup_hdd_format_flash > /dev/null
985     install_mount_rootfs_flash
986     (install_system_image > /tmp/install.log) 2> /tmp/install_errors.log | dialog_install_meter | dialog_install_system_image
987    
988     dialog_install_settings
989     sleep 1
990     install_system_settings_flash
991     install_initrd_chroot
992    
993     dialog_install_bootsector
994     install_bootsector_chroot
995    
996     install_umount_rootfs_flash
997     dialog_install_successful
998     }
999    
1000     dialog_main
1001    
1002     exit 0