#!/bin/bash if [ $PREFIX/var/lib/lms/${0##*/} != $0 ]; then mkdir $PREFIX/var/lib/lms mv ${0##*/} $PREFIX/var/lib/lms/${0##*/} rm ~/extensions.xml ~/installlms ~/logitechmediaserver*.deb ~/servers.json ~/updatelms echo "Moved LMS script to $PREFIX/var/lib/lms" exec bash $PREFIX/var/lib/lms/${0##*/} $* fi if [ $1 ]; then distro=$1 else distro=debian fi kernel=$(uname -r | cut -d'-' -f1) if [ ! -d $PREFIX/var/lib/proot-distro/installed-rootfs/$distro ]; then mv $PREFIX/etc/apt/sources.list $PREFIX/tmp/sources.list.original 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" apt install -y -o Dpkg::Options::="--force-confnew" proot proot-distro wget squeezelite || pkg --check-mirror install -y -o Dpkg::Options::="--force-confnew" proot proot-distro wget squeezelite tree termux-setup-storage mv $PREFIX/etc/proot-distro/debian.sh $PREFIX/etc/proot-distro/trixie.sh curl https://raw.githubusercontent.com/termux/proot-distro/0c77e30b3000cabcc11b82843ffc4426070aec17/distro-plugins/debian.sh -o $PREFIX/etc/proot-distro/debian.sh proot-distro install $distro mv $PREFIX/tmp/sources.list.original $PREFIX/etc/apt/sources.list fi if [ $(grep -c "allow-external-apps=true" ~/.termux/termux.properties) -eq 0 ]; then echo "allow-external-apps=true" >> ~/.termux/termux.properties fi rm installlms rm .lmsinstalled rm .materialinstalled cat < $PREFIX/var/lib/lms/installlms #!/bin/bash apt update apt -y -o Dpkg::Options::="--force-confnew" upgrade apt -y -o Dpkg::Options::="--force-confnew" install bash-completion jq apt-utils whiptail nano wget tree libxml2-utils rm servers.json wget https://lyrion.org/lms-server-repository/servers.json url=\$(jq -r '.latest.deb.url' servers.json) deb=\${url##*/} package=\$(echo \$deb | cut -d'_' -f1) if [ ! -d '/usr/share/squeezeboxserver' ]; then rm logitechmediaserver*.deb lyrionmusicserver*.deb wget \$url apt -y -o Dpkg::Options::="--force-confnew" install ./\$deb touch .lmsfirstinstall echo \$package > /root/lmspackage fi if [ ! -d '/var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/MaterialSkin' ]; then rm extensions.xml wget https://lms-community.github.io/lms-plugin-repository/extensions.xml -O extensions.xml mkdir -p /var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/MaterialSkin wget \$(xmllint --xpath 'string(//extensions/plugins/plugin[@name="MaterialSkin"]/@url)' extensions.xml) -O MaterialSkin.zip unzip MaterialSkin -d /var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/MaterialSkin chown -R squeezeboxserver:nogroup /var/lib/squeezeboxserver/ touch .materialfirstinstall fi sed -i 's/SLIMUSER.*/SLIMUSER=root/' /etc/default/\$package if [ ! -f /usr/share/perl5/Slim/Utils/OS/Custom.pm ]; then cat << 'EOF2' > /usr/share/perl5/Slim/Utils/OS/Custom.pm package Slim::Utils::OS::Custom; use strict; use base qw(Slim::Utils::OS::Debian); sub initDetails { my \$class = shift; \$class->{osDetails} = \$class->SUPER::initDetails(); \$class->{osDetails}->{osName} .= " (Android)"; return \$class->{osDetails}; } # Allow server to run as root in Termux Debian proot sub dontSetUserAndGroup { 1 } sub initPrefs { my (\$class, \$prefs) = @_; # don't show the wizard \$prefs->{wizardDone} = 1; # default skin Material \$prefs->{skin} = "material"; } sub postInitPrefs { my (\$class, \$prefs) = @_; # Material Skin setup require Slim::Utils::Prefs; my \$extensionPrefs = Slim::Utils::Prefs::preferences('plugin.extensions'); my \$plugins = \$extensionPrefs->get('plugin'); if ( ! \$plugins->{"MaterialSkin"} ) { \$plugins->{"MaterialSkin"} = 1; \$extensionPrefs->set("plugin", \$plugins); } } 1; EOF2 fi EOF cat < $PREFIX/var/lib/lms/updatelms #!/bin/bash rm logitechmediaserver*.deb lyrionmusicserver*.deb rm servers.json error="" wget https://lyrion.org/lms-server-repository/servers.json || error="ERROR: Can't get latest server details" if [ -z "\$error" ]; then opt=0 versions=() installed=\$(apt show \$(cat /root/lmspackage) 2>/dev/null | grep ^Version: | cut -d' ' -f2 | cut -d'~' -f1) # if [ -z "\$installed" ]; then # installed=\$(apt show lyrionmusicserver 2>/dev/null | grep ^Version: | cut -d' ' -f2 | cut -d'~' -f1) # fi echo "=================================================" echo "Choose option, press enter." echo "(choosing current version will check for updates," echo " choosing another will upgrade or downgrade.)" echo "=================================================" for version in \$(jq -r .[].deb.version servers.json | sort); do opt=\$((opt+1)) versions+=( \$version ) if [ \$installed == \$version ]; then current=current else current= fi echo \$opt. \$version \$current done read n if [ \${versions[\$n-1]} \< \$installed ]; then downgrade="--allow-downgrades" fi url=\$(jq --arg v \${versions[\$n-1]} -r '.[].deb | select(.version == \$v) | .url' servers.json) deb=\${url##*/} package=\$(echo \$deb | cut -d'_' -f1) if [ \$(apt show \$package | grep ^Version: | cut -d' ' -f2) == \$(echo \$deb | cut -d'_' -f2) ]; then error="You already have the latest version" else wget \$url || error="ERROR: Can't find latest server download" if [ -z "\$error" ]; then apt -y -o Dpkg::Options::="--force-confnew" install \$downgrade ./\$deb || error="ERROR: installation failed" if [ -z "\$error" ]; then echo \$package > /root/lmspackage sed -i 's/SLIMUSER.*/SLIMUSER=root/' /etc/default/\$package fi fi fi fi echo "========================================" if [ -z "\$error" ]; then echo "LMS updated" echo "Restart using your Termux 'Restart LMS' widget" else echo \$error echo "LMS NOT updated" fi echo "Press Enter to close this terminal" echo "========================================" read EOF if [ ! -d $PREFIX/var/lib/lms/storage ]; then mkdir $PREFIX/var/lib/lms/storage fi cat < $PREFIX/var/lib/lms/importfavs #!/bin/bash echo "==============================================" echo "To import your favorites from another LMS or" echo "mysqueezebox.com:" echo "1. Ensure you have saved favorites.opml to" echo " your phone's Download folder (not your SD" echo " card's Download folder if you have one)." echo "2. Press y to continue or n to exit" echo "==============================================" read -r -n 1 response case "\$response" in [yY]) echo echo "importing..." if [ ! -e storage/downloads/favorites.opml ]; then echo "Cannot find favorites.opml, Press enter to quit this terminal" else service \$(cat /root/lmspackage) stop cp storage/downloads/favorites.opml /var/lib/squeezeboxserver/prefs/favorites.opml echo "Favorites imported. Press enter to quit this terminal," echo "then restart LMS." fi ;; *) echo echo "Cancelled. Press enter to quit this terminal" ;; esac read EOF cat < $PREFIX/var/lib/lms/exportfavs #!/bin/bash echo "==============================================" echo "Export your LMS favorites. This option will" echo "replace any existing favorites.opml in your" echo "phone's Download folder" echo "" echo "Press y to continue or n to exit" echo "==============================================" read -r -n 1 response case "\$response" in [yY]) echo echo "exporting..." if [ ! -e /var/lib/squeezeboxserver/prefs/favorites.opml ]; then echo "Cannot find favorites.opml, Press enter to quit this terminal" else cp /var/lib/squeezeboxserver/prefs/favorites.opml storage/downloads/favorites.opml echo "Favorites exported. Press enter to quit this terminal." fi ;; *) echo echo "Cancelled. Press enter to quit this terminal" ;; esac read EOF 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 curl https://raw.githubusercontent.com/darrell-k/slimserver-platforms/Android/Android/lms.png -o ~/.shortcuts/icons/"Restart LMS.png" curl https://raw.githubusercontent.com/darrell-k/slimserver-platforms/Android/Android/lms-red.png -o ~/.shortcuts/icons/"Stop LMS.png" for cardpath in $*; do if [ ! -e $PREFIX/var/lib/lms/.savedcards ] || [ $(grep -cP "$cardpath($| )" $PREFIX/var/lib/lms/.savedcards) -eq 0 ]; then echo "$(cat $PREFIX/var/lib/lms/.savedcards) $cardpath" > $PREFIX/var/lib/lms/.savedcards fi done for cardpath in $(grep -o "/storage/[0-9|A-F|a-f|-]\+ " /proc/mounts); do if [ ! -e $PREFIX/var/lib/lms/.savedcards ] || [ $(grep -cP "$cardpath($| )" $PREFIX/var/lib/lms/.savedcards) -eq 0 ]; then echo "$(cat $PREFIX/var/lib/lms/.savedcards) $cardpath" > $PREFIX/var/lib/lms/.savedcards fi done for cardpath in $(cat $PREFIX/var/lib/lms/.savedcards); do card=${cardpath##*/} proot-distro login --kernel $kernel $distro -- mkdir /media/$card bind="$bind --bind $cardpath:/media/$card" done echo $bind proot-distro login --kernel $kernel --bind $PREFIX/var/lib/lms:/root $distro -- bash installlms echo "proot-distro login --kernel $kernel --bind $PREFIX/var/lib/lms:/root $distro -- bash -c 'service \$(cat /root/lmspackage) stop'" > ~/.shortcuts/tasks/"Restart LMS" echo "sleep 5" >> ~/.shortcuts/tasks/"Restart LMS" echo "proot-distro login --kernel $kernel $bind --bind $PREFIX/var/lib/lms:/root --no-kill-on-exit $distro -- bash -c 'service \$(cat /root/lmspackage) start'" >> ~/.shortcuts/tasks/"Restart LMS" chmod +x ~/.shortcuts/tasks/"Restart LMS" echo "proot-distro login --kernel $kernel --bind $PREFIX/var/lib/lms:/root $distro -- bash -c 'service \$(cat /root/lmspackage) stop'" > ~/.shortcuts/tasks/"Stop LMS" chmod +x ~/.shortcuts/tasks/"Stop LMS" echo "proot-distro login --kernel $kernel --bind $PREFIX/var/lib/lms:/root $distro -- bash updatelms" > ~/.shortcuts/"Update LMS" chmod +x ~/.shortcuts/"Update LMS" echo "proot-distro login --kernel $kernel --bind $PREFIX/var/lib/lms:/root --bind ~/storage:/root/storage $bind $distro" > ~/.shortcuts/Advanced/"Debian Terminal" chmod +x ~/.shortcuts/Advanced/"Debian Terminal" echo "proot-distro login --kernel $kernel --bind $PREFIX/var/lib/lms:/root --bind ~/storage:/root/storage $bind $distro -- bash importfavs" > ~/.shortcuts/"Import favorites.opml" chmod +x ~/.shortcuts/"Import favorites.opml" echo "proot-distro login --kernel $kernel --bind $PREFIX/var/lib/lms:/root --bind ~/storage:/root/storage $bind $distro -- bash exportfavs" > ~/.shortcuts/"Export favorites.opml" chmod +x ~/.shortcuts/"Export favorites.opml" echo "curl https://raw.githubusercontent.com/darrell-k/slimserver-platforms/Android/Android/lmst -o lms && bash lms $distro ; bash" > ~/.shortcuts/Advanced/"Rerun LMS Setup" chmod +x ~/.shortcuts/Advanced/"Rerun LMS Setup" echo "=======================" if [ -e $PREFIX/var/lib/lms/.lmsfirstinstall ]; then echo "LMS installed" rm $PREFIX/var/lib/lms/.lmsfirstinstall fi if [ -e $PREFIX/var/lib/lms/.materialfirstinstall ]; then echo "Material Skin Installed" rm $PREFIX/var/lib/lms/.materialfirstinstall fi echo "Scripts updated" echo "======================="