Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2397 - (show annotations) (download)
Tue Jan 7 13:03:58 2014 UTC (10 years, 3 months ago) by niro
File size: 24661 byte(s)
-moved die() to top - it should be the first function as it gets called by the includes
1 #!/bin/bash
2 # $Id$
3 #
4 # Simple Installation Script
5 # merged from alxinstall-ng and mcore-installer
6 #
7 # Niels Rogalla <niro@magellan-linux.de>
8 #
9
10 # ignore the environment
11 LC_ALL=C
12 # include dir
13 INSTALLER_LIBDIR="%LIBDIR%"
14
15 # TOTALLINES=linecount of ${CDIMAGENAME}-tarball -1 !
16 # -> now in images.conf
17 CURRENTLINE=0
18
19 die()
20 {
21 echo "Error: $@"
22 exit 1
23 }
24
25 # 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
33 # TOTALLINES=linecount of ${CDIMAGENAME}-tarball -1 !
34 # -> now in images.conf
35 CDIMAGENAME=""
36 TOTALLINES=""
37 CURRENTLINE=0
38 if [ -e /mnt/cdrom/system/images.conf ]
39 then
40 source /mnt/cdrom/system/images.conf
41 # 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 else
45 die "/mnt/cdrom/system/images.conf not found"
46 fi
47
48 # includes
49 source ${INSTALLER_LIBDIR}/functions/hwdetection.sh
50
51 ### System/Config Version
52 VERSION="%VERSIONTAG%"
53 TITLE="${DEFAULT_TITLE} - ${VERSION}"
54
55 CDROOT="${DEFAULT_CDROOT}"
56 INSTALLROOT="${DEFAULT_INSTALLROOT}"
57
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 FORMAT_FILESYSTEM="${DEFAULT_FILESYSTEM}"
74
75 #################################################
76 # DIALOG BOXEN #
77 #################################################
78
79 dialog_die()
80 {
81 ERROR="$1"
82 RETVAL="$?"
83 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 "2") run_install_normal ;;
172 "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 $(type -P mktemp) ]
184 then
185 hwtmp="$(mktemp)"
186 else
187 hwtmp="/tmp/hwtmp.sh"
188 fi
189
190 run_hardware_detection_disks
191
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 if [[ ! -z ${ALL_DISKS} ]]
201 then
202 for i in ${ALL_DISKS}
203 do
204 echo " \\Z3${i}\\Zn\n \\" >> ${hwtmp}
205 done
206 fi
207
208 if [[ ! -z ${ALL_CDROMS} ]]
209 then
210 echo " \n \\" >> ${hwtmp}
211 echo " CDROM Laufwerke:\n \\" >> ${hwtmp}
212 for i in ${ALL_CDROMS}
213 do
214 echo " \\Z3${i}\\Zn\n \\" >> ${hwtmp}
215 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 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 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 "1") dialog_setup_system_menu ;;
461 "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 [[ -z ${hdd} ]] && dialog_die "Error: get_hdd_size() no \$hdd given!"
535
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 dd if=/dev/zero of=${HDD} count=1 &> /dev/null || dialog_die
564
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 cfdisk ${HDD} || dialog_die
617 }
618
619 setup_hdd_partitions_manuell_flash()
620 {
621 ROOTHDD="${HDD}1"
622
623 ## hdds partitionieren manuell
624 cfdisk ${HDD} || dialog_die
625 }
626
627 setup_hdd_format()
628 {
629 mkswap ${SWAPHDD} || dialog_die
630 mke2fs -j -q ${BOOTHDD} || dialog_die
631 mke2fs -j -q ${ROOTHDD} || dialog_die
632 }
633
634 setup_hdd_format_flash()
635 {
636 mke2fs -j -q ${ROOTHDD} || dialog_die
637 }
638
639 install_mount_rootfs()
640 {
641 swapon ${SWAPHDD} || dialog_die
642 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 }
647
648 install_mount_rootfs_flash()
649 {
650 mount ${ROOTHDD} ${INSTALLROOT} || dialog_die
651 install -d ${INSTALLROOT}/boot || dialog_die
652 cd ${INSTALLROOT} || dialog_die
653 }
654
655 install_system_image()
656 {
657 tar xvjpf ${CDROOT}/system/${CDIMAGENAME} -C ${INSTALLROOT}
658 }
659
660 install_bootsector_chroot()
661 {
662 local my_roothdd
663 local grubconf=${INSTALLROOT}/boot/grub/grub.conf
664 local grub2conf=/boot/grub/grub.cfg
665
666 # check for grub2
667 if [[ -f ${INSTALLROOT}/sbin/grub-mkconfig ]]
668 then
669 # needed by grub-mkconfig on the first run
670 if [[ ! -f ${INSTALLROOT}/boot/grub/video.lst ]]
671 then
672 install -m0644 ${INSTALLROOT}/lib/grub/*/video.lst ${INSTALLROOT}/boot/grub/video.lst || dialog_die
673 fi
674
675 # set kernelopts
676 if [[ -f ${INSTALLROOT}/etc/conf.d/grub ]]
677 then
678 sed -i "s:^\(export GRUB_CMDLINE_LINUX_DEFAULT=\).*:\1\"${KERNELOPTS}\":" ${INSTALLROOT}/etc/conf.d/grub || dialog_die
679 else
680 echo "export GRUB_CMDLINE_LINUX_DEFAULT=\"${KERNELOPTS}\"" > ${INSTALLROOT}/etc/conf.d/grub || dialog_die
681 fi
682 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
687 # grub-legacy
688 else
689 ### grubconf schreiben
690 source ${INSTALLROOT}/boot/kernelversion
691
692 #for alx only
693 if [ -e ${INSTALLROOT}/etc/alx_version ]
694 then
695 OLD_ALXVER="${ALXVER}"
696 source ${INSTALLROOT}/etc/alx_version
697 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 : > ${grubconf} || dialog_die
714 echo "default 0" >> ${grubconf} || dialog_die
715 echo "timeout 3" >> ${grubconf} || dialog_die
716 # using current root password
717 echo "password --md5 $(cat ${INSTALLROOT}/etc/shadow | grep root | cut -d: -f2)" >> ${grubconf} || dialog_die
718
719 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 if is_initrd_supported
725 then
726 echo "initrd /boot/${KRNINITRD}" >> ${grubconf} || dialog_die
727 fi
728
729 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 if is_initrd_supported
736 then
737 echo "initrd /boot/${KRNINITRD}" >> ${grubconf} || dialog_die
738 fi
739
740 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 if is_initrd_supported
746 then
747 echo "initrd /boot/${KRNINITRD}" >> ${grubconf} || dialog_die
748 fi
749
750 # bootsector schreiben chrooted schreiben (lfs/magellan)
751 cat > ${INSTALLROOT}/root/.installrc << CHROOTEOF
752 /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 ## enter chroot
762 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 }
771
772 is_initrd_supported()
773 {
774 # only generate initrds if the cmd exists
775 [[ -x ${INSTALLROOT}/sbin/mkinitrd ]] && return 0
776 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 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
809 # install an appropriate viafb.conf
810 echo "options viafb viafb_mode=1024x768 viafb_refresh=60" > ${INSTALLROOT}/etc/modprobe.d/viafb.conf || dialog_die
811
812 # install an appropriate i810fb.conf
813 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
815 cat > ${INSTALLROOT}/root/.installrc << CHROOTEOF
816 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 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 }
831
832 is_uuid_supported()
833 {
834 if [[ -x $(type -P busybox.mkinitrd) ]]
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 [[ -z ${dev} ]] && dialog_die "no dev given"
854
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 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 else
873 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 fi
876 # not needed busybox loads all with swapon -a, even if not mentioned in fstab
877 #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
881 # install network config skeleton
882 install -m0644 ${INSTALLROOT}/etc/alxconfig-ng/skel/net/net.eth0 ${INSTALLROOT}/etc/conf.d/ || dialog_die
883
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 sed -i "s:^\(SPLASH_DEV=\).*:\1\"/dev/fb${fbdev}\":" ${INSTALLROOT}/etc/splash/splash.conf || dialog_die
893 fi
894 fi
895 fi
896 }
897
898 install_system_settings_flash()
899 {
900 # schreibe fstab
901 if is_uuid_supported
902 then
903 echo -e "UUID=$(get_uuid ${ROOTHDD})\t/\t${FORMAT_FILESYSTEM}\tnoatime\t0 0" > ${INSTALLROOT}/etc/fstab || dialog_die
904 else
905 echo -e "${ROOTHDD}\t/\t${FORMAT_FILESYSTEM}\tnoatime\t0 0" > ${INSTALLROOT}/etc/fstab || dialog_die
906 fi
907 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 }
910
911 install_umount_rootfs()
912 {
913 cd /
914 umount ${INSTALLROOT}/boot || dialog_die
915 umount ${INSTALLROOT} || dialog_die
916 swapoff ${SWAPHDD} || dialog_die
917 }
918
919 install_umount_rootfs_flash()
920 {
921 cd /
922 umount ${INSTALLROOT} || dialog_die
923 }
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