#!/bin/bash
# Copyright 2016-2020 Jay Flood, SP, Brasil
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Author: brokenman@porteus.org
#
# This is a script to download Porteus bundles
# Source some functions
. /usr/share/porteus/porteus-functions
. /usr/share/porteus/gtkdialog-functions
txtsize(){
echo ''
}
# Export/set some variables
export SCRIPT="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
TMPDIR=/tmp/.bundle.$$
SERVER=`awk -F= '/^SERVER=/{print$NF}' /etc/porteus.conf`
[ `uname -m` != "x86_64" ] && ARCH=i586 || ARCH=x86_64
CWD=`pwd`
PVER=`< /etc/porteus-version`
BUNDLES=$SERVER/$ARCH/$PVER/bundles
get_desktop ## Returns DESKTOP=
cleanup(){
rm -rf $TMPDIR 2>/dev/null
exit
}
fail_abort(){
gtk_message "There was a problem" "$1" "$2" gtk-dialog-warning 500
cleanup
}
# Check for porteus
if ! is_porteus; then
fail_abort "This script can only run on Porteus." \
"You can changes this by editing $SCRIPT line number: $LINENO"
fi
# Check for modules diretory
if [ "$MODDIR" ]; then
if ! is_writable $MODDIR; then
TARGETDIR=/tmp
else
export TARGETDIR=$MODDIR
fi
else
TARGETDIR=/tmp
fi
############# START WORK
mkdir $TMPDIR && cd $_
wget $BUNDLES/
if [ ! -e index.html ]; then
cd -
fail_abort "Could not download the bundle list." \
"$SERVER"
else
if ! grep -q xzm index.html; then
cd -
fail_abort "Bundle list does not contain modules."
"$SERVER"
else
RESULT=`grep -o '
MOD
400
300
'`for a in $RESULT; do
echo "- $a
"
done`'
'`butok`'
'`butcancel`'
'
gtkdialog -p MAIN_BUNDLES > $TMPDIR/dump
## Check for cancel
if [[ `egrep "Cancel|abort" $TMPDIR/dump` ]]; then
cleanup
fi
MOD=`awk -F'"' '/^MOD=/{print$2}' $TMPDIR/dump`
## Check for valid link
! grep "\.xzm" <<<$MOD && fail_abort "You must click on a package to download." "Exiting"
LINK=$BUNDLES/$MOD
## Download file
cd $TARGETDIR
gtk_download $LINK
SUM1=`lynx -dump -dont_wrap_pre $SERVER/$ARCH/$PVER/bundles/md5sums.txt | grep $MOD | cut -d" " -f1`
SUM2=`md5sum $MOD | cut -d" " -f1`
gtk_infobox "Verifying download integrity.." "500"
if [ "$SUM1" = "$SUM2" ]; then
gtk_message2 "Checksum match." "Module verified."
else
gtk_message "Checksum Mismatch!" "Integrity check failed! Possible Corrupt Module!" "You may want to delete the module in $TARGETDIR and try again."
cleanup
fi
cd -
if [ "$TARGETDIR" = /tmp ]; then
gtk_message "Module downloaded" "Your module is in /tmp" "Please move the module to your modules directory to persist a reboot." gtk-yes 500
else
gtk_message "Module downloaded" "Your module is in '$TARGETDIR'" "The module will be activated each time you boot." gtk-yes 500
fi
## Ask if user wants to activate now
for STATEMENTS in $(gtk_yesno "Module activation" "Would you like to activate the module now?" |gtkdialog -s); do
eval $STATEMENTS
if grep -qo Yes<<<$STATEMENTS; then
activate $TARGETDIR/$MOD
fi
done
cleanup