-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInstallLMS.sh
More file actions
270 lines (210 loc) · 8.05 KB
/
InstallLMS.sh
File metadata and controls
270 lines (210 loc) · 8.05 KB
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
#!/usr/bin/env bash
# check tar shell is bash
if [ -z "$BASH_VERSION" ]; then
echo "This script must be run with bash and not $0"
exit 0
fi
# Bring Termux up to date
echo "deb https://grimler.se/termux-packages-24 stable main" > $PREFIX/etc/apt/sources.list
echo "deb https://packages-cf.termux.dev/apt/termux-main stable main" >> $PREFIX/etc/apt/sources.list
apt update
apt upgrade -y -o Dpkg::Options::="--force-confnew"
# wget and jq are just necessary for the install.
# perl and squeezelite for running LMS.
apt install -y -o Dpkg::Options::="--force-confnew" perl wget jq squeezelite || pkg --check-mirror install -y -o Dpkg::Options::="--force-confnew" perl wget jq squeezelite
termux-setup-storage
# Check if previous install $PREFIX/share/squeezeboxserver
if [ -d $PREFIX/share/squeezeboxserver ] ; then
echo "Overwrite previous LMS installation & settings - confirm with Y "
read -r -n 1 response
case "\$response" in
[yY])
echo
echo "Overwriting installation.... "
;;
*)
echo
echo "Cancelled. Press enter to quit this terminal"
;;
esac
fi
# Check if services installed and running.
if ! [ -x "$PREFIX/share/termux-services/svlogger" ]; then
echo "Installing Termux services"
apt-get install -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" termux-services
fi
if ! [ -x "$(command -v jq)" ]; then
echo 'Error: jq is not installed.' >&2
exit 1
fi
if ! [ -x "$(command -v perl)" ]; then
echo 'Error: perl is not installed.' >&2
exit 1
fi
PERL_VERSION=`perl -MConfig -le '$Config{version} =~ /(\d+.\d+)\./; print $1'`
PERL_MINOR_VER=`echo "$PERL_VERSION" | sed 's/.*\.//g'`
RAW_ARCH=`perl -MConfig -le 'print $Config{archname}'`
ARCH=`echo $RAW_ARCH | sed 's/gnu-//' | sed 's/armv.*?-/arm-/' `
#VERBOSE="-v"
VERBOSE=""
#
# Expect TERMUX_VERSION 0.118.0 (NDK 23)
#
pushd $TMPDIR
#################################### Get LMS version #############################
mkdir $VERBOSE -p InstallLMS
# ask for latest version (should be last release) other version are dev and nightly
rm servers.json
wget https://lyrion.org/lms-server-repository/servers.json
url=$(jq -r '.latest.nocpan.url' servers.json)
lmsversion=$(jq -r '.latest.nocpan.version' servers.json)
# url=\$(jq -r '."8.5.2".nocpan.url' servers.json)
# url=\$(jq -r '."9.0.0".nocpan.url' servers.json)
nocpan=${url##*/}
package=$(echo $nocpan | cut -d'_' -f1)
echo "Package $package $nocpan "
wget $url
#
# Get Termux special files
#
LMS_TGZ="https://raw.githubusercontent.com/bpa-code/POC-LMSAndroid/main/"
wget --quiet $LMS_TGZ/termux-site_perl.tgz
wget --quiet $LMS_TGZ/termux-SlimBin.tgz
wget --quiet $LMS_TGZ/termux-SlimCPAN.tgz
wget --quiet $LMS_TGZ/termux-Slimfiles.tgz
wget --quiet $LMS_TGZ/termux-SlimService.tgz
tar xfC termux-Slimfiles.tgz $TMPDIR/InstallLMS
tar xfC termux-SlimService.tgz $TMPDIR/InstallLMS
#
# Get Material skin
#
rm extensions.xml
wget --quiet https://lms-community.github.io/lms-plugin-repository/extensions.xml -O extensions.xml
# wget $(xmllint --xpath 'string(//extensions/plugins/plugin[@name="MaterialSkin"]/@url)' extensions.xml) -O MaterialSkin.zip
materialurl=$(grep MaterialSkin extensions.xml | perl -nE 'say /url="([^"]+)/')
# echo " Download Material URL=$materialurl"
wget --quiet $materialurl -O MaterialSkin.zip
mkdir $VERBOSE -p $PREFIX/share/squeezeboxserver
cd $PREFIX/share/squeezeboxserver
tar xfz $TMPDIR/$package --strip=1
tar xfz $TMPDIR/termux-SlimBin.tgz
tar xfz $TMPDIR/termux-SlimCPAN.tgz
# site_perl files was save including usr root.
cd $PREFIX
cd ..
tar xfz $TMPDIR/termux-site_perl.tgz
cd $PREFIX/share/squeezeboxserver
cp $VERBOSE $TMPDIR/InstallLMS/gdresized.pl.termux ./gdresized.pl
cp $VERBOSE $TMPDIR/InstallLMS/DNS.pm.termux ./lib/AnyEvent/DNS.pm
cp $VERBOSE $TMPDIR/InstallLMS/Misc.pm.termux ./Slim/Utils/Misc.pm
cp $VERBOSE $TMPDIR/InstallLMS/Custom.pm.termux ./Slim/Utils/OS/Custom.pm
mkdir $VERBOSE -p $PREFIX/var/lib/squeezeboxserver
chmod -R 0777 $PREFIX/var/lib/squeezeboxserver/
mkdir $VERBOSE -p $PREFIX/var/log/squeezeboxserver
chmod -R 0777 $PREFIX/var/log/squeezeboxserver/
chmod -R 0777 $PREFIX/var/squeezeboxserver/
chmod -R 0777 $PREFIX/share/squeezeboxserver/
# Get Material before first boot
mkdir $VERBOSE -p $PREFIX/var/lib/squeezeboxserver/Cache/InstalledPlugins/Plugins/MaterialSkin
unzip $TMPDIR/MaterialSkin.zip -d $PREFIX/var/lib/squeezeboxserver/Cache/InstalledPlugins/Plugins/MaterialSkin
#
# Setup conf files
#
mkdir $VERBOSE -p $PREFIX/etc/squeezeboxserver
chmod -R 0777 $PREFIX/etc/squeezeboxserver
cp $VERBOSE $PREFIX/share/squeezeboxserver/*.conf $PREFIX/etc/squeezeboxserver
#
# External storage setup
#
#i=0
#for cardpath in $(grep -o "/storage/[0-9|A-F|a-f|-]\+ " /proc/mounts); do
# ln -svf $cardpath $PREFIX/storage/extern-$i
# i=i+1
#done
#
# Termux squeezeboxserver service setup - service is called lyrion
#
SERVICENAME="lyrion"
mkdir $VERBOSE -p $PREFIX/var/service
cd $PREFIX/var/service
mkdir $VERBOSE -p $SERVICENAME/log
cat <<EOF > $SERVICENAME/log/run
#! /data/data/com.termux/files/usr/bin/sh
svlogger="/data/data/com.termux/files/usr/share/termux-services/svlogger"
exec "${svlogger}" "$@"
EOF
chmod u+x $SERVICENAME/log/run
# Copy in default startup otpions.
cp $VERBOSE $TMPDIR/InstallLMS/squeezeboxserver.conf $PREFIX/etc/squeezeboxserver/squeezeboxserver.conf
# Create the service file that runs LMS. Get command line options from $PREFIX/etc/squeezeboxserver/squeezeboxserver.conf
cat <<EOF > $SERVICENAME/run
#! $PREFIX/bin/sh
. $PREFIX/etc/squeezeboxserver/squeezeboxserver.conf
exec $PREFIX/share/squeezeboxserver/slimserver.pl \$SLIMOPTIONS 2>&1
EOF
chmod +x $SERVICENAME/run
touch $SERVICENAME/down
# Make a Squeezelite service
mkdir $VERBOSE -p squeezelite/log
cat <<EOF > squeezelite/log/run
#! /data/data/com.termux/files/usr/bin/sh
svlogger="/data/data/com.termux/files/usr/share/termux-services/svlogger"
exec "${svlogger}" "$@"
EOF
chmod u+x squeezelite/log/run
# Create the service file that runs squeezleite. Not sure if any option are needed for an in-device pulseaudio squeezelite
cat <<EOF > squeezelite/run
#! $PREFIX/bin/sh
exec squeezelite -n "Squeezelite-termux" 2>&1
EOF
chmod +x squeezelite/run
touch squeezelite/down
#
# Termux widgets setup
#
if [ ! -d ~/.shortcuts/tasks ]; then
mkdir -p ~/.shortcuts/tasks
chmod 700 -R ~/.shortcuts/tasks
fi
if [ ! -d ~/.shortcuts/icons ]; then
mkdir -p ~/.shortcuts/icons
chmod -R a-x,u=rwX,go-rwx ~/.shortcuts/icons
fi
#if [ ! -d ~/.shortcuts/Advanced ]; then
# mkdir -p ~/.shortcuts/Advanced
# chmod 700 -R ~/.shortcuts/Advanced
#fi
cp $VERBOSE $TMPDIR/InstallLMS/lms-red-green.png ~/.shortcuts/icons/"Restart LMS.png"
cp $VERBOSE $TMPDIR/InstallLMS/lms-red.png ~/.shortcuts/icons/"Stop LMS.png"
cp $VERBOSE $TMPDIR/InstallLMS/lms-green.png ~/.shortcuts/icons/"Start LMS.png"
cp $VERBOSE $TMPDIR/InstallLMS/StartLMS.txt ~/.shortcuts/tasks/"Start LMS"
cp $VERBOSE $TMPDIR/InstallLMS/RestartLMS.txt ~/.shortcuts/tasks/"Restart LMS"
#cp $VERBOSE $TMPDIR/InstallLMS/UpdateLMS.txt ~/.shortcuts/"Update LMS"
cp $VERBOSE $TMPDIR/InstallLMS/StopLMS.txt ~/.shortcuts/tasks/"Stop LMS"
#
# Tidy up
#
cd $TMPDIR
rm $VERBOSE -Rf ./InstallLMS
rm $VERBOSE termux-site_perl.tgz
rm $VERBOSE termux-SlimBin.tgz
rm $VERBOSE termux-SlimCPAN.tgz
rm $VERBOSE termux-Slimfiles.tgz
rm $VERBOSE termux-SlimService.tgz
rm $VERBOSE MaterialSkin.zip
rm extensions.xml
rm servers.json
rm $package
echo "*"
echo "* Termux-LMS Install complete "
echo "* "
echo "* Reboot Termux needed - type exit and press return. Then start from Termux app icon"
echo "* "
echo "* After reboot: to start LMS service - sv up lyrion"
echo "* to stop LMS service - sv down lyrion"
echo "* to start squeezelite - sv up squeezelite"
echo "* to stop squeezelite - sv down squeezelite"
echo "* "
echo "* you can also use Termux Widgets to create widgets to start & stop LMS"
echo "* "
popd