-
Notifications
You must be signed in to change notification settings - Fork 29
/
helper.sh
executable file
·143 lines (130 loc) · 7.69 KB
/
helper.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/bin/bash
if [ $(id -u) != 0 ]; then
clear -x
echo "Your username is"
echo "$USER"
else
echo "The L4T-Megascript helper has exited without running. Please run as non-sudo"
exit 1
fi
repository_username=$3
repository_branch=$4
if [ -v $repository_username ] || [ $repository_username == cobalt2727 ]; then
export repository_username=cobalt2727
else
echo "Developer Mode Enabled! Repository = $repository_username"
fi
if [ -v $repository_branch ] || [ $repository_branch == master ]; then
export repository_branch=master
else
echo "Developer Mode Enabled! Branch = $repository_branch"
fi
function error_fatal {
echo -e "\\e[91m$1\\e[39m"
sleep 10
exit 1
}
if grep -q debian /etc/os-release; then
dependencies=("bash" "dialog" "gnutls-bin" "curl" "yad" "zenity" "lsb-release" "software-properties-common")
## Install dependencies if necessary
dpkg -s "${dependencies[@]}" >/dev/null 2>&1 || if [[ $gui == "gui" ]]; then
pkexec sh -c "apt update; apt-get dist-upgrade -y; apt-get install $(echo "${dependencies[@]}") -y; hash -r; repository_branch=$repository_branch; repository_username=$repository_username; apt update; apt dist-upgrade -y; hash -r"
else
sudo sh -c "apt update; apt-get dist-upgrade -y; apt-get install $(echo "${dependencies[@]}") -y; hash -r; repository_branch=$repository_branch; repository_username=$repository_username; apt update; apt dist-upgrade -y; hash -r"
fi
elif grep -q fedora /etc/os-release || grep -q nobara /etc/os-release; then
dependencies=("bash" "dialog" "gnutls" "curl" "yad" "zenity" "lsb_release")
if [[ $gui == "gui" ]]; then
pkexec sh -c "dnf upgrade -y; dnf install $(echo "${dependencies[@]}") -y; hash -r; repository_branch=$repository_branch; repository_username=$repository_username; dnf upgrade -y; hash -r"
else
sudo sh -c "dnf upgrade -y; dnf install $(echo "${dependencies[@]}") -y; hash -r; repository_branch=$repository_branch; repository_username=$repository_username; dnf upgrade -y; hash -r"
fi
fi
unset functions_downloaded
source <(curl -s https://raw.githubusercontent.com/$repository_username/L4T-Megascript/$repository_branch/functions.sh)
[[ ! -z ${functions_downloaded+z} ]] && status "Functions Loaded" || error_fatal "Oh no! Something happened to your internet! Exiting the Megascript, please fix your internet and try again!"
add_english
mkdir -p "$HOME/L4T-Megascript/logs"
logfile="$HOME/L4T-Megascript/logs/install-incomplete-${1////-}.log"
if [ -f "$logfile" ] || [ -f "$(echo "$logfile" | sed 's+-incomplete-+-success-+g')" ] || [ -f "$(echo "$logfile" | sed 's+-incomplete-+-fail-+g')" ]; then
#append a number to logfile's file-extension if the original filename already exists
i=1
while true; do
#if variable $i is 2, then example newlogfile value: /path/to/install-Discord.log2
newlogfile="$logfile$i"
if [ ! -f "$newlogfile" ] && [ ! -f "$(echo "$newlogfile" | sed 's+/-incomplete-+-success-+g')" ] && [ ! -f "$(echo "$newlogfile" | sed 's+-incomplete-+-fail-+g')" ]; then
logfile="${newlogfile}"
break
fi
i=$((i + 1))
done
unset i
fi
case "$__os_id" in
Fedora)
sudo dnf --refresh check-update
if [[ $? == 1 ]]; then
# dnf check-update failed with an error
yad --class L4T-Megascript --name "L4T Megascript" --center --image "dialog-warning" --width="500" --height="250" --title "ERROR" --text "Your DNF repos can not be updated and dnf has exited with an error! \
\n\n\Verify that you are connected to the internet. \
\n\nCheck the above terminal logs for any BROKEN dnf repos that you may have added.\nContinuing with the Megascript WILL produce ERRORs so this will exit now.\nFix your stuff." --window-icon=/usr/share/icons/L4T-Megascript.png \
--button="Exit the L4T-Megascript":0
exit
fi
;;
*)
#An apt repository's Packages file can be corrupted so that an apt update will silently fail. See: https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1809174
#This line will fix the problem by removing any zero-size Packages files.
removal_list="$(find /var/lib/apt/lists -type f -name '*Packages' -size 0 2>/dev/null)"
if [ ! -z "$removal_list" ]; then
echo "$removal_list" | xargs sudo rm -f
fi
grep -q '/dev/null | true;' /etc/apt/apt.conf.d/50appstream && sudo sed -i 's%/dev/null | true;%/dev/null || true;%g' /etc/apt/apt.conf.d/50appstream
grep -q '/dev/null || true;' /etc/apt/apt.conf.d/50appstream
if [[ $? == 1 ]]; then
# fix for error (for some reason was never pulled into bionic...)
# http://launchpadlibrarian.net/384348932/appstream_0.12.2-1_0.12.2-2.diff.gz patch is seen at the bottom here
# E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
# https://askubuntu.com/questions/942895/e-problem-executing-scripts-aptupdatepost-invoke-success
sudo sed -i 's%/dev/null;%/dev/null || true;%g' /etc/apt/apt.conf.d/50appstream
fi
update_output=$(sudo apt update 2>&1 | tee /dev/tty)
echo "$update_output" | grep -qe '^Err:' -qe '^E:'
if [[ $? == 0 ]]; then
# apt update failed with an error
yad --class L4T-Megascript --name "L4T Megascript" --center --image "dialog-warning" --width="500" --height="250" --title "ERROR" --text "Your APT repos can not be updated and apt has exited with an error! \
\n\n\Verify that you are connected to the internet. \
\n\nCheck the above terminal logs for any BROKEN apt repos that you may have added.\nContinuing with the Megascript WILL produce ERRORs so this will exit now.\nFix your stuff." --window-icon=/usr/share/icons/L4T-Megascript.png \
--button="Exit the L4T-Megascript":0
exit 1
fi
;;
esac
$2 bash -c "$(curl -s https://raw.githubusercontent.com/$repository_username/L4T-Megascript/$repository_branch/$1)" &> >(tee -a "$logfile")
if [ "$?" != 0 ]; then
echo -e "\n\e[91mFailed to install $1!\e[39m
\e[40m\e[93m\e[5m🔺\e[25m\e[39m\e[49m\e[93mNeed help? Copy the \e[1mENTIRE\e[0m\e[49m\e[93m terminal output or take a screenshot.
Please ask on Github: \e[94m\e[4mhttps://github.com/cobalt2727/L4T-Megascript/issues\e[24m\e[93m
Or on Discord: \e[94m\e[4mhttps://discord.gg/abgW2AG87Z\e[0m" | tee -a "$logfile"
# format_logfile "$logfile" #remove escape sequences from logfile
mv "$logfile" "$(echo "$logfile" | sed 's+-incomplete-+-fail-+g')"
echo "logfile name is $(echo "$logfile" | sed 's+-incomplete-+-fail-+g')"
description="OH NO! The $1 script exited with an error code!\
\nPlease view the log in terminal to find the cause of the error\
\nIf you need help, copy the log and create a github issue or ask for help on our Discord!"
table=("Exit")
userinput_func "$description" "${table[@]}"
else
status_green "\nInstalled $1 successfully." | tee -a "$logfile"
# format_logfile "$logfile" #remove escape sequences from logfile
mv "$logfile" "$(echo "$logfile" | sed 's+-incomplete-+-success-+g')"
fi
##DOCUMENTATION
## This file is here to help people easily run just one component of the megascript in
## their own setups (or even other projects! Just make sure to credit us somewhere).
## To run, let's say, the joycon-mouse file from this repository, which is in the 'scripts' folder, you
## would run the following line (without the hashtags or empty space in front):
## bash <( curl https://raw.githubusercontent.com/cobalt2727/L4T-Megascript/master/helper.sh ) "scripts/joycon-mouse.sh"
## Since barrier.sh is in another subfolder, to run that, you'd do something like:
## bash <( curl https://raw.githubusercontent.com/cobalt2727/L4T-Megascript/master/helper.sh ) "scripts/extras/barrier.sh"
## And obviously you need both bash and curl installed for these to work - the scripts should in most cases install everything else themselves.