Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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