Skip to content

Commit

Permalink
Improve help message and logging of dev_setup.sh (#3105)
Browse files Browse the repository at this point in the history
* Improve help message and logging

* Fix stray formatting

* Create /var/log/mycroft at the start of execution

* Make sure sudo is available

* Move function found_exe up

* Explicitly call out setup completion

* Add -a flag to append rather than overwrite
  • Loading branch information
mikejgray committed Jun 24, 2022
1 parent 48dd100 commit 1b67bf3
Showing 1 changed file with 65 additions and 62 deletions.
127 changes: 65 additions & 62 deletions dev_setup.sh
Expand Up @@ -68,9 +68,17 @@ Options:
-p arg, --python arg Sets the python version to use
-r, --allow-root Allow to be run as root (e.g. sudo)
-sm Skip mimic build
Need more help? Please visit:
Mycroft Chat (https://chat.mycroft.ai/)
Mycroft Forums (https://community.mycroft.ai/)
'
}

function found_exe() {
hash "$1" 2>/dev/null
}

# Parse the command line
opt_forcemimicbuild=false
opt_allowroot=false
Expand All @@ -79,6 +87,25 @@ opt_python=python3
disable_precise_later=false
param=''

if found_exe sudo ; then
SUDO=sudo
elif found_exe doas ; then
SUDO=doas
elif [[ $opt_allowroot != true ]]; then
echo 'This script requires "sudo" to install system packages. Please install it, then re-run this script.'
exit 1
fi

# create and set permissions for logging
if [[ ! -w /var/log/mycroft/ ]] ; then
# Creating and setting permissions
echo 'Creating /var/log/mycroft/ directory'
if [[ ! -d /var/log/mycroft/ ]] ; then
$SUDO mkdir /var/log/mycroft/
fi
$SUDO chmod 777 /var/log/mycroft/
fi

for var in "$@" ; do
# Check if parameter should be read
if [[ $param == 'python' ]] ; then
Expand Down Expand Up @@ -111,7 +138,7 @@ for var in "$@" ; do
fi
if [[ $var == '-n' || $var == '--no-error' ]] ; then
# Do NOT exit on errors
set +Ee
set +Ee
fi
if [[ $var == '-sm' ]] ; then
opt_skipmimicbuild=true
Expand All @@ -122,27 +149,11 @@ for var in "$@" ; do
done

if [[ $(id -u) -eq 0 && $opt_allowroot != true ]] ; then
echo 'This script should not be run as root or with sudo.'
echo 'If you really need to for this, rerun with --allow-root'
exit 1
fi


function found_exe() {
hash "$1" 2>/dev/null
}


if found_exe sudo ; then
SUDO=sudo
elif found_exe doas ; then
SUDO=doas
elif [[ $opt_allowroot != true ]]; then
echo 'This script requires "sudo" to install system packages. Please install it, then re-run this script.'
echo 'This script should not be run as root or with sudo.' | tee -a /var/log/mycroft/setup.log
echo 'If you really need to for this, rerun with --allow-root' | tee -a /var/log/mycroft/setup.log
exit 1
fi


function get_YN() {
# Loop until the user hits the Y or the N key
echo -e -n "Choice [${CYAN}Y${RESET}/${CYAN}N${RESET}]: "
Expand Down Expand Up @@ -202,7 +213,7 @@ in mycroft.conf.
disable_precise_later=true
fi
else
echo -e "$HIGHLIGHT N - quit the installation $RESET"
echo -e "$HIGHLIGHT N - quit the installation $RESET" | tee -a /var/log/mycroft/setup.log
exit 1
fi
echo
Expand All @@ -214,11 +225,11 @@ a developer modifying mycroft-core itself, you should run on the
Y)es, run on the stable 'master' branch
N)o, I want to run unstable branches"
if get_YN ; then
echo -e "$HIGHLIGHT Y - using 'master' branch $RESET"
echo -e "$HIGHLIGHT Y - using 'master' branch $RESET" | tee -a /var/log/mycroft/setup.log
branch=master
git checkout ${branch}
else
echo -e "$HIGHLIGHT N - using an unstable branch $RESET"
echo -e "$HIGHLIGHT N - using an unstable branch $RESET" | tee -a /var/log/mycroft/setup.log
branch=dev
fi

Expand All @@ -231,10 +242,10 @@ those running against the 'master' branch.
Y)es, automatically check for updates
N)o, I will be responsible for keeping Mycroft updated."
if get_YN ; then
echo -e "$HIGHLIGHT Y - update automatically $RESET"
echo -e "$HIGHLIGHT Y - update automatically $RESET" | tee -a /var/log/mycroft/setup.log
autoupdate=true
else
echo -e "$HIGHLIGHT N - update manually using 'git pull' $RESET"
echo -e "$HIGHLIGHT N - update manually using 'git pull' $RESET" | tee -a /var/log/mycroft/setup.log
autoupdate=false
fi

