Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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