Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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