Magellan Linux

Contents of /alx-src/trunk/alxinstall-ng/bin/alxinstall-ng.sh.in

Parent Directory Parent Directory | Revision Log Revision Log


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