fix missing quote in disk space check failure message
[ardour.git] / tools / linux_packaging / stage2.run
1 #!/bin/sh
2
3 ####################################
4 #
5 #       stage2.run
6 #       Ardour/Mixbus bundle installer
7 #       Todd Naugle
8 #
9 ###################################
10
11
12
13 PGM_NAME="Ardour"
14 PGM_VENDOR="Ardour"
15 PGM_EXEC_FILE="ardour3"
16
17 INSTALL_DEST_BASE="/opt"
18 USER_BIN_DIR="/usr/local/bin"
19
20 PGM_NAME_LOWER=$(echo $PGM_NAME | tr '[:upper:]' '[:lower:]')
21
22 USER_NAME=$(logname)
23
24 #### Global Variables ####
25 HAS_XDG="T"
26
27 ########################
28 # Function Definitions
29 ########################
30
31 VaildateYesNoQuestion ()
32 {
33         # $1 = Question Text
34         
35         local INPUT_OK="n"
36         local USER_INPUT=""
37
38         until test "y" = $INPUT_OK;
39         do
40                 echo ""
41                 read -p "$1 [y/n]: " USER_INPUT
42                 echo ""
43
44                 if [ ! -z $USER_INPUT ]; 
45                 then            
46                         if [ "Y" = $USER_INPUT -o "y" = $USER_INPUT -o "n" = $USER_INPUT -o "N" = $USER_INPUT ];
47                         then
48                                 INPUT_OK="y"
49                         fi
50                 fi
51         done
52         
53         echo $USER_INPUT | tr '[:upper:]' '[:lower:]'
54         
55 }
56
57 SystemInstall ()
58 {
59
60         # Determine which software install app to use and then install requested package
61         # $1 = Package Name
62
63         if which yum > /dev/null;
64         then
65                 ${SUPER} yum -y install $1
66                 rtrn=$?
67
68                 if [ $rtrn -ne 0 ];
69                 then
70                         echo ""
71                         echo "!!! ERROR !!! yum install failed for an unknown reason."
72                         echo "Please install package $1 after this installer completes."
73                         echo ""
74                 fi
75
76         elif which apt-get > /dev/null;
77         then
78                 ${SUPER} apt-get -y install $1
79                 rtrn=$?
80
81                 if [ $rtrn -ne 0 ];
82                 then
83                         echo ""
84                         echo "!!! ERROR !!! apt-get install failed for an unknown reason."
85                         echo "Please install package $1 after this installer completes."
86                         echo ""
87                 fi
88
89         else
90                 echo ""
91                 echo "!!! ERROR !!! - Not able to detect which software install tool to use (yum or apt-get)."
92                 echo "Please install package $1 using the system software install tool."
93                 echo ""
94                 rtrn=1
95         fi
96         
97         return $rtrn
98
99 }
100
101 ########################################################################
102 #                                 Main
103 ########################################################################
104
105 # If you double click a script, some systems don't get the PWD correct.
106 # Force it to be correct
107 PKG_PATH=$(dirname "$(readlink -f "$0")")
108 cd "${PKG_PATH}"
109
110 echo ""
111 echo "Welcome to the ${PGM_NAME} installer"
112 echo ""
113 echo "${PGM_NAME} will be installed for user ${USER_NAME} in ${INSTALL_DEST_BASE}"
114 echo ""
115
116 ###############################
117 # Check for install destination
118 ###############################
119
120 if [ ! -d ${INSTALL_DEST_BASE} ];
121 then
122         echo ""
123         echo "!!! ERROR !!! - Installation location ${INSTALL_DEST_BASE} does not exist!"
124         echo "Installation will not complete."
125         echo ""
126         read -p "Press ENTER to exit installer:" BLAH
127         exit 1
128 fi
129
130 #############################
131 # Check for root privileges
132 #############################
133
134 SUPER=""
135 NORM_USER=""
136
137 if [ "$(id -u)" != "0" ]; then
138
139         if ! which sudo > /dev/null;
140         then
141                 echo ""
142                 echo "Sudo installed failed, attempting to install using su"
143                 echo "Please enter root password below"
144                 echo ""
145
146                 if ! su -c "./.stage2.run";
147                 then
148                         echo ""
149                         echo "!!! ERROR !!!"
150                         echo ""
151                         echo "This installer requires root privileges. It is currently not"
152                         echo "running as root AND an attempt to use su failed."
153                         echo ""
154                         echo "Please correct this by installing and configuring sudo or running"
155                         echo "the installer as root (su -c)."
156                         echo ""
157                         read -p "Press ENTER to exit installer:" BLAH
158                         exit 1
159                 fi
160                 exit
161         fi
162
163         if ! sudo date;
164         then
165                 echo ""
166                 echo "Attempting to install using su"
167                 echo "Please enter root password below"
168                 echo ""
169
170                 if ! su -c "./.stage2.run";
171                 then
172                         echo ""
173                         echo "!!! ERROR !!!"
174                         echo ""
175                         echo "This installer requires root privileges. It is currently not"
176                         echo "running as root AND an attempt to use both sudo and su failed."
177                         echo ""
178                         echo "Please correct this by installing and configuring sudo or running"
179                         echo "the installer as root (su -c)."
180                         echo ""
181                         read -p "Press ENTER to exit installer:" BLAH
182                         exit 1
183                 fi
184                 exit
185         fi
186         SUPER="sudo"
187         
188         # The quoting reqired for the su sanityCheck method does not work when used without
189         # su. Using sh -c in the normal case gets around that, but is a bit of a hack.
190         NORM_USER="sh -c"
191 else
192         NORM_USER="su -l $USER_NAME -c" 
193 fi
194
195 ############################
196 # Determine processor type
197 ############################
198
199 case `uname -m` in
200         i[3456789]86|x86|i86pc)
201                 echo "Architecture is x86"
202                 ARCH='x86'
203                 ;;
204         x86_64|amd64|AMD64)
205                 echo "Architecture is x86_64"
206                 ARCH='x86_64'
207                 ;;
208         *)
209                 echo ""
210                 echo "!!! ERROR !!! - Unknown architecture `uname -m`"
211                 echo ""
212                 read -p "Press ENTER to exit installer:" BLAH
213                 exit 1
214                 ;;
215 esac
216
217 ####################
218 # Check disk space
219 ####################
220
221 # We have to check the current folder and the INSTALL_DEST_BASE just
222 # in case they are on different devices
223 echo "Checking for required disk space"
224
225 if [ ! -e .${PGM_NAME}_${ARCH}-*.size ]; then
226         echo ""
227         echo "!!! ERROR !!! Can't locate .size file for ${ARCH} bundle."
228         echo "This package is broken or does not support ${ARCH}."
229         echo ""
230         read -p "Press ENTER to exit installer:" BLAH
231         exit 1
232 else
233         REQUIRED_BYTES=$(cat .${PGM_NAME}_${ARCH}-*.size)
234
235         #Installer needs 2x the space since the bundle is unpacked locally and then copied
236         REQUIRED_BYTES=$(($REQUIRED_BYTES + $REQUIRED_BYTES))
237
238         #Check space in current folder
239         FREE_BYTES=$(df -P -B 1 "${PKG_PATH}" | grep / | awk '{print $4}')
240
241         if [ ${FREE_BYTES} -le ${REQUIRED_BYTES} ] ; then
242                 echo ""
243                 echo "!!! ERROR !!! - Insufficient disk space in ${PKG_PATH}"
244                 echo "Install requires ${REQUIRED_BYTES} bytes and"
245                 echo "there is only ${FREE_BYTES} bytes of free space"
246                 echo ""
247                 read -p "Press ENTER to exit installer:" BLAH
248                 exit 1
249         fi
250
251         #Check space in INSTALL_DEST_BASE
252         FREE_BYTES=$(df -P -B 1 ${INSTALL_DEST_BASE} | grep / | awk '{print $4}')
253
254         if [ ${FREE_BYTES} -le ${REQUIRED_BYTES} ] ; then
255                 echo ""
256                 echo "!!! ERROR !!! - Insufficient disk space in ${INSTALL_DEST_BASE}"
257                 echo "Install requires ${REQUIRED_BYTES} bytes and"
258                 echo "there is only ${FREE_BYTES} bytes of free space"
259                 echo ""
260                 read -p "Press ENTER to exit installer:" BLAH
261                 exit 1
262         fi
263 fi
264
265 #####################
266 # Unpack the bundle
267 #####################
268
269 # untar the correct bundle for us to install
270 echo "Unpacking bundle for $ARCH"
271
272 if [ ! -e ${PGM_NAME}_${ARCH}-*.tar.bz2 ]; then
273         echo ""
274         echo "!!! ERROR !!! Can't locate ${ARCH} bundle file."
275         echo ""
276         read -p "Press ENTER to exit installer:" BLAH
277         exit 1
278 fi
279
280 tar -xjf ${PGM_NAME}_${ARCH}-*.tar.bz2
281 BUNDLE_DIR=$(basename `find -maxdepth 1 -type d -name "${PGM_NAME}_${ARCH}-*"`)
282
283
284 #######################
285 # Check for xdg utils
286 #######################
287
288 #load the file that contains the translated names of the users directories
289 if [ -e /home/${USER_NAME}/.config/user-dirs.dirs ]; then
290         . /home/${USER_NAME}/.config/user-dirs.dirs
291 fi
292
293 if [ "$(id -u)" != "0" ]; then
294         USER_DESKTOP_DIR=${XDG_DESKTOP_DIR:-$HOME/Desktop}
295 else
296         #running as root with su makes this more difficult
297         DESKTOP_FOLDER=$(echo ${XDG_DESKTOP_DIR:-$HOME/Desktop} | awk -F/ '{print $NF}')
298         USER_DESKTOP_DIR="/home/${USER_NAME}/${DESKTOP_FOLDER}"
299 fi
300
301 XDG_MENU_VER=$(xdg-desktop-menu --version 2> /dev/null)
302 if [ -z "$XDG_MENU_VER" ];
303 then
304         echo "System does not have xdg-desktop-menu installed"
305         HAS_XDG="F"
306 fi
307
308 XDG_ICON_VER=$(xdg-icon-resource --version 2> /dev/null)
309 if [ -z "$XDG_ICON_VER" ];
310 then
311         echo "System does not have xdg-icon-resource installed"
312         HAS_XDG="F"
313 fi
314
315 #################################################
316 # Check if system libs are OK (libc, etc)
317 #################################################
318
319 echo ""
320 echo "Checking system libs to see if they are compatible with ${PGM_NAME}."
321 echo ""
322
323 LIB_ERROR="F"
324 LD_PATH=`pwd`/${BUNDLE_DIR}/lib
325
326 # check the main App
327 LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd ${BUNDLE_DIR}/bin/${PGM_NAME_LOWER}-* 2>&1 > /dev/null)
328
329 if [ -n "$LDD_RESULT" ];
330 then
331         echo "$LDD_RESULT"
332         LIB_ERROR="T"
333 fi
334         
335 # check the libs
336 LIB_FILES=$(find ${BUNDLE_DIR}/lib -name "*.so")
337
338 for path in $LIB_FILES
339 do
340         LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd $path 2>&1 > /dev/null)
341         if [ -n "$LDD_RESULT" ];
342         then
343                 echo "$LDD_RESULT"
344                 LIB_ERROR="T"
345         fi
346 done
347
348 if test "T" = $LIB_ERROR;
349 then
350         echo ""
351         echo "!!! ERROR !!! - Missing library detected!"
352         echo "This system does not have the correct libs to run ${PGM_NAME}."
353         echo "Installation will not complete. Please use a compatible distro."
354         echo ""
355         read -p "Press ENTER to exit installer:" BLAH
356         exit 1
357 fi
358
359 ################################
360 # Setup derived variables
361 ################################
362 PGM_VERSION=$(echo ${BUNDLE_DIR} | awk 'BEGIN { FS = "-" } ; { print $2 }' | awk 'BEGIN { FS = "_"} ; { print $1}')
363 PGM_BUILD=$(echo ${BUNDLE_DIR} | awk 'BEGIN { FS = "-" } ; { print $2 }' | awk 'BEGIN { FS = "_"} ; { print $2}')
364 PGM_BUILDTYPE=$(echo ${BUNDLE_DIR} | awk 'BEGIN { FS = "-" } ; { print $3 }')
365
366 if [ -z ${PGM_BUILDTYPE} ];
367 then
368         PGM_FULL_NAME="${PGM_NAME}-${PGM_VERSION}_${PGM_BUILD}"
369         ICON_NAME="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}"                    #no dash between name and version since dash seperates vendor from program
370         MENU_FILE="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}.desktop"    #no dash between name and version since dash seperates vendor from program
371         DESKTOP_LINK_FILE="${PGM_NAME}_${PGM_VERSION}.desktop"
372 else
373         PGM_FULL_NAME="${PGM_NAME}-${PGM_VERSION}_${PGM_BUILD}-${PGM_BUILDTYPE}"
374         ICON_NAME="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}_${PGM_BUILDTYPE}"                   #no dash between name and version since dash seperates vendor from program
375         MENU_FILE="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}_${PGM_BUILDTYPE}.desktop"   #no dash between name and version since dash seperates vendor from program
376         DESKTOP_LINK_FILE="${PGM_NAME}_${PGM_VERSION}_${PGM_BUILDTYPE}.desktop"
377 fi
378
379 PGM_EXEC_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/${PGM_EXEC_FILE}"
380 ICON_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/etc/icons"
381 MENU_FILE_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/share"
382
383 ################################
384 # Install bundle and Menu/Link
385 ################################
386
387 # uninstall any older versions
388 UNINSTALLERS=$(find ${INSTALL_DEST_BASE} -maxdepth 1 -type f -name "${PGM_NAME}*.uninstall.sh")
389 if [ ! -z "$UNINSTALLERS" ];
390 then
391         for i in $UNINSTALLERS; do
392                 echo ""
393                 echo "Found existing ${PGM_NAME} installation."
394                 
395                 ANSWER=$(VaildateYesNoQuestion "Do you want to run the uninstaller ${i} ?")
396
397                 if test "y" = $ANSWER;
398                 then
399                         echo ""
400                         echo "Running uninstaller $i"
401                         
402                         ${i}
403                         ${SUPER} rm -f ${i}
404                 fi
405         done
406 fi
407
408
409 # install 
410
411 echo ""
412 echo "Installing ${PGM_NAME} ${PGM_VERSION} built from ${PGM_BUILD} in ${INSTALL_DEST_BASE}"
413 echo ""
414
415 # Copy the new version in the install directory
416 ${SUPER} mkdir ${INSTALL_DEST_BASE}/${PGM_FULL_NAME} 
417 ${SUPER} cp -Rf ${BUNDLE_DIR}/* ${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/
418
419 # write the desktop/menu file
420 echo "[Desktop Entry]" > /tmp/${MENU_FILE}
421 echo "Encoding=UTF-8" >> /tmp/${MENU_FILE}
422 echo "Version=1.0" >> /tmp/${MENU_FILE}
423 echo "Type=Application" >> /tmp/${MENU_FILE}
424 echo "Terminal=false" >> /tmp/${MENU_FILE}
425 echo "Exec=${PGM_EXEC_PATH}" >> /tmp/${MENU_FILE}
426 if [ -z ${PGM_BUILDTYPE} ];
427 then
428         echo "Name=${PGM_NAME}-${PGM_VERSION}" >> /tmp/${MENU_FILE}
429 else
430         echo "Name=${PGM_NAME}-${PGM_VERSION}-${PGM_BUILDTYPE}" >> /tmp/${MENU_FILE}
431 fi
432 echo "Icon=${ICON_NAME}" >> /tmp/${MENU_FILE}
433 echo "Comment=Digital Audio Workstation" >> /tmp/${MENU_FILE}
434 echo "Categories=AudioVideo;AudioEditing;Audio;Recorder;" >> /tmp/${MENU_FILE}
435
436 chmod ugo+rx /tmp/${MENU_FILE}
437 ${SUPER} mv /tmp/${MENU_FILE} ${MENU_FILE_PATH}/.
438
439 # install the Menu, Link, and Icon(s)
440 if [ "T" = ${HAS_XDG} ];
441 then
442         echo "Adding ${PGM_NAME} to the applications menu"
443         ${SUPER} xdg-icon-resource install --context apps --size 16 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_16px.png ${ICON_NAME}
444         ${SUPER} xdg-icon-resource install --context apps --size 22 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_22px.png ${ICON_NAME}
445         ${SUPER} xdg-icon-resource install --context apps --size 32 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_32px.png ${ICON_NAME}
446         ${SUPER} xdg-icon-resource install --context apps --size 48 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_48px.png ${ICON_NAME}
447
448         if [ -e ${ICON_PATH}/${PGM_NAME_LOWER}_icon.svg -a -d /usr/share/icons/hicolor/scalable/apps ]; 
449         then
450                 ${SUPER} cp -f ${ICON_PATH}/${PGM_NAME_LOWER}_icon.svg  /usr/share/icons/hicolor/scalable/apps/${ICON_NAME}.svg
451         fi
452
453         ${SUPER} xdg-desktop-menu install ${MENU_FILE_PATH}/${MENU_FILE}
454         ${SUPER} xdg-desktop-menu forceupdate --mode system                     # Some systems need an extra kick
455         
456         echo ""
457         echo "Creating a desktop link for ${PGM_NAME} in ${USER_DESKTOP_DIR}"
458         cp ${MENU_FILE_PATH}/${MENU_FILE} ${USER_DESKTOP_DIR}/${DESKTOP_LINK_FILE}
459         chmod ugo+rwx ${USER_DESKTOP_DIR}/${DESKTOP_LINK_FILE}
460 else
461         echo ""
462         echo "Creating a desktop link for ${PGM_NAME} in ${USER_DESKTOP_DIR}"
463         cp ${MENU_FILE_PATH}/${MENU_FILE} ${USER_DESKTOP_DIR}/${DESKTOP_LINK_FILE}
464         chmod ugo+rwx ${USER_DESKTOP_DIR}/${DESKTOP_LINK_FILE}
465 fi
466
467 echo ""
468 echo "Copying uninstall script to ${INSTALL_DEST_BASE}"
469 echo ""
470
471 ${SUPER} cp -f ${BUNDLE_DIR}/bin/*.uninstall.sh ${INSTALL_DEST_BASE}/.
472
473 # Create link to the program in user bin
474
475 echo ""
476 echo "Creating link ${PGM_NAME}3 in ${USER_BIN_DIR}"
477 echo ""
478
479 if [ -d "${USER_BIN_DIR}" ]; then
480         if [ -e "${USER_BIN_DIR}/${PGM_NAME}3" ]; then
481                 ${SUPER} rm -f ${USER_BIN_DIR}/${PGM_NAME}3
482         fi
483
484         cd "${USER_BIN_DIR}"
485         ${SUPER} ln -sf ${PGM_EXEC_PATH} ${PGM_NAME}3 
486         cd "${PKG_PATH}"
487         
488 else
489         echo "Can not create link because ${USER_BIN_DIR} does not exist"
490 fi
491
492 ###########################
493 # Check Jack and qjackctl
494 ###########################
495
496 echo ""
497 echo "Checking to see if Jack is installed"
498 echo ""
499
500 if ! which jackd > /dev/null;
501 then
502         echo ""
503         echo "The program Jack is missing from this system. Jack is a required component of $PGM_NAME."
504         echo ""
505
506         ANSWER=$(VaildateYesNoQuestion "Install jack using system software repository?")
507
508         if test "y" = $ANSWER;
509         then
510                 echo "Attempting to install Jack"
511                 SystemInstall "jackd"
512
513                 if [ $? -ne 0 ];
514                 then
515                         echo ""
516                         read -p "Press ENTER to continue:" BLAH
517                 fi
518         fi
519 else
520         echo "Jack OK"
521 fi
522
523
524 if ! which qjackctl > /dev/null;
525 then
526         echo ""
527         echo "The program QjackCtl is missing from this system."
528         echo "QjackCtl is an extremely useful tool for any system that runs JACK applications like $PGM_NAME."
529         echo "We recommend that you install it."
530         echo ""
531
532         ANSWER=$(VaildateYesNoQuestion "Install QjackCtl using system software repository?")
533
534         if test "y" = $ANSWER;
535         then
536                 echo "Attempting to install QjackCtl"
537                 SystemInstall "qjackctl"
538
539                 if [ $? -ne 0 ];
540                 then
541                         echo ""
542                         read -p "Press ENTER to continue:" BLAH
543                 fi
544         fi
545 fi
546
547
548 ########################
549 # Run Sanity Check
550 ########################
551
552 USER_GROUP_ADJUSTED="f"
553
554 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -a > /dev/null";
555 then
556         echo ""
557         echo "System failed the quick sanity check... Looking for the cause"
558
559         if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -rt > /dev/null";
560         then
561                 echo ""
562                 echo "System does not allow realtime for the current user... Looking for a solution"            
563                 
564                 if ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -hasaudiogroup > /dev/null";
565                 then
566                         if ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -memberaudiogroup > /dev/null 2>&1";
567                         then
568                                 ## This is an odd case. We have an audio group and are a member.
569                                 echo ""
570                                 echo "!!! WARNING !!! - The current user can not execute realtime processes."
571                                 echo "This will adversely affect audio latency."
572                                 echo "This system has an audio group and the user is a member. If jack was"
573                                 echo "just installed, a simple log out/in may fix this."
574                                 echo ""
575                                 echo "For best results, please correct this on your system."
576                                 echo "(Hint: check /etc/security/limits.conf or /etc/security/limits.d/)" 
577                                 echo ""
578                                 read -p "Press ENTER to continue:" BLAH
579                         else
580                                 # Not a member of an audio group. Try to fix it.
581                                 
582                                 if ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -hasgroup audio > /dev/null && find /etc/security -type f -name "*.conf" | xargs grep -q "^@audio.*rtprio" ";
583                                 then
584                                         # add user to audio group
585                                         echo ""
586                                         echo "Adding user ${USER_NAME} to the audio group."
587                                         echo "This should allow you to run realtime tasks. Please re-login for this change to take affect."
588                                         echo ""
589                                         read -p "Press ENTER to continue:" BLAH
590
591                                         if ${SUPER} usermod -a -G audio ${USER_NAME};
592                                         then
593                                                 USER_GROUP_ADJUSTED="t"
594                                         else
595                                                 echo ""
596                                                 echo "!!! ERROR !!! - Not able to add user to the audio group (usermod failed)!"
597                                                 echo ""
598                                                 echo "Please add yourself to the audio group and re-login"
599                                                 echo ""
600                                                 read -p "Press ENTER to continue:" BLAH
601                                         fi
602
603                                 elif ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -hasgroup jackuser > /dev/null && find /etc/security -type f -name "*.conf" | xargs grep -q "^@jackuser.*rtprio" ";
604                                 then
605                                         # add user to jackuser group
606                                         echo ""
607                                         echo "Adding user ${USER_NAME} to the jackuser group."
608                                         echo "This should allow you to run realtime tasks. Please re-login for this change to take affect."
609                                         echo ""
610                                         read -p "Press ENTER to continue:" BLAH
611
612                                         if ${SUPER} usermod -a -G jackuser ${USER_NAME};
613                                         then
614                                                 USER_GROUP_ADJUSTED="t"
615                                         else
616                                                 echo ""
617                                                 echo "!!! ERROR !!! - Not able to add user to the jackuser group."
618                                                 echo ""
619                                                 echo "Please add yourself to the audio group and re-login"
620                                                 echo ""
621                                                 read -p "Press ENTER to continue:" BLAH
622                                         fi
623                                         
624
625                                 fi
626                         fi
627                 else
628                         # No audio group found on this system!
629                         echo ""
630                         echo "!!! WARNING !!! - The system does not seem to have an audio group (audio or jackuser)."
631                         echo ""
632                         echo "We will not attempt to fix this. Please configure your system to allow"
633                         echo "non-root users to execute realtime tasks."
634                         echo ""
635                         read -p "Press ENTER to continue:" BLAH
636                 fi
637         fi
638
639         if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -freqscaling > /dev/null";
640         then
641                 echo ""
642                 echo "!!! WARNING !!! - Your system seems to use frequency scaling."
643                 echo "This can have a serious impact on audio latency. You have two choices:"
644                 echo "(1) turn it off, e.g. by chosing the 'performance' governor."
645                 echo "(2) Use the HPET clocksource by passing \"-c h\" to JACK"
646                 echo "(this second option only works on relatively recent computers)"
647                 echo ""
648                 read -p "Press ENTER to continue:" BLAH
649         fi
650
651         if [ "f" = $USER_GROUP_ADJUSTED ];
652         then
653                 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -memlock > /dev/null";
654                 then
655                         echo ""
656                         echo "!!! WARNING !!! - You are not allowed to lock memory."
657                         echo ""
658                         echo "We will not attempt to fix this. Please configure your system to allow"
659                         echo "non-root users to execute lock memory."
660                         echo ""
661                         read -p "Press ENTER to continue:" BLAH
662                 fi
663         fi
664 fi
665
666
667 ########################
668 # Install Complete
669 ########################
670
671 echo ""
672 echo "Cleaning up"
673 rm -rf ${BUNDLE_DIR}/
674
675 echo ""
676 echo "!!! Install Complete !!!"
677
678 if [ "t" = $USER_GROUP_ADJUSTED ];
679 then
680         echo "You will need to logout and then login again for all changes to be complete"
681 fi
682
683 echo ""
684 read -p "Press ENTER to exit installer:" BLAH
685
686