Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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