Magellan Linux

Contents of /trunk/installer-simple/bin/installer.sh.in

Parent Directory Parent Directory | Revision Log Revision Log


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