mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-06-28 04:02:12 +00:00
Merge branch 'develop' into newservermode
This commit is contained in:
commit
5279995c3b
11
CHANGELOG.md
11
CHANGELOG.md
@ -3,10 +3,20 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
|
||||||
## Updated
|
## Updated
|
||||||
- fix handling of config.js for serverOnly mode commented out
|
- fix handling of config.js for serverOnly mode commented out
|
||||||
- only check for xwindows running if not on macOS
|
- only check for xwindows running if not on macOS
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- new upgrade script to help users consume regular updates installers/upgrade-script.sh
|
||||||
|
- new script to help setup pm2, without install installers/fixuppm2.sh
|
||||||
|
|
||||||
|
### 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
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/donate) With your help we can continue to improve the MagicMirror² core.
|
❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/donate) With your help we can continue to improve the MagicMirror² core.
|
||||||
@ -21,6 +31,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
### Updated
|
### Updated
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
- Fixed issue in weatherforecast module where predicted amount of rain was not using the decimal symbol specified in config.js.
|
||||||
|
|
||||||
## [2.9.0] - 2019-10-01
|
## [2.9.0] - 2019-10-01
|
||||||
|
|
||||||
|
15
README.md
15
README.md
@ -177,14 +177,19 @@ For more available modules, check out out the wiki page [MagicMirror² 3rd Party
|
|||||||
|
|
||||||
If you want to update your MagicMirror² to the latest version, use your terminal to go to your Magic Mirror folder and type the following command:
|
If you want to update your MagicMirror² to the latest version, use your terminal to go to your Magic Mirror folder and type the following command:
|
||||||
|
|
||||||
```bash
|
|
||||||
git pull && npm install
|
|
||||||
```
|
```
|
||||||
|
bash -c "$(curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installers/upgrade-script.sh)"
|
||||||
|
```
|
||||||
|
This will do a test run
|
||||||
|
|
||||||
If you changed nothing more than the config or the modules, this should work without any problems.
|
If the test update looks good then run this command
|
||||||
Type `git status` to see your changes, if there are any, you can reset them with `git reset --hard`. After that, git pull should be possible.
|
```
|
||||||
|
bash -c "$(curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installers/upgrade-script.sh)" apply
|
||||||
|
```
|
||||||
|
If there are changes you have made, they will be listed, and u will have the opportunity to save your work
|
||||||
|
|
||||||
|
The script will also update the dependencies of any active modules
|
||||||
|
If there are update issues, please come to the forums for help
|
||||||
## Community
|
## Community
|
||||||
|
|
||||||
The community around the MagicMirror² is constantly growing. We even have a [forum](https://forum.magicmirror.builders) now where you can share your ideas, ask questions, help others and get inspired by other builders. We would love to see you there!
|
The community around the MagicMirror² is constantly growing. We even have a [forum](https://forum.magicmirror.builders) now where you can share your ideas, ask questions, help others and get inspired by other builders. We would love to see you there!
|
||||||
|
@ -25,10 +25,10 @@ var config = {
|
|||||||
timeFormat: 24,
|
timeFormat: 24,
|
||||||
units: "metric",
|
units: "metric",
|
||||||
// serverOnly: true/false/"local" ,
|
// serverOnly: true/false/"local" ,
|
||||||
// local for armv6l processors, default
|
// local for armv6l processors, default
|
||||||
// starts serveronly and then starts chrome browser
|
// starts serveronly and then starts chrome browser
|
||||||
// false, default for all NON-armv6l devices
|
// false, default for all NON-armv6l devices
|
||||||
// true, force serveronly mode, because you want to.. no UI on this device
|
// true, force serveronly mode, because you want to.. no UI on this device
|
||||||
|
|
||||||
modules: [
|
modules: [
|
||||||
{
|
{
|
||||||
|
15
installers/dumpactivemodules.js
Normal file
15
installers/dumpactivemodules.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
const config = require('../config/config.js');const fs=require('fs');
|
||||||
|
for(let m of config.modules){
|
||||||
|
if(!(m.disabled || false)){
|
||||||
|
try {
|
||||||
|
let f=fs.statSync(m.module);
|
||||||
|
if(f.isDirectory()){
|
||||||
|
f1=fs.statSync(m.module+'/package.json');
|
||||||
|
if (f1.isFile()){
|
||||||
|
console.log(m.module);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (ex) {}
|
||||||
|
}
|
||||||
|
}
|
161
installers/fixuppm2.sh
Executable file
161
installers/fixuppm2.sh
Executable file
@ -0,0 +1,161 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Define the tested version of Node.js.
|
||||||
|
NODE_TESTED="v5.1.0"
|
||||||
|
NPM_TESTED="V6.0.0"
|
||||||
|
USER=`whoami`
|
||||||
|
PM2_FILE=pm2_MagicMirror.json
|
||||||
|
mac=$(uname -s)
|
||||||
|
if [ $mac == 'Darwin' ]; then
|
||||||
|
cmd=greadlink
|
||||||
|
else
|
||||||
|
cmd=readlink
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d ~/MagicMirror ]; then
|
||||||
|
# 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
|
||||||
|
cd ~/MagicMirror/installers >/dev/null
|
||||||
|
logdir=$(pwd)
|
||||||
|
cd - >/dev/null
|
||||||
|
fi
|
||||||
|
logfile=$logdir/pm2_setup.log
|
||||||
|
date +"pm2 setup starting - %a %b %e %H:%M:%S %Z %Y" >>$logfile
|
||||||
|
node_installed=$(which node)
|
||||||
|
if [ "$node_installed." == "." ]; then
|
||||||
|
# node not installed
|
||||||
|
echo Installing node >>$logfile
|
||||||
|
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
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
node_version=$(node -v)
|
||||||
|
echo node version $node_version >>$logfile
|
||||||
|
npm_installed=$(which npm)
|
||||||
|
if [ "$npm_installed." == "." ]; then
|
||||||
|
# npm not installed
|
||||||
|
echo Installing npm >>$logfile
|
||||||
|
if [ $mac != 'Darwin' ]; then
|
||||||
|
sudo apt-get install -y npm
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# get latest
|
||||||
|
echo force installing latest npm version via npm >>$logfile
|
||||||
|
#sudo npm i -g npm
|
||||||
|
npm_version=$(npm -v)
|
||||||
|
echo npm version $npm_version >>$logfile
|
||||||
|
# assume pm2 will be found on the path
|
||||||
|
pm2cmd=pm2
|
||||||
|
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?
|
||||||
|
echo pm2 installed >> $logfile
|
||||||
|
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
|
||||||
|
# force reinstall
|
||||||
|
pm2_installed=
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# in not installed
|
||||||
|
if [ "$pm2_installed." == "." ]; then
|
||||||
|
# install it.
|
||||||
|
echo pm2 not installed, installing >>$logfile
|
||||||
|
result=$(sudo npm install $up -g pm2)
|
||||||
|
# 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
|
||||||
|
# remove MagicMirror if defined
|
||||||
|
$pm2cmd delete MagicMirror >/dev/null 2>&1
|
||||||
|
cd ~/MagicMirror
|
||||||
|
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 command = $v >>$logfile
|
||||||
|
# execute the command returned
|
||||||
|
$v 2>/dev/null >>$logfile
|
||||||
|
echo pm2 startup done >>$logfile
|
||||||
|
|
||||||
|
# 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
|
||||||
|
date +"pm2 setup completed - %a %b %e %H:%M:%S %Z %Y" >>$logfile
|
||||||
|
else
|
||||||
|
echo It appears MagicMirror has not been installed on this system
|
||||||
|
echo please run the installer, "raspberry.sh" first
|
||||||
|
fi
|
459
installers/raspberry.sh
Normal file → Executable file
459
installers/raspberry.sh
Normal file → Executable file
@ -1,5 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# This is an installer script for MagicMirror2. It works well enough
|
# This is an installer script for MagicMirror2. It works well enough
|
||||||
# that it can detect if you have Node installed, run a binary script
|
# that it can detect if you have Node installed, run a binary script
|
||||||
# and then download and run MagicMirror2.
|
# and then download and run MagicMirror2.
|
||||||
@ -18,220 +17,470 @@ echo ' \$$$$$$ |'
|
|||||||
echo ' \______/'
|
echo ' \______/'
|
||||||
echo -e "\e[0m"
|
echo -e "\e[0m"
|
||||||
|
|
||||||
|
doInstall=1
|
||||||
|
true=1
|
||||||
|
false=0
|
||||||
# Define the tested version of Node.js.
|
# Define the tested version of Node.js.
|
||||||
NODE_TESTED="v5.1.0"
|
NODE_TESTED="v5.1.0"
|
||||||
NPM_TESTED="V6.0.0"
|
NPM_TESTED="V6.0.0"
|
||||||
USER=`whoami`
|
USER=`whoami`
|
||||||
PM2_FILE=~/MagicMirror/installers/pm2_MagicMirror.json
|
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.
|
# 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
|
||||||
# Check the Raspberry Pi version.
|
# Check the Raspberry Pi version.
|
||||||
if [ "$ARM" != "armv7l" ]; then
|
if [ "$ARM" != "armv7l" ]; then
|
||||||
read -p "this appears not to be a Raspberry Pi 2 or 3, do you want to continue installtion (y/N)?" choice
|
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
|
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[91mSorry, your Raspberry Pi is not supported."
|
||||||
echo -e "\e[91mPlease run MagicMirror on a Raspberry Pi 2 or 3."
|
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, you are in the same boat as the original Raspberry Pi. You must run in server only mode."
|
||||||
exit;
|
exit;
|
||||||
fi
|
fi
|
||||||
|
#if [ "$ARM" == "armv6l" ]; then
|
||||||
|
# echo forcing armv71 architecture for pi 0 >>$logfile
|
||||||
|
# force_arch=-'--arch=armv7l'
|
||||||
|
#fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Define helper methods.
|
# Define helper methods.
|
||||||
function command_exists () { type "$1" &> /dev/null ;}
|
function command_exists () { type "$1" &> /dev/null ;}
|
||||||
function verlte() { [ "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ];}
|
function verlte() { [ "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ];}
|
||||||
function verlt() { [ "$1" = "$2" ] && return 1 || verlte $1 $2 ;}
|
function verlt() { [ "$1" = "$2" ] && return 1 || verlte $1 $2 ;}
|
||||||
|
|
||||||
# Update before first apt-get
|
# Update before first apt-get
|
||||||
echo -e "\e[96mUpdating packages ...\e[90m"
|
if [ $mac != 'Darwin' ]; then
|
||||||
sudo apt-get update || echo -e "\e[91mUpdate failed, carrying on installation ...\e[90m"
|
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
|
||||||
|
|
||||||
|
if [ $mac != 'Darwin' ]; then
|
||||||
# Installing helper tools
|
# Installing helper tools
|
||||||
echo -e "\e[96mInstalling helper tools ...\e[90m"
|
echo -e "\e[96mInstalling helper tools ...\e[90m" | tee -a $logfile
|
||||||
sudo apt-get --assume-yes install curl wget git build-essential unzip || exit
|
sudo apt-get --assume-yes install curl wget git build-essential unzip || exit
|
||||||
|
fi
|
||||||
|
|
||||||
# Check if we need to install or upgrade Node.js.
|
# Check if we need to install or upgrade Node.js.
|
||||||
echo -e "\e[96mCheck current Node installation ...\e[0m"
|
echo -e "\e[96mCheck current Node installation ...\e[0m" | tee -a $logfile
|
||||||
NODE_INSTALL=false
|
NODE_INSTALL=false
|
||||||
if command_exists node; then
|
if command_exists node; then
|
||||||
echo -e "\e[0mNode currently installed. Checking version number.";
|
echo -e "\e[0mNode currently installed. Checking version number." | tee -a $logfile
|
||||||
NODE_CURRENT=$(node -v)
|
NODE_CURRENT=$(node -v)
|
||||||
echo -e "\e[0mMinimum Node version: \e[1m$NODE_TESTED\e[0m"
|
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"
|
echo -e "\e[0mInstalled Node version: \e[1m$NODE_CURRENT\e[0m" | tee -a $logfile
|
||||||
if verlte $NODE_CURRENT $NODE_TESTED; then
|
if verlte $NODE_CURRENT $NODE_TESTED; then
|
||||||
echo -e "\e[96mNode should be upgraded.\e[0m"
|
echo -e "\e[96mNode should be upgraded.\e[0m" | tee -a $logfile
|
||||||
NODE_INSTALL=true
|
NODE_INSTALL=true
|
||||||
|
|
||||||
# Check if a node process is currenlty running.
|
# Check if a node process is currenlty running.
|
||||||
# If so abort installation.
|
# If so abort installation.
|
||||||
if pgrep "node" > /dev/null; then
|
if pgrep "node" > /dev/null; then
|
||||||
echo -e "\e[91mA Node process is currently running. Can't upgrade."
|
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."
|
echo "Please quit all Node processes and restart the installer." | tee -a $logfile
|
||||||
exit;
|
exit;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
echo -e "\e[92mNo Node.js upgrade necessary.\e[0m"
|
echo -e "\e[92mNo Node.js upgrade necessary.\e[0m" | tee -a $logfile
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
echo -e "\e[93mNode.js is not installed.\e[0m";
|
echo -e "\e[93mNode.js is not installed.\e[0m" | tee -a $logfile
|
||||||
NODE_INSTALL=true
|
NODE_INSTALL=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Install or upgrade node if necessary.
|
# Install or upgrade node if necessary.
|
||||||
if $NODE_INSTALL; then
|
if $NODE_INSTALL; then
|
||||||
|
|
||||||
echo -e "\e[96mInstalling Node.js ...\e[90m"
|
echo -e "\e[96mInstalling Node.js ...\e[90m" | tee -a $logfile
|
||||||
|
|
||||||
# Fetch the latest version of Node.js from the selected branch
|
# 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)
|
# 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.
|
# Only tested (stable) versions are recommended as newer versions could break MagicMirror.
|
||||||
|
if [ $mac == 'Darwin' ]; then
|
||||||
NODE_STABLE_BRANCH="10.x"
|
brew install node
|
||||||
curl -sL https://deb.nodesource.com/setup_$NODE_STABLE_BRANCH | sudo -E bash -
|
else
|
||||||
sudo apt-get install -y nodejs
|
NODE_STABLE_BRANCH="10.x"
|
||||||
echo -e "\e[92mNode.js installation Done!\e[0m"
|
curl -sL https://deb.nodesource.com/setup_$NODE_STABLE_BRANCH | sudo -E bash -
|
||||||
|
sudo apt-get install -y nodejs
|
||||||
|
fi
|
||||||
|
echo -e "\e[92mNode.js installation Done! version=$(node -v)\e[0m" | tee -a $logfile
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check if we need to install or upgrade npm.
|
# Check if we need to install or upgrade npm.
|
||||||
echo -e "\e[96mCheck current NPM installation ...\e[0m"
|
echo -e "\e[96mCheck current NPM installation ...\e[0m" | tee -a $logfile
|
||||||
NPM_INSTALL=false
|
NPM_INSTALL=false
|
||||||
if command_exists npm; then
|
if command_exists npm; then
|
||||||
echo -e "\e[0mNPM currently installed. Checking version number.";
|
echo -e "\e[0mNPM currently installed. Checking version number." | tee -a $logfile
|
||||||
NPM_CURRENT='V'$(npm -v)
|
NPM_CURRENT='V'$(npm -v)
|
||||||
echo -e "\e[0mMinimum npm version: \e[1m$NPM_TESTED\e[0m"
|
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"
|
echo -e "\e[0mInstalled npm version: \e[1m$NPM_CURRENT\e[0m" | tee -a $logfile
|
||||||
if verlte $NPM_CURRENT $NPM_TESTED; then
|
if verlte $NPM_CURRENT $NPM_TESTED; then
|
||||||
echo -e "\e[96mnpm should be upgraded.\e[0m"
|
echo -e "\e[96mnpm should be upgraded.\e[0m" | tee -a $logfile
|
||||||
NPM_INSTALL=true
|
NPM_INSTALL=true
|
||||||
|
|
||||||
# Check if a node process is currently running.
|
# Check if a node process is currently running.
|
||||||
# If so abort installation.
|
# If so abort installation.
|
||||||
if pgrep "npm" > /dev/null; then
|
if pgrep "npm" > /dev/null; then
|
||||||
echo -e "\e[91mA npm process is currently running. Can't upgrade."
|
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."
|
echo "Please quit all npm processes and restart the installer." | tee -a $logfile
|
||||||
exit;
|
exit;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
echo -e "\e[92mNo npm upgrade necessary.\e[0m"
|
echo -e "\e[92mNo npm upgrade necessary.\e[0m" | tee -a $logfile
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
echo -e "\e[93mnpm is not installed.\e[0m";
|
echo -e "\e[93mnpm is not installed.\e[0m" | tee -a $logfile
|
||||||
NPM_INSTALL=true
|
NPM_INSTALL=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Install or upgrade node if necessary.
|
# Install or upgrade node if necessary.
|
||||||
if $NPM_INSTALL; then
|
if $NPM_INSTALL; then
|
||||||
|
|
||||||
echo -e "\e[96mInstalling npm ...\e[90m"
|
echo -e "\e[96mInstalling npm ...\e[90m" | tee -a $logfile
|
||||||
|
|
||||||
sudo apt-get install -y npm
|
# Fetch the latest version of npm from the selected branch
|
||||||
echo -e "\e[92mnpm installation Done!\e[0m"
|
# 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
|
||||||
|
fi
|
||||||
|
# update to the latest.
|
||||||
|
echo upgrading npm to latest >> $logfile
|
||||||
|
sudo npm i -g npm
|
||||||
|
echo -e "\e[92mnpm installation Done! version=V$(npm -v)\e[0m" | tee -a $logfile
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Install MagicMirror
|
# Install MagicMirror
|
||||||
cd ~
|
cd ~
|
||||||
if [ -d "$HOME/MagicMirror" ] ; then
|
if [ $doInstall == 1 ]; then
|
||||||
echo -e "\e[93mIt seems like MagicMirror is already installed."
|
if [ -d "$HOME/MagicMirror" ] ; then
|
||||||
echo -e "To prevent overwriting, the installer will be aborted."
|
echo -e "\e[93mIt seems like MagicMirror is already installed." | tee -a $logfile
|
||||||
echo -e "Please rename the \e[1m~/MagicMirror\e[0m\e[93m folder and try again.\e[0m"
|
echo -e "To prevent overwriting, the installer will be aborted." | tee -a $logfile
|
||||||
echo ""
|
echo -e "Please rename the \e[1m~/MagicMirror\e[0m\e[93m folder and try again.\e[0m" | tee -a $logfile
|
||||||
echo -e "If you want to upgrade your installation run \e[1m\e[97mgit pull\e[0m from the ~/MagicMirror directory."
|
echo ""
|
||||||
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
|
||||||
exit;
|
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
|
||||||
|
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
|
fi
|
||||||
|
|
||||||
echo -e "\e[96mCloning MagicMirror ...\e[90m"
|
|
||||||
if git clone --depth=1 https://github.com/MichMich/MagicMirror.git; then
|
|
||||||
echo -e "\e[92mCloning MagicMirror Done!\e[0m"
|
|
||||||
else
|
|
||||||
echo -e "\e[91mUnable to clone MagicMirror."
|
|
||||||
exit;
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd ~/MagicMirror || exit
|
|
||||||
echo -e "\e[96mInstalling dependencies ...\e[90m"
|
|
||||||
if npm install; then
|
|
||||||
echo -e "\e[92mDependencies installation Done!\e[0m"
|
|
||||||
else
|
|
||||||
echo -e "\e[91mUnable to install dependencies!"
|
|
||||||
exit;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Use sample config for start MagicMirror
|
|
||||||
cp config/config.js.sample config/config.js
|
|
||||||
|
|
||||||
# Check if plymouth is installed (default with PIXEL desktop environment), then install custom splashscreen.
|
# Check if plymouth is installed (default with PIXEL desktop environment), then install custom splashscreen.
|
||||||
echo -e "\e[96mCheck plymouth installation ...\e[0m"
|
echo -e "\e[96mCheck plymouth installation ...\e[0m" | tee -a $logfile
|
||||||
if command_exists plymouth; then
|
if command_exists plymouth; then
|
||||||
THEME_DIR="/usr/share/plymouth/themes"
|
THEME_DIR="/usr/share/plymouth/themes"
|
||||||
echo -e "\e[90mSplashscreen: Checking themes directory.\e[0m"
|
echo -e "\e[90mSplashscreen: Checking themes directory.\e[0m" | tee -a $logfile
|
||||||
if [ -d $THEME_DIR ]; then
|
if [ -d $THEME_DIR ]; then
|
||||||
echo -e "\e[90mSplashscreen: Create theme directory if not exists.\e[0m"
|
echo -e "\e[90mSplashscreen: Create theme directory if not exists.\e[0m" | tee -a $logfile
|
||||||
if [ ! -d $THEME_DIR/MagicMirror ]; then
|
if [ ! -d $THEME_DIR/MagicMirror ]; then
|
||||||
sudo mkdir $THEME_DIR/MagicMirror
|
sudo mkdir $THEME_DIR/MagicMirror
|
||||||
fi
|
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
|
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"
|
echo -e "\e[90mSplashscreen: Theme copied successfully.\e[0m" | tee -a $logfile
|
||||||
if sudo plymouth-set-default-theme -R MagicMirror; then
|
if sudo plymouth-set-default-theme -R MagicMirror; then
|
||||||
echo -e "\e[92mSplashscreen: Changed theme to MagicMirror successfully.\e[0m"
|
echo -e "\e[92mSplashscreen: Changed theme to MagicMirror successfully.\e[0m" | tee -a $logfile
|
||||||
else
|
else
|
||||||
echo -e "\e[91mSplashscreen: Couldn't change theme to MagicMirror!\e[0m"
|
echo -e "\e[91mSplashscreen: Couldn't change theme to MagicMirror!\e[0m" | tee -a $logfile
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo -e "\e[91mSplashscreen: Copying theme failed!\e[0m"
|
echo -e "\e[91mSplashscreen: Copying theme failed!\e[0m" | tee -a $logfile
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo -e "\e[91mSplashscreen: Themes folder doesn't exist!\e[0m"
|
echo -e "\e[91mSplashscreen: Themes folder doesn't exist!\e[0m" | tee -a $logfile
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo -e "\e[93mplymouth is not installed.\e[0m";
|
echo -e "\e[93mplymouth is not installed.\e[0m" | tee -a $logfile
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Use pm2 control like a service MagicMirror
|
# Use pm2 control like a service MagicMirror
|
||||||
read -p "Do you want use pm2 for auto starting of your MagicMirror (y/N)?" choice
|
read -p "Do you want use pm2 for auto starting of your MagicMirror (y/N)?" choice
|
||||||
if [[ $choice =~ ^[Yy]$ ]]; then
|
if [[ $choice =~ ^[Yy]$ ]]; then
|
||||||
#
|
echo install and setup pm2 | tee -a $logfile
|
||||||
# check if this is a mac
|
# assume pm2 will be found on the path
|
||||||
#
|
pm2cmd=pm2
|
||||||
mac=$(uname -s)
|
# check to see if already installed
|
||||||
up=""
|
pm2_installed=$(which $pm2cmd)
|
||||||
if [ $mac == 'Darwin' ]; then
|
up=""
|
||||||
up="--unsafe-perm"
|
if [ $mac == 'Darwin' ]; then
|
||||||
fi
|
up="--unsafe-perm"
|
||||||
sudo npm install $up -g pm2
|
launchctl=launchctl
|
||||||
if [[ "$(ps --no-headers -o comm 1)" =~ systemd ]]; then #Checking for systemd
|
launchctl_path=$(which $launchctl)
|
||||||
pm2 startup systemd -u $USER --hp /home/$USER
|
`export PATH=$PATH:${launchctl_path%/$launchctl}`
|
||||||
else
|
fi
|
||||||
sudo su -c "env PATH=$PATH:/usr/bin pm2 startup linux -u $USER --hp /home/$USER"
|
# check to see if already installed
|
||||||
fi
|
pm2_installed=$(which $pm2cmd)
|
||||||
if [ "USER" != "pi" ]; then
|
if [ "$pm2_installed." != "." ]; then
|
||||||
sed 's/pi/'$USER'/g' mm.sh >mm.sh
|
# does it work?
|
||||||
sed 's/pi/'$USER'/g' $PM2_FILE > ~/MagicMirror/installers/pm2_MagicMirror_new.json
|
pm2_fails=$(pm2 list | grep -i -m 1 "App Name" | wc -l )
|
||||||
PM2_FILE=~/MagicMirror/installers/pm2_MagicMirror_new.json
|
if [ $pm2_fails != 1 ]; then
|
||||||
fi
|
# uninstall it
|
||||||
pm2 start $PM2_FILE
|
echo pm2 installed, but does not work, uninstalling >> $logfile
|
||||||
pm2 save
|
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=$(sudo 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
|
||||||
|
|
||||||
|
# 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
|
fi
|
||||||
# Disable Screensaver
|
# Disable Screensaver
|
||||||
if [ -d "/etc/xdg/lxsession" ]; then
|
choice=n
|
||||||
read -p "Do you want to disable the screen saver? (y/N)?" choice
|
read -p "Do you want to disable the screen saver? (y/N)?" choice
|
||||||
if [[ $choice =~ ^[Yy]$ ]]; then
|
if [[ $choice =~ ^[Yy]$ ]]; then
|
||||||
sudo su -c "echo -e '@xset s noblank\n@xset s off\n@xset -dpms' >> /etc/xdg/lxsession/LXDE-pi/autostart"
|
# if this is a mac
|
||||||
export DISPLAY=:0; xset s noblank;xset s off;xset -dpms
|
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
|
||||||
else
|
|
||||||
echo " "
|
|
||||||
echo -e "unable to disable screen saver, /etc/xdg/lxsession does not exist"
|
|
||||||
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 -e "\e[92mWe're ready! Run \e[1m\e[97mDISPLAY=:0 npm start\e[0m\e[92m from the ~/MagicMirror directory to start your MagicMirror.\e[0m"
|
|
||||||
echo " "
|
echo " "
|
||||||
echo " "
|
echo " "
|
||||||
|
|
||||||
|
date +"install completed - %a %b %e %H:%M:%S %Z %Y" >>$logfile
|
||||||
|
357
installers/upgrade-script.sh
Executable file
357
installers/upgrade-script.sh
Executable file
@ -0,0 +1,357 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# only DO npm installs when flag is set to 1
|
||||||
|
# test when set to 0
|
||||||
|
true=1
|
||||||
|
false=0
|
||||||
|
doinstalls=$false
|
||||||
|
force=$false
|
||||||
|
justActive=$true
|
||||||
|
test_run=$true
|
||||||
|
stashed=$false
|
||||||
|
keyFile=package.json
|
||||||
|
forced_arch=
|
||||||
|
git_active_lock='./.git/index.lock'
|
||||||
|
lf=$'\n'
|
||||||
|
git_user_name=
|
||||||
|
git_user_email=
|
||||||
|
|
||||||
|
trim() {
|
||||||
|
local var="$*"
|
||||||
|
# remove leading whitespace characters
|
||||||
|
var="${var#"${var%%[![:space:]]*}"}"
|
||||||
|
# remove trailing whitespace characters
|
||||||
|
var="${var%"${var##*[![:space:]]}"}"
|
||||||
|
echo -n "$var"
|
||||||
|
}
|
||||||
|
# is this a mac
|
||||||
|
mac=$(uname -s)
|
||||||
|
# get the processor architecture
|
||||||
|
arch=$(uname -m)
|
||||||
|
if [ $mac == 'Darwin' ]; then
|
||||||
|
cmd=greadlink
|
||||||
|
else
|
||||||
|
cmd=readlink
|
||||||
|
fi
|
||||||
|
if [ -d ~/MagicMirror ]; then
|
||||||
|
|
||||||
|
# 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
|
||||||
|
cd ~/MagicMirror/installers >/dev/null
|
||||||
|
logdir=$(pwd)
|
||||||
|
cd - >/dev/null
|
||||||
|
fi
|
||||||
|
logfile=$logdir/upgrade.log
|
||||||
|
|
||||||
|
echo >>$logfile
|
||||||
|
date +"Upgrade started - %a %b %e %H:%M:%S %Z %Y" >>$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
|
||||||
|
p0=$0
|
||||||
|
# if not 'bash', and some parm specified
|
||||||
|
if [ $0 != 'bash' -a "$1." != "." ]; then
|
||||||
|
# then executed locally
|
||||||
|
# get the parm
|
||||||
|
p0=$1
|
||||||
|
fi
|
||||||
|
# lowercase it.. watch out, mac stuff doesn't work with tr, etc
|
||||||
|
p0=$(echo $p0 | cut -c 1-5 | awk '{print tolower($0)}' )
|
||||||
|
if [ $p0 == 'apply' ]; then
|
||||||
|
echo user requested to apply changes >>$logfile
|
||||||
|
doinstalls=$true
|
||||||
|
test_run=$false
|
||||||
|
elif [ $p0 == 'force' ]; then
|
||||||
|
echo user requested to force apply changes >>$logfile
|
||||||
|
doinstalls=$true
|
||||||
|
force=$true
|
||||||
|
test_run=$false
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $test_run == $true ]; then
|
||||||
|
echo doing test run = true | tee -a $logfile
|
||||||
|
else
|
||||||
|
echo doing test run = false | tee -a $logfile
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 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
|
||||||
|
fi
|
||||||
|
echo update log will be in $logfile
|
||||||
|
# used for parsing the array of module names
|
||||||
|
SAVEIFS=$IFS # Save current IFS
|
||||||
|
IFS=$'\n'
|
||||||
|
|
||||||
|
echo | tee -a $logfile
|
||||||
|
# if the git lock file exists and git is not running
|
||||||
|
if [ -f git_active_lock ]; then
|
||||||
|
# check to see if git is actually running
|
||||||
|
git_running=`ps -ef | grep git | grep -v color | grep -v 'grep git' | wc -l`
|
||||||
|
# if not running
|
||||||
|
if [ git_running == $false ]; then
|
||||||
|
# clean up the dangling lock file
|
||||||
|
echo erasing abandonded git lock file >> $logfile
|
||||||
|
rm git_active_lock >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
# git IS running, we can't proceed
|
||||||
|
echo it appears another instance of git is running | tee -a $logfile
|
||||||
|
# if this is an actual run
|
||||||
|
if [ $doinstalls == $true ]; then
|
||||||
|
# force it back to test run
|
||||||
|
doinstalls = $false
|
||||||
|
test_run=$true
|
||||||
|
echo forcing test run mode | tee -a $logfile
|
||||||
|
echo please resolve git running already and start the update again | tee -a $logfile
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# change to MagicMirror folder
|
||||||
|
cd ~/MagicMirror
|
||||||
|
|
||||||
|
# save custom.css
|
||||||
|
cd css
|
||||||
|
echo "saving custom.css" | tee -a $logfile
|
||||||
|
cp -p custom.css save_custom.css
|
||||||
|
cd - >/dev/null
|
||||||
|
save_alias=$(alias git 2>/dev/null)
|
||||||
|
lang=$(locale | grep LANGUAGE | awk -F= '{print $2}')
|
||||||
|
# make sure git respones are in english, so code works
|
||||||
|
if [ "$lang." != "en_US.UTF-8." ]; then
|
||||||
|
echo not english or locale not set, set git alias >>$logfile
|
||||||
|
if [ "$LC_ALL." == "." ]; then
|
||||||
|
alias git='LANGUAGE=en_US.UTF-8 git' >>$logfile
|
||||||
|
else
|
||||||
|
alias git='LC_ALL=en_US.UTF-8 git' >>$logfile
|
||||||
|
fi
|
||||||
|
#alias >>$logfile
|
||||||
|
fi
|
||||||
|
# get the git remote name
|
||||||
|
remote=$(git remote 2>/dev/null | awk '{print $1}')
|
||||||
|
|
||||||
|
# if remote name set
|
||||||
|
if [ "$remote." != "." ]; then
|
||||||
|
|
||||||
|
echo remote name = $remote >>$logfile
|
||||||
|
|
||||||
|
# get the local and remote package.json versions
|
||||||
|
local_version=$(grep -m1 version package.json | awk -F\" '{print $4}')
|
||||||
|
remote_version=$(curl -s https://raw.githubusercontent.com/MichMich/MagicMirror/master/package.json | grep -m1 version | awk -F\" '{print $4}')
|
||||||
|
|
||||||
|
# only change if they are different
|
||||||
|
if [ "$local_version." != "$remote_version." -o $force == $true -o $test_run == $true ]; then
|
||||||
|
echo upgrading from version $local_version to $remote_version | tee -a $logfile
|
||||||
|
|
||||||
|
# get the latest upgrade
|
||||||
|
echo fetching latest revisions | tee -a $logfile
|
||||||
|
|
||||||
|
if git fetch $remote; 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
|
||||||
|
|
||||||
|
# get the names of the files that are different locally
|
||||||
|
diffs=$(git status 2>&1 | grep modified | awk -F: '{print $2}')
|
||||||
|
|
||||||
|
# split names into an array
|
||||||
|
diffs=($diffs) # split to array $diffs
|
||||||
|
|
||||||
|
# if there are different files (array size greater than zero)
|
||||||
|
if [ ${#diffs[@]} -gt 0 ]; then
|
||||||
|
package_lock=0
|
||||||
|
echo there are "${#diffs[@]}" local files that are different than the master repo | tee -a $logfile
|
||||||
|
echo | tee -a $logfile
|
||||||
|
for file in "${diffs[@]}"
|
||||||
|
do
|
||||||
|
echo "$file" | tee -a $logfile
|
||||||
|
if [ $(echo $file | grep '\-lock.json$' | wc -l) -eq 1 ]; then
|
||||||
|
package_lock=$true
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo | tee -a $logfile
|
||||||
|
if [ $package_lock -eq 1 ]; then
|
||||||
|
echo "any *-lock.json files do not need to be saved"
|
||||||
|
fi
|
||||||
|
read -p "do you want to save these files for later (Y/n)?" choice
|
||||||
|
echo save/restore files selection = $choice >> $logfile
|
||||||
|
if [[ $choice =~ ^[Yy]$ ]]; then
|
||||||
|
git_user=$(git config --global --get user.email)
|
||||||
|
if [ "git_user." == "." ]; then
|
||||||
|
git_user_name="-c user.name=upgrade_script"
|
||||||
|
git_user_email="-c user.email=script@upgrade.com"
|
||||||
|
fi
|
||||||
|
git git_user_name git_user_email stash >>$logfile
|
||||||
|
stashed=$true
|
||||||
|
else
|
||||||
|
for file in "${diffs[@]}"
|
||||||
|
do
|
||||||
|
f="$(trim "$file")"
|
||||||
|
echo restoring $f from repo >> $logfile
|
||||||
|
if [ $test_run == $false ]; then
|
||||||
|
git checkout HEAD -- $f | tee -a $logfile
|
||||||
|
else
|
||||||
|
echo skipping restore for $f, doing test run | tee -a $logfile
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo no files different from github version >> $logfile
|
||||||
|
fi
|
||||||
|
|
||||||
|
# lets test merge, in memory, no changes to working directory or local repo
|
||||||
|
test_merge_output=$(git merge-tree `git merge-base $current_branch HEAD` HEAD $current_branch | grep "^<<<<<<<\|changed in both")
|
||||||
|
echo "test merge result rc='$test_merge_output' , if empty, no conflicts" >> $logfile
|
||||||
|
|
||||||
|
# if there were no conflicts reported
|
||||||
|
if [ "$test_merge_output." == "." ]; then
|
||||||
|
|
||||||
|
if [ $test_run == $false ]; then
|
||||||
|
# go ahead and merge now
|
||||||
|
echo "executing merge, apply specified" >> $logfile
|
||||||
|
# get the text output of merge
|
||||||
|
merge_output=$(git merge $remote/$current_branch 2>&1)
|
||||||
|
# and its return code
|
||||||
|
merge_result=$?
|
||||||
|
# make any long line readable
|
||||||
|
merge_output=$(echo $merge_output | tr '|' '\n'| sed "s/create/\\${lf}create/g" | sed "s/mode\ change/\\${lf}mode\ change/g")
|
||||||
|
echo -e "merge result rc= $merge_result\n $merge_output">> $logfile
|
||||||
|
else
|
||||||
|
echo "skipping merge, only test run" >> $logfile
|
||||||
|
merge_output=''
|
||||||
|
merge_result=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# if no merge errors
|
||||||
|
if [ $merge_result == 0 ]; then
|
||||||
|
# some updates applied
|
||||||
|
if [ "$merge_output." != 'Already up to date.' -o $test_run == $true ]; then
|
||||||
|
# update any dependencies for base
|
||||||
|
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
|
||||||
|
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"`
|
||||||
|
echo npm install $done_update on base >> $ logfile
|
||||||
|
fi
|
||||||
|
# process updates for modules after base changed
|
||||||
|
cd modules
|
||||||
|
if [ $justActive == $true ]; then
|
||||||
|
# get the list of ACTIVE modules with package.json files
|
||||||
|
mtype=active
|
||||||
|
modules=$(node ../installers/dumpactivemodules.js)
|
||||||
|
else
|
||||||
|
# get the list of INSTALLED modules with package.json files
|
||||||
|
mtype=installed
|
||||||
|
modules=$(find -maxdepth 2 -name 'package.json' -printf "%h\n" | cut -d'/' -f2 )
|
||||||
|
fi
|
||||||
|
modules=($modules) # split to array $modules
|
||||||
|
|
||||||
|
# if the array has entries in it
|
||||||
|
if [ ${#modules[@]} -gt 0 ]; then
|
||||||
|
echo >> $logfile
|
||||||
|
echo "processing dependency changes for $mtype modules with package.json files" | tee -a $logfile
|
||||||
|
echo
|
||||||
|
for module in "${modules[@]}"
|
||||||
|
do
|
||||||
|
echo "processing for module" $module please wait | tee -a $logfile
|
||||||
|
echo '----------------------------------' | tee -a $logfile
|
||||||
|
# change to that directory
|
||||||
|
cd $module
|
||||||
|
# process its dependencies
|
||||||
|
if [ $doinstalls == $true ]; then
|
||||||
|
npm install $forced_arch 2>&1| tee -a $logfile
|
||||||
|
else
|
||||||
|
echo skipped processing for $module, doing test run | tee -a $logfile
|
||||||
|
fi
|
||||||
|
# return to modules folder
|
||||||
|
cd .. >/dev/null
|
||||||
|
echo "processing complete for module" $module | tee -a $logfile
|
||||||
|
echo
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "no modules found needing npm refresh" | tee -a $logfile
|
||||||
|
fi
|
||||||
|
# return to Magic Mirror folder
|
||||||
|
cd .. >/dev/null
|
||||||
|
else
|
||||||
|
echo "no changes detected for modules, skipping " | tee -a $logfile
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo there were merge errors | tee -a $logfile
|
||||||
|
echo $merge_output | tee -a %logfile
|
||||||
|
echo you should examine and resolve them | tee -a $logfile
|
||||||
|
echo using the command git log --oneline --decorate | tee -a $logfile
|
||||||
|
git log --oneline --decorate | tee -a $logfile
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "there are merge conflicts to be resolved, no changes have been applied" | tee -a $logfile
|
||||||
|
echo $test_merge_output | tee -a $logfile
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "MagicMirror git fetch failed" | tee -a $logfile
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "local version $local_version already same as master $remote_version" | tee -a $logfile
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Unable to determine upstream git repository" | tee -a $logfile
|
||||||
|
fi
|
||||||
|
# should be in MagicMirror base
|
||||||
|
cd css
|
||||||
|
# restore custom.css
|
||||||
|
echo "restoring custom.css" | tee -a $logfile
|
||||||
|
cp -p save_custom.css custom.css
|
||||||
|
rm save_custom.css
|
||||||
|
cd - >/dev/null
|
||||||
|
if [ "$lang." != "en_US.UTF-8." ]; then
|
||||||
|
if [ "$save_alias." != "." ]; then
|
||||||
|
echo restoring git alias >>$logfile
|
||||||
|
$save_alias >/dev/null
|
||||||
|
else
|
||||||
|
echo removing git alias >>$logfile
|
||||||
|
unalias git >/dev/null
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
IFS=$SAVEIFS # Restore IFS
|
||||||
|
|
||||||
|
if [ $stashed == $true ]; then
|
||||||
|
if [ $test_run == $true ]; then
|
||||||
|
echo test run, restoring files stashed | tee -a $logfile
|
||||||
|
git git_user_name git_user_email stash pop >> $logfile
|
||||||
|
else
|
||||||
|
echo we stashed a set of files that appear changed from the latest repo versions. you should review them | tee -a $logfile
|
||||||
|
git stash show --name-only > installers/stashed_files
|
||||||
|
echo see installers/stashed_files for the list
|
||||||
|
echo
|
||||||
|
echo you can use git checkout "stash@{0}" -- filename to extract one file from the stash
|
||||||
|
echo
|
||||||
|
echo or git stash pop to restore them all
|
||||||
|
echo
|
||||||
|
echo WARNING..
|
||||||
|
echo WARNING.. either will overlay the file just installed by the update
|
||||||
|
echo WARNING..
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# return to original folder
|
||||||
|
cd - >/dev/null
|
||||||
|
date +"Upgrade ended - %a %b %e %H:%M:%S %Z %Y" >>$logfile
|
||||||
|
else
|
||||||
|
echo It appears MagicMirror has not been installed on this system
|
||||||
|
echo please run the installer, "raspberry.sh" first
|
||||||
|
fi
|
||||||
|
|
@ -180,9 +180,9 @@ Module.register("weatherforecast",{
|
|||||||
rainCell.innerHTML = "";
|
rainCell.innerHTML = "";
|
||||||
} else {
|
} else {
|
||||||
if(config.units !== "imperial") {
|
if(config.units !== "imperial") {
|
||||||
rainCell.innerHTML = parseFloat(forecast.rain).toFixed(1) + " mm";
|
rainCell.innerHTML = parseFloat(forecast.rain).toFixed(1).replace(".", this.config.decimalSymbol) + " mm";
|
||||||
} else {
|
} else {
|
||||||
rainCell.innerHTML = (parseFloat(forecast.rain) / 25.4).toFixed(2) + " in";
|
rainCell.innerHTML = (parseFloat(forecast.rain) / 25.4).toFixed(2).replace(".", this.config.decimalSymbol) + " in";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rainCell.className = "align-right bright rain";
|
rainCell.className = "align-right bright rain";
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Long history here
|
# Long history here
|
||||||
# https://github.com/MichMich/MagicMirror/pull/1540
|
# https://github.com/MichMich/MagicMirror/pull/1540
|
||||||
STATUS_CUSTOM_CSS=$(git ls-files -v css/custom.css|cut -f 1 --delimiter=" ")
|
STATUS_CUSTOM_CSS=$(git ls-files -v css/custom.css| awk '{print $1}')
|
||||||
|
|
||||||
if [ "$STATUS_CUSTOM_CSS" = "H" ]; then
|
if [ "$STATUS_CUSTOM_CSS" = "H" ]; then
|
||||||
echo "We'll remove from the repository the css/custom.css"
|
echo "We'll remove from the repository the css/custom.css"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user