Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6828 - (show annotations) (download)
Thu Jul 23 11:39:57 2015 UTC (8 years, 9 months ago) by niro
File size: 22206 byte(s)
-setup_hdd_format(): honor FORMAT_FILESYSTEM
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 BOOTHDD=""
487 SWAPHDD=""
488 ROOTHDD="${HDD}1"
489 ;;
490 esac
491
492 if [[ ${INSTALL_METHOD} = auto ]]
493 then
494 # run this only if FDISKPARTITIONBELOW256MB is not already 1
495 if [[ ${FDISKPARTIONBELOW256MB} != 1 ]]
496 then
497 if hdd_size_below_256mb ${HDD}
498 then
499 FDISKPARTIONBELOW256MB=1
500 else
501 FDISKPARTIONBELOW256MB=0
502 fi
503 fi
504
505 ## delete disk
506 dd if=/dev/zero of=${HDD} count=1 &> /dev/null || die
507
508 if [[ ${FDISKPARTIONBELOW256MB} = 1 ]]
509 then
510 ## setup one bootable partition
511 #1. n= new disk
512 #2. p= primary disk
513 #3. 1= first partition
514 #4. 2= default sector start // small disk needs more space for grub2 mbr sector
515 #5. ''= defaul sector end
516 #6. a= bootable flag
517 #7. 1= boot flag for partition 1
518 #8. w= write/quit
519 fdisk ${HDD} &> /dev/null << EOF
520 n
521 p
522 1
523 2
524
525 a
526 1
527 w
528 EOF
529 else
530 ## setup one bootable partition
531 #1. n= new disk
532 #2. p= primary disk
533 #3. 1= first partition
534 #4. ''= default sector start
535 #5. ''= defaul sector end
536 #6. a= bootable flag
537 #7. 1= boot flag for partition 1
538 #8. w= write/quit
539 fdisk ${HDD} &> /dev/null << EOF
540 n
541 p
542 1
543
544
545 a
546 1
547 w
548 EOF
549 fi
550 else
551 ## hdds partitionieren manuell
552 cfdisk ${HDD} || die
553 fi
554 }
555
556 setup_hdd_format()
557 {
558 if [[ -n ${SWAPHDD} ]]
559 then
560 mkswap ${SWAPHDD} || die
561 fi
562 if [[ -n ${BOOTHDD} ]]
563 then
564 mkfs.${FORMAT_FILESYSTEM} -q ${BOOTHDD} || die
565 fi
566 if [[ -n ${ROOTHDD} ]]
567 then
568 mkfs.${FORMAT_FILESYSTEM} -q ${ROOTHDD} || die
569 fi
570 }
571
572 install_mount_rootfs()
573 {
574 if [[ -n ${SWAPHDD} ]]
575 then
576 swapon ${SWAPHDD} || die
577 fi
578 if [[ -n ${ROOTHDD} ]]
579 then
580 mount ${ROOTHDD} ${INSTALLPATH} || die
581 fi
582 if [[ -n ${BOOTHDD} ]]
583 then
584 install -d ${INSTALLPATH}/boot || die
585 mount ${BOOTHDD} ${INSTALLPATH}/boot || die
586 fi
587
588 cd ${INSTALLPATH} || die
589 }
590
591 install_system_image()
592 {
593 tar xvjpf ${CDPATH}/system/${CDIMAGENAME} -C ${INSTALLPATH}
594 }
595
596 install_bootsector_chroot()
597 {
598 local my_roothdd
599 local grubconf=${INSTALLPATH}/boot/grub/grub.conf
600 local grub2conf=/boot/grub/grub.cfg
601
602 # check for grub2
603 if [[ -f ${INSTALLPATH}/sbin/grub-mkconfig ]]
604 then
605 # needed by grub-mkconfig on the first run
606 if [[ ! -f ${INSTALLPATH}/boot/grub/video.lst ]]
607 then
608 install -m0644 ${INSTALLPATH}/lib/grub/*/video.lst ${INSTALLPATH}/boot/grub/video.lst || die
609 fi
610
611 # set kernelopts
612 if [[ -f ${INSTALLPATH}/etc/conf.d/grub ]]
613 then
614 sed -i "s:^\(export GRUB_CMDLINE_LINUX_DEFAULT=\).*:\1\"${KERNELOPTS}\":" ${INSTALLPATH}/etc/conf.d/grub || die
615 sed -i "s:^\(export GRUB_GFXPAYLOAD_LINUX=\).*:\1\"${GRUB2GFXPAYLOAD}\":" ${INSTALLPATH}/etc/conf.d/grub || die
616 else
617 echo "export GRUB_CMDLINE_LINUX_DEFAULT=\"${KERNELOPTS}\"" > ${INSTALLPATH}/etc/conf.d/grub || die
618 echo "export GRUB_GFXPAYLOAD_LINUX=\"${GRUB2GFXPAYLOAD}\"" >> ${INSTALLPATH}/etc/conf.d/grub || die
619 fi
620 echo 'grub-mkdevicemap' > ${INSTALLPATH}/root/.installrc || die
621 echo "LC_ALL=C grub-mkconfig -o ${grub2conf} &> /dev/null" >> ${INSTALLPATH}/root/.installrc || die
622 echo "grub-install --no-floppy ${HDD} &> /dev/null" >> ${INSTALLPATH}/root/.installrc || die
623 echo "exit 0" >> ${INSTALLPATH}/root/.installrc || die
624
625 # grub-legacy
626 else
627 ### grubconf schreiben
628 source ${INSTALLPATH}/boot/kernelversion
629
630 #for alx only
631 if [ -e ${INSTALLPATH}/etc/alx_version ]
632 then
633 OLD_ALXVER="${ALXVER}"
634 source ${INSTALLPATH}/etc/alx_version
635 KRNVER="ALX-${ALXVER}"
636 ALXVER="${OLD_ALXVER}"
637 fi
638
639 [[ -z ${KRNVER} ]] && KRNVER="AutoSta_LX"
640 [[ -z ${KRNINITRD} ]] && KRNINITRD="initrd"
641 [[ -z ${KRNIMG} ]] && KRNIMG="vmlinuz"
642
643 # uuid support
644 if is_uuid_supported
645 then
646 my_roothdd="UUID=$(get_uuid ${ROOTHDD})"
647 else
648 my_roothdd="${ROOTHDD}"
649 fi
650
651 : > ${grubconf} || die
652 echo "default 0" >> ${grubconf} || die
653 echo "timeout 3" >> ${grubconf} || die
654 # using current root password
655 echo "password --md5 $(cat ${INSTALLPATH}/etc/shadow | grep root | cut -d: -f2)" >> ${grubconf} || die
656
657 echo >> ${grubconf} || die
658 echo "# normal boot" >> ${grubconf} || die
659 echo "title ${KRNVER}" >> ${grubconf} || die
660 echo "root (hd0,0)" >> ${grubconf} || die
661 echo "kernel /boot/${KRNIMG} root=${my_roothdd} ${KERNELOPTS} ${GRUBLEGACYOPTS}" >> ${grubconf} || die
662 if is_initrd_supported
663 then
664 echo "initrd /boot/${KRNINITRD}" >> ${grubconf} || die
665 fi
666
667 echo >> ${grubconf} || die
668 echo "# admin boot" >> ${grubconf} || die
669 echo "title ${KRNVER} - Re-run hardware-detection" >> ${grubconf} || die
670 echo "lock" >> ${grubconf} || die
671 echo "root (hd0,0)" >> ${grubconf} || die
672 echo "kernel /boot/${KRNIMG} root=${my_roothdd} ${KERNELOPTS} ${GRUBLEGACYOPTS} hardware-auto-detection" >> ${grubconf} || die
673 if is_initrd_supported
674 then
675 echo "initrd /boot/${KRNINITRD}" >> ${grubconf} || die
676 fi
677
678 echo >> ${grubconf} || die
679 echo "title ${KRNVER} - Reset *all* local settings" >> ${grubconf} || die
680 echo "lock" >> ${grubconf} || die
681 echo "root (hd0,0)" >> ${grubconf} || die
682 echo "kernel /boot/${KRNIMG} root=${my_roothdd} ${KERNELOPTS} ${GRUBLEGACYOPTS} alx-reset-settings" >> ${grubconf} || die
683 if is_initrd_supported
684 then
685 echo "initrd /boot/${KRNINITRD}" >> ${grubconf} || die
686 fi
687
688 # write bootsector chrooted (lfs/magellan)
689 cat > ${INSTALLPATH}/root/.installrc << CHROOTEOF
690 /usr/sbin/grub --no-floppy --batch << "EOF" 1> /dev/null 2> /dev/null
691 root (hd0,0)
692 setup (hd0)
693 quit
694 EOF
695 exit 0
696 CHROOTEOF
697 fi
698
699 ## enters chroot
700 mount -t proc proc ${INSTALLPATH}/proc
701 mount -t sysfs sysfs ${INSTALLPATH}/sys
702 mount -o bind /dev ${INSTALLPATH}/dev
703 chroot ${INSTALLPATH} /bin/bash --rcfile /root/.installrc -i
704 umount ${INSTALLPATH}/proc
705 umount ${INSTALLPATH}/sys
706 umount ${INSTALLPATH}/dev
707 rm ${INSTALLPATH}/root/.installrc
708 }
709
710 is_initrd_supported()
711 {
712 # only generate initrds if the cmd exists
713 [[ -x ${INSTALLPATH}/sbin/mkinitrd ]] && return 0
714 return 1
715 }
716
717 install_initrd_chroot()
718 {
719 # only generate initrds if the cmd exists
720 is_initrd_supported || return 0
721
722 DISKMODS="sd_mod"
723 OLDPATAMODS="amd74xx piix sis5513 via82cxxx"
724 PATAMODS="ata_piix pata_amd pata_mpiix pata_oldpiix pata_sis pata_via"
725 SATAMODS="sata_via sata_sis sata_nv"
726 DRMMODS="i915 mga nouveau r128 radeon savage sis tdfx ttm via"
727 OTHERMODS=""
728 case ${SPECIALDEVICE} in
729 zotac_intel|i845) FBMODS=""; DRMMODS="i915" ;;
730 zotac_nvidia) FBMODS=""; DRMMODS="nouveau" ;;
731 rangee) FBMODS="" ;; ## fallback to vesafb, viafb does not run on all CLE266 boards
732 # not working with kms enabled drivers -> segfaults
733 #maxdata) FBMODS="i810fb" ;; ## check for maxdata / i810/ i815 Chipsets and disable KMS and use i810fb frambuffer
734 maxdata) FBMODS="" ;;
735 *) FBMODS="uvesafb" ;;
736 esac
737
738 if [[ ${FORMFACTOR} = laptop ]]
739 then
740 OTHERMODS="acpi-cpufreq cpufreq_ondemand cpufreq_conservative cpufreq_powersave"
741 fi
742
743 # install an appropriate uvesafb.conf
744 install -d ${INSTALLPATH}/etc/modprobe.d || die
745 echo "options uvesafb mode_option=1024x768-32@60 scroll=ywrap" > ${INSTALLPATH}/etc/modprobe.d/uvesafb.conf || die
746
747 # install an appropriate viafb.conf
748 echo "options viafb viafb_mode=1024x768 viafb_refresh=60" > ${INSTALLPATH}/etc/modprobe.d/viafb.conf || die
749
750 # install an appropriate i810fb.conf
751 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
752
753 cat > ${INSTALLPATH}/root/.installrc << CHROOTEOF
754 echo "MODULES=\"${FORMAT_FILESYSTEM} ${DISKMODS} ${OLDATAMODS} ${PATAMODS} ${SATAMODS} ${DRMMODS} ${FBMODS} ${OTHERMODS}\"" > /etc/conf.d/mkinitrd
755 mkinitrd -f /boot/$(readlink /boot/initrd) $(readlink /boot/vmlinuz | sed "s:kernel-::g") > /dev/null
756 exit 0
757 CHROOTEOF
758
759 ## enters chroot
760 mount -t proc proc ${INSTALLPATH}/proc
761 mount -t sysfs sysfs ${INSTALLPATH}/sys
762 mount -o bind /dev ${INSTALLPATH}/dev
763 chroot ${INSTALLPATH} /bin/bash --rcfile /root/.installrc -i
764 umount ${INSTALLPATH}/proc
765 umount ${INSTALLPATH}/sys
766 umount ${INSTALLPATH}/dev
767 rm ${INSTALLPATH}/root/.installrc
768 }
769
770 is_uuid_supported()
771 {
772 if [[ -x $(which busybox.mkinitrd &> /dev/null) ]]
773 then
774 # only detect uuids if supported
775 if [[ ! -z $(busybox.mkinitrd | grep blkid) ]]
776 then
777 return 0
778 fi
779 fi
780
781 return 1
782 }
783
784 get_uuid()
785 {
786 local UUID
787 local SEC_TYPE
788 local TYPE
789
790 local dev="$1"
791 [[ -z ${dev} ]] && die "no dev given"
792
793 # check if given device is already an UUID
794 if [[ ${dev/UUID=/}x != ${dev}x ]]
795 then
796 eval "${dev}"
797 else
798 eval $(busybox.mkinitrd blkid ${dev} | grep "${dev}:" | sed 's/.*:\ //')
799 fi
800 echo "${UUID}"
801 }
802
803 install_system_settings()
804 {
805 # schreibe fstab
806 if is_uuid_supported
807 then
808 if [[ -n ${BOOTHDD} ]]
809 then
810 echo -e "UUID=$(get_uuid ${BOOTHDD})\t/boot\t${FORMAT_FILESYSTEM}\tnoatime,noauto\t1 1" > ${INSTALLPATH}/etc/fstab || die
811 fi
812 if [[ -n ${ROOTHDD} ]]
813 then
814 echo -e "UUID=$(get_uuid ${ROOTHDD})\t/\t${FORMAT_FILESYSTEM}\tnoatime\t0 0" >> ${INSTALLPATH}/etc/fstab || die
815 fi
816 else
817 if [[ -n ${BOOTHDD} ]]
818 then
819 echo -e "${BOOTHDD}\t/boot\t${FORMAT_FILESYSTEM}\tnoatime,noauto\t1 1" > ${INSTALLPATH}/etc/fstab || die
820 fi
821 if [[ -n ${ROOTHDD} ]]
822 then
823 echo -e "${ROOTHDD}\t/\t${FORMAT_FILESYSTEM}\tnoatime\t0 0" >> ${INSTALLPATH}/etc/fstab || die
824 fi
825 fi
826 # not needed busybox loads all with swapon -a, even if not mentioned in fstab
827 #echo -e "UUID='$(get_uuid ${SWAPHDD})'\tswap\tswap\tpri=1\t0 0" >> ${INSTALLPATH}/etc/fstab || die
828 echo -e "proc\t/proc\tproc\tdefaults\t0 0" >> ${INSTALLPATH}/etc/fstab || die
829 echo -e "shm\t/dev/shm\ttmpfs\tdefaults\t0 0" >> ${INSTALLPATH}/etc/fstab || die
830
831 # install network config skeleton
832 install -m0644 ${INSTALLPATH}/etc/alxconfig-ng/skel/net/net.eth0 ${INSTALLPATH}/etc/conf.d/ || die
833
834 # intel framebufer quirk
835 if [[ -e /proc/fb ]]
836 then
837 if [[ ! -z $(grep 'inteldrmfb' /proc/fb) ]]
838 then
839 fbdev=$(grep 'inteldrmfb' /proc/fb | sed 's:\([0-9]\).*:\1:')
840 if [[ ${fbdev} != 0 ]]
841 then
842 sed -i "s:^\(SPLASH_DEV=\).*:\1\"/dev/fb${fbdev}\":" ${INSTALLPATH}/etc/splash/splash.conf || die
843 fi
844 fi
845 fi
846 }
847
848 install_umount_rootfs()
849 {
850 cd /
851 if [[ -n ${BOOTHDD} ]]
852 then
853 umount ${INSTALLPATH}/boot || die
854 fi
855 if [[ -n ${ROOTHDD} ]]
856 then
857 umount ${INSTALLPATH} || die
858 fi
859 if [[ -n ${SWAPHDD} ]]
860 then
861 swapoff ${SWAPHDD} || die
862 fi
863 }
864
865 install_do_reboot()
866 {
867 reboot
868 }
869
870 #################################################
871 # Install Main Scripts #
872 #################################################
873
874 run_install()
875 {
876 local method="$1"
877
878 # setup install environment
879 export KERNELOPTS="${DEFAULT_KERNELOPTS}"
880 export GRUBLEGACYOPTS="${GRUBLEGACYOPTS}"
881 export GRUB2OPTS="${GRUB2OPTS}"
882 export GRUB2GFXPAYLOAD="${DEFAULT_GRUB2GFXPAYLOAD}"
883 export FORMFACTOR="${DEFAULT_FORMFACTOR}"
884 export FORMAT_FILESYSTEM="${DEFAULT_FORMAT_FILESYSTEM}"
885
886 case "${method}" in
887 auto)
888 export INSTALL_METHOD="${method}"
889 ;;
890 normal)
891 export INSTALL_METHOD="${method}"
892 ;;
893 single)
894 export INSTALL_METHOD="${method}"
895 ;;
896 *)
897 echo "Unknown install method '${method}', aborting."
898 exit 1
899 ;;
900 esac
901
902 dialog_hardware_detection
903
904 dialog_setup_hdd_partitions
905 dialog_setup_hdd_format
906 setup_hdd_format > /dev/null
907 install_mount_rootfs
908 (install_system_image > /tmp/install.log) 2> /tmp/install_errors.log | dialog_install_meter | dialog_install_system_image
909
910 dialog_install_settings
911 sleep 1
912 install_system_settings
913 install_initrd_chroot
914
915 dialog_install_bootsector
916 install_bootsector_chroot
917
918 install_umount_rootfs
919 dialog_install_successful
920 }
921
922 dialog_main
923
924 exit 0