correctly copy vfork exec wrapper into right location in binary bundles on OS X and...
[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} | cut -d- -f2)
375 PGM_BUILDTYPE=$(echo ${BUNDLE_DIR} | cut -d- -f3)
376
377 if [ -z ${PGM_BUILDTYPE} ];
378 then
379         PGM_FULL_NAME="${PGM_NAME}-${PGM_VERSION}"
380         ICON_NAME="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}"                    #no dash between name and version since dash seperates vendor from program
381         MENU_FILE="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}.desktop"    #no dash between name and version since dash seperates vendor from program
382         DESKTOP_LINK_FILE="${PGM_NAME}_${PGM_VERSION}.desktop"
383 else
384         PGM_FULL_NAME="${PGM_NAME}-${PGM_VERSION}-${PGM_BUILDTYPE}"
385         ICON_NAME="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}_${PGM_BUILDTYPE}"                   #no dash between name and version since dash seperates vendor from program
386         MENU_FILE="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}_${PGM_BUILDTYPE}.desktop"   #no dash between name and version since dash seperates vendor from program
387         DESKTOP_LINK_FILE="${PGM_NAME}_${PGM_VERSION}_${PGM_BUILDTYPE}.desktop"
388 fi
389
390 PGM_EXEC_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/${PGM_EXEC_FILE}"
391 ICON_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/share/icons"
392 MENU_FILE_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/share"
393
394 ################################
395 # Install bundle and Menu/Link
396 ################################
397
398 # uninstall any older versions
399 UNINSTALLERS=$(find ${INSTALL_DEST_BASE} -maxdepth 1 -type f -name "${PGM_NAME}*.uninstall.sh")
400 if [ ! -z "$UNINSTALLERS" ];
401 then
402         for i in $UNINSTALLERS; do
403                 echo ""
404                 echo "Found existing ${PGM_NAME} installation."
405                 
406                 ANSWER=$(VaildateYesNoQuestion "Do you want to run the uninstaller ${i} ?")
407
408                 if test "y" = $ANSWER;
409                 then
410                         echo ""
411                         echo "Running uninstaller $i"
412                         
413                         ${i}
414                         ${SUPER} rm -f ${i}
415                 fi
416         done
417 fi
418
419
420 # install 
421
422 echo ""
423 echo "Installing ${PGM_NAME} ${PGM_VERSION} in ${INSTALL_DEST_BASE}"
424 echo ""
425
426 # Copy the new version in the install directory
427 ${SUPER} mkdir ${INSTALL_DEST_BASE}/${PGM_FULL_NAME} 
428 ${SUPER} cp -Rf ${BUNDLE_DIR}/* ${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/
429
430 # write the desktop/menu file
431 echo "[Desktop Entry]" > /tmp/${MENU_FILE}
432 echo "Encoding=UTF-8" >> /tmp/${MENU_FILE}
433 echo "Version=1.0" >> /tmp/${MENU_FILE}
434 echo "Type=Application" >> /tmp/${MENU_FILE}
435 echo "Terminal=false" >> /tmp/${MENU_FILE}
436 echo "Exec=${PGM_EXEC_PATH}" >> /tmp/${MENU_FILE}
437 if [ -z ${PGM_BUILDTYPE} ];
438 then
439         echo "Name=${PGM_NAME}-${PGM_VERSION}" >> /tmp/${MENU_FILE}
440 else
441         echo "Name=${PGM_NAME}-${PGM_VERSION}-${PGM_BUILDTYPE}" >> /tmp/${MENU_FILE}
442 fi
443 echo "Icon=${ICON_NAME}" >> /tmp/${MENU_FILE}
444 echo "Comment=Digital Audio Workstation" >> /tmp/${MENU_FILE}
445 echo "Categories=AudioVideo;AudioEditing;Audio;Recorder;" >> /tmp/${MENU_FILE}
446
447 chmod ugo+rx /tmp/${MENU_FILE}
448 ${SUPER} mv /tmp/${MENU_FILE} ${MENU_FILE_PATH}/.
449
450 # install the Menu, Link, and Icon(s)
451 if [ "T" = ${HAS_XDG} ];
452 then
453         echo "Adding ${PGM_NAME} to the applications menu"
454         ${SUPER} xdg-icon-resource install --context apps --size 16 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_16px.png ${ICON_NAME}
455         ${SUPER} xdg-icon-resource install --context apps --size 22 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_22px.png ${ICON_NAME}
456         ${SUPER} xdg-icon-resource install --context apps --size 32 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_32px.png ${ICON_NAME}
457         ${SUPER} xdg-icon-resource install --context apps --size 48 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_48px.png ${ICON_NAME}
458         ${SUPER} xdg-icon-resource install --context apps --size 256 ${ICON_PATH}/${PGM_NAME_LOWER}_icon_256px.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 [ ${JACK_VERSION_MAJOR} -eq 0 ];
555                 then
556                         if [ ${JACK_VERSION_MIDDLE} -eq 121 ];
557                         then
558                                 if [ ${JACK_VERSION_MINOR} -ge 3 ];
559                                 then
560                                         JACK_VERSION_OK="t"
561                                 fi
562                         elif [ ${JACK_VERSION_MIDDLE} -gt 121 ];
563                         then
564                                 JACK_VERSION_OK="t"
565                         fi
566                 elif [ ${JACK_VERSION_MAJOR} -gt 0 ];
567                 then
568                         JACK_VERSION_OK="t"
569                 fi
570         elif [ "jackdmp" = ${JACK_NAME} ];
571         then
572                 if [ ${JACK_VERSION_MAJOR} -eq 1 ];
573                 then
574                         if [ ${JACK_VERSION_MIDDLE} -eq 9 ];
575                         then
576                                 if [ ${JACK_VERSION_MINOR} -ge 8 ];
577                                 then
578                                         JACK_VERSION_OK="t"
579                                 fi
580                         elif [ ${JACK_VERSION_MIDDLE} -gt 9 ];
581                         then
582                                 JACK_VERSION_OK="t"
583                         fi
584                 elif [ ${JACK_VERSION_MAJOR} -gt 1 ];
585                 then
586                         JACK_VERSION_OK="t"
587                 fi
588         fi
589
590         if [ "t" = ${JACK_VERSION_OK} ];
591         then
592                 echo ""
593                 echo "Jack Version Check OK (${JACK_VER_STRING})"
594                 echo ""
595         else
596                 echo ""
597                 echo "!!! WARNING !!! - The version of Jack on this system is too old!"
598                 echo "Using an old version of Jack is not recommended. Please update"
599                 echo "Jack for best results."
600                 echo ""
601                 echo "System Jack version:"
602                 echo "   ${JACK_VER_STRING}"
603                 echo ""
604                 echo "Recommended minimum versions:"
605                 echo "   Jack1 - 0.121.3"
606                 echo "   Jack2 - 1.9.8"
607                 echo ""
608                 read -p "Press ENTER to continue:" BLAH
609         fi
610 fi
611
612 if ! which qjackctl > /dev/null;
613 then
614         echo ""
615         echo "The program QjackCtl is missing from this system."
616         echo "QjackCtl is an extremely useful tool for any system that runs JACK applications like $PGM_NAME."
617         echo "We recommend that you install it."
618         echo ""
619
620         ANSWER=$(VaildateYesNoQuestion "Install QjackCtl using system software repository?")
621
622         if test "y" = $ANSWER;
623         then
624                 echo "Attempting to install QjackCtl"
625                 SystemInstall "qjackctl"
626
627                 if [ $? -ne 0 ];
628                 then
629                         echo ""
630                         read -p "Press ENTER to continue:" BLAH
631                 fi
632         fi
633 fi
634
635
636 ########################
637 # Run Sanity Check
638 ########################
639
640 USER_GROUP_ADJUSTED="f"
641
642 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -a > /dev/null";
643 then
644         echo ""
645         echo "System failed the quick sanity check... Looking for the cause"
646
647         if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -rt > /dev/null";
648         then
649                 echo ""
650                 echo "System does not allow realtime for the current user... Looking for a solution"            
651                 
652                 if ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -hasaudiogroup > /dev/null";
653                 then
654                         if ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -memberaudiogroup > /dev/null 2>&1";
655                         then
656                                 ## This is an odd case. We have an audio group and are a member.
657                                 echo ""
658                                 echo "!!! WARNING !!! - The current user can not execute realtime processes."
659                                 echo "This will adversely affect audio latency."
660                                 echo "This system has an audio group and the user is a member. If jack was"
661                                 echo "just installed, a simple log out/in may fix this."
662                                 echo ""
663                                 echo "For best results, please correct this on your system."
664                                 echo "(Hint: check /etc/security/limits.conf or /etc/security/limits.d/)" 
665                                 echo ""
666                                 read -p "Press ENTER to continue:" BLAH
667                         else
668                                 # Not a member of an audio group. Try to fix it.
669                                 
670                                 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" ";
671                                 then
672                                         # add user to audio group
673                                         echo ""
674                                         echo "Adding user ${USER_NAME} to the audio group."
675                                         echo "This should allow you to run realtime tasks. Please re-login for this change to take affect."
676                                         echo ""
677                                         read -p "Press ENTER to continue:" BLAH
678
679                                         if ${SUPER} usermod -a -G audio ${USER_NAME};
680                                         then
681                                                 USER_GROUP_ADJUSTED="t"
682                                         else
683                                                 echo ""
684                                                 echo "!!! ERROR !!! - Not able to add user to the audio group (usermod failed)!"
685                                                 echo ""
686                                                 echo "Please add yourself to the audio group and re-login"
687                                                 echo ""
688                                                 read -p "Press ENTER to continue:" BLAH
689                                         fi
690
691                                 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" ";
692                                 then
693                                         # add user to jackuser group
694                                         echo ""
695                                         echo "Adding user ${USER_NAME} to the jackuser group."
696                                         echo "This should allow you to run realtime tasks. Please re-login for this change to take affect."
697                                         echo ""
698                                         read -p "Press ENTER to continue:" BLAH
699
700                                         if ${SUPER} usermod -a -G jackuser ${USER_NAME};
701                                         then
702                                                 USER_GROUP_ADJUSTED="t"
703                                         else
704                                                 echo ""
705                                                 echo "!!! ERROR !!! - Not able to add user to the jackuser group."
706                                                 echo ""
707                                                 echo "Please add yourself to the audio group and re-login"
708                                                 echo ""
709                                                 read -p "Press ENTER to continue:" BLAH
710                                         fi
711                                         
712
713                                 fi
714                         fi
715                 else
716                         # No audio group found on this system!
717                         echo ""
718                         echo "!!! WARNING !!! - The system does not seem to have an audio group (audio or jackuser)."
719                         echo ""
720                         echo "We will not attempt to fix this. Please configure your system to allow"
721                         echo "non-root users to execute realtime tasks."
722                         echo ""
723                         read -p "Press ENTER to continue:" BLAH
724                 fi
725         fi
726
727         if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -freqscaling > /dev/null";
728         then
729                 echo ""
730                 echo "!!! WARNING !!! - Your system seems to use frequency scaling."
731                 echo "This can have a serious impact on audio latency."
732                 echo "For best results turn it off, e.g. by chosing the 'performance' governor."
733                 echo ""
734                 read -p "Press ENTER to continue:" BLAH
735         fi
736
737         if [ "f" = $USER_GROUP_ADJUSTED ];
738         then
739                 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -memlock > /dev/null";
740                 then
741                         echo ""
742                         echo "!!! WARNING !!! - You are not allowed to lock memory."
743                         echo ""
744                         echo "We will not attempt to fix this. Please configure your system to allow"
745                         echo "non-root users to execute lock memory."
746                         echo ""
747                         read -p "Press ENTER to continue:" BLAH
748                 fi
749         fi
750 fi
751
752
753 ########################
754 # Install Complete
755 ########################
756
757 echo ""
758 echo "Cleaning up"
759 rm -rf ${BUNDLE_DIR}/
760
761 echo ""
762 echo "!!! Install Complete !!!"
763
764 if [ "t" = $USER_GROUP_ADJUSTED ];
765 then
766         echo "You will need to logout and then login again for all changes to be complete"
767 fi
768
769 echo ""
770 read -p "Press ENTER to exit installer:" BLAH
771
772