diff options
Diffstat (limited to 'community/mycroft-core/0003-system-wide-setups.patch')
-rw-r--r-- | community/mycroft-core/0003-system-wide-setups.patch | 476 |
1 files changed, 0 insertions, 476 deletions
diff --git a/community/mycroft-core/0003-system-wide-setups.patch b/community/mycroft-core/0003-system-wide-setups.patch deleted file mode 100644 index c29e3eb56b2..00000000000 --- a/community/mycroft-core/0003-system-wide-setups.patch +++ /dev/null @@ -1,476 +0,0 @@ -From 8418563970aa04fd516e196efc50e6cf58007002 Mon Sep 17 00:00:00 2001 -From: Bart Ribbers <bribbers@disroot.org> -Date: Fri, 15 Jan 2021 12:59:25 +0100 -Subject: [PATCH] Replace mycroft-{start,stop} with scripts that can launch - properly installed setups - -These scripts will work with system-wide setups -(/usr/bin/mycroft-start), user setups (~/.local/bin/mycroft-start) and -virtual environments (.venv/bin/mycroft-start). - -A big benefit is that they don't care where they're installed. They'll -launch from a virtual environment, user setups or system-wide setup, in -that order. - -Also make sure these scripts are actually installed by setup.py. - -These changes should make it possible to create a PyPi package -installable with pip. ---- - bin/mycroft-start | 153 +++++++++++++++++++++++++++++++++++++++-- - bin/mycroft-stop | 109 +++++++++++++++++++++++++++-- - dev_setup.sh | 54 +++------------ - requirements/tests.txt | 2 +- - setup.py | 7 +- - 5 files changed, 270 insertions(+), 55 deletions(-) - -diff --git a/bin/mycroft-start b/bin/mycroft-start -index 65723c2c3734..30cd1ecfdbbb 100755 ---- a/bin/mycroft-start -+++ b/bin/mycroft-start -@@ -1,4 +1,4 @@ --#!/usr/bin/env bash -+#!/bin/sh - - # Copyright 2019 Mycroft AI Inc. - # -@@ -14,8 +14,151 @@ - # See the License for the specific language governing permissions and - # limitations under the License. - --SOURCE="${BASH_SOURCE[0]}" --cd -P "$( dirname "$SOURCE" )"/.. --DIR="$( pwd )" -+script=${0} -+script=${script##*/} - --. "$DIR/start-mycroft.sh" $@ -+help() { -+ echo "${script}: Mycroft command/service launcher" -+ echo "usage: ${script} [COMMAND] [restart] [params]" -+ echo -+ echo "Services COMMANDs:" -+ echo " all runs core services: bus, audio, skills, voice" -+ echo " debug runs core services, then starts the CLI" -+ echo " audio the audio playback service" -+ echo " bus the messagebus service" -+ echo " skills the skill service" -+ echo " voice voice capture service" -+ echo " enclosure mark_1 enclosure service" -+ echo -+ echo "Tool COMMANDs:" -+ echo " cli the Command Line Interface" -+ echo -+ echo "Options:" -+ echo " restart (optional) Force the service to restart if running" -+ echo -+ echo "Examples:" -+ echo " ${script} all" -+ echo " ${script} all restart" -+ echo " ${script} bus" -+ echo " ${script} voice" -+ -+ exit 1 -+} -+ -+name_to_script_path() { -+ case ${1} in -+ "bus") _module="mycroft.messagebus.service" ;; -+ "skills") _module="mycroft.skills" ;; -+ "audio") _module="mycroft.audio" ;; -+ "voice") _module="mycroft.client.speech" ;; -+ "cli") _module="mycroft.client.text" ;; -+ "enclosure") _module="mycroft.client.enclosure" ;; -+ -+ *) -+ echo "Error: Unknown name '${1}'" -+ exit 1 -+ esac -+} -+ -+require_process() { -+ name_to_script_path "${1}" -+ if ! pgrep -f "python3 (.*)-m ${_module}" > /dev/null; then -+ launch_background "${1}" -+ fi -+} -+ -+launch_process() { -+ name_to_script_path "${1}" -+ -+ # Luanch process in foreground -+ echo "Starting $1" -+ python3 -m ${_module} "$_params" -+} -+ -+launch_background() { -+ name_to_script_path "${1}" -+ -+ if pgrep -f "python3 (.*)-m ${_module}" > /dev/null; then -+ if ($_force_restart); then -+ echo "Restarting: ${1}" -+ mycroft-stop "${1}" -+ else -+ # Already running, no need to restart -+ return -+ fi -+ else -+ echo "Starting background service $1" -+ fi -+ -+ # Security warning/reminder for the user -+ if [ "${1}" = "bus" ] ; then -+ echo "CAUTION: The Mycroft bus is an open websocket with no built-in security" -+ echo " measures. You are responsible for protecting the local port" -+ echo " 8181 with a firewall as appropriate." -+ fi -+ -+ # Launch process in background -+ # Send logs to XDG Base Directories cache location -+ logdir="${XDG_STATE_HOME:-$HOME/.local/state}/mycroft" -+ -+ if [ ! -d "$logdir" ]; then -+ mkdir -p "$logdir" -+ fi -+ -+ python3 -m ${_module} "$_params" >> "$logdir/${1}.log" 2>&1 & -+} -+ -+launch_all() { -+ echo "Starting all mycroft-core services" -+ launch_background bus -+ launch_background skills -+ launch_background audio -+ launch_background voice -+ launch_background enclosure -+} -+ -+_opt=$1 -+_force_restart=false -+shift -+if [ "${1}" = "restart" ] || [ "${_opt}" = "restart" ]; then -+ _force_restart=true -+ if [ "${_opt}" = "restart" ]; then -+ # Support "start-mycroft restart all" as well as "start-mycroft all restart" -+ _opt=$1 -+ fi -+ shift -+fi -+_params=$* -+ -+case ${_opt} in -+ "all") -+ launch_all -+ ;; -+ "bus") -+ launch_background "${_opt}" -+ ;; -+ "audio") -+ launch_background "${_opt}" -+ ;; -+ "skills") -+ launch_background "${_opt}" -+ ;; -+ "voice") -+ launch_background "${_opt}" -+ ;; -+ "debug") -+ launch_all -+ launch_process cli -+ ;; -+ "cli") -+ require_process bus -+ require_process skills -+ launch_process "${_opt}" -+ ;; -+ "enclosure") -+ launch-background "${_opt}" -+ ;; -+ *) -+ help -+ ;; -+esac -diff --git a/bin/mycroft-stop b/bin/mycroft-stop -index b86b0ea65577..289c736959ae 100755 ---- a/bin/mycroft-stop -+++ b/bin/mycroft-stop -@@ -1,4 +1,4 @@ --#!/usr/bin/env bash -+#!/bin/sh - - # Copyright 2019 Mycroft AI Inc. - # -@@ -14,8 +14,107 @@ - # See the License for the specific language governing permissions and - # limitations under the License. - --SOURCE="${BASH_SOURCE[0]}" --cd -P "$( dirname "$SOURCE" )"/.. --DIR="$( pwd )" -+script=${0} -+script=${script##*/} - --. "$DIR/stop-mycroft.sh" $@ -+help() { -+ echo "${script}: Mycroft service stopper" -+ echo "usage: ${script} [service]" -+ echo -+ echo "Service:" -+ echo " all ends core services: bus, audio, skills, voice" -+ echo " (none) same as \"all\"" -+ echo " bus stop the Mycroft messagebus service" -+ echo " audio stop the audio playback service" -+ echo " skills stop the skill service" -+ echo " voice stop voice capture service" -+ echo " enclosure stop enclosure (hardware/gui interface) service" -+ echo -+ echo "Examples:" -+ echo " ${script}" -+ echo " ${script} audio" -+ -+ exit 0 -+} -+ -+process_running() { -+ if [ "$( pgrep -f "python3 (.*)-m mycroft.*${1}" )" ]; then -+ return 0 -+ else -+ return 1 -+ fi -+} -+ -+end_process() { -+ if process_running "$1"; then -+ # Find the process by name, only returning the oldest if it has children -+ pid=$( pgrep -o -f "python3 (.*)-m mycroft.*${1}" ) -+ echo "Stopping $1 (${pid})..." -+ kill -SIGINT "${pid}" -+ -+ # Wait up to 5 seconds (50 * 0.1) for process to stop -+ c=1 -+ while [ $c -le 50 ]; do -+ if process_running "$1"; then -+ sleep 0.1 -+ c=$((c + 1)) -+ else -+ c=999 # end loop -+ fi -+ done -+ -+ if process_running "$1"; then -+ echo "Failed to stop." -+ pid=$( pgrep -o -f "python3 (.*)-m mycroft.*${1}" ) -+ echo " Killing $1 (${pid})..." -+ kill -9 "${pid}" -+ echo "Killed." -+ result=120 -+ else -+ echo "Stopped." -+ if [ $result -eq 0 ] ; then -+ result=100 -+ fi -+ fi -+ fi -+} -+ -+result=0 # default, no change -+ -+OPT=$1 -+shift -+ -+case ${OPT} in -+ "all"|"") -+ echo "Stopping all mycroft-core services" -+ end_process "skills" -+ end_process "audio" -+ end_process "speech" -+ end_process "enclosure" -+ end_process "messagebus.service" -+ ;; -+ "bus") -+ end_process "messagebus.service" -+ ;; -+ "audio") -+ end_process "audio" -+ ;; -+ "skills") -+ end_process "skills" -+ ;; -+ "voice") -+ end_process "speech" -+ ;; -+ "enclosure") -+ end_process "enclosure" -+ ;; -+ *) -+ help -+ ;; -+esac -+ -+# Exit codes: -+# 0 if nothing changed (e.g. --help or no process was running) -+# 100 at least one process was stopped -+# 120 if any process had to be killed -+exit $result -diff --git a/dev_setup.sh b/dev_setup.sh -index 4290850bda03..7181c82f2ba1 100755 ---- a/dev_setup.sh -+++ b/dev_setup.sh -@@ -25,6 +25,12 @@ set -Ee - cd $(dirname $0) - TOP=$(pwd -L) - -+if [ -n "${XDG_CACHE_HOME+x}" ]; then -+ logdir="$XDG_CACHE_HOME/mycroft" -+else -+ logdir="$HOME/.cache/mycroft" -+fi -+ - function clean_mycroft_files() { - echo ' - This will completely remove any files installed by mycroft (including pairing -@@ -34,11 +40,12 @@ Do you wish to continue? (y/n)' - read -N1 -s key - case $key in - [Yy]) -- sudo rm -rf /var/log/mycroft -+ rm -rf $logdir - rm -f /var/tmp/mycroft_web_cache.json - rm -rf "${TMPDIR:-/tmp}/mycroft" - rm -rf "$HOME/.mycroft" - sudo rm -rf "/opt/mycroft" -+ ${VIRTUALENV}/bin/pip uninstall . - exit 0 - ;; - [Nn]) -@@ -227,33 +234,6 @@ locally?' - fi - - echo -- # Add mycroft-core/bin to the .bashrc PATH? -- sleep 0.5 -- echo ' --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" -- -- if [[ ! -f ~/.profile_mycroft ]] ; then -- # Only add the following to the .profile if .profile_mycroft -- # doesn't exist, indicating this script has not been run before -- echo '' >> ~/.profile -- echo '# include Mycroft commands' >> ~/.profile -- echo 'source ~/.profile_mycroft' >> ~/.profile -- fi -- -- echo " --# WARNING: This file may be replaced in future, do not customize. --# set path so it includes Mycroft utilities --if [ -d \"${TOP}/bin\" ] ; then -- PATH=\"\$PATH:${TOP}/bin\" --fi" > ~/.profile_mycroft -- echo -e "Type ${CYAN}mycroft-help$RESET to see available commands." -- else -- echo -e "$HIGHLIGHT N - PATH left unchanged $RESET" -- fi - - # Create a link to the 'skills' folder. - sleep 0.5 -@@ -332,18 +312,15 @@ Please review the following package changes carefully." - fi - } - -- - function open_suse_install() { - $SUDO zypper install -y git python3 python3-devel libtool libffi-devel libopenssl-devel autoconf automake bison swig portaudio-devel mpg123 flac curl libicu-devel pkg-config libjpeg-devel libfann-devel python3-curses pulseaudio - $SUDO zypper install -y -t pattern devel_C_C++ - } - -- - function fedora_install() { - $SUDO dnf install -y git python3 python3-devel python3-pip python3-setuptools python3-virtualenv pygobject3-devel libtool libffi-devel openssl-devel autoconf bison swig glib2-devel portaudio-devel mpg123 mpg123-plugins-pulseaudio screen curl pkgconfig libicu-devel automake libjpeg-turbo-devel fann-devel gcc-c++ redhat-rpm-config jq make - } - -- - function arch_install() { - $SUDO pacman -S --needed --noconfirm git python python-pip python-setuptools python-virtualenv python-gobject libffi swig portaudio mpg123 screen flac curl icu libjpeg-turbo base-devel jq pulseaudio pulseaudio-alsa - -@@ -356,7 +333,6 @@ function arch_install() { - ) - } - -- - function centos_install() { - $SUDO yum install epel-release - redhat_common_install -@@ -513,7 +489,7 @@ if ! grep -q "$TOP" $VENV_PATH_FILE ; then - ' "$VENV_PATH_FILE" - fi - --# install required python modules -+# Install required python modules - if ! pip install -r requirements/requirements.txt ; then - echo 'Warning: Failed to install required dependencies. Continue? y/N' - read -n1 continue -@@ -537,6 +513,8 @@ fi - if ! pip install -r requirements/tests.txt ; then - echo "Warning: Test requirements failed to install. Note: normal operation should still work fine..." - fi -+# Actually installing Mycroft and it's deps -+pip install . - - SYSMEM=$(free | awk '/^Mem:/ { print $2 }') - MAXCORES=$(($SYSMEM / 2202010)) -@@ -582,15 +560,5 @@ 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 -diff --git a/requirements/tests.txt b/requirements/tests.txt -index 9e038123e51a..306320db3e8b 100644 ---- a/requirements/tests.txt -+++ b/requirements/tests.txt -@@ -5,7 +5,7 @@ pytest-cov==2.8.1 - cov-core==1.15.0 - sphinx==2.2.1 - sphinx-rtd-theme==0.4.3 --git+https://github.com/behave/behave@v1.2.7.dev1 -+behave @ git+https://github.com/behave/behave@v1.2.7.dev1 - allure-behave==2.8.10 - - python-vlc==1.1.2 -diff --git a/setup.py b/setup.py -index 963c503e4d2f..815fceaa4c65 100644 ---- a/setup.py -+++ b/setup.py -@@ -66,6 +66,7 @@ def required(requirements_file): - 'mark1': required('requirements/extra-mark1.txt'), - 'stt': required('requirements/extra-stt.txt') - }, -+ tests_require=required('requirements/tests.txt'), - packages=find_packages(include=['mycroft*']), - include_package_data=True, - -@@ -80,5 +81,9 @@ def required(requirements_file): - 'mycroft-enclosure-client=mycroft.client.enclosure.__main__:main', - 'mycroft-cli-client=mycroft.client.text.__main__:main' - ] -- } -+ }, -+ scripts=[ -+ 'bin/mycroft-start', -+ 'bin/mycroft-stop' -+ ] - ) |