mirror of
https://github.com/tteck/Proxmox.git
synced 2025-02-15 06:09:15 +01:00
When running certain scripts, sometimes an 'm' character is wrongly output to the terminal. This PR fixes all instances of this happening. I've also made 'RD' (red) consistent with 'GN' (green) by removing the leading 0, and my editor has kindly removed all trailing spaces from files.
209 lines
6.7 KiB
Bash
209 lines
6.7 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
while true; do
|
|
read -p "This will create a New Update Menu for Home Assistant Container LXC. Proceed(y/n)?" yn
|
|
case $yn in
|
|
[Yy]* ) break;;
|
|
[Nn]* ) exit;;
|
|
* ) echo "Please answer yes or no.";;
|
|
esac
|
|
done
|
|
clear
|
|
set -o errexit
|
|
rm -rf /root/update.sh update update-containers.sh
|
|
echo -e "\e[1;92m Creating New Update Menu Script... \e[0m"
|
|
if [ -f /usr/local/lib/python3.9/dist-packages/runlike/runlike.py ]; then
|
|
echo -e "\e[1;92m pip3/runlike Already Installed! \e[0m"
|
|
else
|
|
apt-get update &>/dev/null
|
|
echo -e "\e[1;92m Installing pip3... \e[0m"
|
|
apt-get install -y python3-pip &>/dev/null
|
|
echo -e "\e[1;92m Installing runlike... \e[0m"
|
|
pip3 install runlike &>/dev/null
|
|
fi
|
|
echo -e "\e[1;92m Creating Update Script... \e[0m"
|
|
if [ -d /root/hass_config ]; then
|
|
echo -e "\e[1;92m There's Already (hass_config) Folder! \e[0m"
|
|
else
|
|
mkdir /root/hass_config
|
|
fi
|
|
UPDATE_PATH='/root/update'
|
|
UPDATE_CONTAINERS_PATH='/root/update-containers.sh'
|
|
cat >$UPDATE_PATH <<'EOF'
|
|
#!/bin/sh
|
|
set -o errexit
|
|
show_menu(){
|
|
normal=`echo "\033[m"`
|
|
safe=`echo "\033[32m"`
|
|
menu=`echo "\033[36m"`
|
|
number=`echo "\033[33m"`
|
|
bgred=`echo "\033[41m"`
|
|
fgred=`echo "\033[31m"`
|
|
hostname -I
|
|
printf "\n${menu}*********************************************${normal}\n"
|
|
printf "${menu}**${number} 1)${safe} Switch to Stable Branch ${normal}\n"
|
|
printf "${menu}**${number} 2)${number} Switch to Beta Branch ${normal}\n"
|
|
printf "${menu}**${number} 3)${fgred} Switch to Dev Branch ${normal}\n"
|
|
printf "${menu}**${number} 4)${safe} Backup Home Assistant Data (to root) ${normal}\n"
|
|
printf "${menu}**${number} 5)${number} Restore Home Assistant Data ${normal}\n"
|
|
printf "${menu}**${number} 6)${fgred} Edit Home Assistant Configuration ${normal}\n"
|
|
printf "${menu}**${number} 7)${safe} Restart Home Assistant ${normal}\n"
|
|
printf "${menu}**${number} 8)${safe} Just Update Containers ${normal}\n"
|
|
printf "${menu}**${number} 9)${number} Remove Unused Images ${normal}\n"
|
|
printf "${menu}**${number} 10)${safe} Update Host OS ${normal}\n"
|
|
printf "${menu}**${number} 11)${safe} Reboot Host OS ${normal}\n"
|
|
printf "${menu}*********************************************${normal}\n"
|
|
printf "Please choose an option from the menu and enter or ${fgred}x to exit. ${normal}"
|
|
read opt
|
|
}
|
|
option_picked(){
|
|
msgcolor=`echo "\033[1;31m"`
|
|
normal=`echo "\033[00;00m"`
|
|
message=${@:-"${normal}Error: No message passed"}
|
|
printf "${msgcolor}${message}${normal}\n"
|
|
}
|
|
clear
|
|
show_menu
|
|
while [ $opt != '' ]
|
|
do
|
|
if [ $opt = '' ]; then
|
|
exit;
|
|
else
|
|
case $opt in
|
|
1) clear;
|
|
option_picked "Switching to Stable Branch";
|
|
TAG=stable
|
|
break;
|
|
;;
|
|
2) clear;
|
|
option_picked "Switching to Beta Branch";
|
|
TAG=beta
|
|
break;
|
|
;;
|
|
3) while true; do
|
|
read -p "Are you sure you want to Switch to Dev Branch? Proceed(y/n)?" yn
|
|
case $yn in
|
|
[Yy]* ) break;;
|
|
[Nn]* ) exit;;
|
|
* ) echo "Please answer yes or no.";;
|
|
esac
|
|
done
|
|
clear;
|
|
option_picked "Switching to Dev Branch";
|
|
TAG=dev
|
|
break;
|
|
;;
|
|
4) clear;
|
|
option_picked "Backing up Home Assistant Data to root (hass_config)";
|
|
rm -r hass_config;
|
|
cp -pR /var/lib/docker/volumes/hass_config/ /root/;
|
|
sleep 2;
|
|
clear;
|
|
show_menu;
|
|
;;
|
|
5) while true; do
|
|
read -p "Are you sure you want to Restore Home Assistant Data? Proceed(y/n)?" yn
|
|
case $yn in
|
|
[Yy]* ) break;;
|
|
[Nn]* ) exit;;
|
|
* ) echo "Please answer yes or no.";;
|
|
esac
|
|
done
|
|
clear;
|
|
option_picked "Restoring Home Assistant Data from root (hass_config)";
|
|
rm -r /var/lib/docker/volumes/hass_config/_data;
|
|
cp -pR /root/hass_config/_data /var/lib/docker/volumes/hass_config/;
|
|
sleep 2;
|
|
clear;
|
|
show_menu;
|
|
;;
|
|
6) while true; do
|
|
read -p "Are you sure you want to Edit Home Assistant Configuration? Proceed(y/n)?" yn
|
|
case $yn in
|
|
[Yy]* ) break;;
|
|
[Nn]* ) exit;;
|
|
* ) echo "Please answer yes or no.";;
|
|
esac
|
|
done
|
|
clear;
|
|
option_picked "Editing Home Assistant Configuration";
|
|
nano /var/lib/docker/volumes/hass_config/_data/configuration.yaml;
|
|
clear;
|
|
show_menu;
|
|
;;
|
|
7) clear;
|
|
option_picked "Restarting Home Assistant";
|
|
docker restart homeassistant;
|
|
exit;
|
|
;;
|
|
8) clear;
|
|
option_picked "Just Updating Containers";
|
|
./update-containers.sh;
|
|
sleep 2;
|
|
clear;
|
|
show_menu;
|
|
;;
|
|
9) clear;
|
|
option_picked "Removing Unused Images";
|
|
docker image prune -af;
|
|
sleep 2;
|
|
clear;
|
|
show_menu;
|
|
;;
|
|
10) clear;
|
|
option_picked "Updating Host OS";
|
|
apt update && apt upgrade -y;
|
|
sleep 2;
|
|
clear;
|
|
show_menu;
|
|
;;
|
|
11) clear;
|
|
option_picked "Reboot Host OS";
|
|
reboot;
|
|
exit;
|
|
;;
|
|
x)exit;
|
|
;;
|
|
\n)exit;
|
|
;;
|
|
*)clear;
|
|
option_picked "Please choose an option from the menu";
|
|
show_menu;
|
|
;;
|
|
esac
|
|
fi
|
|
done
|
|
docker pull homeassistant/home-assistant:$TAG
|
|
docker rm --force homeassistant
|
|
docker run -d \
|
|
--name homeassistant \
|
|
--privileged \
|
|
--restart unless-stopped \
|
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
-v /dev:/dev \
|
|
-v hass_config:/config \
|
|
-v /etc/localtime:/etc/localtime:ro \
|
|
-v /etc/timezone:/etc/timezone:ro \
|
|
--net=host \
|
|
homeassistant/home-assistant:$TAG
|
|
EOF
|
|
sudo chmod +x /root/update
|
|
cat >$UPDATE_CONTAINERS_PATH <<'EOF'
|
|
#!/bin/bash
|
|
set -o errexit
|
|
CONTAINER_LIST="${1:-$(docker ps -q)}"
|
|
for container in ${CONTAINER_LIST}; do
|
|
CONTAINER_IMAGE="$(docker inspect --format "{{.Config.Image}}" --type container ${container})"
|
|
RUNNING_IMAGE="$(docker inspect --format "{{.Image}}" --type container "${container}")"
|
|
docker pull "${CONTAINER_IMAGE}"
|
|
LATEST_IMAGE="$(docker inspect --format "{{.Id}}" --type image "${CONTAINER_IMAGE}")"
|
|
if [[ "${RUNNING_IMAGE}" != "${LATEST_IMAGE}" ]]; then
|
|
echo "Updating ${container} image ${CONTAINER_IMAGE}"
|
|
DOCKER_COMMAND="$(runlike "${container}")"
|
|
docker rm --force "${container}"
|
|
eval ${DOCKER_COMMAND}
|
|
fi
|
|
done
|
|
EOF
|
|
sudo chmod +x /root/update-containers.sh
|
|
echo -e "\e[1;92m Finished. Type ./update in the LXC console\e[0m"
|