From 7d7ec1a00b02a427af83bdd91af9988cfde02146 Mon Sep 17 00:00:00 2001 From: Sam Detweiler Date: Thu, 21 Nov 2019 22:32:48 -0600 Subject: [PATCH 01/10] updates for libc6++ on pi 0, node 10 --- installers/fixuppm2.sh | 30 +++++++++++--- installers/raspberry.sh | 78 +++++++++++++++++++++++++++++------- installers/upgrade-script.sh | 32 ++++++++------- 3 files changed, 107 insertions(+), 33 deletions(-) diff --git a/installers/fixuppm2.sh b/installers/fixuppm2.sh index 2185b27f8b..44f04bf97a 100755 --- a/installers/fixuppm2.sh +++ b/installers/fixuppm2.sh @@ -1,6 +1,6 @@ #!/bin/bash # Define the tested version of Node.js. -NODE_TESTED="v5.1.0" +NODE_TESTED="v10.1.0" NPM_TESTED="V6.0.0" USER=`whoami` PM2_FILE=pm2_MagicMirror.json @@ -22,7 +22,14 @@ if [ -d ~/MagicMirror ]; then cd - >/dev/null fi logfile=$logdir/pm2_setup.log + echo the log will be saved in $logfile date +"pm2 setup starting - %a %b %e %H:%M:%S %Z %Y" >>$logfile + echo system is $(uname -a) >> $logfile + if [ "$mac" == "Darwin" ]; then + echo the os is macOS $(sw_vers -productVersion) >> $logfile + else + echo the os is $(lsb_release -a) >> $logfile + fi node_installed=$(which node) if [ "$node_installed." == "." ]; then # node not installed @@ -105,11 +112,24 @@ if [ -d ~/MagicMirror ]; then fi fi fi - echo command = $v >>$logfile + echo startup command = $v >>$logfile # execute the command returned - $v 2>/dev/null >>$logfile - echo pm2 startup done >>$logfile - + $v 2>&1 >>$logfile + echo pm2 startup command done >>$logfile + # is this is mac + # need to fix pm2 startup, only on catalina + if [ $mac == 'Darwin' -a $(sw_vers -productVersion | head -c 6) == '10.15.' ]; then + # only do if the faulty tag is present (pm2 may fix this, before the script is fixed) + if [ $(grep -m 1 UserName /Users/$USER/Library/LaunchAgents/pm2.$USER.plist | wc -l) -eq 1 ]; then + # copy the pm2 startup file config + cp /Users/$USER/Library/LaunchAgents/pm2.$USER.plist . + # edit out the UserName key/value strings + sed -e '/UserName/{N;d;}' pm2.$USER.plist > pm2.$USER.plist.new + # copy the file back + sudo cp pm2.$USER.plist.new /Users/$USER/Library/LaunchAgents/pm2.$USER.plist + fi + fi + # if the user is no pi, we have to fixup the pm2 json file echo configure the pm2 config file for MagicMirror >>$logfile if [ "$USER" != "pi" ]; then diff --git a/installers/raspberry.sh b/installers/raspberry.sh index 88dd5580b9..598da28d49 100755 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -21,7 +21,7 @@ doInstall=1 true=1 false=0 # Define the tested version of Node.js. -NODE_TESTED="v5.1.0" +NODE_TESTED="v10.1.0" NPM_TESTED="V6.0.0" USER=`whoami` PM2_FILE=pm2_MagicMirror.json @@ -67,6 +67,7 @@ echo install log being saved to $logfile date +"install starting - %a %b %e %H:%M:%S %Z %Y" >>$logfile ARM=$(uname -m) echo installing on $ARM processor system >>$logfile +echo the os is $(lsb_release -a) >> $logfile # Check the Raspberry Pi version. if [ "$ARM" != "armv7l" ]; then read -p "this appears not to be a Raspberry Pi 2 or 3, do you want to continue installation (y/N)?" choice @@ -80,7 +81,7 @@ if [ "$ARM" != "armv7l" ]; then #if [ "$ARM" == "armv6l" ]; then # echo forcing armv71 architecture for pi 0 >>$logfile # force_arch=-'--arch=armv7l' - #fi + # fi fi # Define helper methods. @@ -106,6 +107,10 @@ NODE_INSTALL=false if command_exists node; then echo -e "\e[0mNode currently installed. Checking version number." | tee -a $logfile NODE_CURRENT=$(node -v) + if [ "$NODE_CURRENT." == "." ]; then + NODE_CURRENT="V1.0.0" + echo forcing low Node version >> $logfile + fi echo -e "\e[0mMinimum Node version: \e[1m$NODE_TESTED\e[0m" | tee -a $logfile echo -e "\e[0mInstalled Node version: \e[1m$NODE_CURRENT\e[0m" | tee -a $logfile if verlte $NODE_CURRENT $NODE_TESTED; then @@ -128,7 +133,6 @@ else echo -e "\e[93mNode.js is not installed.\e[0m" | tee -a $logfile NODE_INSTALL=true fi - # Install or upgrade node if necessary. if $NODE_INSTALL; then @@ -140,13 +144,39 @@ if $NODE_INSTALL; then if [ $mac == 'Darwin' ]; then brew install node else - NODE_STABLE_BRANCH="10.x" - curl -sL https://deb.nodesource.com/setup_$NODE_STABLE_BRANCH | sudo -E bash - - sudo apt-get install -y nodejs + NODE_STABLE_BRANCH="10.x" + # sudo apt-get install --only-upgrade libstdc++6 + node_info=$(curl -sL https://deb.nodesource.com/setup_$NODE_STABLE_BRANCH | sudo -E bash - ) + echo Node release info = $node_info >> $logfile + if [ "$(echo $node_info | grep "not currently supported")." == "." ]; then + sudo apt-get install -y nodejs + else + echo node $NODE_STABLE_BRANCH version installer not available, doing manually >>$logfile + # no longer supported install + sudo apt-get install -y --only-upgrade libstdc++6 >> $logfile + # have to do it manually + node_vnum=$(echo $NODE_STABLE_BRANCH | awk -F. '{print $1}') + # get the highest release number in the stable branch line for this processor architecture + node_ver=$(curl -sL https://unofficial-builds.nodejs.org/download/release/index.tab | grep $ARM | grep -m 1 v$node_vnum | awk '{print $1}') + echo latest release in the $NODE_STABLE_BRANCH family for $ARM is $node_ver >> $logfile + curl -sL https://unofficial-builds.nodejs.org/download/release/$node_ver/node-$node_ver-linux-$ARM.tar.gz >node_release-$node_ver.tar.gz + cd /usr/local + echo using release tar file = node_release-$node_ver.tar.gz >> $logfile + sudo tar --strip-components 1 -xzf $HOME/node_release-$node_ver.tar.gz + cd - >/dev/null + rm ./node_release-$node_ver.tar.gz + fi + # get the new node version number + new_ver=$(node -v 2>&1) + # if there is a failure to get it due to a missing library + if [ $(echo $new_ver | grep "not found" | wc -l) -ne 0 ]; then + # + sudo apt-get install -y --only-upgrade libstdc++6 >> $logfile + fi + echo node version is $(node -v 2>&1 >>$logfile) fi echo -e "\e[92mNode.js installation Done! version=$(node -v)\e[0m" | tee -a $logfile fi - # Check if we need to install or upgrade npm. echo -e "\e[96mCheck current NPM installation ...\e[0m" | tee -a $logfile NPM_INSTALL=false @@ -206,7 +236,7 @@ if [ $doInstall == 1 ]; then echo -e "To prevent overwriting, the installer will be aborted." | tee -a $logfile echo -e "Please rename the \e[1m~/MagicMirror\e[0m\e[93m folder and try again.\e[0m" | tee -a $logfile echo "" - echo -e "If you want to upgrade your installation run \e[1m\e[97mgit pull\e[0m from the ~/MagicMirror directory." | tee -a $logfile + echo -e "If you want to upgrade your installation run \e[1m\e[97mupgrade-script\e[0m from the ~/MagicMirror/installers directory." | tee -a $logfile echo "" exit; fi @@ -220,6 +250,11 @@ if [ $doInstall == 1 ]; then fi cd ~/MagicMirror || exit + if [ $(grep version package.json | awk -F: '{print $2}') == '"2.9.0",' -a $ARM == 'armv6l' ]; then + git fetch https://github.com/MichMich/MagicMirror.git develop >/dev/null 2>&1 + git branch develop FETCH_HEAD > /dev/null 2>&1 + git checkout develop > /dev/null 2>&1 + fi echo -e "\e[96mInstalling dependencies ...\e[90m" | tee -a $logfile if npm install $force_arch; then echo -e "\e[92mDependencies installation Done!\e[0m" | tee -a $logfile @@ -244,11 +279,13 @@ if command_exists plymouth; then fi if sudo cp ~/MagicMirror/splashscreen/splash.png $THEME_DIR/MagicMirror/splash.png && sudo cp ~/MagicMirror/splashscreen/MagicMirror.plymouth $THEME_DIR/MagicMirror/MagicMirror.plymouth && sudo cp ~/MagicMirror/splashscreen/MagicMirror.script $THEME_DIR/MagicMirror/MagicMirror.script; then - echo -e "\e[90mSplashscreen: Theme copied successfully.\e[0m" | tee -a $logfile - if sudo plymouth-set-default-theme -R MagicMirror; then - echo -e "\e[92mSplashscreen: Changed theme to MagicMirror successfully.\e[0m" | tee -a $logfile - else - echo -e "\e[91mSplashscreen: Couldn't change theme to MagicMirror!\e[0m" | tee -a $logfile + echo + if [ "$(which plymouth-set-default-theme)." != "." ]; then + if sudo plymouth-set-default-theme -R MagicMirror; then + echo -e "\e[92mSplashscreen: Changed theme to MagicMirror successfully.\e[0m" | tee -a $logfile + else + echo -e "\e[91mSplashscreen: Couldn't change theme to MagicMirror!\e[0m" | tee -a $logfile + fi fi else echo -e "\e[91mSplashscreen: Copying theme failed!\e[0m" | tee -a $logfile @@ -292,7 +329,7 @@ if [[ $choice =~ ^[Yy]$ ]]; then if [ "$pm2_installed." == "." ]; then # install it. echo pm2 not installed, installing >>$logfile - result=$(sudo npm install $up -g pm2) + result=$(npm install $up -g pm2) echo pm2 install result $result >>$logfile # if this is a mac if [ $mac == 'Darwin' ]; then @@ -322,6 +359,19 @@ if [[ $choice =~ ^[Yy]$ ]]; then # execute the command returned $v 2>&1 >>$logfile echo pm2 startup command done >>$logfile + # is this is mac + # need to fix pm2 startup, only on catalina + if [ $mac == 'Darwin' -a $(sw_vers -productVersion | head -c 6) == '10.15.' ]; then + # only do if the faulty tag is present (pm2 may fix this, before the script is fixed) + if [ $(grep -m 1 UserName /Users/$USER/Library/LaunchAgents/pm2.$USER.plist | wc -l) -eq 1 ]; then + # copy the pm2 startup file config + cp /Users/$USER/Library/LaunchAgents/pm2.$USER.plist . + # edit out the UserName key/value strings + sed -e '/UserName/{N;d;}' pm2.$USER.plist > pm2.$USER.plist.new + # copy the file back + sudo cp pm2.$USER.plist.new /Users/$USER/Library/LaunchAgents/pm2.$USER.plist + fi + fi # if the user is no pi, we have to fixup the pm2 json file echo configure the pm2 config file for MagicMirror >>$logfile diff --git a/installers/upgrade-script.sh b/installers/upgrade-script.sh index 88fea656da..88dd2bb77f 100755 --- a/installers/upgrade-script.sh +++ b/installers/upgrade-script.sh @@ -44,10 +44,11 @@ if [ -d ~/MagicMirror ]; then cd - >/dev/null fi logfile=$logdir/upgrade.log - + echo the log will be $logfile echo >>$logfile date +"Upgrade started - %a %b %e %H:%M:%S %Z %Y" >>$logfile - + echo system is $(uname -a) >> $logfile + echo the os is $(lsb_release -a) >> $logfile # because of how its executed from the web, p0 gets overlayed with parm # check to see if a parm was passed .. easy apply without editing @@ -79,10 +80,10 @@ if [ -d ~/MagicMirror ]; then # if we want just the modules listed in config.js now if [ $justActive == $true ]; then - if [ ! -f ~/MagicMirror/installers/dumpactivemodules.js ]; then - echo downloading dumpactivemodules script >> $logfile - curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/develop/installers/dumpactivemodules.js > ~/MagicMirror/installers/dumpactivemodules.js - fi + if [ ! -f ~/MagicMirror/installers/dumpactivemodules.js ]; then + echo downloading dumpactivemodules script >> $logfile + curl -sL https://www.dropbox.com/s/wwe6bfg2lcjmj43/dumpactivemodules.js?dl=0 > ~/MagicMirror/installers/dumpactivemodules.js + fi fi echo update log will be in $logfile # used for parsing the array of module names @@ -151,13 +152,16 @@ if [ -d ~/MagicMirror ]; then # get the latest upgrade echo fetching latest revisions | tee -a $logfile - - if git fetch $remote; then + git fetch $remote >/dev/null + rc=$? + echo git fetch rc=$rc >>$logfile + if [ $rc -eq 0 ]; then # need to get the current branch current_branch=$(git branch | grep "*" | awk '{print $2}') echo current branch = $current_branch >>$logfile - $(git status 2>&1)>>$logfile + + git status 2>&1 >>$logfile # get the names of the files that are different locally diffs=$(git status 2>&1 | grep modified | awk -F: '{print $2}') @@ -238,11 +242,11 @@ if [ -d ~/MagicMirror ]; then if [ $doinstalls == $true ]; then # if this is a pi zero echo processor architecture is $arch >> $logfile - #if [ "$arch" == "armv6l" ]; then - # # force to look like pi 2 - # echo forcing architecture armv7l >>$logfile - # forced_arch='--arch=armv7l' - #fi + if [ "$arch" == "armv6l" ]; then + # force to look like pi 2 + echo forcing architecture armv7l >>$logfile + forced_arch='--arch=armv7l' + fi echo "updating MagicMirror runtime, please wait" | tee -a $logfile npm install $forced_arch 2>&1 | tee -a $logfile done_update=`date +"completed - %a %b %e %H:%M:%S %Z %Y"` From cb28e5fddc1a686867a103e50a34199052a764ab Mon Sep 17 00:00:00 2001 From: Sam Detweiler Date: Fri, 22 Nov 2019 06:18:04 -0600 Subject: [PATCH 02/10] watch out for commented lines in config --- run-start.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/run-start.sh b/run-start.sh index a6c075208e..cd32fda4c0 100755 --- a/run-start.sh +++ b/run-start.sh @@ -7,10 +7,12 @@ if [ -z "$DISPLAY" ]; then #If not set DISPLAY is SSH remote or tty fi # get the processor architecture arch=$(uname -m) -# got the config option, if any -serveronly=$(grep -i serveronly: config/config.js | awk '{print tolower($2)}' | tr -d ,\"\') +false='false' +# get the config option, if any +# only check non comment lines +serveronly=$(grep -v '^\s//' config/config.js | grep -i serveronly: | awk '{print tolower($2)}' | tr -d ,\"\') # set default if not defined in config -serveronly="${serveronly:=false}" +serveronly=${serveronly:-false} # check for xwindows running xorg=$(pgrep Xorg) # @@ -58,5 +60,5 @@ if [ "$serveronly." != "false." -o "$arch" == "armv6l" -o "$xorg." == "." ]; t fi else # we can use electron directly - `electron js/electron.js $1`; -fi \ No newline at end of file + electron js/electron.js $1; +fi From 06308210c0c7033bf3ce1cf69397bad58927094d Mon Sep 17 00:00:00 2001 From: Sam Detweiler Date: Sat, 23 Nov 2019 06:57:10 -0600 Subject: [PATCH 03/10] add support for secured apt-get repositories --- installers/raspberry.sh | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/installers/raspberry.sh b/installers/raspberry.sh index 598da28d49..eecaa17e9f 100755 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -91,14 +91,30 @@ function verlt() { [ "$1" = "$2" ] && return 1 || verlte $1 $2 ;} # Update before first apt-get if [ $mac != 'Darwin' ]; then -echo -e "\e[96mUpdating packages ...\e[90m" | tee -a $logfile -sudo apt-get update || echo -e "\e[91mUpdate failed, carrying on installation ...\e[90m" | tee -a $logfile -fi + echo -e "\e[96mUpdating packages ...\e[90m" | tee -a $logfile + update=$(sudo apt-get update 2>&1) + echo $update >> $logfile + update_rc=$? + if [ $update_rc -ne 0 ]; then + echo -e "\e[91mUpdate failed, retrying installation ...\e[90m" | tee -a $logfile + if [ $(echo $update | grep "apt-secure" | wc -l) -eq 1 ]; then + update=$(sudo apt-get update --allow-releaseinfo-change 2>&1) + echo $update >> $logfile + update_rc=$? + if [ $update_rc -ne 0 ]; then + echo "second apt-get update failed" $update | ree -a $logfile + exit 1 + else + echo "second apt-get update completed ok" >> $logfile + fi + fi + else + echo "apt-get update completed ok" >> $logfile + fi -if [ $mac != 'Darwin' ]; then -# Installing helper tools -echo -e "\e[96mInstalling helper tools ...\e[90m" | tee -a $logfile -sudo apt-get --assume-yes install curl wget git build-essential unzip || exit + # Installing helper tools + echo -e "\e[96mInstalling helper tools ...\e[90m" | tee -a $logfile + sudo apt-get --assume-yes install curl wget git build-essential unzip || exit fi # Check if we need to install or upgrade Node.js. @@ -220,11 +236,11 @@ if $NPM_INSTALL; then # # if this is a mac, npm was installed with node if [ $mac != 'Darwin' ]; then - sudo apt-get install -y npm + sudo apt-get install -y npm >>$logfile fi # update to the latest. echo upgrading npm to latest >> $logfile - sudo npm i -g npm + sudo npm i -g npm >>$logfile echo -e "\e[92mnpm installation Done! version=V$(npm -v)\e[0m" | tee -a $logfile fi From db9176c28451445a7768a37772520ec503e61012 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 27 Nov 2019 08:37:51 -0600 Subject: [PATCH 04/10] fix pm2 install needing sudo --- installers/raspberry.sh | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/installers/raspberry.sh b/installers/raspberry.sh index 598da28d49..a45027b3bf 100755 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -91,14 +91,30 @@ function verlt() { [ "$1" = "$2" ] && return 1 || verlte $1 $2 ;} # Update before first apt-get if [ $mac != 'Darwin' ]; then -echo -e "\e[96mUpdating packages ...\e[90m" | tee -a $logfile -sudo apt-get update || echo -e "\e[91mUpdate failed, carrying on installation ...\e[90m" | tee -a $logfile -fi + echo -e "\e[96mUpdating packages ...\e[90m" | tee -a $logfile + update=$(sudo apt-get update 2>&1) + echo $update >> $logfile + update_rc=$? + if [ $update_rc -ne 0 ]; then + echo -e "\e[91mUpdate failed, retrying installation ...\e[90m" | tee -a $logfile + if [ $(echo $update | grep "apt-secure" | wc -l) -eq 1 ]; then + update=$(sudo apt-get update --allow-releaseinfo-change 2>&1) + echo $update >> $logfile + update_rc=$? + if [ $update_rc -ne 0 ]; then + echo "second apt-get update failed" $update | ree -a $logfile + exit 1 + else + echo "second apt-get update completed ok" >> $logfile + fi + fi + else + echo "apt-get update completed ok" >> $logfile + fi -if [ $mac != 'Darwin' ]; then -# Installing helper tools -echo -e "\e[96mInstalling helper tools ...\e[90m" | tee -a $logfile -sudo apt-get --assume-yes install curl wget git build-essential unzip || exit + # Installing helper tools + echo -e "\e[96mInstalling helper tools ...\e[90m" | tee -a $logfile + sudo apt-get --assume-yes install curl wget git build-essential unzip || exit fi # Check if we need to install or upgrade Node.js. @@ -122,6 +138,7 @@ if command_exists node; then if pgrep "node" > /dev/null; then echo -e "\e[91mA Node process is currently running. Can't upgrade." | tee -a $logfile echo "Please quit all Node processes and restart the installer." | tee -a $logfile + echo $(ps -ef | grep node | grep -v \-\-color) | tee -a $logfile exit; fi @@ -220,11 +237,11 @@ if $NPM_INSTALL; then # # if this is a mac, npm was installed with node if [ $mac != 'Darwin' ]; then - sudo apt-get install -y npm + sudo apt-get install -y npm >>$logfile fi # update to the latest. echo upgrading npm to latest >> $logfile - sudo npm i -g npm + sudo npm i -g npm >>$logfile echo -e "\e[92mnpm installation Done! version=V$(npm -v)\e[0m" | tee -a $logfile fi @@ -329,7 +346,7 @@ if [[ $choice =~ ^[Yy]$ ]]; then if [ "$pm2_installed." == "." ]; then # install it. echo pm2 not installed, installing >>$logfile - result=$(npm install $up -g pm2) + result=$(sudo npm install $up -g pm2 2>&1) echo pm2 install result $result >>$logfile # if this is a mac if [ $mac == 'Darwin' ]; then From 2cad86968083ea3b4a1ef2a91e1918306104199f Mon Sep 17 00:00:00 2001 From: Sam Detweiler Date: Sun, 8 Dec 2019 08:35:50 -0600 Subject: [PATCH 05/10] latest fixes for install and pm2 --- css/custom.css | 14 - installers/fixuppm2.sh | 24 +- installers/raspberry.sh | 552 ---------------------------------------- 3 files changed, 13 insertions(+), 577 deletions(-) delete mode 100644 css/custom.css diff --git a/css/custom.css b/css/custom.css deleted file mode 100644 index 7d0d068111..0000000000 --- a/css/custom.css +++ /dev/null @@ -1,14 +0,0 @@ -/***************************************************** - * Magic Mirror * - * Custom CSS * - * * - * By Michael Teeuw http://michaelteeuw.nl * - * MIT Licensed. * - * * - * Add any custom CSS below. * - * Changes to this files will be ignored by GIT. * - *****************************************************/ - - body { - - } diff --git a/installers/fixuppm2.sh b/installers/fixuppm2.sh index 44f04bf97a..6631ac83bc 100755 --- a/installers/fixuppm2.sh +++ b/installers/fixuppm2.sh @@ -28,7 +28,7 @@ if [ -d ~/MagicMirror ]; then if [ "$mac" == "Darwin" ]; then echo the os is macOS $(sw_vers -productVersion) >> $logfile else - echo the os is $(lsb_release -a) >> $logfile + echo the os is $(lsb_release -a 2>/dev/null) >> $logfile fi node_installed=$(which node) if [ "$node_installed." == "." ]; then @@ -118,16 +118,18 @@ if [ -d ~/MagicMirror ]; then echo pm2 startup command done >>$logfile # is this is mac # need to fix pm2 startup, only on catalina - if [ $mac == 'Darwin' -a $(sw_vers -productVersion | head -c 6) == '10.15.' ]; then - # only do if the faulty tag is present (pm2 may fix this, before the script is fixed) - if [ $(grep -m 1 UserName /Users/$USER/Library/LaunchAgents/pm2.$USER.plist | wc -l) -eq 1 ]; then - # copy the pm2 startup file config - cp /Users/$USER/Library/LaunchAgents/pm2.$USER.plist . - # edit out the UserName key/value strings - sed -e '/UserName/{N;d;}' pm2.$USER.plist > pm2.$USER.plist.new - # copy the file back - sudo cp pm2.$USER.plist.new /Users/$USER/Library/LaunchAgents/pm2.$USER.plist - fi + if [ $mac == 'Darwin' ]; then + if [ $(sw_vers -productVersion | head -c 6) == '10.15.' ]; then + # only do if the faulty tag is present (pm2 may fix this, before the script is fixed) + if [ $(grep -m 1 UserName /Users/$USER/Library/LaunchAgents/pm2.$USER.plist | wc -l) -eq 1 ]; then + # copy the pm2 startup file config + cp /Users/$USER/Library/LaunchAgents/pm2.$USER.plist . + # edit out the UserName key/value strings + sed -e '/UserName/{N;d;}' pm2.$USER.plist > pm2.$USER.plist.new + # copy the file back + sudo cp pm2.$USER.plist.new /Users/$USER/Library/LaunchAgents/pm2.$USER.plist + fi + fi fi # if the user is no pi, we have to fixup the pm2 json file diff --git a/installers/raspberry.sh b/installers/raspberry.sh index eecaa17e9f..e69de29bb2 100755 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -1,552 +0,0 @@ -#!/bin/bash -# This is an installer script for MagicMirror2. It works well enough -# that it can detect if you have Node installed, run a binary script -# and then download and run MagicMirror2. - -echo -e "\e[0m" -echo '$$\ $$\ $$\ $$\ $$\ $$\ $$$$$$\' -echo '$$$\ $$$ | \__| $$$\ $$$ |\__| $$ __$$\' -echo '$$$$\ $$$$ | $$$$$$\ $$$$$$\ $$\ $$$$$$$\ $$$$\ $$$$ |$$\ $$$$$$\ $$$$$$\ $$$$$$\ $$$$$$\ \__/ $$ |' -echo '$$\$$\$$ $$ | \____$$\ $$ __$$\ $$ |$$ _____|$$\$$\$$ $$ |$$ |$$ __$$\ $$ __$$\ $$ __$$\ $$ __$$\ $$$$$$ |' -echo '$$ \$$$ $$ | $$$$$$$ |$$ / $$ |$$ |$$ / $$ \$$$ $$ |$$ |$$ | \__|$$ | \__|$$ / $$ |$$ | \__|$$ ____/' -echo '$$ |\$ /$$ |$$ __$$ |$$ | $$ |$$ |$$ | $$ |\$ /$$ |$$ |$$ | $$ | $$ | $$ |$$ | $$ |' -echo '$$ | \_/ $$ |\$$$$$$$ |\$$$$$$$ |$$ |\$$$$$$$\ $$ | \_/ $$ |$$ |$$ | $$ | \$$$$$$ |$$ | $$$$$$$$\' -echo '\__| \__| \_______| \____$$ |\__| \_______|\__| \__|\__|\__| \__| \______/ \__| \________|' -echo ' $$\ $$ |' -echo ' \$$$$$$ |' -echo ' \______/' -echo -e "\e[0m" - -doInstall=1 -true=1 -false=0 -# Define the tested version of Node.js. -NODE_TESTED="v10.1.0" -NPM_TESTED="V6.0.0" -USER=`whoami` -PM2_FILE=pm2_MagicMirror.json -force_arch= -pm2setup=$false - -trim() { - local var="$*" - # remove leading whitespace characters - var="${var#"${var%%[![:space:]]*}"}" - # remove trailing whitespace characters - var="${var%"${var##*[![:space:]]}"}" - echo -n "$var" -} - -mac=$(uname -s) -if [ $mac == 'Darwin' ]; then - echo this is a mac | tee -a $logfile - cmd=greadlink -else - cmd=readlink -fi - - -# put the log where the script is located -logdir=$(dirname $($cmd -f "$0")) -# if the script was execute from the web -if [[ $logdir != *"MagicMirror/installers"* ]]; then - # use the MagicMirror/installers folder, if setup - if [ -d MagicMirror ]; then - cd ~/MagicMirror/installers >/dev/null - logdir=$(pwd) - cd - >/dev/null - else - # use the users home folder if initial install - logdir=$HOME - fi -fi -logfile=$logdir/install.log -echo install log being saved to $logfile - -# Determine which Pi is running. -date +"install starting - %a %b %e %H:%M:%S %Z %Y" >>$logfile -ARM=$(uname -m) -echo installing on $ARM processor system >>$logfile -echo the os is $(lsb_release -a) >> $logfile -# Check the Raspberry Pi version. -if [ "$ARM" != "armv7l" ]; then - read -p "this appears not to be a Raspberry Pi 2 or 3, do you want to continue installation (y/N)?" choice - if [[ $choice =~ ^[Nn]$ ]]; then - echo user stopped install on $ARM hardware >>$logfile - echo -e "\e[91mSorry, your Raspberry Pi is not supported." - echo -e "\e[91mPlease run MagicMirror on a Raspberry Pi 2 or 3." - echo -e "\e[91mIf this is a Pi Zero, you are in the same boat as the original Raspberry Pi. You must run in server only mode." - exit; - fi - #if [ "$ARM" == "armv6l" ]; then - # echo forcing armv71 architecture for pi 0 >>$logfile - # force_arch=-'--arch=armv7l' - # fi -fi - -# Define helper methods. -function command_exists () { type "$1" &> /dev/null ;} -function verlte() { [ "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ];} -function verlt() { [ "$1" = "$2" ] && return 1 || verlte $1 $2 ;} - -# Update before first apt-get -if [ $mac != 'Darwin' ]; then - echo -e "\e[96mUpdating packages ...\e[90m" | tee -a $logfile - update=$(sudo apt-get update 2>&1) - echo $update >> $logfile - update_rc=$? - if [ $update_rc -ne 0 ]; then - echo -e "\e[91mUpdate failed, retrying installation ...\e[90m" | tee -a $logfile - if [ $(echo $update | grep "apt-secure" | wc -l) -eq 1 ]; then - update=$(sudo apt-get update --allow-releaseinfo-change 2>&1) - echo $update >> $logfile - update_rc=$? - if [ $update_rc -ne 0 ]; then - echo "second apt-get update failed" $update | ree -a $logfile - exit 1 - else - echo "second apt-get update completed ok" >> $logfile - fi - fi - else - echo "apt-get update completed ok" >> $logfile - fi - - # Installing helper tools - echo -e "\e[96mInstalling helper tools ...\e[90m" | tee -a $logfile - sudo apt-get --assume-yes install curl wget git build-essential unzip || exit -fi - -# Check if we need to install or upgrade Node.js. -echo -e "\e[96mCheck current Node installation ...\e[0m" | tee -a $logfile -NODE_INSTALL=false -if command_exists node; then - echo -e "\e[0mNode currently installed. Checking version number." | tee -a $logfile - NODE_CURRENT=$(node -v) - if [ "$NODE_CURRENT." == "." ]; then - NODE_CURRENT="V1.0.0" - echo forcing low Node version >> $logfile - fi - echo -e "\e[0mMinimum Node version: \e[1m$NODE_TESTED\e[0m" | tee -a $logfile - echo -e "\e[0mInstalled Node version: \e[1m$NODE_CURRENT\e[0m" | tee -a $logfile - if verlte $NODE_CURRENT $NODE_TESTED; then - echo -e "\e[96mNode should be upgraded.\e[0m" | tee -a $logfile - NODE_INSTALL=true - - # Check if a node process is currenlty running. - # If so abort installation. - if pgrep "node" > /dev/null; then - echo -e "\e[91mA Node process is currently running. Can't upgrade." | tee -a $logfile - echo "Please quit all Node processes and restart the installer." | tee -a $logfile - exit; - fi - - else - echo -e "\e[92mNo Node.js upgrade necessary.\e[0m" | tee -a $logfile - fi - -else - echo -e "\e[93mNode.js is not installed.\e[0m" | tee -a $logfile - NODE_INSTALL=true -fi -# Install or upgrade node if necessary. -if $NODE_INSTALL; then - - echo -e "\e[96mInstalling Node.js ...\e[90m" | tee -a $logfile - - # Fetch the latest version of Node.js from the selected branch - # The NODE_STABLE_BRANCH variable will need to be manually adjusted when a new branch is released. (e.g. 7.x) - # Only tested (stable) versions are recommended as newer versions could break MagicMirror. - if [ $mac == 'Darwin' ]; then - brew install node - else - NODE_STABLE_BRANCH="10.x" - # sudo apt-get install --only-upgrade libstdc++6 - node_info=$(curl -sL https://deb.nodesource.com/setup_$NODE_STABLE_BRANCH | sudo -E bash - ) - echo Node release info = $node_info >> $logfile - if [ "$(echo $node_info | grep "not currently supported")." == "." ]; then - sudo apt-get install -y nodejs - else - echo node $NODE_STABLE_BRANCH version installer not available, doing manually >>$logfile - # no longer supported install - sudo apt-get install -y --only-upgrade libstdc++6 >> $logfile - # have to do it manually - node_vnum=$(echo $NODE_STABLE_BRANCH | awk -F. '{print $1}') - # get the highest release number in the stable branch line for this processor architecture - node_ver=$(curl -sL https://unofficial-builds.nodejs.org/download/release/index.tab | grep $ARM | grep -m 1 v$node_vnum | awk '{print $1}') - echo latest release in the $NODE_STABLE_BRANCH family for $ARM is $node_ver >> $logfile - curl -sL https://unofficial-builds.nodejs.org/download/release/$node_ver/node-$node_ver-linux-$ARM.tar.gz >node_release-$node_ver.tar.gz - cd /usr/local - echo using release tar file = node_release-$node_ver.tar.gz >> $logfile - sudo tar --strip-components 1 -xzf $HOME/node_release-$node_ver.tar.gz - cd - >/dev/null - rm ./node_release-$node_ver.tar.gz - fi - # get the new node version number - new_ver=$(node -v 2>&1) - # if there is a failure to get it due to a missing library - if [ $(echo $new_ver | grep "not found" | wc -l) -ne 0 ]; then - # - sudo apt-get install -y --only-upgrade libstdc++6 >> $logfile - fi - echo node version is $(node -v 2>&1 >>$logfile) - fi - echo -e "\e[92mNode.js installation Done! version=$(node -v)\e[0m" | tee -a $logfile -fi -# Check if we need to install or upgrade npm. -echo -e "\e[96mCheck current NPM installation ...\e[0m" | tee -a $logfile -NPM_INSTALL=false -if command_exists npm; then - echo -e "\e[0mNPM currently installed. Checking version number." | tee -a $logfile - NPM_CURRENT='V'$(npm -v) - echo -e "\e[0mMinimum npm version: \e[1m$NPM_TESTED\e[0m" | tee -a $logfile - echo -e "\e[0mInstalled npm version: \e[1m$NPM_CURRENT\e[0m" | tee -a $logfile - if verlte $NPM_CURRENT $NPM_TESTED; then - echo -e "\e[96mnpm should be upgraded.\e[0m" | tee -a $logfile - NPM_INSTALL=true - - # Check if a node process is currently running. - # If so abort installation. - if pgrep "npm" > /dev/null; then - echo -e "\e[91mA npm process is currently running. Can't upgrade." | tee -a $logfile - echo "Please quit all npm processes and restart the installer." | tee -a $logfile - exit; - fi - - else - echo -e "\e[92mNo npm upgrade necessary.\e[0m" | tee -a $logfile - fi - -else - echo -e "\e[93mnpm is not installed.\e[0m" | tee -a $logfile - NPM_INSTALL=true -fi - -# Install or upgrade node if necessary. -if $NPM_INSTALL; then - - echo -e "\e[96mInstalling npm ...\e[90m" | tee -a $logfile - - # Fetch the latest version of npm from the selected branch - # The NODE_STABLE_BRANCH variable will need to be manually adjusted when a new branch is released. (e.g. 7.x) - # Only tested (stable) versions are recommended as newer versions could break MagicMirror. - - #NODE_STABLE_BRANCH="9.x" - #curl -sL https://deb.nodesource.com/setup_$NODE_STABLE_BRANCH | sudo -E bash - - # - # if this is a mac, npm was installed with node - if [ $mac != 'Darwin' ]; then - sudo apt-get install -y npm >>$logfile - fi - # update to the latest. - echo upgrading npm to latest >> $logfile - sudo npm i -g npm >>$logfile - echo -e "\e[92mnpm installation Done! version=V$(npm -v)\e[0m" | tee -a $logfile -fi - -# Install MagicMirror -cd ~ -if [ $doInstall == 1 ]; then - if [ -d "$HOME/MagicMirror" ] ; then - echo -e "\e[93mIt seems like MagicMirror is already installed." | tee -a $logfile - echo -e "To prevent overwriting, the installer will be aborted." | tee -a $logfile - echo -e "Please rename the \e[1m~/MagicMirror\e[0m\e[93m folder and try again.\e[0m" | tee -a $logfile - echo "" - echo -e "If you want to upgrade your installation run \e[1m\e[97mupgrade-script\e[0m from the ~/MagicMirror/installers directory." | tee -a $logfile - echo "" - exit; - fi - - echo -e "\e[96mCloning MagicMirror ...\e[90m" | tee -a $logfile - if git clone --depth=1 https://github.com/MichMich/MagicMirror.git; then - echo -e "\e[92mCloning MagicMirror Done!\e[0m" | tee -a $logfile - else - echo -e "\e[91mUnable to clone MagicMirror." | tee -a $logfile - exit; - fi - - cd ~/MagicMirror || exit - if [ $(grep version package.json | awk -F: '{print $2}') == '"2.9.0",' -a $ARM == 'armv6l' ]; then - git fetch https://github.com/MichMich/MagicMirror.git develop >/dev/null 2>&1 - git branch develop FETCH_HEAD > /dev/null 2>&1 - git checkout develop > /dev/null 2>&1 - fi - echo -e "\e[96mInstalling dependencies ...\e[90m" | tee -a $logfile - if npm install $force_arch; then - echo -e "\e[92mDependencies installation Done!\e[0m" | tee -a $logfile - else - echo -e "\e[91mUnable to install dependencies!" | tee -a $logfile - exit; - fi - - # Use sample config for start MagicMirror - echo setting up initial config.js | tee -a $logfile - cp config/config.js.sample config/config.js -fi -# Check if plymouth is installed (default with PIXEL desktop environment), then install custom splashscreen. -echo -e "\e[96mCheck plymouth installation ...\e[0m" | tee -a $logfile -if command_exists plymouth; then - THEME_DIR="/usr/share/plymouth/themes" - echo -e "\e[90mSplashscreen: Checking themes directory.\e[0m" | tee -a $logfile - if [ -d $THEME_DIR ]; then - echo -e "\e[90mSplashscreen: Create theme directory if not exists.\e[0m" | tee -a $logfile - if [ ! -d $THEME_DIR/MagicMirror ]; then - sudo mkdir $THEME_DIR/MagicMirror - fi - - if sudo cp ~/MagicMirror/splashscreen/splash.png $THEME_DIR/MagicMirror/splash.png && sudo cp ~/MagicMirror/splashscreen/MagicMirror.plymouth $THEME_DIR/MagicMirror/MagicMirror.plymouth && sudo cp ~/MagicMirror/splashscreen/MagicMirror.script $THEME_DIR/MagicMirror/MagicMirror.script; then - echo - if [ "$(which plymouth-set-default-theme)." != "." ]; then - if sudo plymouth-set-default-theme -R MagicMirror; then - echo -e "\e[92mSplashscreen: Changed theme to MagicMirror successfully.\e[0m" | tee -a $logfile - else - echo -e "\e[91mSplashscreen: Couldn't change theme to MagicMirror!\e[0m" | tee -a $logfile - fi - fi - else - echo -e "\e[91mSplashscreen: Copying theme failed!\e[0m" | tee -a $logfile - fi - else - echo -e "\e[91mSplashscreen: Themes folder doesn't exist!\e[0m" | tee -a $logfile - fi -else - echo -e "\e[93mplymouth is not installed.\e[0m" | tee -a $logfile -fi - -# Use pm2 control like a service MagicMirror -read -p "Do you want use pm2 for auto starting of your MagicMirror (y/N)?" choice -if [[ $choice =~ ^[Yy]$ ]]; then - echo install and setup pm2 | tee -a $logfile - # assume pm2 will be found on the path - pm2cmd=pm2 - # check to see if already installed - pm2_installed=$(which $pm2cmd) - up="" - if [ $mac == 'Darwin' ]; then - up="--unsafe-perm" - launchctl=launchctl - launchctl_path=$(which $launchctl) - `export PATH=$PATH:${launchctl_path%/$launchctl}` - fi - # check to see if already installed - pm2_installed=$(which $pm2cmd) - if [ "$pm2_installed." != "." ]; then - # does it work? - pm2_fails=$(pm2 list | grep -i -m 1 "App Name" | wc -l ) - if [ $pm2_fails != 1 ]; then - # uninstall it - echo pm2 installed, but does not work, uninstalling >> $logfile - sudo npm uninstall $up -g pm2 >> $logfile - # force reinstall - pm2_installed= - fi - fi - # if not installed - if [ "$pm2_installed." == "." ]; then - # install it. - echo pm2 not installed, installing >>$logfile - result=$(npm install $up -g pm2) - echo pm2 install result $result >>$logfile - # if this is a mac - if [ $mac == 'Darwin' ]; then - echo this is a mac, fixup for path >>$logfile - # get the location of pm2 install - # parse the npm install output to get the command - pm2cmd=`echo $result | awk -F - '{print $1}' | tr -d '[:space:]'` - c='/pm2' - # get the path only - echo ${pm2cmd%$c} >installers/pm2path - fi - fi - echo get the pm2 platform specific startup command >>$logfile - # get the platform specific pm2 startup command - v=$($pm2cmd startup | tail -n 1) - if [ $mac != 'Darwin' ]; then - # check to see if we can get the OS package name (Ubuntu) - if [ $(which lsb_release| wc -l) >0 ]; then - # fix command - # if ubuntu 18.04, pm2 startup gets something wrong - if [ $(lsb_release -r | grep -m1 18.04 | wc -l) > 0 ]; then - v=$(echo $v | sed 's/\/bin/\/bin:\/bin/') - fi - fi - fi - echo startup command = $v >>$logfile - # execute the command returned - $v 2>&1 >>$logfile - echo pm2 startup command done >>$logfile - # is this is mac - # need to fix pm2 startup, only on catalina - if [ $mac == 'Darwin' -a $(sw_vers -productVersion | head -c 6) == '10.15.' ]; then - # only do if the faulty tag is present (pm2 may fix this, before the script is fixed) - if [ $(grep -m 1 UserName /Users/$USER/Library/LaunchAgents/pm2.$USER.plist | wc -l) -eq 1 ]; then - # copy the pm2 startup file config - cp /Users/$USER/Library/LaunchAgents/pm2.$USER.plist . - # edit out the UserName key/value strings - sed -e '/UserName/{N;d;}' pm2.$USER.plist > pm2.$USER.plist.new - # copy the file back - sudo cp pm2.$USER.plist.new /Users/$USER/Library/LaunchAgents/pm2.$USER.plist - fi - fi - - # if the user is no pi, we have to fixup the pm2 json file - echo configure the pm2 config file for MagicMirror >>$logfile - if [ "$USER" != "pi" ]; then - echo the user is not pi >>$logfile - # go to the installers folder` - cd installers - # edit the startup script for the right user - echo change mm.sh >>$logfile - if [ ! -e mm_temp.sh ]; then - echo save copy of mm.sh >> $logfile - cp mm.sh mm_temp.sh - fi - if [ $(grep pi mm_temp.sh | wc -l) -gt 0 ]; then - echo change hard coded pi username >> $logfile - sed 's/pi/'$USER'/g' mm_temp.sh >mm.sh - else - echo change relative home path to hard coded path >> $logfile - hf=$(echo $HOME |sed 's/\//\\\//g') - sed 's/\~/'$hf'/g' mm_temp.sh >mm.sh - fi - # edit the pms config file for the right user - echo change $PM2_FILE >>$logfile - sed 's/pi/'$USER'/g' $PM2_FILE > pm2_MagicMirror_new.json - # make sure to use the updated file - PM2_FILE=pm2_MagicMirror_new.json - # if this is a mac - if [ $mac == 'Darwin' ]; then - # copy the path file to the system paths list - sudo cp ./pm2path /etc/paths.d - # change the name of the home path for mac - sed 's/home/Users/g' $PM2_FILE > pm2_MagicMirror_new1.json - # make sure to use the updated file - PM2_FILE=pm2_MagicMirror_new1.json - fi - echo now using this config file $PM2_FILE >>$logfile - # go back one cd level - cd - >/dev/null - fi - echo start MagicMirror via pm2 now >>$logfile - # tell pm2 to start the app defined in the config file - $pm2cmd start $HOME/MagicMirror/installers/$PM2_FILE - # tell pm2 to save that configuration, for start at boot - echo save MagicMirror pm2 config now >>$logfile - $pm2cmd save - pm2setup=$true -fi -# Disable Screensaver -choice=n -read -p "Do you want to disable the screen saver? (y/N)?" choice -if [[ $choice =~ ^[Yy]$ ]]; then - # if this is a mac - if [ $mac == 'Darwin' ]; then - # get the current setting - setting=$(defaults -currentHost read com.apple.screensaver idleTime) - # if its on - if [ $setting != 0 ] ; then - # turn it off - echo disable screensaver via mac profile >> $logfile - defaults -currentHost write com.apple.screensaver idleTime 0 - else - echo mac profile screen saver already disabled >> $logfile - fi - else - # find out if some screen saver running - - # get just the running processes and args - # just want the program name (1st token) - # find the 1st with 'saver' in it (should only be one) - # parse with path char, get the last field ( the actual pgm name) - - screen_saver_running=$(ps -A -o args | awk '{print $1}' | grep -m1 [s]aver | awk -F\/ '{print $NF}'); - - # if we found something - if [ "$screen_saver_running." != "." ]; then - # some screensaver running - case "$screen_saver_running" in - mate-screensaver) echo 'mate screen saver' >>$logfile - #killall mate-screensaver >/dev/null 2>&1 - #$ms -d >/dev/null 2>&1 - gsettings set org.mate.screensaver lock-enabled false 2>/dev/null - gsettings set org.mate.screensaver idle-activation-enabled false 2>/dev/null - gsettings set org.mate.screensaver lock_delay 0 2>/dev/null - echo " $screen_saver_running disabled" >> $logfile - DISPLAY=:0 mate-screensaver >/dev/null 2>&1 & - ;; - gnome-screensaver) echo 'gnome screen saver' >>$logfile - gnome_screensaver-command -d >/dev/null 2>&1 - echo " $screen_saver_running disabled" >> $logfile - ;; - xscreensaver) echo 'xscreensaver running' | tee -a $logfile - if [ $(grep -m1 'mode:' ~/.xscreensaver | awk '{print $2}') != 'off' ]; then - sed -i 's/$xsetting/mode: off/' ~/.xscreensaver - echo " xscreensaver set to off" >> $logfile - else - echo " xscreensaver already disabled" >> $logfile - fi - ;; - gsd-screensaver | gsd-screensaver-proxy) - setting=$(gsettings get org.gnome.desktop.screensaver lock-enabled) - setting1=$(gsettings get org.gnome.desktop.session idle-delay) - if [ "$setting $setting1" != 'false uint32 0' ]; then - echo disable screensaver via gsettings was $setting and $setting1>> $logfile - gsettings set org.gnome.desktop.screensaver lock-enabled false - gsettings set org.gnome.desktop.screensaver idle-activation-enabled false - gsettings set org.gnome.desktop.session idle-delay 0 - else - echo gsettings screen saver already disabled >> $logfile - fi - ;; - *) echo "some other screensaver $screen_saver_running" found | tee -a $logfile - echo "please configure it manually" | tee -a $logfile - ;; - esac - elif [ -d "/etc/xdg/lxsession" ]; then - currently_set=$(grep -m1 '\-dpms' /etc/xdg/lxsession/LXDE-pi/autostart) - if [ "$currently_set." == "." ]; then - echo disable screensaver via lxsession >> $logfile - # turn it off for the future - sudo su -c "echo -e '@xset s noblank\n@xset s off\n@xset -dpms' >> /etc/xdg/lxsession/LXDE-pi/autostart" - # turn it off now - export DISPLAY=:0; xset s noblank;xset s off;xset -dpms - else - echo lxsession screen saver already disabled >> $logfile - fi - elif [ $(which gsettings | wc -l) == 1 ]; then - setting=$(gsettings get org.gnome.desktop.screensaver lock-enabled) - setting1=$(gsettings get org.gnome.desktop.session idle-delay) - if [ "$setting $setting1" != 'false uint32 0' ]; then - echo disable screensaver via gsettings was $setting and $setting1>> $logfile - gsettings set org.gnome.desktop.screensaver lock-enabled false - gsettings set org.gnome.desktop.screensaver idle-activation-enabled false - gsettings set org.gnome.desktop.session idle-delay 0 - else - echo gsettings screen saver already disabled >> $logfile - fi - elif [ -e "/etc/lightdm/lightdm.conf" ]; then - # if screen saver NOT already disabled? - if [ $(grep 'xserver-command=X -s 0 -dpms' /etc/lightdm/lightdm.conf | wc -l) == 0 ]; then - echo install screensaver via lightdm.conf >> $logfile - sudo sed -i '/^\[Seat:\*\]/a xserver-command=X -s 0 -dpms' /etc/lightdm/lightdm.conf - else - echo screensaver via lightdm already disabled >> $logfile - fi - else - echo " " - echo -e "unable to disable screen saver, /etc/xdg/lxsession does not exist" | tee -a $logfile - fi - fi -fi -echo " " -if [ $pm2setup -eq $true ]; then - rmessage="pm2 start MagicMirror" -else - rmessage="DISPLAY=:0 npm start" -fi -echo -e "\e[92mWe're ready! Run \e[1m\e[97m$rmessage\e[0m\e[92m from the ~/MagicMirror directory to start your MagicMirror.\e[0m" | tee -a $logfile - -echo " " -echo " " - -date +"install completed - %a %b %e %H:%M:%S %Z %Y" >>$logfile From 153d1853fa3f82932f333ce9c8b71dfc8a692305 Mon Sep 17 00:00:00 2001 From: Sam Detweiler Date: Sun, 8 Dec 2019 08:46:41 -0600 Subject: [PATCH 06/10] add apt get upgrade to actually upgrade files, as OS repos are lagging --- installers/raspberry.sh | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/installers/raspberry.sh b/installers/raspberry.sh index 45e3d0affa..3c1e1905fa 100755 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -1,4 +1,3 @@ - #!/bin/bash # This is an installer script for MagicMirror2. It works well enough # that it can detect if you have Node installed, run a binary script @@ -93,6 +92,7 @@ function verlt() { [ "$1" = "$2" ] && return 1 || verlte $1 $2 ;} # Update before first apt-get if [ $mac != 'Darwin' ]; then echo -e "\e[96mUpdating packages ...\e[90m" | tee -a $logfile + upgrade=$false update=$(sudo apt-get update 2>&1) echo $update >> $logfile update_rc=$? @@ -100,18 +100,25 @@ if [ $mac != 'Darwin' ]; then echo -e "\e[91mUpdate failed, retrying installation ...\e[90m" | tee -a $logfile if [ $(echo $update | grep "apt-secure" | wc -l) -eq 1 ]; then update=$(sudo apt-get update --allow-releaseinfo-change 2>&1) - echo $update >> $logfile update_rc=$? + echo $update >> $logfile if [ $update_rc -ne 0 ]; then - echo "second apt-get update failed" $update | ree -a $logfile + echo "second apt-get update failed" $update | tee -a $logfile exit 1 else echo "second apt-get update completed ok" >> $logfile + upgrade=$true fi fi else echo "apt-get update completed ok" >> $logfile + upgrade=$true fi + if [ $upgrade -eq $true ]; then + upgrade_result=$(sudo apt-get upgrade 2>&1) + upgrade_rc=$? + echo apt upgrade result ="rc=$upgrade_rc $upgrade_result" >> $logfile + fi # Installing helper tools echo -e "\e[96mInstalling helper tools ...\e[90m" | tee -a $logfile @@ -379,18 +386,19 @@ if [[ $choice =~ ^[Yy]$ ]]; then echo pm2 startup command done >>$logfile # is this is mac # need to fix pm2 startup, only on catalina - if [ $mac == 'Darwin' -a $(sw_vers -productVersion | head -c 6) == '10.15.' ]; then - # only do if the faulty tag is present (pm2 may fix this, before the script is fixed) - if [ $(grep -m 1 UserName /Users/$USER/Library/LaunchAgents/pm2.$USER.plist | wc -l) -eq 1 ]; then - # copy the pm2 startup file config - cp /Users/$USER/Library/LaunchAgents/pm2.$USER.plist . - # edit out the UserName key/value strings - sed -e '/UserName/{N;d;}' pm2.$USER.plist > pm2.$USER.plist.new - # copy the file back - sudo cp pm2.$USER.plist.new /Users/$USER/Library/LaunchAgents/pm2.$USER.plist - fi - fi - + if [ $mac == 'Darwin' ];then + if [ $(sw_vers -productVersion | head -c 6) == '10.15.' ]; then + # only do if the faulty tag is present (pm2 may fix this, before the script is fixed) + if [ $(grep -m 1 UserName /Users/$USER/Library/LaunchAgents/pm2.$USER.plist | wc -l) -eq 1 ]; then + # copy the pm2 startup file config + cp /Users/$USER/Library/LaunchAgents/pm2.$USER.plist . + # edit out the UserName key/value strings + sed -e '/UserName/{N;d;}' pm2.$USER.plist > pm2.$USER.plist.new + # copy the file back + sudo cp pm2.$USER.plist.new /Users/$USER/Library/LaunchAgents/pm2.$USER.plist + fi + fi + fi # if the user is no pi, we have to fixup the pm2 json file echo configure the pm2 config file for MagicMirror >>$logfile if [ "$USER" != "pi" ]; then @@ -551,4 +559,4 @@ echo -e "\e[92mWe're ready! Run \e[1m\e[97m$rmessage\e[0m\e[92m from the ~/Magic echo " " echo " " -date +"install completed - %a %b %e %H:%M:%S %Z %Y" >>$logfile \ No newline at end of file +date +"install completed - %a %b %e %H:%M:%S %Z %Y" >>$logfile From 52c4e3a2562c2f1a26f5416c3ef38fa4d92b8b8f Mon Sep 17 00:00:00 2001 From: Sam Detweiler Date: Mon, 9 Dec 2019 09:43:32 -0600 Subject: [PATCH 07/10] add changelog update --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 38b1543f86..d1531aebab 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Updated - updated raspberry.sh installer script to handle new platform issues, split node/npm, pm2, and screen saver changes - improve handling for armv6l devices, where electron support has gone away, add optional serveronly config option +- improved run-start.sh to handle for serveronly mode, by choice, or when electron not available --- From 5176b06b59538709ee7c52c5d01c8486b539e3b8 Mon Sep 17 00:00:00 2001 From: Sam Detweiler Date: Fri, 13 Dec 2019 08:01:32 -0600 Subject: [PATCH 08/10] add check for root user and abort --- installers/raspberry.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/installers/raspberry.sh b/installers/raspberry.sh index 3c1e1905fa..23bcae8f32 100755 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -3,6 +3,11 @@ # that it can detect if you have Node installed, run a binary script # and then download and run MagicMirror2. +if [ $USER == 'root' ]; then + echo Please logon as a user to execute the MagicMirror installation, not root + exit 1 +fi + echo -e "\e[0m" echo '$$\ $$\ $$\ $$\ $$\ $$\ $$$$$$\' echo '$$$\ $$$ | \__| $$$\ $$$ |\__| $$ __$$\' @@ -37,6 +42,8 @@ trim() { echo -n "$var" } + + mac=$(uname -s) if [ $mac == 'Darwin' ]; then echo this is a mac | tee -a $logfile @@ -67,7 +74,7 @@ echo install log being saved to $logfile date +"install starting - %a %b %e %H:%M:%S %Z %Y" >>$logfile ARM=$(uname -m) echo installing on $ARM processor system >>$logfile -echo the os is $(lsb_release -a) >> $logfile +echo the os is $(lsb_release -a 2>/dev/null) >> $logfile # Check the Raspberry Pi version. if [ "$ARM" != "armv7l" ]; then read -p "this appears not to be a Raspberry Pi 2 or 3, do you want to continue installation (y/N)?" choice @@ -75,7 +82,7 @@ if [ "$ARM" != "armv7l" ]; then echo user stopped install on $ARM hardware >>$logfile echo -e "\e[91mSorry, your Raspberry Pi is not supported." echo -e "\e[91mPlease run MagicMirror on a Raspberry Pi 2 or 3." - echo -e "\e[91mIf this is a Pi Zero, you are in the same boat as the original Raspberry Pi. You must run in server only mode." + echo -e "\e[91mIf this is a Pi Zero, the setup will configure to run in server only mode wih a local browser." exit; fi #if [ "$ARM" == "armv6l" ]; then From edd5e2f5bcd8c03acd7df14d8dd0010b1af19824 Mon Sep 17 00:00:00 2001 From: Sam Detweiler Date: Tue, 24 Dec 2019 06:55:12 -0600 Subject: [PATCH 09/10] move lxsession screensaver checking to last, some systems still have the folder but don't use it --- installers/raspberry.sh | 218 +++++++++++++++++------------------ installers/screensaveroff.sh | 101 ++++++++++++++++ 2 files changed, 210 insertions(+), 109 deletions(-) create mode 100755 installers/screensaveroff.sh diff --git a/installers/raspberry.sh b/installers/raspberry.sh index 23bcae8f32..4fceaee8e1 100755 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -3,8 +3,8 @@ # that it can detect if you have Node installed, run a binary script # and then download and run MagicMirror2. -if [ $USER == 'root' ]; then - echo Please logon as a user to execute the MagicMirror installation, not root +if [ $USER == 'root' ]; then + echo Please logon as a user to execute the MagicMirror installation, not root exit 1 fi @@ -19,7 +19,7 @@ echo '$$ | \_/ $$ |\$$$$$$$ |\$$$$$$$ |$$ |\$$$$$$$\ $$ | \_/ $$ |$$ |$$ | echo '\__| \__| \_______| \____$$ |\__| \_______|\__| \__|\__|\__| \__| \______/ \__| \________|' echo ' $$\ $$ |' echo ' \$$$$$$ |' -echo ' \______/' +echo ' \______/' echo -e "\e[0m" doInstall=1 @@ -38,7 +38,7 @@ trim() { # remove leading whitespace characters var="${var#"${var%%[![:space:]]*}"}" # remove trailing whitespace characters - var="${var%"${var##*[![:space:]]}"}" + var="${var%"${var##*[![:space:]]}"}" echo -n "$var" } @@ -58,27 +58,27 @@ logdir=$(dirname $($cmd -f "$0")) # if the script was execute from the web if [[ $logdir != *"MagicMirror/installers"* ]]; then # use the MagicMirror/installers folder, if setup - if [ -d MagicMirror ]; then + if [ -d MagicMirror ]; then cd ~/MagicMirror/installers >/dev/null logdir=$(pwd) cd - >/dev/null else # use the users home folder if initial install logdir=$HOME - fi + fi fi logfile=$logdir/install.log echo install log being saved to $logfile # Determine which Pi is running. date +"install starting - %a %b %e %H:%M:%S %Z %Y" >>$logfile -ARM=$(uname -m) +ARM=$(uname -m) echo installing on $ARM processor system >>$logfile echo the os is $(lsb_release -a 2>/dev/null) >> $logfile # Check the Raspberry Pi version. if [ "$ARM" != "armv7l" ]; then - read -p "this appears not to be a Raspberry Pi 2 or 3, do you want to continue installation (y/N)?" choice - if [[ $choice =~ ^[Nn]$ ]]; then + read -p "this appears not to be a Raspberry Pi 2 or 3, do you want to continue installation (y/N)?" choice + if [[ $choice =~ ^[Nn]$ ]]; then echo user stopped install on $ARM hardware >>$logfile echo -e "\e[91mSorry, your Raspberry Pi is not supported." echo -e "\e[91mPlease run MagicMirror on a Raspberry Pi 2 or 3." @@ -90,7 +90,7 @@ if [ "$ARM" != "armv7l" ]; then # force_arch=-'--arch=armv7l' # fi fi - + # Define helper methods. function command_exists () { type "$1" &> /dev/null ;} function verlte() { [ "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ];} @@ -103,29 +103,29 @@ if [ $mac != 'Darwin' ]; then update=$(sudo apt-get update 2>&1) echo $update >> $logfile update_rc=$? - if [ $update_rc -ne 0 ]; then + if [ $update_rc -ne 0 ]; then echo -e "\e[91mUpdate failed, retrying installation ...\e[90m" | tee -a $logfile - if [ $(echo $update | grep "apt-secure" | wc -l) -eq 1 ]; then + if [ $(echo $update | grep "apt-secure" | wc -l) -eq 1 ]; then update=$(sudo apt-get update --allow-releaseinfo-change 2>&1) update_rc=$? echo $update >> $logfile - if [ $update_rc -ne 0 ]; then + if [ $update_rc -ne 0 ]; then echo "second apt-get update failed" $update | tee -a $logfile exit 1 else echo "second apt-get update completed ok" >> $logfile upgrade=$true - fi + fi fi - else + else echo "apt-get update completed ok" >> $logfile upgrade=$true fi - if [ $upgrade -eq $true ]; then - upgrade_result=$(sudo apt-get upgrade 2>&1) + if [ $upgrade -eq $true ]; then + upgrade_result=$(sudo apt-get upgrade 2>&1) upgrade_rc=$? echo apt upgrade result ="rc=$upgrade_rc $upgrade_result" >> $logfile - fi + fi # Installing helper tools echo -e "\e[96mInstalling helper tools ...\e[90m" | tee -a $logfile @@ -167,7 +167,7 @@ else fi # Install or upgrade node if necessary. if $NODE_INSTALL; then - + echo -e "\e[96mInstalling Node.js ...\e[90m" | tee -a $logfile # Fetch the latest version of Node.js from the selected branch @@ -175,8 +175,8 @@ if $NODE_INSTALL; then # Only tested (stable) versions are recommended as newer versions could break MagicMirror. if [ $mac == 'Darwin' ]; then brew install node - else - NODE_STABLE_BRANCH="10.x" + else + NODE_STABLE_BRANCH="10.x" # sudo apt-get install --only-upgrade libstdc++6 node_info=$(curl -sL https://deb.nodesource.com/setup_$NODE_STABLE_BRANCH | sudo -E bash - ) echo Node release info = $node_info >> $logfile @@ -196,17 +196,17 @@ if $NODE_INSTALL; then echo using release tar file = node_release-$node_ver.tar.gz >> $logfile sudo tar --strip-components 1 -xzf $HOME/node_release-$node_ver.tar.gz cd - >/dev/null - rm ./node_release-$node_ver.tar.gz - fi + rm ./node_release-$node_ver.tar.gz + fi # get the new node version number new_ver=$(node -v 2>&1) # if there is a failure to get it due to a missing library - if [ $(echo $new_ver | grep "not found" | wc -l) -ne 0 ]; then + if [ $(echo $new_ver | grep "not found" | wc -l) -ne 0 ]; then # - sudo apt-get install -y --only-upgrade libstdc++6 >> $logfile - fi - echo node version is $(node -v 2>&1 >>$logfile) - fi + sudo apt-get install -y --only-upgrade libstdc++6 >> $logfile + fi + echo node version is $(node -v 2>&1 >>$logfile) + fi echo -e "\e[92mNode.js installation Done! version=$(node -v)\e[0m" | tee -a $logfile fi # Check if we need to install or upgrade npm. @@ -240,20 +240,20 @@ fi # Install or upgrade node if necessary. if $NPM_INSTALL; then - + echo -e "\e[96mInstalling npm ...\e[90m" | tee -a $logfile # Fetch the latest version of npm from the selected branch # The NODE_STABLE_BRANCH variable will need to be manually adjusted when a new branch is released. (e.g. 7.x) # Only tested (stable) versions are recommended as newer versions could break MagicMirror. - + #NODE_STABLE_BRANCH="9.x" #curl -sL https://deb.nodesource.com/setup_$NODE_STABLE_BRANCH | sudo -E bash - # # if this is a mac, npm was installed with node if [ $mac != 'Darwin' ]; then sudo apt-get install -y npm >>$logfile - fi + fi # update to the latest. echo upgrading npm to latest >> $logfile sudo npm i -g npm >>$logfile @@ -262,7 +262,7 @@ fi # Install MagicMirror cd ~ -if [ $doInstall == 1 ]; then +if [ $doInstall == 1 ]; then if [ -d "$HOME/MagicMirror" ] ; then echo -e "\e[93mIt seems like MagicMirror is already installed." | tee -a $logfile echo -e "To prevent overwriting, the installer will be aborted." | tee -a $logfile @@ -274,9 +274,9 @@ if [ $doInstall == 1 ]; then fi echo -e "\e[96mCloning MagicMirror ...\e[90m" | tee -a $logfile - if git clone --depth=1 https://github.com/MichMich/MagicMirror.git; then + if git clone --depth=1 https://github.com/MichMich/MagicMirror.git; then echo -e "\e[92mCloning MagicMirror Done!\e[0m" | tee -a $logfile - else + else echo -e "\e[91mUnable to clone MagicMirror." | tee -a $logfile exit; fi @@ -288,7 +288,7 @@ if [ $doInstall == 1 ]; then git checkout develop > /dev/null 2>&1 fi echo -e "\e[96mInstalling dependencies ...\e[90m" | tee -a $logfile - if npm install $force_arch; then + if npm install $force_arch; then echo -e "\e[92mDependencies installation Done!\e[0m" | tee -a $logfile else echo -e "\e[91mUnable to install dependencies!" | tee -a $logfile @@ -311,8 +311,8 @@ if command_exists plymouth; then fi if sudo cp ~/MagicMirror/splashscreen/splash.png $THEME_DIR/MagicMirror/splash.png && sudo cp ~/MagicMirror/splashscreen/MagicMirror.plymouth $THEME_DIR/MagicMirror/MagicMirror.plymouth && sudo cp ~/MagicMirror/splashscreen/MagicMirror.script $THEME_DIR/MagicMirror/MagicMirror.script; then - echo - if [ "$(which plymouth-set-default-theme)." != "." ]; then + echo + if [ "$(which plymouth-set-default-theme)." != "." ]; then if sudo plymouth-set-default-theme -R MagicMirror; then echo -e "\e[92mSplashscreen: Changed theme to MagicMirror successfully.\e[0m" | tee -a $logfile else @@ -334,16 +334,16 @@ read -p "Do you want use pm2 for auto starting of your MagicMirror (y/N)?" choic if [[ $choice =~ ^[Yy]$ ]]; then echo install and setup pm2 | tee -a $logfile # assume pm2 will be found on the path - pm2cmd=pm2 + pm2cmd=pm2 # check to see if already installed pm2_installed=$(which $pm2cmd) up="" - if [ $mac == 'Darwin' ]; then + if [ $mac == 'Darwin' ]; then up="--unsafe-perm" launchctl=launchctl launchctl_path=$(which $launchctl) `export PATH=$PATH:${launchctl_path%/$launchctl}` - fi + fi # check to see if already installed pm2_installed=$(which $pm2cmd) if [ "$pm2_installed." != "." ]; then @@ -356,68 +356,68 @@ if [[ $choice =~ ^[Yy]$ ]]; then # force reinstall pm2_installed= fi - fi + fi # if not installed - if [ "$pm2_installed." == "." ]; then - # install it. - echo pm2 not installed, installing >>$logfile + if [ "$pm2_installed." == "." ]; then + # install it. + echo pm2 not installed, installing >>$logfile result=$(sudo npm install $up -g pm2 2>&1) echo pm2 install result $result >>$logfile # if this is a mac - if [ $mac == 'Darwin' ]; then + if [ $mac == 'Darwin' ]; then echo this is a mac, fixup for path >>$logfile # get the location of pm2 install # parse the npm install output to get the command pm2cmd=`echo $result | awk -F - '{print $1}' | tr -d '[:space:]'` - c='/pm2' + c='/pm2' # get the path only - echo ${pm2cmd%$c} >installers/pm2path - fi + echo ${pm2cmd%$c} >installers/pm2path + fi fi echo get the pm2 platform specific startup command >>$logfile # get the platform specific pm2 startup command v=$($pm2cmd startup | tail -n 1) if [ $mac != 'Darwin' ]; then # check to see if we can get the OS package name (Ubuntu) - if [ $(which lsb_release| wc -l) >0 ]; then + if [ $(which lsb_release| wc -l) >0 ]; then # fix command - # if ubuntu 18.04, pm2 startup gets something wrong + # if ubuntu 18.04, pm2 startup gets something wrong if [ $(lsb_release -r | grep -m1 18.04 | wc -l) > 0 ]; then v=$(echo $v | sed 's/\/bin/\/bin:\/bin/') - fi + fi fi fi echo startup command = $v >>$logfile - # execute the command returned + # execute the command returned $v 2>&1 >>$logfile echo pm2 startup command done >>$logfile - # is this is mac + # is this is mac # need to fix pm2 startup, only on catalina - if [ $mac == 'Darwin' ];then + if [ $mac == 'Darwin' ];then if [ $(sw_vers -productVersion | head -c 6) == '10.15.' ]; then # only do if the faulty tag is present (pm2 may fix this, before the script is fixed) - if [ $(grep -m 1 UserName /Users/$USER/Library/LaunchAgents/pm2.$USER.plist | wc -l) -eq 1 ]; then + if [ $(grep -m 1 UserName /Users/$USER/Library/LaunchAgents/pm2.$USER.plist | wc -l) -eq 1 ]; then # copy the pm2 startup file config cp /Users/$USER/Library/LaunchAgents/pm2.$USER.plist . # edit out the UserName key/value strings sed -e '/UserName/{N;d;}' pm2.$USER.plist > pm2.$USER.plist.new - # copy the file back + # copy the file back sudo cp pm2.$USER.plist.new /Users/$USER/Library/LaunchAgents/pm2.$USER.plist - fi + fi fi - fi - # if the user is no pi, we have to fixup the pm2 json file + fi + # if the user is no pi, we have to fixup the pm2 json file echo configure the pm2 config file for MagicMirror >>$logfile - if [ "$USER" != "pi" ]; then + if [ "$USER" != "pi" ]; then echo the user is not pi >>$logfile # go to the installers folder` cd installers - # edit the startup script for the right user + # edit the startup script for the right user echo change mm.sh >>$logfile if [ ! -e mm_temp.sh ]; then echo save copy of mm.sh >> $logfile cp mm.sh mm_temp.sh - fi + fi if [ $(grep pi mm_temp.sh | wc -l) -gt 0 ]; then echo change hard coded pi username >> $logfile sed 's/pi/'$USER'/g' mm_temp.sh >mm.sh @@ -425,14 +425,14 @@ if [[ $choice =~ ^[Yy]$ ]]; then echo change relative home path to hard coded path >> $logfile hf=$(echo $HOME |sed 's/\//\\\//g') sed 's/\~/'$hf'/g' mm_temp.sh >mm.sh - fi + fi # edit the pms config file for the right user echo change $PM2_FILE >>$logfile sed 's/pi/'$USER'/g' $PM2_FILE > pm2_MagicMirror_new.json # make sure to use the updated file PM2_FILE=pm2_MagicMirror_new.json # if this is a mac - if [ $mac == 'Darwin' ]; then + if [ $mac == 'Darwin' ]; then # copy the path file to the system paths list sudo cp ./pm2path /etc/paths.d # change the name of the home path for mac @@ -446,7 +446,7 @@ if [[ $choice =~ ^[Yy]$ ]]; then fi echo start MagicMirror via pm2 now >>$logfile # tell pm2 to start the app defined in the config file - $pm2cmd start $HOME/MagicMirror/installers/$PM2_FILE + $pm2cmd start $HOME/MagicMirror/installers/$PM2_FILE # tell pm2 to save that configuration, for start at boot echo save MagicMirror pm2 config now >>$logfile $pm2cmd save @@ -457,104 +457,104 @@ choice=n read -p "Do you want to disable the screen saver? (y/N)?" choice if [[ $choice =~ ^[Yy]$ ]]; then # if this is a mac - if [ $mac == 'Darwin' ]; then + if [ $mac == 'Darwin' ]; then # get the current setting setting=$(defaults -currentHost read com.apple.screensaver idleTime) # if its on - if [ $setting != 0 ] ; then + if [ $setting != 0 ] ; then # turn it off - echo disable screensaver via mac profile >> $logfile + echo disable screensaver via mac profile >> $logfile defaults -currentHost write com.apple.screensaver idleTime 0 else - echo mac profile screen saver already disabled >> $logfile + echo mac profile screen saver already disabled >> $logfile fi else # find out if some screen saver running - + # get just the running processes and args # just want the program name (1st token) # find the 1st with 'saver' in it (should only be one) # parse with path char, get the last field ( the actual pgm name) - - screen_saver_running=$(ps -A -o args | awk '{print $1}' | grep -m1 [s]aver | awk -F\/ '{print $NF}'); - - # if we found something + + screen_saver_running=$(ps -A -o args | awk '{print $1}' | grep -m1 [s]aver | awk -F\/ '{print $NF}'); + + # if we found something if [ "$screen_saver_running." != "." ]; then # some screensaver running - case "$screen_saver_running" in + case "$screen_saver_running" in mate-screensaver) echo 'mate screen saver' >>$logfile #killall mate-screensaver >/dev/null 2>&1 #$ms -d >/dev/null 2>&1 - gsettings set org.mate.screensaver lock-enabled false 2>/dev/null + gsettings set org.mate.screensaver lock-enabled false 2>/dev/null gsettings set org.mate.screensaver idle-activation-enabled false 2>/dev/null gsettings set org.mate.screensaver lock_delay 0 2>/dev/null - echo " $screen_saver_running disabled" >> $logfile + echo " $screen_saver_running disabled" >> $logfile DISPLAY=:0 mate-screensaver >/dev/null 2>&1 & ;; gnome-screensaver) echo 'gnome screen saver' >>$logfile gnome_screensaver-command -d >/dev/null 2>&1 echo " $screen_saver_running disabled" >> $logfile - ;; + ;; xscreensaver) echo 'xscreensaver running' | tee -a $logfile - if [ $(grep -m1 'mode:' ~/.xscreensaver | awk '{print $2}') != 'off' ]; then + if [ $(grep -m1 'mode:' ~/.xscreensaver | awk '{print $2}') != 'off' ]; then sed -i 's/$xsetting/mode: off/' ~/.xscreensaver echo " xscreensaver set to off" >> $logfile else echo " xscreensaver already disabled" >> $logfile - fi + fi ;; gsd-screensaver | gsd-screensaver-proxy) setting=$(gsettings get org.gnome.desktop.screensaver lock-enabled) - setting1=$(gsettings get org.gnome.desktop.session idle-delay) - if [ "$setting $setting1" != 'false uint32 0' ]; then + setting1=$(gsettings get org.gnome.desktop.session idle-delay) + if [ "$setting $setting1" != 'false uint32 0' ]; then echo disable screensaver via gsettings was $setting and $setting1>> $logfile - gsettings set org.gnome.desktop.screensaver lock-enabled false - gsettings set org.gnome.desktop.screensaver idle-activation-enabled false + gsettings set org.gnome.desktop.screensaver lock-enabled false + gsettings set org.gnome.desktop.screensaver idle-activation-enabled false gsettings set org.gnome.desktop.session idle-delay 0 else echo gsettings screen saver already disabled >> $logfile fi - ;; + ;; *) echo "some other screensaver $screen_saver_running" found | tee -a $logfile echo "please configure it manually" | tee -a $logfile ;; - esac + esac + elif [ -e "/etc/lightdm/lightdm.conf" ]; then + # if screen saver NOT already disabled? + if [ $(grep 'xserver-command=X -s 0 -dpms' /etc/lightdm/lightdm.conf | wc -l) == 0 ]; then + echo install screensaver via lightdm.conf >> $logfile + sudo sed -i '/^\[Seat:\*\]/a xserver-command=X -s 0 -dpms' /etc/lightdm/lightdm.conf + else + echo screensaver via lightdm already disabled >> $logfile + fi + elif [ $(which gsettings | wc -l) == 1 ]; then + setting=$(gsettings get org.gnome.desktop.screensaver lock-enabled) + setting1=$(gsettings get org.gnome.desktop.session idle-delay) + if [ "$setting $setting1" != 'false uint32 0' ]; then + echo disable screensaver via gsettings was $setting and $setting1>> $logfile + gsettings set org.gnome.desktop.screensaver lock-enabled false + gsettings set org.gnome.desktop.screensaver idle-activation-enabled false + gsettings set org.gnome.desktop.session idle-delay 0 + else + echo gsettings screen saver already disabled >> $logfile + fi elif [ -d "/etc/xdg/lxsession" ]; then currently_set=$(grep -m1 '\-dpms' /etc/xdg/lxsession/LXDE-pi/autostart) - if [ "$currently_set." == "." ]; then - echo disable screensaver via lxsession >> $logfile + if [ "$currently_set." == "." ]; then + echo disable screensaver via lxsession >> $logfile # turn it off for the future sudo su -c "echo -e '@xset s noblank\n@xset s off\n@xset -dpms' >> /etc/xdg/lxsession/LXDE-pi/autostart" # turn it off now export DISPLAY=:0; xset s noblank;xset s off;xset -dpms else echo lxsession screen saver already disabled >> $logfile - fi - elif [ $(which gsettings | wc -l) == 1 ]; then - setting=$(gsettings get org.gnome.desktop.screensaver lock-enabled) - setting1=$(gsettings get org.gnome.desktop.session idle-delay) - if [ "$setting $setting1" != 'false uint32 0' ]; then - echo disable screensaver via gsettings was $setting and $setting1>> $logfile - gsettings set org.gnome.desktop.screensaver lock-enabled false - gsettings set org.gnome.desktop.screensaver idle-activation-enabled false - gsettings set org.gnome.desktop.session idle-delay 0 - else - echo gsettings screen saver already disabled >> $logfile fi - elif [ -e "/etc/lightdm/lightdm.conf" ]; then - # if screen saver NOT already disabled? - if [ $(grep 'xserver-command=X -s 0 -dpms' /etc/lightdm/lightdm.conf | wc -l) == 0 ]; then - echo install screensaver via lightdm.conf >> $logfile - sudo sed -i '/^\[Seat:\*\]/a xserver-command=X -s 0 -dpms' /etc/lightdm/lightdm.conf - else - echo screensaver via lightdm already disabled >> $logfile - fi else echo " " - echo -e "unable to disable screen saver, /etc/xdg/lxsession does not exist" | tee -a $logfile + echo -e "unable to disable screen saver, /etc/xdg/lxsession does not exist" | tee -a $logfile fi fi -fi +fi echo " " if [ $pm2setup -eq $true ]; then rmessage="pm2 start MagicMirror" diff --git a/installers/screensaveroff.sh b/installers/screensaveroff.sh new file mode 100755 index 0000000000..24e145ba50 --- /dev/null +++ b/installers/screensaveroff.sh @@ -0,0 +1,101 @@ +#/bin/bash +logfile=~/screensaver.log +mac=$(uname -s) + + if [ $mac == 'Darwin' ]; then + setting=$(defaults -currentHost read com.apple.screensaver idleTime) + if [ $setting != 0 ] ; then + echo disable screensaver via mac profile >> $logfile + defaults -currentHost write com.apple.screensaver idleTime 0 + else + echo mac profile screen saver already disabled >> $logfile + fi + else + # find out if some screen saver running + + # get just the running processes and args + # just want the program name + # find the 1st with 'saver' in it (should only be one) + # if the process name is a path, parse it and get the last field ( the actual pgm name) + + screen_saver_running=$(ps -A -o args | awk '{print $1}' | grep -m1 [s]aver | awk -F\/ '{print $NF}'); + + # if we found something + if [ "$screen_saver_running." != "." ]; then + # some screensaver running + case "$screen_saver_running" in + mate-screensaver) echo 'mate screen saver' >>$logfile + #killall mate-screensaver >/dev/null 2>&1 + #ms=$(which mate-screensaver-command) + #$ms -d >/dev/null 2>&1 + gsettings set org.mate.screensaver lock-enabled false 2>/dev/null + gsettings set org.mate.screensaver idle-activation-enabled false 2>/dev/null + gsettings set org.mate.screensaver lock_delay 0 2>/dev/null + echo " $screen_saver_running disabled" >> $logfile + DISPLAY=:0 mate-screensaver >/dev/null 2>&1 & + ;; + gnome-screensaver) echo 'gnome screen saver' >>$logfile + gnome_screensaver-command -d >/dev/null 2>&1 + echo " $screen_saver_running disabled" >> $logfile + ;; + xscreensaver) echo 'xscreensaver running' | tee -a $logfile + if [ $(grep -m1 'mode:' ~/.xscreensaver | awk '{print $2}') != 'off' ]; then + sed -i 's/$xsetting/mode: off/' ~/.xscreensaver + echo " xscreensaver set to off" >> $logfile + else + echo " xscreensaver already disabled" >> $logfile + fi + ;; + gsd-screensaver | gsd-screensaver-proxy) + setting=$(gsettings get org.gnome.desktop.screensaver lock-enabled) + setting1=$(gsettings get org.gnome.desktop.session idle-delay) + if [ "$setting $setting1" != 'false uint32 0' ]; then + echo disable screensaver via gsettings was $setting and $setting1>> $logfile + gsettings set org.gnome.desktop.screensaver lock-enabled false + gsettings set org.gnome.desktop.screensaver idle-activation-enabled false + gsettings set org.gnome.desktop.session idle-delay 0 + else + echo gsettings screen saver already disabled >> $logfile + fi + ;; + *) echo "some other screensaver $screen_saver_running" found | tee -a $logfile + echo "please configure it manually" | tee -a $logfile + ;; + esac + elif [ -e "/etc/lightdm/lightdm.conf" ]; then + # if screen saver NOT already disabled? + if [ $(grep 'xserver-command=X -s 0 -dpms' /etc/lightdm/lightdm.conf | wc -l) == 0 ]; then + echo install screensaver via lightdm.conf >> $logfile + sudo sed -i '/^\[Seat:\*\]/a xserver-command=X -s 0 -dpms' /etc/lightdm/lightdm.conf + #sudo cp _myconf /etc/lightdm/lightdm.conf + #rm _myconf >/dev/null + else + echo screensaver via lightdm already disabled >> $logfile + fi + elif [ $(which gsettings | wc -l) == 1 ]; then + setting=$(gsettings get org.gnome.desktop.screensaver lock-enabled) + setting1=$(gsettings get org.gnome.desktop.session idle-delay) + if [ "$setting $setting1" != 'false uint32 0' ]; then + echo disable screensaver via gsettings was $setting and $setting1>> $logfile + gsettings set org.gnome.desktop.screensaver lock-enabled false + gsettings set org.gnome.desktop.screensaver idle-activation-enabled false + gsettings set org.gnome.desktop.session idle-delay 0 + else + echo gsettings screen saver already disabled >> $logfile + fi + elif [ -d "/etc/xdg/lxsession" ]; then + currently_set=$(grep -m1 '\-dpms' /etc/xdg/lxsession/LXDE-pi/autostart) + if [ "$currently_set." == "." ]; then + echo disable screensaver via lxsession >> $logfile + # turn it off for the future + sudo su -c "echo -e '@xset s noblank\n@xset s off\n@xset -dpms' >> /etc/xdg/lxsession/LXDE-pi/autostart" + # turn it off now + export DISPLAY=:0; xset s noblank;xset s off;xset -dpms + else + echo lxsession screen saver already disabled >> $logfile + fi + else + echo " " + echo -e "unable to disable screen saver, /etc/xdg/lxsession does not exist" | tee >>$logfile + fi + fi From 272ca1ac4fb2aa63bee66d5d273878dfee6e1550 Mon Sep 17 00:00:00 2001 From: Sam Detweiler Date: Sat, 28 Dec 2019 15:46:10 -0600 Subject: [PATCH 10/10] synch package-lock.json for testing --- package-lock.json | 159 ++++++++++++++++++++++++---------------------- 1 file changed, 82 insertions(+), 77 deletions(-) diff --git a/package-lock.json b/package-lock.json index 46142063ed..9008a32318 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,15 +14,15 @@ } }, "@babel/core": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.5.tgz", - "integrity": "sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", + "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", "dev": true, "requires": { "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", + "@babel/generator": "^7.7.7", "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.5", + "@babel/parser": "^7.7.7", "@babel/template": "^7.7.4", "@babel/traverse": "^7.7.4", "@babel/types": "^7.7.4", @@ -66,9 +66,9 @@ "dev": true }, "resolve": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", - "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz", + "integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -83,9 +83,9 @@ } }, "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", "dev": true, "requires": { "@babel/types": "^7.7.4", @@ -197,15 +197,15 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/runtime": { - "version": "7.7.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.6.tgz", - "integrity": "sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.7.tgz", + "integrity": "sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==", "dev": true, "requires": { "regenerator-runtime": "^0.13.2" @@ -1286,9 +1286,9 @@ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "caniuse-lite": { - "version": "1.0.30001015", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz", - "integrity": "sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ==", + "version": "1.0.30001017", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001017.tgz", + "integrity": "sha512-EDnZyOJ6eYh6lHmCvCdHAFbfV4KJ9lSdfv4h/ppEhrU/Yudkl7jujwMZ1we6RX7DXqBfT04pVMQ4J+1wcTlsKA==", "dev": true }, "caseless": { @@ -2536,21 +2536,22 @@ } }, "es-abstract": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.3.tgz", - "integrity": "sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", "object-inspect": "^1.7.0", "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" }, "dependencies": { "object-keys": { @@ -2626,9 +2627,9 @@ } }, "eslint": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.2.tgz", - "integrity": "sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -3901,18 +3902,18 @@ } }, "grunt-markdownlint": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/grunt-markdownlint/-/grunt-markdownlint-2.7.0.tgz", - "integrity": "sha512-HcZQmsQEjYETviZ0l/TlNJXCjmujDlK9CWQZHVmt8n3D0FgMDgXR/pBPjW/cutIKMbWfUWv/iX2xPfRKm8vG8Q==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/grunt-markdownlint/-/grunt-markdownlint-2.8.0.tgz", + "integrity": "sha512-3HNNKB1C+qC+iB9ecDGymQMv2CVx+XHFxP3e1n/d1lE44GvJOaJFYCS6IgAc//Fhcz4v4X9XJCHDCTfAWuq5gg==", "dev": true, "requires": { - "markdownlint": "^0.17.0" + "markdownlint": "^0.18.0" } }, "grunt-stylelint": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.12.0.tgz", - "integrity": "sha512-6ntxeja38tCZHg3xVgRzRm6taiCuAU9PwqsOdPFwXg1VOR+kx/d8tQvgO9Suf4ouo93zq4bYsMX/JOBJIYEJvw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.13.0.tgz", + "integrity": "sha512-Ju9N03UBvPwcdoJYL77pDk0k0E8VD4oYtTfoRwvvPM1ON2MjOXWwPyaeIoYPnhUwcfN9D7TaXnTtuhNoWNsyrQ==", "dev": true, "requires": { "chalk": "^2.4.2" @@ -4341,9 +4342,9 @@ "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" }, "inquirer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", - "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz", + "integrity": "sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", @@ -4355,7 +4356,7 @@ "lodash": "^4.17.15", "mute-stream": "0.0.8", "run-async": "^2.2.0", - "rxjs": "^6.4.0", + "rxjs": "^6.5.3", "string-width": "^4.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" @@ -4544,9 +4545,9 @@ } }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", "dev": true }, "is-data-descriptor": { @@ -4576,9 +4577,9 @@ } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, "is-decimal": { @@ -4703,12 +4704,12 @@ "dev": true }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "dev": true, "requires": { - "has": "^1.0.1" + "has": "^1.0.3" } }, "is-regexp": { @@ -5296,9 +5297,9 @@ "dev": true }, "markdownlint": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.17.2.tgz", - "integrity": "sha512-vsxopn0qEdm0P2XI3S9sVA+jvjKjR8lHZ+0FKlusth+1UK9tI29mRFkKeZPERmbWsMehJcogfMieBUkMgNEFkQ==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.18.0.tgz", + "integrity": "sha512-nQAfK9Pbq0ZRoMC/abNGterEnV3kL8MZmi0WHhw8WJKoIbsm3cXGufGsxzCRvjW15cxe74KWcxRSKqwplS26Bw==", "dev": true, "requires": { "markdown-it": "10.0.0" @@ -5766,9 +5767,9 @@ } }, "node-releases": { - "version": "1.1.42", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.42.tgz", - "integrity": "sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA==", + "version": "1.1.44", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz", + "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==", "dev": true, "requires": { "semver": "^6.3.0" @@ -5782,6 +5783,10 @@ } } }, + "node_helper": { + "version": "git://github.com/sdetweil/nodehelper.git#c01ad10b38c81938a9ba3e55ab72ffd81d4bc0d4", + "from": "git://github.com/sdetweil/nodehelper.git" + }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -5953,13 +5958,13 @@ } }, "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "object.pick": { @@ -6294,9 +6299,9 @@ "dev": true }, "postcss": { - "version": "7.0.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.24.tgz", - "integrity": "sha512-Xl0XvdNWg+CblAXzNvbSOUvgJXwSjmbAKORqyw9V2AlHrm1js2gFw9y3jibBAhpKZi8b5JzJCVh/FyzPsTtgTA==", + "version": "7.0.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.25.tgz", + "integrity": "sha512-NXXVvWq9icrm/TgQC0O6YVFi4StfJz46M1iNd/h6B26Nvh/HKI+q4YZtFN/EjcInZliEscO/WL10BXnc1E5nwg==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -7090,9 +7095,9 @@ } }, "rxjs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", - "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -7607,9 +7612,9 @@ } }, "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", "dev": true, "requires": { "define-properties": "^1.1.3", @@ -7617,9 +7622,9 @@ } }, "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", "dev": true, "requires": { "define-properties": "^1.1.3", @@ -7679,9 +7684,9 @@ "dev": true }, "stylelint": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-12.0.0.tgz", - "integrity": "sha512-TwqtATrFOT07SPlUGyHN7tVhWqxwitn5BlAvyBQy/ekA+Nwu4mLU9L1dvGQPNxHUBLowjvkSW18QzHHR6/FVVQ==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-12.0.1.tgz", + "integrity": "sha512-1mn39pqZiC/e8KUPoRMc1WMM83Upb2ILaSGxkCvKxALHutEOs2txcPQocJiXdO4Zx4FY4prGqjlkwrbthAxqig==", "dev": true, "requires": { "autoprefixer": "^9.7.1",