Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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