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 ! ${NORM_USER} "${PKG_PATH}/.gcc-glibmm-abi-check --fail --gcc5 > /dev/null"; 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 ! ${NORM_USER} "${PKG_PATH}/.gcc-glibmm-abi-check --gcc5 > /dev/null"; 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 ! ${NORM_USER} "${PKG_PATH}/.gcc-glibmm-abi-check --gcc4 > /dev/null"; 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. Jack is a required component of $PGM_NAME."
663 ANSWER=$(VaildateYesNoQuestion "Install jack using system software repository?")
665 if test "y" = $ANSWER;
667 echo "Attempting to install Jack"
668 SystemInstall "jackd"
673 read -p "Press ENTER to continue:" BLAH
680 # Check to see if Jack is new enough to operate correctly.
682 if [ "t" = ${JACK_INSTALLED} ];
685 JACK_VER_STRING=$(jackd --version | grep -e "jackd.*protocol")
686 JACK_NAME=$(echo $JACK_VER_STRING | awk '{print $1}')
687 JACK_VERSION=$(echo $JACK_VER_STRING | awk '{print $3}')
688 JACK_VERSION_MAJOR=$(echo $JACK_VERSION | awk 'BEGIN{FS="."}{print $1}')
689 JACK_VERSION_MIDDLE=$(echo $JACK_VERSION | awk 'BEGIN{FS="."}{print $2}')
690 JACK_VERSION_MINOR=$(echo $JACK_VERSION | awk 'BEGIN{FS="."}{print $3}')
692 if [ "jackd" = ${JACK_NAME} ];
694 if [ ${JACK_VERSION_MAJOR} -eq 0 ];
696 if [ ${JACK_VERSION_MIDDLE} -eq 121 ];
698 if [ ${JACK_VERSION_MINOR} -ge 3 ];
702 elif [ ${JACK_VERSION_MIDDLE} -gt 121 ];
706 elif [ ${JACK_VERSION_MAJOR} -gt 0 ];
710 elif [ "jackdmp" = ${JACK_NAME} ];
712 if [ ${JACK_VERSION_MAJOR} -eq 1 ];
714 if [ ${JACK_VERSION_MIDDLE} -eq 9 ];
716 if [ ${JACK_VERSION_MINOR} -ge 8 ];
720 elif [ ${JACK_VERSION_MIDDLE} -gt 9 ];
724 elif [ ${JACK_VERSION_MAJOR} -gt 1 ];
730 if [ "t" = ${JACK_VERSION_OK} ];
733 echo "Jack Version Check OK (${JACK_VER_STRING})"
737 echo "!!! WARNING !!! - The version of Jack on this system is too old!"
738 echo "Using an old version of Jack is not recommended. Please update"
739 echo "Jack for best results."
741 echo "System Jack version:"
742 echo " ${JACK_VER_STRING}"
744 echo "Recommended minimum versions:"
745 echo " Jack1 - 0.121.3"
746 echo " Jack2 - 1.9.8"
748 read -p "Press ENTER to continue:" BLAH
752 if ! which qjackctl > /dev/null;
755 echo "The program QjackCtl is missing from this system."
756 echo "QjackCtl is an extremely useful tool for any system that runs JACK applications like $PGM_NAME."
757 echo "We recommend that you install it."
760 ANSWER=$(VaildateYesNoQuestion "Install QjackCtl using system software repository?")
762 if test "y" = $ANSWER;
764 echo "Attempting to install QjackCtl"
765 SystemInstall "qjackctl"
770 read -p "Press ENTER to continue:" BLAH
776 ########################
778 ########################
780 USER_GROUP_ADJUSTED="f"
782 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -a > /dev/null";
785 echo "System failed the quick sanity check... Looking for the cause"
787 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -rt > /dev/null";
790 echo "System does not allow realtime for the current user... Looking for a solution"
792 if ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -hasaudiogroup > /dev/null";
794 if ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -memberaudiogroup > /dev/null 2>&1";
796 ## This is an odd case. We have an audio group and are a member.
798 echo "!!! WARNING !!! - The current user can not execute realtime processes."
799 echo "This will adversely affect audio latency."
800 echo "This system has an audio group and the user is a member. If jack was"
801 echo "just installed, a simple log out/in may fix this."
803 echo "For best results, please correct this on your system."
804 echo "(Hint: check /etc/security/limits.conf or /etc/security/limits.d/)"
806 read -p "Press ENTER to continue:" BLAH
808 # Not a member of an audio group. Try to fix it.
810 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" ";
812 # add user to audio group
814 echo "Adding user ${USER_NAME} to the audio group."
815 echo "This should allow you to run realtime tasks. Please re-login for this change to take affect."
817 read -p "Press ENTER to continue:" BLAH
819 if ${SUPER} usermod -a -G audio ${USER_NAME};
821 USER_GROUP_ADJUSTED="t"
824 echo "!!! ERROR !!! - Not able to add user to the audio group (usermod failed)!"
826 echo "Please add yourself to the audio group and re-login"
828 read -p "Press ENTER to continue:" BLAH
831 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" ";
833 # add user to jackuser group
835 echo "Adding user ${USER_NAME} to the jackuser group."
836 echo "This should allow you to run realtime tasks. Please re-login for this change to take affect."
838 read -p "Press ENTER to continue:" BLAH
840 if ${SUPER} usermod -a -G jackuser ${USER_NAME};
842 USER_GROUP_ADJUSTED="t"
845 echo "!!! ERROR !!! - Not able to add user to the jackuser group."
847 echo "Please add yourself to the audio group and re-login"
849 read -p "Press ENTER to continue:" BLAH
856 # No audio group found on this system!
858 echo "!!! WARNING !!! - The system does not seem to have an audio group (audio or jackuser)."
860 echo "We will not attempt to fix this. Please configure your system to allow"
861 echo "non-root users to execute realtime tasks."
863 read -p "Press ENTER to continue:" BLAH
867 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -freqscaling > /dev/null";
870 echo "!!! WARNING !!! - Your system seems to use frequency scaling."
871 echo "This can have a serious impact on audio latency."
872 echo "For best results turn it off, e.g. by choosing the 'performance' governor."
874 read -p "Press ENTER to continue:" BLAH
877 if [ "f" = $USER_GROUP_ADJUSTED ];
879 if ! ${NORM_USER} "${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/sanityCheck -memlock > /dev/null";
882 echo "!!! WARNING !!! - You are not allowed to lock memory."
884 echo "We will not attempt to fix this. Please configure your system to allow"
885 echo "non-root users to execute lock memory."
887 read -p "Press ENTER to continue:" BLAH
893 ########################
895 ########################
899 rm -rf ${BUNDLE_DIR}/
902 echo "!!! Install Complete !!!"
904 if [ "t" = $USER_GROUP_ADJUSTED ];
906 echo "You will need to logout and then login again for all changes to be complete"
910 read -p "Press ENTER to exit installer:" BLAH