Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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