#!/bin/bash
##########################################
# savedebz by Linux Eventually ver 0.7 ###
##########################################
# SD card install location
unset sdhc
unset partition
##sdhc="/media/mmc1"
read -p "Which partition on the SD \
card (default: mmcblk1p1)?: " partition; 
sdhc=`df -h | grep /dev/$partition | awk '{ print $6}'`;

if [ -z "$partition" ];
then sdhc=`df -h | grep /dev/mmcblk1p1 | awk '{ print $6}'`;
fi
sdmount=`echo $sdhc`
mountmsg=`echo "Mountpoint:"`
sdmsg=`echo $mountmsg $sdmount`
echo  $sdmsg

# Install packages back to Nokia Internet Tablet
if [ "$1" = "install" ];
then echo "Install packages from SD card to NXx0?";
read -p "Are you sure? (y/n): " confirminstall
fi
  if [ "$confirminstall" = "y" ]; then
  echo "Installing ... (this will take awhile)"
  debzinstall() { alldebz=`cat $sdhc/installdebz`; apt-get -o 
dir::cache=$sdhc/debz install $alldebz; }
  debzinstall
  echo "debz installation complete"
  exit 0
    else if [ "$confirminstall" = "n" ]; then
    echo "Installation not selected. Exiting."; exit 0
      else if [ ! -z "$confirminstall" ]; then echo "Invalid selection"; 
exit 0
    fi
  fi
fi

# If invalid parameter then quit
if [ ! -z "$1" ];
then echo "ERROR Invalid parameter"
echo "Valid options are none or install"
exit 0
fi

# Ask user to execute script
if [ -z "$1" ]; then
echo "Download packages to SD card?";
read -p "Are you sure? (y/n): " confirmbackup
  if [ "$confirmbackup" = "y" ]; then
  echo "Installing ... (this will take awhile)"
    else if [ "$confirmbackup" = "n" ]; then
    echo "Download not selected. Exiting."; exit 0
  else echo "Invalid selection"; exit 0
  fi
fi
fi

# Create directory on SD card
if [ ! -d "$sdhc/debz/archives" ];
then
mkdir $sdhc/debz{,/archives}
cp -r /var/cache/apt/archives/partial/ $sdhc/debz/archives/
fi

# Save list of installed packages
dpkg -l | grep ii | awk '{ print $2 }' > $sdhc/alldebz; 

# Save list of packages on SD
ls $sdhc/debz/archives/ | awk 'BEGIN{FS="_"};{print$1}' > $sdhc/debzsd;

# Compare files (to save bandwidth)
cd $sdhc 
###########
## pdiff ##
###########
perl <<'EOF'
$output = newdebz;
chomp($output);
open a, "<alldebz";
open b, "<debzsd";
local $/;
my @a = split /\n/, <a>;
my @b = split /\n/, <b>;
my %b = map { $_ => 1 } @b; # Make hash of B
my @res = grep { !defined $b{$_} } @a; # Everything in A not in B
open myoutput, ">$output";
select myoutput;
print join "\n", @res;
print "\n";
EOF
###########

# Convert line breaks to spaces
foobar=`cat $sdhc/newdebz`; echo $foobar > $sdhc/installdebz
pkgz=`cat $sdhc/installdebz`

# Re-download packages and save them to SD card
apt-get -o dir::cache=$sdhc/debz --reinstall -d install $pkgz

echo "Finished."
