#!/bin/bash
export TEXTDOMAIN=petget___pkg_chooser.sh
export OUTPUT_CHARSET=UTF-8
[ "`whoami`" != "root" ] && exec sudo -A ${0} ${@} #110505
if [ -f /root/.packages/download_path ]; then
. /root/.packages/download_path
fi
clean_up () {
if [ "$(ls /tmp/*_pet{,s}_quietly /tmp/install_classic 2>/dev/null |wc -l)" -eq 1 ]; then
for MODE in $(ls /tmp/*_pet{,s}_quietly /tmp/install_classic)
do
mv $MODE $MODE.bak
done
fi
mv /tmp/install_quietly /tmp/install_quietly.bak
echo -n > /tmp/pkgs_to_install
rm -f /tmp/{install,remove}{,_pets}_quietly 2>/dev/null
rm -f /tmp/install_classic 2>/dev/null
rm -f /tmp/download_pets_quietly 2>/dev/null
rm -f /tmp/download_only_pet_quietly 2>/dev/null
rm -f /tmp/pkgs_left_to_install 2>/dev/null
rm -f /tmp/pkgs_to_install_done 2>/dev/null
rm -f /tmp/overall_pkg_size* 2>/dev/null
rm -f /tmp/overall_dependencies 2>/dev/null
rm -f /tmp/mode_changed 2>/dev/null
rm -f /tmp/force*_install 2>/dev/null
rm -f /tmp/pkgs_to_install_done 2>/dev/null
rm -f /tmp/pgks_really_installed 2>/dev/null
rm -f /tmp/pgks_failed_to_install 2>/dev/null
rm -f /tmp/overall_petget_missingpkgs_patterns.txt 2>/dev/null
rm -f /tmp/overall_missing_libs.txt 2>/dev/null
rm -f /tmp/overall_install_report 2>/dev/null
rm -f /tmp/pkgs_to_install_bar 2>/dev/null
rm -f /tmp/manual_pkg_download 2>/dev/null
rm -f /tmp/ppm_reporting 2>/dev/null
rm -f /tmp/pkgs_DL_BAD_LIST 2>/dev/null
rm -rf /tmp/PPM_LOGs/ 2>/dev/null
mv $MODE.bak $MODE
mv /tmp/install_quietly.bak /tmp/install_quietly
}
export -f clean_up
report_results () {
# Info source files
touch /tmp/ppm_reporting # progress bar flag
/usr/local/petget/finduserinstalledpkgs.sh #make sure...
sync
rm -f /tmp/pgks_really_installed 2>/dev/null
rm -f /tmp/pgks_failed_to_install 2>/dev/null
for LINE in $(cat /tmp/pkgs_to_install_done | cut -f 1 -d '|' | sort | uniq)
do
[ "$(echo $LINE)" = "" ] && continue
if [ -f /tmp/download_pets_quietly -o -f /tmp/download_only_pet_quietly \
-o -f /tmp/manual_pkg_download ];then
if [ -f /root/.packages/download_path ];then
. /root/.packages/download_path
DOWN_PATH="$DL_PATH"
else
DOWN_PATH=$HOME
fi
PREVINST=''
REALLY=$(ls "$DOWN_PATH" | grep $LINE)
[ "$REALLY" -a "$(grep $LINE /tmp/pkgs_DL_BAD_LIST 2>/dev/null | sort | uniq )" != "" ] && \
REALLY='' && PREVINST="$(gettext 'was previously downloaded')"
else
PREVINST=''
REALLY=$(grep $LINE /tmp/petget/installedpkgs.results)
[ "$(grep $LINE /tmp/pgks_failed_to_install_forced 2>/dev/null | sort | uniq )" != "" -o \
"$(grep $LINE /tmp/pkgs_DL_BAD_LIST 2>/dev/null | sort | uniq )" != "" ] \
&& REALLY='' && PREVINST="$(gettext 'was already installed')"
fi
if [ "$REALLY" != "" ]; then
echo $LINE >> /tmp/pgks_really_installed
else
echo $LINE $PREVINST >> /tmp/pgks_failed_to_install
fi
done
rm -f /tmp/pgks_failed_to_install_forced
[ -f /tmp/pgks_really_installed ] && INSTALLED_PGKS="$(/dev/null | tr ' ' '\n' | sort | uniq )
NOT_IN_PATH_LIBS=$(cat /tmp/overall_missing_libs_hidden.txt 2>/dev/null | tr ' ' '\n' | sort | uniq )
cat << EOF > /tmp/overall_install_report
Packages succesfully Installed or Downloaded
$INSTALLED_PGKS
Packages that failed to be Installed or Downloaded, or were aborted be the user
$FAILED_TO_INSTALL
Missing Shared Libraries
$MISSING_LIBS
Existing Libraries that may be in a location other than /lib and /usr/lib
$NOT_IN_PATH_LIBS
EOF
# Info window/dialogue (display and option to save "missing" info)
MISSINGMSG1="$(gettext 'No missing shared libraries')"
if [ "$MISSING_LIBS" ];then
MISSINGMSG1="$(gettext 'These libraries are missing:')
${MISSING_LIBS}"
fi
if [ "$NOT_IN_PATH_LIBS" ];then #100830
MISSINGMSG1="${MISSINGMSG1}
$(gettext 'These needed libraries exist but are not in the library search path (it is assumed that a startup script in the package makes these libraries loadable by the application):')
${NOT_IN_PATH_LIBS}"
fi
export REPORT_DIALOG='
'"`/usr/lib/gtkdialog/xml_info fixed package_add.svg 60 " " "$(gettext "Package install/download report")"`"'
'"`/usr/lib/gtkdialog/xml_pixmap dialog-complete.svg 32`"'
'"`/usr/lib/gtkdialog/xml_pixmap dialog-error.svg 32`"'
'"`/usr/lib/gtkdialog/xml_pixmap building_block.svg 32`"'
'"`/usr/lib/gtkdialog/xml_scalegrip`"'
'
RETPARAMS="`gtkdialog --center -p REPORT_DIALOG`"
echo 100 > /tmp/petget/install_status_percent
}
export -f report_results
check_total_size () {
rm -f /tmp/petget_deps_visualtreelog 2>/dev/null
rm -f /tmp/petget_frame_cnt 2>/dev/null
rm -f /tmp/petget_missingpkgs_patterns{2,_acc,_acc0,_acc-prev,x0,_and_versioning_level1} 2>/dev/null
rm -f /tmp/petget_moreframes 2>/dev/null
rm -f /tmp/petget_tabs 2>/dev/null
rm -f /tmp/pkgs_to_install_bar 2>/dev/null
#required size
NEEDEDK_PLUS=$( expr $(awk '{ sum += $1 } END { print sum }' /tmp/overall_pkg_size))
[ -f /tmp/overall_pkg_size_RMV ] && \
NEEDEDK_MINUS=$( expr $(awk '{ sum += $1 } END { print sum }' /tmp/overall_pkg_size_RMV)) \
|| NEEDEDK_MINUS=0
[ ! "$NEEDEDK_MINUS" ] && NEEDEDK_MINUS=0
NEEDEDK=$( expr $( expr $NEEDEDK_PLUS + $NEEDEDK_MINUS ) / 768 ) # 1.5x
ACTION_MSG=$(gettext 'This is not enough space to download and install the packages (including dependencies) you have selected.')
if [ -f /tmp/download_pets_quietly -o -f /tmp/download_only_pet_quietly ]; then
NEEDEDK=$( expr $NEEDEDK / 3 ) # 0.5x
[ "$DL_PATH" ] && DOWN_PATH="$DL_PATH" || DOWN_PATH="/root"
ACTION_MSG="$(gettext 'This is not enough space to download the packages (including dependencies) you have selected in ')${DOWN_PATH}."
fi
if [ "$(cat /var/local/petget/nd_category 2>/dev/null)" = "true" ]; then
NEEDEDKDOWN=$( expr $NEEDEDK / 3 )
else
NEEDEDKDOWN="$NEEDEDK" # so will not trigger warning
fi
#---
if [ ! -f /tmp/pup_event_sizefreem ]; then
/usr/local/pup_event/frontend_timeout &
sleep 1
if [ ! -f /tmp/pup_event_sizefreem ]; then
. /etc/rc.d/PUPSTATE
case $PUPMODE in
2) AVAILABLE=$(df -m | grep / | head -n 1 | awk '{print $4}');;
5) AVAILABLE=$(df -m | grep pup_rw | awk '{print $4}')
[ "$AVAILABLE" = "" ] && AVAILABLE=$(df -m | grep \/tmpfs | awk '{print $4}');;
7|13) AVAILABLE=$(df -m | grep pup_ro1 | awk '{print $4}')
[ "$AVAILABLE" = "" ] && AVAILABLE=$(df -m | grep \/tmpfs | awk '{print $4}');;
6|12) AVAILABLE=$(df -m | grep pup_rw | awk '{print $4}')
[ "$AVAILABLE" = "" ] && AVAILABLE=$(df -m | grep dev_save | awk '{print $4}');;
esac
if [ ! "$AVAILABLE" ]; then
echo "Free space estimation error. Exiting" > /tmp/petget/install_status
. /usr/lib/gtkdialog/box_ok "$(gettext 'Free space error')" error "$(gettext 'This is a rare error that fails to report the available free space. It should be OK after a restart')"
clean_up
exit 1
else
AVAILABLE="$AVAILABLE"
fi
else
AVAILABLE=$(cat /tmp/pup_event_sizefreem | head -n 1 )
fi
else
AVAILABLE=$(cat /tmp/pup_event_sizefreem | head -n 1 )
fi
if [ "$DL_PATH" -a ! "$DL_PATH" = "/root" ]; then
if [ -f /tmp/download_pets_quietly -o -f /tmp/download_only_pet_quietly \
-o "$(cat /var/local/petget/nd_category 2>/dev/null)" = "true" ]; then
SAVEAVAILABLE=$(df -m "$DL_PATH"| awk 'END {print $4}')
else
SAVEAVAILABLE="$AVAILABLE" # so will not trigger warning
fi
else
SAVEAVAILABLE="$AVAILABLE" # so will not trigger warning
fi
if [ -f /tmp/download_pets_quietly -o -f /tmp/download_only_pet_quietly ]; then
[ "$SAVEAVAILABLE" != "$AVAILABLE" ] && AVAILABLE="$SAVEAVAILABLE"
fi
PACKAGES=$(cat /tmp/pkgs_to_install | cut -f 1 -d '|')
DEPENDENCIES=$(cat /tmp/overall_dependencies 2>/dev/null | sort | uniq)
[ "$AVAILABLE" = "0" -o "$AVAILABLE" = "" ] && echo "No space left on device. Exiting" \
> /tmp/petget/install_status && clean_up && exit 0
#statusbar in main gui
PERCENT=$((${NEEDEDK}*100/${AVAILABLE}))
[ $PERCENT -gt 99 ] && PERCENT=99
if [ -s /tmp/overall_pkg_size ] && [ $PERCENT = 0 ]; then PERCENT=1; fi
echo "$PERCENT" > /tmp/petget/install_status_percent
if [ "$(cat /tmp/pkgs_to_install /tmp/overall_dependencies 2>/dev/null)" = "" ]; then
echo "" > /tmp/petget/install_status
else
cat /tmp/pkgs_to_install | cut -f1 -d '|' > /tmp/pkgs_to_install_bar
if [ -f /tmp/install_pets_quietly -o -f /tmp/install_classic ]; then
if [ "$(cat /var/local/petget/nd_category 2>/dev/null)" != "true" ]; then
BARNEEDEDK=$( expr 2 \* ${NEEDEDK} \/ 3 )
BARMSG="$(gettext 'to install')"
else
BARNEEDEDK=${NEEDEDK}
BARMSG="$(gettext 'to install (and keep pkgs)')"
fi
else
BARNEEDEDK=${NEEDEDK}
BARMSG="$(gettext 'to download')"
fi
echo "$(gettext 'Packages (with deps)'): $(cat /tmp/pkgs_to_install_bar /tmp/overall_dependencies 2>/dev/null |sort | uniq | wc -l) - $(gettext 'Required space') ${BARMSG}: ${BARNEEDEDK}MB - $(gettext 'Available'): ${AVAILABLE}MB" > /tmp/petget/install_status
fi
#Check if enough space on system
if [ "$NEEDEDKDOWN" -ge "$SAVEAVAILABLE" -a "$AVAILABLE" -ge "$NEEDEDK" ]; then
ACTION_MSG="$(gettext 'Although there is sufficient space to install the packages, there is no space in your download folder, ')$DL_PATH$(gettext ', to save the packages (including dependencies). ')"
AVAILABLE="$SAVEAVAILABLE"
fi
if [ "$NEEDEDK" -ge "$AVAILABLE" -o "$NEEDEDKDOWN" -ge "$SAVEAVAILABLE" ]; then
export PPM_error='
'"`/usr/lib/gtkdialog/xml_pixmap dialog-error.svg popup`"'
'
gtkdialog --center -p PPM_error
killall yaf-splash
if [ ! -f /tmp/install_classic ]; then
echo "" > /tmp/petget/install_status
echo 0 > /tmp/petget/install_status_percent
if [ "$(ls /tmp/*_pet{,s}_quietly /tmp/install_classic |wc -l)" -eq 1 ]; then
for MODE in $(ls /tmp/*_pet{,s}_quietly /tmp/install_classic)
do
mv $MODE $MODE.bak
done
fi
clean_up
mv $MODE.bak $MODE
else
. /usr/lib/gtkdialog/box_yesno "$(gettext 'Last warning')" "$(eval echo $(gettext '$NEEDEDK of the $AVAILABLE available MB will be used to install the package\(s\) you selected.'))" "$(gettext 'It is NOT sufficient. Please exit now.')" "$(gettext 'However, if you are sure about the step-by-step process, take a risk.')" "$(gettext 'Do you want to cancel installation?')"
if [ "$EXIT" = "yes" ]; then
echo 0 > /tmp/petget/install_status_percent
echo "" > /tmp/petget/install_status
if [ "$(ls /tmp/*_pet{,s}_quietly /tmp/install_classic |wc -l)" -eq 1 ]; then
for MODE in $(ls /tmp/*_pet{,s}_quietly /tmp/install_classic)
do
mv $MODE $MODE.bak
done
fi
clean_up
mv $MODE.bak $MODE
else
echo "good luck"
fi
fi
fi
}
export -f check_total_size
status_bar_func () {
while $1 ; do
TOTALPKGS=$(cat /tmp/pkgs_to_install_bar /tmp/overall_dependencies 2>/dev/null |sort | uniq | wc -l)
DONEPGKS=$(cat /tmp/overall_package_status_log 2>/dev/null | wc -l)
PERCENT=$( expr $DONEPGKS \* 100 \/ $TOTALPKGS )
[ $PERCENT = 100 ] && PERCENT=99
echo $PERCENT > /tmp/petget/install_status_percent
sleep 0.3
[ -f /tmp/ppm_reporting ] && break
done
}
export -f status_bar_func
install_package () {
[ "$(cat /tmp/pkgs_to_install)" = "" ] && exit 0
cat /tmp/pkgs_to_install | tr ' ' '\n' > /tmp/pkgs_left_to_install
rm -f /tmp/overall_package_status_log
echo 0 > /tmp/petget/install_status_percent
echo "$(gettext "Calculating total required space...")" > /tmp/petget/install_status
[ ! -f /root/.packages/skip_space_check ] && check_total_size
status_bar_func &
while read LINE; do
REPO=$(echo $LINE | cut -f 2 -d '|')
echo "$REPO" > /tmp/petget/current-repo-triad
TREE1=$(echo $LINE | cut -f 1 -d '|')
if [ -f /tmp/install_quietly ];then
if [ "$(grep $TREE1 /root/.packages/user-installed-packages 2>/dev/null)" = "" \
-a -f /tmp/install_pets_quietly ]; then
if [ "$(cat /var/local/petget/nt_category 2>/dev/null)" = "true" ]; then
/usr/local/petget/installpreview.sh
else
rxvt -title "$VTTITLE... $(gettext 'Do NOT close')" \
-fn -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-*-* -bg black \
-fg grey -geometry 80x5+50+50 -e /usr/local/petget/installpreview.sh
fi
else
if [ "$(cat /var/local/petget/nt_category 2>/dev/null)" = "true" ]; then
/usr/local/petget/installpreview.sh
else
rxvt -title "$VTTITLE... $(gettext 'Do NOT close')" \
-fn -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-*-* -bg black \
-fg grey -geometry 80x5+50+50 -e /usr/local/petget/installpreview.sh
fi
fi
else
/usr/local/petget/installpreview.sh
fi
/usr/local/petget/finduserinstalledpkgs.sh
sed -i "/$TREE1/d" /tmp/pkgs_left_to_install
done < /tmp/pkgs_to_install
sync
report_results
clean_up
}
export -f install_package
recalculate_sizes () {
if [ "$(grep changed /tmp/mode_changed 2>/dev/null)" != "" ]; then
rm -f /tmp/overall_*
for LINE in $(cat /tmp/pkgs_to_install)
do
/usr/local/petget/installed_size_preview.sh $LINE ADD
done
else
echo "cool!"
fi
rm -f /tmp/mode_changed
}
export -f recalculate_sizes
wait_func () {
. /usr/lib/gtkdialog/box_splash -close never -text "$(gettext 'Please wait, calculating total required space for the installation...')" &
X1PID=$!
recalculate_sizes
while true ; do
sleep 0.2
[ "$(ps -eo pid,command | grep installed_size_preview | grep -v grep)" = "" ] && break
done
kill -9 $X1PID
}
export -f wait_func
case "$1" in
check_total_size)
touch /tmp/install_quietly #avoid splashes
check_total_size
;;
"$(gettext 'Auto install')")
wait_func
rm -f /tmp/install_pets_quietly
rm -f /tmp/install_classic 2>/dev/null
rm -f /tmp/download_pets_quietly 2>/dev/null
rm -f /tmp/download_only_pet_quietly 2>/dev/null
touch /tmp/install_quietly
touch /tmp/install_pets_quietly
cp -a /tmp/pkgs_to_install /tmp/pkgs_to_install_done
VTTITLE=Installing
export VTTITLE
install_package
unset VTTITLE
;;
"$(gettext 'Download packages (no install)')")
wait_func
rm -f /tmp/install_pets_quietly
rm -f /tmp/install_classic 2>/dev/null
rm -f /tmp/download_pets_quietly 2>/dev/null
rm -f /tmp/download_only_pet_quietly 2>/dev/null
touch /tmp/install_quietly
touch /tmp/download_only_pet_quietly
cp -a /tmp/pkgs_to_install /tmp/pkgs_to_install_done
VTTITLE=Downloading
export VTTITLE
install_package
unset VTTITLE
;;
"$(gettext 'Download all (packages and dependencies)')")
wait_func
rm -f /tmp/install_pets_quietly
rm -f /tmp/install_classic 2>/dev/null
rm -f /tmp/download_pets_quietly 2>/dev/null
rm -f /tmp/download_only_pet_quietly 2>/dev/null
touch /tmp/install_quietly
touch /tmp/download_pets_quietly
cp -a /tmp/pkgs_to_install /tmp/pkgs_to_install_done
VTTITLE=Downloading
export VTTITLE
install_package
unset VTTITLE
;;
"$(gettext 'Step by step installation (classic mode)')")
wait_func
rm -f /tmp/install{,_pets}_quietly
rm -f /tmp/download_pets_quietly 2>/dev/null
rm -f /tmp/download_only_pet_quietly 2>/dev/null
touch /tmp/install_classic
cp -a /tmp/pkgs_to_install /tmp/pkgs_to_install_done
install_package
;;
esac