Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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