Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2891 - (show annotations) (download)
Fri Jul 31 11:13:02 2015 UTC (8 years, 8 months ago) by niro
File size: 14910 byte(s)
-variable INSTALL_METHOD was not initialized
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 # setup locales
11 TEXTDOMAIN=installer
12
13 # include dir
14 INSTALLER_LIBDIR="%LIBDIR%"
15
16 # TOTALLINES=linecount of ${CDIMAGENAME}-tarball -1 !
17 # -> now in images.conf
18 CURRENTLINE=0
19
20 die()
21 {
22 echo "Error: $@"
23 exit 1
24 }
25
26 # load common includes
27 for inc in %SYSCONFDIR%/installer.conf \
28 ${INSTALLER_LIBDIR}/functions/common.sh \
29 ${INSTALLER_LIBDIR}/functions/common-dialogs.sh \
30 ${INSTALLER_LIBDIR}/functions/hwdetection.sh \
31 ${INSTALLER_LIBDIR}/functions/bootloader.sh \
32 ${INSTALLER_LIBDIR}/functions/initrd-tools.sh \
33 ${INSTALLER_LIBDIR}/functions/installer-dialogs.sh
34 do
35 if [ -e ${inc} ]
36 then
37 source "${inc}"
38 else
39 die "'${inc}' not found"
40 fi
41 done
42
43 ### System/Config Version
44 VERSION="%VERSIONTAG%"
45 TITLE="${DEFAULT_TITLE} - ${VERSION}"
46
47 # initialize global variables so they are exportable
48 # some sane defaults
49 INSTALL_METHOD=""
50 LIVEROOT="${DEFAULT_LIVEROOT}"
51 IMAGEROOT="${DEFAULT_IMAGEROOT}"
52 INSTALLROOT="${DEFAULT_INSTALLROOT}"
53 KERNELPKG="${DEFAULT_KERNELPKG}"
54 KERNELOPTS="${DEFAULT_KERNELOPTS}"
55 GRUBLEGACYOPTS=""
56 GRUB2OPTS=""
57 FDISKPARTIONBELOW256MB=0
58 SPECIALDEVICE=""
59 FORMFACTOR="${DEFAULT_FORMFACTOR}"
60 FORMAT_FILESYSTEM="${DEFAULT_FILESYSTEM}"
61 FLASHDISK=0
62
63 # TOTALLINES=linecount of ${CDIMAGENAME}-tarball -1 !
64 # -> now in images.conf
65 CDIMAGENAME=""
66 TOTALLINES=""
67 CURRENTLINE=0
68 if [ -e ${IMAGEROOT}/images.conf ]
69 then
70 source ${IMAGEROOT}/images.conf
71 # check if all required variables are set
72 [[ -z ${CDIMAGENAME} ]] && die "CDIMAGENAME is empty in ${IMAGEROOT}/images.conf"
73 [[ -z ${TOTALLINES} ]] && die "TOTALLINES is empty in ${IMAGEROOT}/images.conf"
74 else
75 die "${IMAGEROOT}/images.conf not found"
76 fi
77
78 ### helper scripts ###
79
80 trap_exit()
81 {
82 is_mounted --location "${INSTALLROOT}/dev" && umount ${INSTALLROOT}/dev
83 is_mounted --location "${INSTALLROOT}/proc" && umount ${INSTALLROOT}/proc
84 is_mounted --location "${INSTALLROOT}/sys" && umount ${INSTALLROOT}/sys
85 is_mounted --location "${INSTALLROOT}/boot" && umount ${INSTALLROOT}/boot
86 is_mounted --location "${INSTALLROOT}" && umount ${INSTALLROOT}
87 [[ -n ${SWAPHDD} ]] && swapoff ${SWAPHDD}
88
89 echo $"Installation aborted."
90 exit 1
91 }
92
93 install_meter()
94 {
95 while [[ ${CURRENTLINE} != ${TOTALLINES} ]]
96 do
97 CURRENTLINE=$(grep -c . /tmp/install.log)
98 PERCENT=$(( ${CURRENTLINE} * 100 / ${TOTALLINES}))
99 echo ${PERCENT}
100 sleep 1
101 done
102 rm -f /tmp/install.log
103 return 0
104 }
105
106 mount_rootfs()
107 {
108 local retval
109
110 if [[ -n ${SWAPHDD} ]]
111 then
112 swapon ${SWAPHDD} || dialog_die $"Could not enable swap space '${SWAPHDD}'"
113 fi
114
115 if [[ -n ${ROOTHDD} ]]
116 then
117 if is_mounted --location "${INSTALLROOT}"
118 then
119 echo $"${INSTALLROOT} already mounted" >&2
120 else
121 mount -t "${FORMAT_FILESYSTEM_ROOTHDD}" "${ROOTHDD}" "${INSTALLROOT}" || dialog_die $"Could not mount rootfs - drive '${ROOTHDD}' -> '${INSTALLROOT}'"
122 fi
123 fi
124
125 [[ -d ${INSTALLROOT}/boot ]] || install -d ${INSTALLROOT}/boot
126
127 if [[ -n ${BOOTHDD} ]]
128 then
129 if is_mounted --location "${INSTALLROOT}"/boot
130 then
131 echo $"${INSTALLROOT}/boot already mounted" >&2
132 else
133 mount -t "${FORMAT_FILESYSTEM_BOOTHDD}" "${BOOTHDD}" "${INSTALLROOT}"/boot || dialog_die $"Could not mount bootfs - drive '${BOOTHDD}' -> '${INSTALLROOT}/boot'"
134 fi
135 fi
136 }
137
138 umount_rootfs()
139 {
140 is_mounted --location ${INSTALLROOT}/boot && umount ${INSTALLROOT}/boot
141 is_mounted --location ${INSTALLROOT} && umount ${INSTALLROOT}
142
143 if [[ -n ${SWAPHDD} ]]
144 then
145 swapoff ${SWAPHDD} || die
146 fi
147 }
148
149 install_do_reboot()
150 {
151 reboot
152 }
153
154 run_hardware_detection()
155 {
156 local hwinfo
157
158 hwinfo="$(hwinfo --bios --storage --pci --gfxcard --sys)"
159
160 # check for special devices/clients:
161 # if zotac a zotac and the disk is a removeable device, then add rootdelay to kernelcmd
162 local removable=0
163 if [[ ! -z $(echo "${hwinfo}" | grep -i zotac) ]]
164 then
165 for i in /sys/block/[hs]d*/removable
166 do
167 if [[ $(< ${i}) = 1 ]]
168 then
169 removable=1
170 # we assume that all removable disks are flash disks on a zotac
171 export FLASHDISK=1
172 fi
173 done
174 # smartcard = udevadm info -n /dev/sda -a | grep -i 'configuration.*card'
175
176 # only add this for grub legacy, grub2 detect these settings on its own
177 export GRUBLEGACYOPTS="rootdelay=8"
178 # there are to zotac types in the wild, nvidia based gfx and intel
179 if [[ ! -z $(echo "${hwinfo}" | grep -i nouveau) ]]
180 then
181 export SPECIALDEVICE="zotac_nvidia"
182 else
183 export SPECIALDEVICE="zotac_intel"
184 fi
185 fi
186
187 # check for special devices/clients:
188 # if a rangee and disk ist smaller then 256mb move partion one block further ahead
189 if [[ ! -z $(echo "${hwinfo}" | grep -i CLE266) ]]
190 then
191 # for a rangee always define partion startblock +1
192 export FDISKPARTIONBELOW256MB="1"
193 export SPECIALDEVICE="rangee"
194 export GRUBLEGACYOPTS=""
195 fi
196
197 # check for special devices/clients:
198 # check for maxdata / i810/ i815 Chipsets and disable KMS and use i810fb frambuffer
199 if [[ ! -z $(echo "${hwinfo}" | grep -i i810) ]] || [[ ! -z $(echo "${hwinfo}" | grep -i i815) ]]
200 then
201 export SPECIALDEVICE="maxdata"
202 export GRUBLEGACYOPTS=""
203 fi
204
205 # check for special devices/clients:
206 # check for laptops and activate cpufreq scaling
207 if [[ $(echo "${hwinfo}" | grep 'Formfactor:' | sed 's:.*Formfactor\:\ \"\(.*\)\":\1:') = laptop ]]
208 then
209 export FORMFACTOR="laptop"
210 export KERNELOPTS="${KERNELOPTS} cpufreq.governor=ondemand"
211 fi
212 }
213
214 run_hardware_detection_disks()
215 {
216 local bootdev
217
218 # all disks but exclude ramdisks
219 export ALL_DISKS=$(get_hwinfo disk | sed '/\/dev\/ram[0-9].*/d')
220 # remove the boot device from ALL_DISKS if it was an usbstick
221 if [[ $(grep '[[:space:]]${LIVEROOT}[[:space:]]' /proc/mounts | cut -d' ' -f3) != iso9660 ]]
222 then
223 bootdev=$(grep "[[:space:]]${LIVEROOT}[[:space:]]" /proc/mounts | cut -d' ' -f1 | sed 's:[0-9]::g')
224 export ALL_DISKS=$(echo "${ALL_DISKS}" | grep -v "${bootdev}")
225 fi
226 export ALL_CDROMS="$(get_hwinfo cdrom)"
227 }
228
229 setup_hdd_partitions()
230 {
231 # sanity check - should not happen
232 if is_mounted --device "${ROOTHDD}"
233 then
234 echo "partition: device ${ROOTHDD} is already mounted, umount it" >&2
235 umount "${ROOTHDD}"
236 fi
237 if [[ -n ${BOOTHDD} ]]
238 then
239 if is_mounted --device "${BOOTHDD}"
240 then
241 echo "partition: device ${BOOTHDD} is already mounted, umount it" >&2
242 umount "${BOOTHDD}"
243 fi
244 fi
245
246 if [[ ${INSTALL_METHOD} = auto ]]
247 then
248 # run this only if FDISKPARTITIONBELOW256MB is not already 1
249 if [[ ${FDISKPARTIONBELOW256MB} != 1 ]]
250 then
251 if device_minimum_size "${HDD}" 256
252 then
253 FDISKPARTIONBELOW256MB=1
254 else
255 FDISKPARTIONBELOW256MB=0
256 fi
257 fi
258
259 ## delete disk
260 dd if=/dev/zero of=${HDD} count=1 &> /dev/null || dialog_die
261
262 if [[ ${FLASHDISK} = 1 ]]
263 then
264 if [[ ${FDISKPARTIONBELOW256MB} = 1 ]]
265 then
266 ## setup one bootable partition
267 # 1. n= new disk
268 # 2. p= primary disk
269 # 3. 1= first partition
270 # 4. 2= default sector start // small disk needs more space for grub2 mbr sector
271 # 5. ''= defaul sector end
272 # 6. a= bootable flag
273 # 7. 1= boot flag for partition 1
274 # 8. n= new disk
275 #10. p= primary disk
276 #11. 2= second partition
277 #12. ''= default sector start
278 #13. ''= defaul sector end
279 #14. w= write/quit
280 fdisk ${HDD} &> /dev/null << EOF
281 n
282 p
283 1
284 2
285 +50M
286 a
287 1
288 n
289 p
290 2
291
292
293 w
294 EOF
295 else
296 ## setup one bootable partition
297 # 1. n= new disk
298 # 2. p= primary disk
299 # 3. 1= first partition
300 # 4. ''= default sector start
301 # 5. ''= defaul sector end
302 # 6. a= bootable flag
303 # 7. 1= boot flag for partition 1
304 # 8. n= new disk
305 #10. p= primary disk
306 #11. 2= second partition
307 #12. ''= default sector start
308 #13. ''= defaul sector end
309 #14. w= write/quit
310 fdisk ${HDD} &> /dev/null << EOF
311 n
312 p
313 1
314
315 +50M
316 a
317 1
318 n
319 p
320 2
321
322
323 w
324 EOF
325 fi
326 else
327 if [[ ${FDISKPARTIONBELOW256MB} = 1 ]]
328 then
329 ## setup one bootable partition
330 #1. n= new disk
331 #2. p= primary disk
332 #3. 1= first partition
333 #4. 2= default sector start // small disk needs more space for grub2 mbr sector
334 #5. ''= defaul sector end
335 #6. a= bootable flag
336 #7. 1= boot flag for partition 1
337 #8. w= write/quit
338 fdisk ${HDD} &> /dev/null << EOF
339 n
340 p
341 1
342 2
343
344 a
345 1
346 w
347 EOF
348 else
349 ## setup one bootable partition
350 #1. n= new disk
351 #2. p= primary disk
352 #3. 1= first partition
353 #4. ''= default sector start
354 #5. ''= defaul sector end
355 #6. a= bootable flag
356 #7. 1= boot flag for partition 1
357 #8. w= write/quit
358 fdisk ${HDD} &> /dev/null << EOF
359 n
360 p
361 1
362
363
364 a
365 1
366 w
367 EOF
368 fi
369 fi
370 else
371 cfdisk ${HDD} || dialog_die
372 fi
373 }
374
375 setup_hdd_format()
376 {
377 install -d /tmp
378 :> /tmp/format.log
379
380 if [[ -n ${SWAPHDD} ]]
381 then
382 # sanity check - should not happen
383 if is_mounted --device "${SWAPHDD}"
384 then
385 echo "format: device ${SWAPHDD} is already mounted, umount it" >&2
386 umount "${SWAPHDD}"
387 fi
388 mkswap ${SWAPHDD} || die
389 fi
390
391 if [[ -n ${BOOTHDD} ]]
392 then
393 # sanity check - should not happen
394 if is_mounted --device "${BOOTHDD}"
395 then
396 echo "format: device ${BOOTHDD} is already mounted, umount it" >&2
397 umount "${BOOTHDD}"
398 fi
399
400 mkfs."${FORMAT_FILESYSTEM_BOOTHDD}" "${BOOTHDD}" &>> /tmp/format.log || dialog_die
401 fi
402
403 if [[ -n ${ROOTHDD} ]]
404 then
405 # sanity check - should not happen
406 if is_mounted --device "${ROOTHDD}"
407 then
408 echo "format: device ${ROOTHDD} is already mounted, umount it" >&2
409 umount "${ROOTHDD}"
410 fi
411
412 mkfs."${FORMAT_FILESYSTEM_ROOTHDD}" "${ROOTHDD}" &>> /tmp/format.log || dialog_die
413 fi
414 }
415
416 install_system_image()
417 {
418 pushd ${INSTALLROOT} > /dev/null
419 tar xvjpf ${IMAGEROOT}/${CDIMAGENAME} -C ${INSTALLROOT}
420 popd > /dev/null
421 }
422
423 install_system_settings()
424 {
425 local CONFIG
426
427 # write fstab
428 CONFIG="${INSTALLROOT}/etc/fstab"
429 clearconfig
430 if [[ -n ${BOOTHDD} ]]
431 then
432 addconfig -e "UUID=$(get_uuid ${BOOTHDD})\t/\t${FORMAT_FILESYSTEM_BOOTHDD}\tnoatime\t1 1"
433 fi
434 if [[ -n ${ROOTHDD} ]]
435 then
436 addconfig -e "UUID=$(get_uuid ${ROOTHDD})\t/\t${FORMAT_FILESYSTEM_ROOTHDD}\tnoatime\t0 0"
437 fi
438 if [[ -n ${SWAPHDD} ]]
439 then
440 addconfig -e "UUID='$(get_uuid ${SWAPHDD})'\tswap\tswap\tpri=1\t0 0"
441 fi
442 addconfig -e "proc\t/proc\tproc\tdefaults\t0 0"
443 addconfig -e "shm\t/dev/shm\ttmpfs\tdefaults\t0 0"
444
445 # install network config skeleton
446 CONFIG="${INSTALLROOT}/etc/conf.d/net.eth0"
447 clearconfig
448 addconfig 'ONBOOT="yes"'
449 addconfig 'NETWORKING="dhcp"'
450
451 # intel framebuffer quirk
452 CONFIG="${INSTALLROOT}/etc/splash/splash.conf"
453 if [ -e ${CONFIG} ] && [ -e /proc/fb ]
454 then
455 if [[ ! -z $(grep 'inteldrmfb' /proc/fb) ]]
456 then
457 fbdev=$(grep 'inteldrmfb' /proc/fb | sed 's:\([0-9]\).*:\1:')
458 [[ ${fbdev} != 0 ]] && sed -i "s:^\(SPLASH_DEV=\).*:\1\"/dev/fb${fbdev}\":" ${CONFIG} || dialog_die
459 fi
460 fi
461 }
462
463
464 ### installer dialogs ###
465
466 dialog_die()
467 {
468 ERROR="$1"
469 RETVAL="$?"
470 dialog_install_failure
471 exit 1
472 }
473
474 dialog_warning()
475 {
476 local retval
477
478 yesnobox $"\Z1 !!! Warning !!! \Zn\n\n\This harddrive will be irreversibly erased.\n\n\Do you want to continue ?"
479 retval=$?
480 if [[ ${retval} -eq 1 ]]
481 then
482 clear
483 echo $"The process was aborted."
484 exit 1
485 fi
486 }
487
488
489 ### installer tasks ###
490
491 task_setup_system_menu()
492 {
493 local mode
494 local retval
495
496 mode="$(dialog_setup_system_menu)"
497 retval=$?
498 [[ ${retval} -eq 1 ]] && return 1
499 if [[ ${retval} -eq 0 ]]
500 then
501 case "${mode}" in
502 "1") run_install auto ;;
503 "2") run_install normal ;;
504 "") task_setup_system_menu;;
505 esac
506 fi
507 }
508
509 task_hardware_detection()
510 {
511 local message
512
513 run_hardware_detection_disks
514
515 message+=$"Harddrives:\n"
516
517 if [[ ! -z ${ALL_DISKS} ]]
518 then
519 for i in ${ALL_DISKS}
520 do
521 message+="\Z3${i}\Zn "
522 done
523 message+="\n"
524 fi
525
526 if [[ ! -z ${ALL_CDROMS} ]]
527 then
528 message+="\n"
529 message+=$"Optical disk drives:\n"
530 for i in ${ALL_CDROMS}
531 do
532 message+="\Z3${i}\Zn"
533 done
534 message+="\n"
535 fi
536
537 # other devices
538 run_hardware_detection
539 case "${SPECIALDEVICE}" in
540 zotac*) message+=$"\n\Z2Zotac device detected.\Zn" ;;
541 rangee) message+=$"\n\Z2Rangee device detected.\Zn" ;;
542 maxdata) message+=$"\n\Z2Maxdata device detected.\Zn" ;;
543 *) message+=$"\n\ZnCommon device detected.\Zn" ;;
544 esac
545 if [[ ${FORMFACTOR} = laptop ]]
546 then
547 message+=$"\n\ZnFormfactor Laptop, activating 'ondemand' powersaving mode.\Zn"
548 fi
549 if [[ ${FLASHDISK} = 1 ]]
550 then
551 message+=$"\n\ZnFlash memory detected.\Zn"
552 message+=$"\n\ZnF2FS will be used as default filesystem withn the auto installation mode.\Zn"
553 fi
554
555 messagebox -y 12 -h $"Detected hardware:" "${message}"
556 }
557
558 task_setup_hdd_partitions()
559 {
560 local i
561 local retval
562
563 if [[ -z ${ALL_DISKS} ]]
564 then
565 dialog_no_harddrive_found
566 exit 1
567 else
568 HDD=$(dialog_select_target_harddrive)
569 retval=$?
570 [[ ${retval} -eq 1 ]] && return 1
571 if [[ ${retval} -eq 0 ]]
572 then
573 dialog_setup_hdd_info
574 setup_hdd_partitions
575 fi
576 fi
577 }
578
579 task_main()
580 {
581 local method=0
582 local retval
583
584 while [[ ${method} -le 2 ]]
585 do
586 method=$(dialog_main)
587 retval=$?
588 [[ ${retval} -eq 1 ]] && exit 1
589 if [[ ${retval} -eq 0 ]]
590 then
591 case ${method} in
592 "1") task_setup_system_menu ;;
593 "2") task_hardware_detection ;;
594 "3") install_do_reboot ;;
595 "4") /bin/bash --login -i ;;
596 esac
597 fi
598 done
599 }
600
601 run_install()
602 {
603 local method="$1"
604
605 task_hardware_detection
606
607 case "${method}" in
608 auto)
609 if [[ ${FLASHDISK} = 1 ]]
610 then
611 export BOOTHDD="${HDD}1"
612 export SWAPHDD=""
613 export ROOTHDD="${HDD}2"
614 export FORMAT_FILESYSTEM_BOOTHDD="f2fs"
615 export FORMAT_FILESYSTEM_ROOTHDD="ext2"
616 else
617 export BOOTHDD=""
618 export SWAPHDD=""
619 export ROOTHDD="${HDD}1"
620 export FORMAT_FILESYSTEM_BOOTHDD=""
621 export FORMAT_FILESYSTEM_ROOTHDD="${FORMAT_FILESYSTEM}"
622 fi
623 export INSTALL_METHOD="${method}"
624 ;;
625 normal)
626 export BOOTHDD="${HDD}1"
627 export SWAPHDD="${HDD}2"
628 export ROOTHDD="${HDD}3"
629 export FORMAT_FILESYSTEM_BOOTHDD="${FORMAT_FILESYSTEM}"
630 export FORMAT_FILESYSTEM_ROOTHDD="${FORMAT_FILESYSTEM}"
631 export INSTALL_METHOD="${method}"
632 ;;
633 single)
634 export BOOTHDD=""
635 export SWAPHDD=""
636 export ROOTHDD="${HDD}1"
637 export FORMAT_FILESYSTEM_BOOTHDD=""
638 export FORMAT_FILESYSTEM_ROOTHDD="${FORMAT_FILESYSTEM}"
639 export INSTALL_METHOD="${method}"
640 ;;
641 flash)
642 export BOOTHDD="${HDD}1"
643 export SWAPHDD=""
644 export ROOTHDD="${HDD}2"
645 export FORMAT_FILESYSTEM_BOOTHDD="${FORMAT_FILESYSTEM}"
646 export FORMAT_FILESYSTEM_ROOTHDD="f2fs"
647 export INSTALL_METHOD="${method}"
648 ;;
649 *)
650 die "Unknown install method '${method}', aborting."
651 ;;
652 esac
653
654 task_setup_hdd_partitions
655 dialog_setup_hdd_format
656 setup_hdd_format > /dev/null
657 mount_rootfs
658 (install_system_image > /tmp/install.log) 2> /tmp/install_errors.log | install_meter | dialog_install_system_image
659
660 dialog_install_settings
661 sleep 1
662 install_system_settings
663 if is_initrd_supported
664 then
665 dialog_install_initrd
666 initrd_config
667 initrd_install
668 fi
669
670 dialog_install_bootsector
671 bootloader_config
672 bootloader_install
673
674 umount_rootfs
675 dialog_install_successful
676 }
677
678 # set some proper traps
679 trap "trap_exit" SIGINT SIGQUIT
680
681 task_main
682
683 exit 0