3 ####################################
6 # Ardour/Mixbus bundle installer
9 ###################################
11 MAJOR_VERSION="%REPLACE_MAJOR_VERSION%"
13 PGM_NAME="%REPLACE_PGM%"
14 PGM_VENDOR="%REPLACE_VENDOR%"
15 PGM_EXEC_FILE="%REPLACE_EXE%${MAJOR_VERSION}"
19 if test -z "$INSTALL_DEST_BASE"; then
20 INSTALL_DEST_BASE="/opt"
26 USER_BIN_DIR="/usr/local/bin"
28 PGM_NAME_LOWER=$(echo $PGM_NAME | tr '[:upper:]' '[:lower:]')
32 #### Global Variables ####
36 ########################
37 # Function Definitions
38 ########################
40 VaildateYesNoQuestion ()
47 until test "y" = $INPUT_OK;
50 read -p "$1 [y/n]: " USER_INPUT
53 if [ ! -z $USER_INPUT ];
55 if [ "Y" = $USER_INPUT -o "y" = $USER_INPUT -o "n" = $USER_INPUT -o "N" = $USER_INPUT ];
62 echo $USER_INPUT | tr '[:upper:]' '[:lower:]'
69 # Determine which software install app to use and then install requested package
72 if which yum > /dev/null;
74 ${SUPER} yum -y install $1
80 echo "!!! ERROR !!! yum install failed for an unknown reason."
81 echo "Please install package $1 after this installer completes."
85 elif which apt-get > /dev/null;
87 ${SUPER} apt-get -y install $1
93 echo "!!! ERROR !!! apt-get install failed for an unknown reason."
94 echo "Please install package $1 after this installer completes."
100 echo "!!! ERROR !!! - Not able to detect which software install tool to use (yum or apt-get)."
101 echo "Please install package $1 using the system software install tool."
110 ########################################################################
112 ########################################################################
115 # If you double click a script, some systems don't get the PWD correct.
116 # Force it to be correct
117 PKG_PATH=$(dirname "$(readlink -f "$0")")
121 echo "Welcome to the ${PGM_NAME} installer"
123 echo "${PGM_NAME} will be installed for user ${USER_NAME} in ${INSTALL_DEST_BASE}"
125 #############################
126 # Check for root privileges
127 #############################
132 if [ "$(id -u)" != "0" ]; then
134 if ! which sudo > /dev/null;
137 echo "Sudo installed failed, attempting to install using su"
138 echo "Please enter root password below"
141 if ! su -s $THE_SHELL -c "./.stage2.run";
146 echo "This installer requires root privileges. It is currently not"
147 echo "running as root AND an attempt to use su failed."
149 echo "Please correct this by installing and configuring sudo or running"
150 echo "the installer as root (su -s $THE_SHELL -c)."
152 read -p "Press ENTER to exit installer:" BLAH
157 sudo -k # make sudo forget about cached credentials
163 echo "Attempting to install using su"
164 echo "Please enter root password below"
167 if ! su -s $THE_SHELL -c "./.stage2.run";
172 echo "This installer requires root privileges. It is currently not"
173 echo "running as root AND an attempt to use both sudo and su failed."
175 echo "Please correct this by installing and configuring sudo or running"
176 echo "the installer as root (su -s $THE_SHELL -c)."
178 read -p "Press ENTER to exit installer:" BLAH
185 # The quoting reqired for the su sanityCheck method does not work when used without
186 # su. Using sh -c in the normal case gets around that, but is a bit of a hack.
189 NORM_USER="su -l $USER_NAME -s $THE_SHELL -c"
192 ###############################
193 # Check for install destination
194 ###############################
196 if test -n "$CALL_MKDIR"; then
197 ${SUPER} mkdir -p "$INSTALL_DEST_BASE"
200 if [ ! -d ${INSTALL_DEST_BASE} ];
203 echo "!!! ERROR !!! - Installation location ${INSTALL_DEST_BASE} does not exist!"
204 echo "Installation will not complete."
206 read -p "Press ENTER to exit installer:" BLAH
211 ############################
212 # Determine processor type
213 ############################
216 i[3456789]86|x86|i86pc)
217 echo "Architecture is x86"
221 echo "Architecture is x86_64"
226 echo "!!! ERROR !!! - Unknown architecture `uname -m`"
228 read -p "Press ENTER to exit installer:" BLAH
237 if test -n "$MULTABI_BUNDLE"; then
238 if ! "${PKG_PATH}/.gcc-glibmm-abi-check" --fail --gcc5; then
243 # allow to manually override
244 if test "$1" = "--gcc4"; then
247 if test "$1" = "--gcc5"; then
258 # We have to check the current folder and the INSTALL_DEST_BASE just
259 # in case they are on different devices
260 echo "Checking for required disk space"
262 if [ ! -e .${PGM_NAME}_${ARCH}${ABI}-*.size ]; then
264 echo "!!! ERROR !!! Can't locate .size file for ${ARCH}${ABI} bundle."
265 echo "This package is broken or does not support ${ARCH}${ABI}."
267 read -p "Press ENTER to exit installer:" BLAH
270 REQUIRED_BYTES=$(cat .${PGM_NAME}_${ARCH}${ABI}-*.size)
272 #Installer needs 2x the space since the bundle is unpacked locally and then copied
273 REQUIRED_BYTES=$(($REQUIRED_BYTES + $REQUIRED_BYTES))
275 #Check space in current folder
276 FREE_BYTES=$(df -P -B 1 "${PKG_PATH}" | grep / | awk '{print $4}')
278 if [ ${FREE_BYTES} -le ${REQUIRED_BYTES} ] ; then
280 echo "!!! ERROR !!! - Insufficient disk space in ${PKG_PATH}"
281 echo "Install requires ${REQUIRED_BYTES} bytes and"
282 echo "there is only ${FREE_BYTES} bytes of free space"
284 read -p "Press ENTER to exit installer:" BLAH
288 #Check space in INSTALL_DEST_BASE
289 FREE_BYTES=$(df -P -B 1 ${INSTALL_DEST_BASE} | grep / | awk '{print $4}')
291 if [ ${FREE_BYTES} -le ${REQUIRED_BYTES} ] ; then
293 echo "!!! ERROR !!! - Insufficient disk space in ${INSTALL_DEST_BASE}"
294 echo "Install requires ${REQUIRED_BYTES} bytes and"
295 echo "there is only ${FREE_BYTES} bytes of free space"
297 read -p "Press ENTER to exit installer:" BLAH
302 #############################
303 # Determine C11 stdlibc++ ABI
304 #############################
306 if test -z "$ABI"; then
307 if %REPLACE_GCC5%; then
308 # Ardour was compiled with gcc5, warn on gcc4 systems
309 if ! "${PKG_PATH}/.gcc-glibmm-abi-check" --gcc5; then
311 echo "WARNING: GCC4/5 libstdc++ ABI Mismatch"
313 echo "${PGM_NAME} was compiled with gcc5, your system uses an older version of the"
314 echo "standard c++ library. Plugins on your system may not load or plugin-UIs"
315 echo "may cause crashes."
317 ANSWER=$(VaildateYesNoQuestion "Continue anyway?")
318 if test "n" = $ANSWER; then
323 # Ardour was compiled with gcc4, warn on gcc5 systems
324 if ! "${PKG_PATH}/.gcc-glibmm-abi-check" --gcc4 ; then
326 echo "WARNING: GCC4/5 libstdc++ ABI Mismatch"
328 echo "${PGM_NAME} was compiled with gcc4, your system uses a newer version of the"
329 echo "standard c++ library. Plugins on your system may not load or plugin-UIs"
330 echo "may cause crashes."
332 ANSWER=$(VaildateYesNoQuestion "Continue anyway?")
333 if test "n" = $ANSWER; then
340 if %REPLACE_WINE%; then
341 if test -z "`which wine`"; then
343 echo "!!! ERROR !!! - 'wine' was not found."
345 echo "This version of ${PGM_NAME} with Windows VST support requires wine."
346 echo "https://www.winehq.org/"
348 read -p "Press ENTER to exit installer:" BLAH
353 #####################
355 #####################
357 FILESYSTEM_TYPE=$(df -P -T "${PKG_PATH}" | grep / | awk '{print $2}')
358 echo "Bundle is on ${FILESYSTEM_TYPE} filesystem"
360 # untar the correct bundle for us to install
361 echo "Unpacking bundle for $ARCH${ABI}"
363 if [ ! -e ${PGM_NAME}_${ARCH}${ABI}-*.tar ]; then
365 echo "!!! ERROR !!! Can't locate ${ARCH}${ABI} bundle file."
367 read -p "Press ENTER to exit installer:" BLAH
371 if ! tar -xf ${PGM_NAME}_${ARCH}${ABI}-*.tar; then
373 echo "!!! ERROR !!! Can't unpack ${ARCH}${ABI} bundle file."
375 read -p "Press ENTER to exit installer:" BLAH
378 echo "Bundle unpacked"
381 BUNDLE_DIR=$(basename `find -maxdepth 1 -type d -name "${PGM_NAME}_${ARCH}-*"`)
384 #######################
385 # Check for xdg utils
386 #######################
388 #load the file that contains the translated names of the users directories
389 if [ -e /home/${USER_NAME}/.config/user-dirs.dirs ]; then
390 . /home/${USER_NAME}/.config/user-dirs.dirs
393 if [ "$(id -u)" != "0" ]; then
394 USER_DESKTOP_DIR=${XDG_DESKTOP_DIR:-$HOME/Desktop}
396 #running as root with su makes this more difficult
397 DESKTOP_FOLDER=$(echo ${XDG_DESKTOP_DIR:-$HOME/Desktop} | awk -F/ '{print $NF}')
398 USER_DESKTOP_DIR="/home/${USER_NAME}/${DESKTOP_FOLDER}"
401 XDG_MENU_VER=$(xdg-desktop-menu --version 2> /dev/null)
402 if [ -z "$XDG_MENU_VER" ];
404 echo "System does not have xdg-desktop-menu installed"
408 XDG_ICON_VER=$(xdg-icon-resource --version 2> /dev/null)
409 if [ -z "$XDG_ICON_VER" ];
411 echo "System does not have xdg-icon-resource installed"
415 #################################################
417 #################################################
418 if %REPLACE_WINE%; then
420 echo "Searching libwine.so (Windows VST support)"
421 # we need to add libwine to ardour's LD_LIBRARY_PATH
422 # libwine itself includes paths to the various system-components
423 # which may be different on each platform.
425 # There's some chicken/egg here: ardour.exe.so is linked against libwine.so
426 # at build-time. wine/wineloader assumes a windows-application (which does not use libwine
427 # directly) and does not set up the LD path to libwine itself. the application terminates
428 # (missing libs) before it even starts..
430 # wine itself does not provide means to find the location of libwine.
431 # /usr/bin/wine is usually shell-script and libwine.so can be found in
432 # various places on different distros.
434 # if this check were quick and easy.. it should be done in the startup-script, but it's not
435 # so here we go... (updating wine may require re-installing ardour)
437 # on recent Ubuntu wine does load both:
438 # /usr/lib/i386-linux-gnu/libwine.so.1
440 # /usr/lib/x86_64-linux-gnu/libwine.so.1
441 # so we need to work around this (thanks).
442 # (this hack break 64bit LinuxVST builds, but we don't do those anyway)
445 LD_DEBUG=files wine `pwd`/${BUNDLE_DIR}/lib/ardour-vst-scanner.exe.so 2>&1 \
446 | grep -e "calling init:.*libwine" \
447 | sed 's/^.*calling init: //' \
448 | grep -v x86_64-linux-gnu \
451 if ! test -f "$LIBWINE"; then
453 echo "!!! ERROR !!! - 'libwine.so*' was not found."
455 read -p "Press ENTER to exit installer:" BLAH
458 echo "Using: $LIBWINE"
459 # this replaces/overwrites the bundled libwine
460 cp -L "$LIBWINE" `pwd`/${BUNDLE_DIR}/lib/libwine.so.1
463 #################################################
464 # Check if system libs are OK (libc, etc)
465 #################################################
468 echo "Checking system libs to see if they are compatible with ${PGM_NAME}."
472 LD_PATH=`pwd`/${BUNDLE_DIR}/lib
475 LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd ${BUNDLE_DIR}/bin/${PGM_NAME_LOWER}-* 2>&1 > /dev/null | grep -v "no version information")
477 if [ -n "$LDD_RESULT" ];
484 LIB_FILES=$(find ${BUNDLE_DIR}/lib -name "*.so")
486 for path in $LIB_FILES
488 LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd $path 2>&1 > /dev/null | grep -v "no version information")
489 if [ -n "$LDD_RESULT" ];
496 if test "T" = $LIB_ERROR;
499 echo "!!! ERROR !!! - Missing library detected!"
500 echo "This system does not have the correct libs to run ${PGM_NAME}."
501 echo "Installation will not complete. Please use a compatible distro."
503 read -p "Press ENTER to exit installer:" BLAH
507 ################################
508 # Setup derived variables
509 ################################
510 PGM_VERSION=$(echo ${BUNDLE_DIR} | cut -d- -f2)
511 PGM_BUILDTYPE=$(echo ${BUNDLE_DIR} | cut -d- -f3)
513 if [ -z ${PGM_BUILDTYPE} ];
515 PGM_FULL_NAME="${PGM_NAME}-${PGM_VERSION}"
516 ICON_NAME="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}" #no dash between name and version since dash seperates vendor from program
517 MENU_FILE="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}.desktop" #no dash between name and version since dash seperates vendor from program
518 DESKTOP_LINK_FILE="${PGM_NAME}_${PGM_VERSION}.desktop"
520 PGM_FULL_NAME="${PGM_NAME}-${PGM_VERSION}-${PGM_BUILDTYPE}"
521 ICON_NAME="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}_${PGM_BUILDTYPE}" #no dash between name and version since dash seperates vendor from program
522 MENU_FILE="${PGM_VENDOR}-${PGM_NAME}_${PGM_VERSION}_${PGM_BUILDTYPE}.desktop" #no dash between name and version since dash seperates vendor from program
523 DESKTOP_LINK_FILE="${PGM_NAME}_${PGM_VERSION}_${PGM_BUILDTYPE}.desktop"
526 PGM_EXEC_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/${PGM_EXEC_FILE}"
527 ICON_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/share/resources"
528 MENU_FILE_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/share"
530 ################################
531 # Install bundle and Menu/Link
532 ################################
534 # uninstall any older versions
535 UNINSTALLERS=$(find ${INSTALL_DEST_BASE} -maxdepth 1 -type f -name "${PGM_NAME}-*.uninstall.sh")
536 if [ ! -z "$UNINSTALLERS" ];
538 for i in $UNINSTALLERS; do
540 echo "Found existing ${PGM_NAME} installation."
542 ANSWER=$(VaildateYesNoQuestion "Do you want to run the uninstaller ${i} ?")
544 if test "y" = $ANSWER;
547 echo "Running uninstaller $i"
559 echo "Installing ${PGM_NAME} ${PGM_VERSION} in ${INSTALL_DEST_BASE}"
562 # Copy the new version in the install directory
563 ${SUPER} mkdir ${INSTALL_DEST_BASE}/${PGM_FULL_NAME}
564 ${SUPER} cp -Rf ${BUNDLE_DIR}/* ${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/
566 # write the desktop/menu file
567 echo "[Desktop Entry]" > /tmp/${MENU_FILE}
568 echo "Encoding=UTF-8" >> /tmp/${MENU_FILE}
569 echo "Version=1.0" >> /tmp/${MENU_FILE}
570 echo "Type=Application" >> /tmp/${MENU_FILE}
571 echo "Terminal=false" >> /tmp/${MENU_FILE}
572 echo "Exec=${PGM_EXEC_PATH}" >> /tmp/${MENU_FILE}
573 if [ -z ${PGM_BUILDTYPE} ];
575 echo "Name=${PGM_NAME}-${PGM_VERSION}" >> /tmp/${MENU_FILE}
577 echo "Name=${PGM_NAME}-${PGM_VERSION}-${PGM_BUILDTYPE}" >> /tmp/${MENU_FILE}
579 echo "Icon=${ICON_NAME}" >> /tmp/${MENU_FILE}
580 echo "Comment=Digital Audio Workstation" >> /tmp/${MENU_FILE}
581 echo "Categories=AudioVideo;AudioEditing;Audio;Recorder;" >> /tmp/${MENU_FILE}
583 chmod ugo+rx /tmp/${MENU_FILE}
584 ${SUPER} mv /tmp/${MENU_FILE} ${MENU_FILE_PATH}/.
586 # install the Menu, Link, and Icon(s)
587 if [ "T" = ${HAS_XDG} ];
589 echo "Adding ${PGM_NAME} to the applications menu"
590 ${SUPER} xdg-icon-resource install --context apps --size 16 ${ICON_PATH}/${PGM_NAME}-icon_16px.png ${ICON_NAME}
591 ${SUPER} xdg-icon-resource install --context apps --size 22 ${ICON_PATH}/${PGM_NAME}-icon_22px.png ${ICON_NAME}
592 ${SUPER} xdg-icon-resource install --context apps --size 32 ${ICON_PATH}/${PGM_NAME}-icon_32px.png ${ICON_NAME}
593 ${SUPER} xdg-icon-resource install --context apps --size 48 ${ICON_PATH}/${PGM_NAME}-icon_48px.png ${ICON_NAME}
594 ${SUPER} xdg-icon-resource install --context apps --size 256 ${ICON_PATH}/${PGM_NAME}-icon_256px.png ${ICON_NAME}
596 if [ -e ${ICON_PATH}/${PGM_NAME}_icon.svg -a -d /usr/share/icons/hicolor/scalable/apps ];
598 ${SUPER} cp -f ${ICON_PATH}/${PGM_NAME}_icon.svg /usr/share/icons/hicolor/scalable/apps/${ICON_NAME}.svg
601 ${SUPER} xdg-desktop-menu install ${MENU_FILE_PATH}/${MENU_FILE}
602 ${SUPER} xdg-desktop-menu forceupdate --mode system # Some systems need an extra kick
605 echo "Creating a desktop link for ${PGM_NAME} in ${USER_DESKTOP_DIR}"
606 cp ${MENU_FILE_PATH}/${MENU_FILE} "${USER_DESKTOP_DIR}/${DESKTOP_LINK_FILE}"
607 chmod ugo+rwx "${USER_DESKTOP_DIR}/${DESKTOP_LINK_FILE}"
610 echo "Creating a desktop link for ${PGM_NAME} in ${USER_DESKTOP_DIR}"
611 cp ${MENU_FILE_PATH}/${MENU_FILE} "${USER_DESKTOP_DIR}/${DESKTOP_LINK_FILE}"
612 chmod ugo+rwx "${USER_DESKTOP_DIR}/${DESKTOP_LINK_FILE}"
616 echo "Copying uninstall script to ${INSTALL_DEST_BASE}"
619 ${SUPER} cp -f ${BUNDLE_DIR}/bin/*.uninstall.sh ${INSTALL_DEST_BASE}/.
621 # Create link to the program in user bin
624 echo "Creating link ${PGM_NAME}${MAJOR_VERSION} in ${USER_BIN_DIR}"
627 if [ -d "${USER_BIN_DIR}" ]; then
628 if [ -e "${USER_BIN_DIR}/${PGM_NAME}${MAJOR_VERSION}" ]; then
629 ${SUPER} rm -f ${USER_BIN_DIR}/${PGM_NAME}${MAJOR_VERSION}
633 ${SUPER} ln -sf ${PGM_EXEC_PATH} ${PGM_NAME}${MAJOR_VERSION}
637 echo "Can not create link because ${USER_BIN_DIR} does not exist"
640 ###########################
641 # Check Jack and qjackctl
642 ###########################
645 echo "Checking to see if Jack is installed"
650 if which jackd > /dev/null; then
652 echo "Jack already present"
653 elif which jackdbus > /dev/null; then
655 echo "jackdbus was found but not jackd. Jack version compatibility check cannot be performed."
660 echo "The program Jack is missing from this system."
662 echo "Jack is a very useful utility to allow you to interconnect $PGM_NAME and other audio/MIDI applications."
663 echo "You can use $PGM_NAME without it, but you may find it useful to have around."
666 ANSWER=$(VaildateYesNoQuestion "Install jack using system software repository?")
668 if test "y" = $ANSWER;
670 echo "Attempting to install Jack"
671 SystemInstall "jackd"
676 read -p "Press ENTER to continue:" BLAH
683 # Check to see if Jack is new enough to operate correctly.
685 if [ "t" = ${JACK_INSTALLED} ];
688 JACK_VER_STRING=$(jackd --version | grep -e "jackd.*protocol")
689 JACK_NAME=$(echo $JACK_VER_STRING | awk '{print $1}')
690 JACK_VERSION=$(echo $JACK_VER_STRING | awk '{print $3}')
691 JACK_VERSION_MAJOR=$(echo $JACK_VERSION | awk 'BEGIN{FS="."}{print $1}')
692 JACK_VERSION_MIDDLE=$(echo $JACK_VERSION | awk 'BEGIN{FS="."}{print $2}')
693 JACK_VERSION_MINOR=$(echo $JACK_VERSION | awk 'BEGIN{FS="."}{print $3}')
695 if [ "jackd" = ${JACK_NAME} ];
697 if [ ${JACK_VERSION_MAJOR} -eq 0 ];
699 if [ ${JACK_VERSION_MIDDLE} -eq 121 ];
701 if [ ${JACK_VERSION_MINOR} -ge 3 ];
705 elif [ ${JACK_VERSION_MIDDLE} -gt 121 ];
709 elif [ ${JACK_VERSION_MAJOR} -gt 0 ];
713 elif [ "jackdmp" = ${JACK_NAME} ];
715 if [ ${JACK_VERSION_MAJOR} -eq 1 ];
717 if [ ${JACK_VERSION_MIDDLE} -eq 9 ];
719 if [ ${JACK_VERSION_MINOR} -ge 8 ];
723 elif [ ${JACK_VERSION_MIDDLE} -gt 9 ];
727 elif [ ${JACK_VERSION_MAJOR} -gt 1 ];
733 if [ "t" = ${JACK_VERSION_OK} ];
736 echo "Jack Version Check OK (${JACK_VER_STRING})"
740 echo "!!! WARNING !!! - The version of Jack on this system is too old!"
741 echo "Using an old version of Jack is not recommended. Please update"
742 echo "Jack for best results."
744 echo "System Jack version:"
745 echo " ${JACK_VER_STRING}"
747 echo "Recommended minimum versions:"
748 echo " Jack1 - 0.121.3"
749 echo " Jack2 - 1.9.8"
751 read -p "Press ENTER to continue:" BLAH
755 if ! which qjackctl > /dev/null;
758 echo "The program QjackCtl is missing from this system."
759 echo "QjackCtl is an extremely useful tool for any system that runs JACK applications like $PGM_NAME."
760 echo "We recommend that you install it."
763 ANSWER=$(VaildateYesNoQuestion "Install QjackCtl using system software repository?")
765 if test "y" = $ANSWER;
767 echo "Attempting to install QjackCtl"
768 SystemInstall "qjackctl"
773 read -p "Press ENTER to continue:" BLAH
779 ########################
781 ########################
783 USER_GROUP_ADJUSTED="f"
785 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -a > /dev/null";
788 echo "System failed the quick sanity check... Looking for the cause"
790 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -rt > /dev/null";
793 echo "System does not allow realtime for the current user... Looking for a solution"
795 if ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -hasaudiogroup > /dev/null";
797 if ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -memberaudiogroup > /dev/null 2>&1";
799 ## This is an odd case. We have an audio group and are a member.
801 echo "!!! WARNING !!! - The current user can not execute realtime processes."
802 echo "This will adversely affect audio latency."
803 echo "This system has an audio group and the user is a member. If jack was"
804 echo "just installed, a simple log out/in may fix this."
806 echo "For best results, please correct this on your system."
807 echo "(Hint: check /etc/security/limits.conf or /etc/security/limits.d/)"
809 read -p "Press ENTER to continue:" BLAH
811 # Not a member of an audio group. Try to fix it.
813 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" ";
815 # add user to audio group
817 echo "Adding user ${USER_NAME} to the audio group."
818 echo "This should allow you to run realtime tasks. Please re-login for this change to take affect."
820 read -p "Press ENTER to continue:" BLAH
822 if ${SUPER} usermod -a -G audio ${USER_NAME};
824 USER_GROUP_ADJUSTED="t"
827 echo "!!! ERROR !!! - Not able to add user to the audio group (usermod failed)!"
829 echo "Please add yourself to the audio group and re-login"
831 read -p "Press ENTER to continue:" BLAH
834 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" ";
836 # add user to jackuser group
838 echo "Adding user ${USER_NAME} to the jackuser group."
839 echo "This should allow you to run realtime tasks. Please re-login for this change to take affect."
841 read -p "Press ENTER to continue:" BLAH
843 if ${SUPER} usermod -a -G jackuser ${USER_NAME};
845 USER_GROUP_ADJUSTED="t"
848 echo "!!! ERROR !!! - Not able to add user to the jackuser group."
850 echo "Please add yourself to the audio group and re-login"
852 read -p "Press ENTER to continue:" BLAH
859 # No audio group found on this system!
861 echo "!!! WARNING !!! - The system does not seem to have an audio group (audio or jackuser)."
863 echo "We will not attempt to fix this. Please configure your system to allow"
864 echo "non-root users to execute realtime tasks."
866 read -p "Press ENTER to continue:" BLAH
870 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -freqscaling > /dev/null";
873 echo "!!! WARNING !!! - Your system seems to use frequency scaling."
874 echo "This can have a serious impact on audio latency."
875 echo "For best results turn it off, e.g. by choosing the 'performance' governor."
877 read -p "Press ENTER to continue:" BLAH
880 if [ "f" = $USER_GROUP_ADJUSTED ];
882 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -memlock > /dev/null";
885 echo "!!! WARNING !!! - You are not allowed to lock memory."
887 echo "We will not attempt to fix this. Please configure your system to allow"
888 echo "non-root users to execute lock memory."
890 read -p "Press ENTER to continue:" BLAH
896 ########################
898 ########################
902 rm -rf ${BUNDLE_DIR}/
905 echo "!!! Install Complete !!!"
907 if [ "t" = $USER_GROUP_ADJUSTED ];
909 echo "You will need to logout and then login again for all changes to be complete"
913 read -p "Press ENTER to exit installer:" BLAH