Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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