Expand All @@ -252,9 +263,9 @@ on slower machines. This can be skipped, but Mycroft will be unable to
talk if you lose network connectivity. Would you like to build Mimic
locally?'
if get_YN ; then
echo -e "$HIGHLIGHT Y - Mimic will be built $RESET"
echo -e "$HIGHLIGHT Y - Mimic will be built $RESET" | tee -a /var/log/mycroft/setup.log
else
echo -e "$HIGHLIGHT N - skip Mimic build $RESET"
echo -e "$HIGHLIGHT N - skip Mimic build $RESET" | tee -a /var/log/mycroft/setup.log
opt_skipmimicbuild=true
fi
fi
Expand All @@ -267,7 +278,7 @@ There are several Mycroft helper commands in the bin folder. These
can be added to your system PATH, making it simpler to use Mycroft.
Would you like this to be added to your PATH in the .profile?'
if get_YN ; then
echo -e "$HIGHLIGHT Y - Adding Mycroft commands to your PATH $RESET"
echo -e "$HIGHLIGHT Y - Adding Mycroft commands to your PATH $RESET" | tee -a /var/log/mycroft/setup.log

if [[ ! -f ~/.profile_mycroft ]] ; then
# Only add the following to the .profile if .profile_mycroft
Expand All @@ -287,7 +298,7 @@ if [ -d \"${TOP}/bin\" ] ; then
fi" > ~/.profile_mycroft
echo -e "Type ${CYAN}mycroft-help$RESET to see available commands."
else
echo -e "$HIGHLIGHT N - PATH left unchanged $RESET"
echo -e "$HIGHLIGHT N - PATH left unchanged $RESET" | tee -a /var/log/mycroft/setup.log
fi

# Create a link to the 'skills' folder.
Expand Down Expand Up @@ -316,14 +327,14 @@ fi" > ~/.profile_mycroft
If unsure answer yes.
'
if get_YN ; then
echo 'Will install PEP8 pre-commit hook...'
echo 'Will install PEP8 pre-commit hook...' | tee -a /var/log/mycroft/setup.log
INSTALL_PRECOMMIT_HOOK=true
fi

# Save options
echo '{"use_branch": "'$branch'", "auto_update": '$autoupdate'}' > .dev_opts.json

echo -e '\nInteractive portion complete, now installing dependencies...\n'
echo -e '\nInteractive portion complete, now installing dependencies...\n' | tee -a /var/log/mycroft/setup.log
sleep 5
fi

Expand Down Expand Up @@ -445,42 +456,42 @@ function install_deps() {
echo 'Installing packages...'
if found_exe zypper ; then
# OpenSUSE
echo "$GREEN Installing packages for OpenSUSE...$RESET"
echo "$GREEN Installing packages for OpenSUSE...$RESET" | tee -a /var/log/mycroft/setup.log
open_suse_install
elif found_exe yum && os_is centos ; then
# CentOS
echo "$GREEN Installing packages for Centos...$RESET"
echo "$GREEN Installing packages for Centos...$RESET" | tee -a /var/log/mycroft/setup.log
centos_install
elif found_exe yum && os_is rhel ; then
# Redhat Enterprise Linux
echo "$GREEN Installing packages for Red Hat...$RESET"
echo "$GREEN Installing packages for Red Hat...$RESET" | tee -a /var/log/mycroft/setup.log
redhat_install
elif os_is_like debian || os_is debian || os_is_like ubuntu || os_is ubuntu || os_is linuxmint; then
# Debian / Ubuntu / Mint
echo "$GREEN Installing packages for Debian/Ubuntu/Mint...$RESET"
echo "$GREEN Installing packages for Debian/Ubuntu/Mint...$RESET" | tee -a /var/log/mycroft/setup.log
debian_install
elif os_is_like fedora || os_is fedora; then
# Fedora
echo "$GREEN Installing packages for Fedora...$RESET"
echo "$GREEN Installing packages for Fedora...$RESET" | tee -a /var/log/mycroft/setup.log
fedora_install
elif found_exe pacman && (os_is arch || os_is_like arch); then
# Arch Linux
echo "$GREEN Installing packages for Arch...$RESET"
echo "$GREEN Installing packages for Arch...$RESET" | tee -a /var/log/mycroft/setup.log
arch_install
elif found_exe emerge && os_is gentoo; then
# Gentoo Linux
echo "$GREEN Installing packages for Gentoo Linux ...$RESET"
echo "$GREEN Installing packages for Gentoo Linux ...$RESET" | tee -a /var/log/mycroft/setup.log
gentoo_install
elif found_exe apk && os_is alpine; then
# Alpine Linux
echo "$GREEN Installing packages for Alpine Linux...$RESET"
echo "$GREEN Installing packages for Alpine Linux...$RESET" | tee -a /var/log/mycroft/setup.log
alpine_install
else
echo
echo
echo -e "${YELLOW}Could not find package manager
${YELLOW}Make sure to manually install:$BLUE git python3 python-setuptools python-venv pygobject libtool libffi libjpg openssl autoconf bison swig glib2.0 portaudio19 mpg123 flac curl fann g++ jq\n$RESET"
${YELLOW}Make sure to manually install:$BLUE git python3 python-setuptools python-venv pygobject libtool libffi libjpg openssl autoconf bison swig glib2.0 portaudio19 mpg123 flac curl fann g++ jq\n$RESET" | tee -a /var/log/mycroft/setup.log

echo 'Warning: Failed to install all dependencies. Continue? y/N'
echo 'Warning: Failed to install all dependencies. Continue? y/N' | tee -a /var/log/mycroft/setup.log
read -rn1 continue
if [[ $continue != 'y' ]] ; then
exit 1
Expand Down Expand Up @@ -550,7 +561,7 @@ fi

if [[ ! -x ${VIRTUALENV_ROOT}/bin/activate ]] ; then
if ! install_venv ; then
echo 'Failed to set up virtualenv for mycroft, exiting setup.'
echo 'Failed to set up virtualenv for mycroft, exiting setup.' | tee -a /var/log/mycroft/setup.log
exit 1
fi
fi
Expand All @@ -564,7 +575,7 @@ cd "$TOP"
HOOK_FILE='./.git/hooks/pre-commit'
if [[ -n $INSTALL_PRECOMMIT_HOOK ]] || grep -q 'MYCROFT DEV SETUP' $HOOK_FILE; then
if [[ ! -f $HOOK_FILE ]] || grep -q 'MYCROFT DEV SETUP' $HOOK_FILE; then
echo 'Installing PEP8 check as precommit-hook'
echo 'Installing PEP8 check as precommit-hook' | tee -a /var/log/mycroft/setup.log
echo "#! $(command -v python)" > $HOOK_FILE
echo '# MYCROFT DEV SETUP' >> $HOOK_FILE
cat ./scripts/pre-commit >> $HOOK_FILE
Expand All @@ -584,13 +595,13 @@ if [[ ! -f $VENV_PATH_FILE ]] ; then
fi

if ! grep -q "$TOP" "$VENV_PATH_FILE" ; then
echo 'Adding mycroft-core to virtualenv path'
echo 'Adding mycroft-core to virtualenv path' | tee -a /var/log/mycroft/setup.log
sed -i.tmp "1 a$TOP" "$VENV_PATH_FILE"
fi

# install required python modules
if ! pip install -r requirements/requirements.txt ; then
echo 'Warning: Failed to install required dependencies. Continue? y/N'
echo 'Warning: Failed to install required dependencies. Continue? y/N' | tee -a /var/log/mycroft/setup.log
read -rn1 continue
if [[ $continue != 'y' ]] ; then
exit 1
Expand All @@ -599,9 +610,9 @@ fi

# install optional python modules
if [[ ! $(pip install -r requirements/extra-audiobackend.txt) ||
! $(pip install -r requirements/extra-stt.txt) ||
! $(pip install -r requirements/extra-mark1.txt) ]] ; then
echo 'Warning: Failed to install some optional dependencies. Continue? y/N'
! $(pip install -r requirements/extra-stt.txt) ||
! $(pip install -r requirements/extra-mark1.txt) ]] ; then
echo 'Warning: Failed to install some optional dependencies. Continue? y/N' | tee -a /var/log/mycroft/setup.log
read -rn1 continue
if [[ $continue != 'y' ]] ; then
exit 1
Expand All @@ -610,7 +621,7 @@ fi


