Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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