Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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