Check jack version during install and warn user if the version is too old.
[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 FILESYSTEM_TYPE=$(df -P -T "${PKG_PATH}" | grep / | awk '{print $2}')
266 echo "Bundle is on ${FILESYSTEM_TYPE} filesystem"
267
268 #####################
269 # Unpack the bundle
270 #####################
271
272 # untar the correct bundle for us to install
273 echo "Unpacking bundle for $ARCH"
274
275 if [ ! -e ${PGM_NAME}_${ARCH}-*.tar.bz2 ]; then
276         echo ""
277         echo "!!! ERROR !!! Can't locate ${ARCH} bundle file."
278         echo ""
279         read -p "Press ENTER to exit installer:" BLAH
280         exit 1
281 fi
282
283 if ! tar -xjf ${PGM_NAME}_${ARCH}-*.tar.bz2; then
284         echo ""
285         echo "!!! ERROR !!! Can't unpack ${ARCH} bundle file."
286         echo ""
287         read -p "Press ENTER to exit installer:" BLAH
288         exit 1
289 else
290         echo "Bundle unpacked"
291 fi
292
293 BUNDLE_DIR=$(basename `find -maxdepth 1 -type d -name "${PGM_NAME}_${ARCH}-*"`)
294
295
296 #######################
297 # Check for xdg utils
298 #######################
299
300 #load the file that contains the translated names of the users directories
301 if [ -e /home/${USER_NAME}/.config/user-dirs.dirs ]; then
302         . /home/${USER_NAME}/.config/user-dirs.dirs
303 fi
304
305 if [ "$(id -u)" != "0" ]; then
306         USER_DESKTOP_DIR=${XDG_DESKTOP_DIR:-$HOME/Desktop}
307 else
308         #running as root with su makes this more difficult
309         DESKTOP_FOLDER=$(echo ${XDG_DESKTOP_DIR:-$HOME/Desktop} | awk -F/ '{print $NF}')
310         USER_DESKTOP_DIR="/home/${USER_NAME}/${DESKTOP_FOLDER}"
311 fi
312
313 XDG_MENU_VER=$(xdg-desktop-menu --version 2> /dev/null)
314 if [ -z "$XDG_MENU_VER" ];
315 then
316         echo "System does not have xdg-desktop-menu installed"
317         HAS_XDG="F"
318 fi
319
320 XDG_ICON_VER=$(xdg-icon-resource --version 2> /dev/null)
321 if [ -z "$XDG_ICON_VER" ];
322 then
323         echo "System does not have xdg-icon-resource installed"
324         HAS_XDG="F"
325 fi
326
327 #################################################
328 # Check if system libs are OK (libc, etc)
329 #################################################
330
331 echo ""
332 echo "Checking system libs to see if they are compatible with ${PGM_NAME}."
333 echo ""
334
335 LIB_ERROR="F"
336 LD_PATH=`pwd`/${BUNDLE_DIR}/lib
337
338 # check the main App
339 LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd ${BUNDLE_DIR}/bin/${PGM_NAME_LOWER}-* 2>&1 > /dev/null)
340
341 if [ -n "$LDD_RESULT" ];
342 then
343         echo "$LDD_RESULT"
344         LIB_ERROR="T"
345 fi
346         
347 # check the libs
348 LIB_FILES=$(find ${BUNDLE_DIR}/lib -name "*.so")
349
350 for path in $LIB_FILES
351 do
352         LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd $path 2>&1 > /dev/null)
353         if [ -n "$LDD_RESULT" ];
354         then
355                 echo "$LDD_RESULT"
356                 LIB_ERROR="T"
357         fi
358 done
359
360 if test "T" = $LIB_ERROR;
361 then
362         echo ""
363         echo "!!! ERROR !!! - Missing library detected!"
364         echo "This system does not have the correct libs to run ${PGM_NAME}."
365         echo "Installation will not complete. Please use a compatible distro."
366         echo ""
367         read -p "Press ENTER to exit installer:" BLAH
368         exit 1
369 fi
370
371 ################################
372 # Setup derived variables
373 ################################
374 PGM_VERSION=$(echo ${BUNDLE_DIR} | awk 'BEGIN { FS = "-" } ; { print $2 }' | awk 'BEGIN { FS = "_"} ; { print $1}')
375 PGM_BUILD=$(echo ${BUNDLE_DIR} | awk 'BEGIN { FS = "-" } ; { print $2 }' | awk 'BEGIN { FS = "_"} ; { print $2}')
376 PGM_BUILDTYPE=$(echo ${BUNDLE_DIR} | awk 'BEGIN { FS = "-" } ; { print $3 }')
377
378 if [ -z ${PGM_BUILDTYPE} ];
379 then
380         PGM_FULL_NAME="${PGM_NAME}-${PGM_VERSION}_${PGM_BUILD}"
381         ICON_NAME="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}"                    #no dash between name and version since dash seperates vendor from program
382         MENU_FILE="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}.desktop"    #no dash between name and version since dash seperates vendor from program
383         DESKTOP_LINK_FILE="${PGM_NAME}_${PGM_VERSION}.desktop"
384 else
385         PGM_FULL_NAME="${PGM_NAME}-${PGM_VERSION}_${PGM_BUILD}-${PGM_BUILDTYPE}"
386         ICON_NAME="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}_${PGM_BUILDTYPE}"                   #no dash between name and version since dash seperates vendor from program
387         MENU_FILE="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}_${PGM_BUILDTYPE}.desktop"   #no dash between name and version since dash seperates vendor from program
388         DESKTOP_LINK_FILE="${PGM_NAME}_${PGM_VERSION}_${PGM_BUILDTYPE}.desktop"
389 fi
390
391 PGM_EXEC_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/${PGM_EXEC_FILE}"
392 ICON_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/share/icons"
393 MENU_FILE_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/share"
394
395 ################################
396 # Install bundle and Menu/Link
397 ################################
398
399 # uninstall any older versions
400 UNINSTALLERS=$(find ${INSTALL_DEST_BASE} -maxdepth 1 -type f -name "${PGM_NAME}*.uninstall.sh")
401 if [ ! -z "$UNINSTALLERS" ];
402 then
403         for i in $UNINSTALLERS; do
404                 echo ""
405                 echo "Found existing ${PGM_NAME} installation."
406                 
407                 ANSWER=$(VaildateYesNoQuestion "Do you want to run the uninstaller ${i} ?")
408
409                 if test "y" = $ANSWER;
410                 then
411                         echo ""
412                         echo "Running uninstaller $i"
413                         
414                         ${i}
415                         ${SUPER} rm -f ${i}
416                 fi
417         done
418 fi
419
420
421 # install 
422
423 echo ""
424 echo "Installing ${PGM_NAME} ${PGM_VERSION} built from ${PGM_BUILD} in ${INSTALL_DEST_BASE}"
425 echo ""
426
427 # Copy the new version in the install directory
428 ${SUPER} mkdir ${INSTALL_DEST_BASE}/${PGM_FULL_NAME} 
429 ${SUPER} cp -Rf ${BUNDLE_DIR}/* ${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/
430
431 # write the desktop/menu file
432 echo "[Desktop Entry]" > /tmp/${MENU_FILE}
433 echo "Encoding=UTF-8" >> /tmp/${MENU_FILE}
434 echo "Version=1.0" >> /tmp/${MENU_FILE}
435 echo "Type=Application" >> /tmp/${MENU_FILE}
436 echo "Terminal=false" >> /tmp/${MENU_FILE}
437 echo "Exec=${PGM_EXEC_PATH}" >> /tmp/${MENU_FILE}
438 if [ -z ${PGM_BUILDTYPE} ];
439 then
440         echo "Name=${PGM_NAME}-${PGM_VERSION}" >> /tmp/${MENU_FILE}
441 else
442         echo "Name=${PGM_NAME}-${PGM_VERSION}-${PGM_BUILDTYPE}" >> /tmp/${MENU_FILE}
443 fi
444 echo "Icon=${ICON_NAME}" >> /tmp/${MENU_FILE}
445 echo "Comment=Digital Audio Workstation" >> /tmp/${MENU_FILE}
446 echo "Categories=AudioVideo;AudioEditing;Audio;Recorder;" >> /tmp/${MENU_FILE}
447
448 chmod ugo+rx /tmp/${MENU_FILE}
449 ${SUPER} mv /tmp/${MENU_FILE} ${MENU_FILE_PATH}/.
450
451 # install the Menu, Link, and Icon(s)
452 if [ "T" = ${HAS_XDG} ];
453 then
454         echo "Adding ${PGM_NAME} to the applications menu"
455         ${SUPER} xdg-icon-resource install --context apps --size 16 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_16px.png ${ICON_NAME}
456         ${SUPER} xdg-icon-resource install --context apps --size 22 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_22px.png ${ICON_NAME}
457         ${SUPER} xdg-icon-resource install --context apps --size 32 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_32px.png ${ICON_NAME}
458         ${SUPER} xdg-icon-resource install --context apps --size 48 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_48px.png ${ICON_NAME}
459
460         if [ -e ${ICON_PATH}/${PGM_NAME_LOWER}_icon.svg -a -d /usr/share/icons/hicolor/scalable/apps ]; 
461         then
462                 ${SUPER} cp -f ${ICON_PATH}/${PGM_NAME_LOWER}_icon.svg  /usr/share/icons/hicolor/scalable/apps/${ICON_NAME}.svg
463         fi
464
465         ${SUPER} xdg-desktop-menu install ${MENU_FILE_PATH}/${MENU_FILE}
466         ${SUPER} xdg-desktop-menu forceupdate --mode system                     # Some systems need an extra kick
467         
468         echo ""
469         echo "Creating a desktop link for ${PGM_NAME} in ${USER_DESKTOP_DIR}"
470         cp ${MENU_FILE_PATH}/${MENU_FILE} ${USER_DESKTOP_DIR}/${DESKTOP_LINK_FILE}
471         chmod ugo+rwx ${USER_DESKTOP_DIR}/${DESKTOP_LINK_FILE}
472 else
473         echo ""
474         echo "Creating a desktop link for ${PGM_NAME} in ${USER_DESKTOP_DIR}"
475         cp ${MENU_FILE_PATH}/${MENU_FILE} ${USER_DESKTOP_DIR}/${DESKTOP_LINK_FILE}
476         chmod ugo+rwx ${USER_DESKTOP_DIR}/${DESKTOP_LINK_FILE}
477 fi
478
479 echo ""
480 echo "Copying uninstall script to ${INSTALL_DEST_BASE}"
481 echo ""
482
483 ${SUPER} cp -f ${BUNDLE_DIR}/bin/*.uninstall.sh ${INSTALL_DEST_BASE}/.
484
485 # Create link to the program in user bin
486
487 echo ""
488 echo "Creating link ${PGM_NAME}3 in ${USER_BIN_DIR}"
489 echo ""
490
491 if [ -d "${USER_BIN_DIR}" ]; then
492         if [ -e "${USER_BIN_DIR}/${PGM_NAME}3" ]; then
493                 ${SUPER} rm -f ${USER_BIN_DIR}/${PGM_NAME}3
494         fi
495
496         cd "${USER_BIN_DIR}"
497         ${SUPER} ln -sf ${PGM_EXEC_PATH} ${PGM_NAME}3 
498         cd "${PKG_PATH}"
499         
500 else
501         echo "Can not create link because ${USER_BIN_DIR} does not exist"
502 fi
503
504 ###########################
505 # Check Jack and qjackctl
506 ###########################
507
508 echo ""
509 echo "Checking to see if Jack is installed"
510 echo ""
511
512 JACK_INSTALLED="f"
513
514 if ! which jackd > /dev/null;
515 then
516         echo ""
517         echo "The program Jack is missing from this system. Jack is a required component of $PGM_NAME."
518         echo ""
519
520         ANSWER=$(VaildateYesNoQuestion "Install jack using system software repository?")
521
522         if test "y" = $ANSWER;
523         then
524                 echo "Attempting to install Jack"
525                 SystemInstall "jackd"
526                 
527                 if [ $? -ne 0 ];
528                 then
529                         echo ""
530                         read -p "Press ENTER to continue:" BLAH
531                 else
532                         JACK_INSTALLED="t"
533                 fi
534         fi
535 else
536         JACK_INSTALLED="t"
537         echo "Jack already present"
538 fi
539
540 # Check to see if Jack is new enough to operate correctly.
541
542 if [ "t" = ${JACK_INSTALLED} ];
543 then
544         JACK_VERSION_OK="f"
545         JACK_VER_STRING=$(jackd --version | grep -e "jackd.*protocol")
546         JACK_NAME=$(echo $JACK_VER_STRING | awk '{print $1}')
547         JACK_VERSION=$(echo $JACK_VER_STRING | awk '{print $3}')
548         JACK_VERSION_MAJOR=$(echo $JACK_VERSION | awk 'BEGIN{FS="."}{print $1}')
549         JACK_VERSION_MIDDLE=$(echo $JACK_VERSION | awk 'BEGIN{FS="."}{print $2}')
550         JACK_VERSION_MINOR=$(echo $JACK_VERSION | awk 'BEGIN{FS="."}{print $3}')
551
552         if [ "jackd" = ${JACK_NAME} ];
553         then
554                 if [ 0 -le ${JACK_VERSION_MAJOR}  -a  121 -le ${JACK_VERSION_MIDDLE}  -a  3 -le ${JACK_VERSION_MINOR} ];
555                 then
556                         JACK_VERSION_OK="t"
557                 fi
558         elif [ "jackdmp" = ${JACK_NAME} ];
559         then
560                 if [ 1 -le ${JACK_VERSION_MAJOR}  -a  9 -le ${JACK_VERSION_MIDDLE}  -a  8 -le ${JACK_VERSION_MINOR} ];
561                 then
562                         JACK_VERSION_OK="t"
563                 fi
564         fi
565
566         if [ "t" = ${JACK_VERSION_OK} ];
567         then
568                 echo ""
569                 echo "Jack Version Check OK (${JACK_VER_STRING})"
570                 echo ""
571         else
572                 echo ""
573                 echo "!!! WARNING !!! - The version of Jack on this system is too old!"
574                 echo "Using an old version of Jack is not recommened. Please update"
575                 echo "Jack for best results."
576                 echo ""
577                 echo "System Jack version:"
578                 echo "   ${JACK_VER_STRING}"
579                 echo ""
580                 echo "Recommened minimum versions:"
581                 echo "   Jack1 - 0.121.3"
582                 echo "   Jack2 - 1.9.8"
583                 echo ""
584                 read -p "Press ENTER to continue:" BLAH
585         fi
586 fi
587
588 if ! which qjackctl > /dev/null;
589 then
590         echo ""
591         echo "The program QjackCtl is missing from this system."
592         echo "QjackCtl is an extremely useful tool for any system that runs JACK applications like $PGM_NAME."
593         echo "We recommend that you install it."
594         echo ""
595
596         ANSWER=$(VaildateYesNoQuestion "Install QjackCtl using system software repository?")
597
598         if test "y" = $ANSWER;
599         then
600                 echo "Attempting to install QjackCtl"
601                 SystemInstall "qjackctl"
602
603                 if [ $? -ne 0 ];
604                 then
605                         echo ""
606                         read -p "Press ENTER to continue:" BLAH
607                 fi
608         fi
609 fi
610
611
612 ########################
613 # Run Sanity Check
614 ########################
615
616 USER_GROUP_ADJUSTED="f"
617
618 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -a > /dev/null";
619 then
620         echo ""
621         echo "System failed the quick sanity check... Looking for the cause"
622
623         if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -rt > /dev/null";
624         then
625                 echo ""
626                 echo "System does not allow realtime for the current user... Looking for a solution"            
627                 
628                 if ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -hasaudiogroup > /dev/null";
629                 then
630                         if ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -memberaudiogroup > /dev/null 2>&1";
631                         then
632                                 ## This is an odd case. We have an audio group and are a member.
633                                 echo ""
634                                 echo "!!! WARNING !!! - The current user can not execute realtime processes."
635                                 echo "This will adversely affect audio latency."
636                                 echo "This system has an audio group and the user is a member. If jack was"
637                                 echo "just installed, a simple log out/in may fix this."
638                                 echo ""
639                                 echo "For best results, please correct this on your system."
640                                 echo "(Hint: check /etc/security/limits.conf or /etc/security/limits.d/)" 
641                                 echo ""
642                                 read -p "Press ENTER to continue:" BLAH
643                         else
644                                 # Not a member of an audio group. Try to fix it.
645                                 
646                                 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" ";
647                                 then
648                                         # add user to audio group
649                                         echo ""
650                                         echo "Adding user ${USER_NAME} to the audio group."
651                                         echo "This should allow you to run realtime tasks. Please re-login for this change to take affect."
652                                         echo ""
653                                         read -p "Press ENTER to continue:" BLAH
654
655                                         if ${SUPER} usermod -a -G audio ${USER_NAME};
656                                         then
657                                                 USER_GROUP_ADJUSTED="t"
658                                         else
659                                                 echo ""
660                                                 echo "!!! ERROR !!! - Not able to add user to the audio group (usermod failed)!"
661                                                 echo ""
662                                                 echo "Please add yourself to the audio group and re-login"
663                                                 echo ""
664                                                 read -p "Press ENTER to continue:" BLAH
665                                         fi
666
667                                 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" ";
668                                 then
669                                         # add user to jackuser group
670                                         echo ""
671                                         echo "Adding user ${USER_NAME} to the jackuser group."
672                                         echo "This should allow you to run realtime tasks. Please re-login for this change to take affect."
673                                         echo ""
674                                         read -p "Press ENTER to continue:" BLAH
675
676                                         if ${SUPER} usermod -a -G jackuser ${USER_NAME};
677                                         then
678                                                 USER_GROUP_ADJUSTED="t"
679                                         else
680                                                 echo ""
681                                                 echo "!!! ERROR !!! - Not able to add user to the jackuser group."
682                                                 echo ""
683                                                 echo "Please add yourself to the audio group and re-login"
684                                                 echo ""
685                                                 read -p "Press ENTER to continue:" BLAH
686                                         fi
687                                         
688
689                                 fi
690                         fi
691                 else
692                         # No audio group found on this system!
693                         echo ""
694                         echo "!!! WARNING !!! - The system does not seem to have an audio group (audio or jackuser)."
695                         echo ""
696                         echo "We will not attempt to fix this. Please configure your system to allow"
697                         echo "non-root users to execute realtime tasks."
698                         echo ""
699                         read -p "Press ENTER to continue:" BLAH
700                 fi
701         fi
702
703         if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -freqscaling > /dev/null";
704         then
705                 echo ""
706                 echo "!!! WARNING !!! - Your system seems to use frequency scaling."
707                 echo "This can have a serious impact on audio latency."
708                 echo "For best results turn it off, e.g. by chosing the 'performance' governor."
709                 echo ""
710                 read -p "Press ENTER to continue:" BLAH
711         fi
712
713         if [ "f" = $USER_GROUP_ADJUSTED ];
714         then
715                 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -memlock > /dev/null";
716                 then
717                         echo ""
718                         echo "!!! WARNING !!! - You are not allowed to lock memory."
719                         echo ""
720                         echo "We will not attempt to fix this. Please configure your system to allow"
721                         echo "non-root users to execute lock memory."
722                         echo ""
723                         read -p "Press ENTER to continue:" BLAH
724                 fi
725         fi
726 fi
727
728
729 ########################
730 # Install Complete
731 ########################
732
733 echo ""
734 echo "Cleaning up"
735 rm -rf ${BUNDLE_DIR}/
736
737 echo ""
738 echo "!!! Install Complete !!!"
739
740 if [ "t" = $USER_GROUP_ADJUSTED ];
741 then
742         echo "You will need to logout and then login again for all changes to be complete"
743 fi
744
745 echo ""
746 read -p "Press ENTER to exit installer:" BLAH
747
748