if ! pip install -r requirements/tests.txt ; then
echo "Warning: Test requirements failed to install. Note: normal operation should still work fine..."
echo "Warning: Test requirements failed to install. Note: normal operation should still work fine..." | tee -a /var/log/mycroft/setup.log
fi

SYSMEM=$(free | awk '/^Mem:/ { print $2 }')
Expand All @@ -630,18 +641,18 @@ elif [[ $MAXCORES -lt $CORES ]] ; then
CORES=$MAXCORES
fi

echo "Building with $CORES cores."
echo "Building with $CORES cores." | tee -a /var/log/mycroft/setup.log

#build and install pocketsphinx
#build and install mimic

cd "$TOP"

if [[ $build_mimic == 'y' || $build_mimic == 'Y' ]] ; then
echo 'WARNING: The following can take a long time to run!'
echo 'WARNING: The following can take a long time to run!' | tee -a /var/log/mycroft/setup.log
"${TOP}/scripts/install-mimic.sh" "$CORES"
else
echo 'Skipping mimic build.'
echo 'Skipping mimic build.' | tee -a /var/log/mycroft/setup.log
fi

# set permissions for common scripts
Expand All @@ -657,15 +668,7 @@ chmod +x bin/mycroft-say-to
chmod +x bin/mycroft-skill-testrunner
chmod +x bin/mycroft-speak

# create and set permissions for logging
if [[ ! -w /var/log/mycroft/ ]] ; then
# Creating and setting permissions
echo 'Creating /var/log/mycroft/ directory'
if [[ ! -d /var/log/mycroft/ ]] ; then
$SUDO mkdir /var/log/mycroft/
fi
$SUDO chmod 777 /var/log/mycroft/
fi

#Store a fingerprint of setup
md5sum requirements/requirements.txt requirements/extra-audiobackend.txt requirements/extra-stt.txt requirements/extra-mark1.txt requirements/tests.txt dev_setup.sh > .installed

echo 'Mycroft setup complete! Logs can be found at /var/log/mycroft/setup.log' | tee -a /var/log/mycroft/setup.log

0 comments on commit 1b67bf3

Please sign in to comment.