Development > Linux Lite Software Development
GUI Updates script
Jerry:
This is good :) The only thing is that the 64 character string cuts off some of the output at the beginning, example http://xxxxxx becomes tp://xxxxxx
anon222:
Ah O.o , ok found it.
The list is there just used `cat /tmp/updatelist` instead of `cat $UPDATES` when checking if there are any updates.
fixed :)
--- Code: ---#!/bin/bash
#-----------------------------------------------------------------------------------------
# Name: Linux Lite Updates
# Description: A GUI tool to easily install Updates in Linux Lite.
# Authors: Misko_2083, Jerry Bezencon
# Date: 2015
# Website: https://www.linuxliteos.com
#-----------------------------------------------------------------------------------------
# Kill off any package managers that may be running
if [ "$(pidof synaptic)" ]
then
sudo killall -9 synaptic
else
echo""
fi
if [ -z "$(pgrep gdebi-gtk)" ]
then
echo ""
else
killall -9 gdebi-gtk
fi
UPDATES=$(mktemp /tmp/updateslist.XXXXXX)
# Linux Lite default dialog icon
ic="/usr/share/icons/zenity-llcc.png"
# Get list of available updated packages then populate them to /tmp/updateslist
zenity --question --title="Linux Lite Updates" --window-icon="/usr/share/icons/zenity-llcc.png" --text="We will now fetch the Updates list.\n\nClick Yes to continue or No to abort."
if [ "$?" -eq "0" ];then
APTUPDATE=$( stdbuf -oL /bin/bash \-c '(sudo apt-get update \-y )' 2>&1 |
stdbuf -oL sed -n -e 's/^.*\(.\{64\}\)$/\1/' -e '/\[*$/ s/^/# /p' -e '/\*$/ s/^/# /p' | #' s/^.*\(.\{64\}\)$/\1/' Display only the last 64 chars, to dispay the first 64, change to 's/^\(.\{64\}\).*/\1/'
zenity --progress --title="Updating package information..." --pulsate \
--width=600 --auto-close )
unset APTUPDATE
# Creates a list in /tmp/updateslist
LISTNAMES=$(apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "Name: $1 INSTALLED: $2 AVAILABLE: $3\n"}' | awk '{print NR,":\t"$0}' | tee $UPDATES)
# Check if any updates are available, if there are none, script pops up dialog box saying 'No Updates Available', removes /tmp/updateslist.XXXXXX
if [ -z "$(cat $UPDATES)" ]; then
zenity --info --window-icon="/usr/share/icons/zenity-llcc.png" --title="Linux Lite Updates" \
--text="No Updates Available"
rm $UPDATES
exit 0
fi
# Insert text into /tmp/updateslist.XXXXXX
sed -i -e '1 i\List of available Updates' -e '1 i\Click Update to continue or Cancel to stop the update process\n' $UPDATES
# Erase existing available info
sudo dpkg --clear-avail
else
exit 0
fi
# Call the zenity dialog to show update list
zenity --text-info --ok-label="Update" --cancel-label="Cancel" --title="Linux Lite Updates" --width=780 --height=300 --filename="$UPDATES"
if [ "$?" -eq "0" ];then
# Continue script if no halt
INSTALL_ICON="/usr/share/icons/zenity-llcc.png"
APPNAME="Linux Lite Updates"
#remove tmp file
rm $UPDATES
RUNUPDATES=$( stdbuf -oL /bin/bash \-c '(sudo DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade \-y )' 2>&1 | tee /var/log/llupdates.log |
stdbuf -oL sed -n -e 's/^.*\(.\{64\}\)$/\1/' -e '/\[*$/ s/^/# /p' -e '/\*$/ s/^/# /p' | #' s/^.*\(.\{64\}\)$/\1/' Display only the last 64 chars, to dispay the first 64, change to 's/^\(.\{64\}\).*/\1/'
zenity --progress --title="Updating..." --pulsate \
--width=600 --auto-close )
if [ "${PIPESTATUS[0]}" -ne "0" ]; then
zenity --error \
--title="Error" --text="$APPNAME Updates have failed."
exit 0
fi
# Halt updates script if user selects Cancel
else
rm $UPDATES
unset UPDATES
unset RUNUPDATES
exit 0
fi
unset UPDATES
unset RUNUPDATES
PROCEED=$(zenity --question --title="$APPNAME Updates" --window-icon=/usr/share/icons/zenity-llcc.png --text="Updates have finished installing.\n\nWould you like to view the $APPNAME Updates log?"; echo $?)
if [ ${PROCEED} -eq 1 ]; then
zenity --info --title="$APPNAME Updates" --window-icon="${INSTALL_ICON}" --text="$APPNAME Updates Complete."
exit;
else
zenity --text-info --ok-label="Save Updates Log" --cancel-label="Close" --title="Updates Log" --width=700 --height=300 --filename="/var/log/llupdates.log"
if [ $? -ne 0 ]; then
exit;
else
#Generate the save list and on the first occurance of "FALSE" change it to "TRUE"
LL_LIST_D=(`awk -F':' '$3>=1000 && $3<=60000 {print "FALSE","/home/"$1}' /etc/passwd |sed '0,/FALSE/s/FALSE/TRUE/'`)
#Add optional save location
LL_LIST_H=(`awk -F':' '$3>=1000 && $3<=60000 {print "FALSE","/home/"$1"/Desktop"}' /etc/passwd`)
save_location=$(zenity --title="System Report Save Location" --list --radiolist --text="Select save location:" --column="Select" --column="Save file location:" --width=325 --height=300 "${LL_LIST_D[@]}" "${LL_LIST_H[@]}")
if [ $? -ne 0 ]; then
unset LL_LIST_D
unset LL_LIST_H
unset save_location
exit 0
else
#Extract username
LL_USER=$(echo "$save_location" | cut -d'/' -f3)
# Add filename to the save path
SAVE_PATH=$(echo $save_location| sed 's,.*,&\/var/log/llupdates.log,g')
#Checks if the file exists. If it does asks for confirmation.
if [ ! -z "$(echo $SAVE_PATH)" ]; then
if zenity --question --title="$APPNAME Updates" --window-icon=/usr/share/icons/zenity-llcc.png --text="file ${SAVE_PATH} allready exists.\nWould you like to overwite the file?"; then
cp /var/log/llupdates.log $save_location
chown $LL_USER $SAVE_PATH # Change the ownership to LL_USER
else
unset save_location
unset LL_LIST_D
unset LL_LIST_H
unset SAVE_PATH
unset LL_USER
exit 1
fi
else
cp /var/log/llupdates.log $save_location
chown $LL_USER $SAVE_PATH # Change the ownership to LL_USER
fi
fi
fi
fi
unset LL_LIST_D
unset LL_LIST_H
unset SAVE_PATH
unset LL_USER
unset save_location
exit 0
--- End code ---
Jerry:
Your code in post #43 gives 'No updates available' whilst my currently working script below does:
--- Code: ---#!/bin/bash
#-----------------------------------------------------------------------------------------
# Name: Linux Lite Updates
# Description: A GUI tool to easily install Updates in Linux Lite.
# Authors: Misko_2083, Jerry Bezencon
# Date: Nov 20th, 2014
# Website: https://www.linuxliteos.com
#-----------------------------------------------------------------------------------------
# Ensure multi-language support
export LANG=C
# Kill off any package managers that may be running
if [ "$(pidof synaptic)" ]
then
sudo killall -9 synaptic
else
echo""
fi
if [ -z "$(pgrep gdebi-gtk)" ]
then
echo ""
else
killall -9 gdebi-gtk
fi
# Linux Lite default dialog icon
ic="/usr/share/icons/zenity-llcc.png"
# Get list of available updated packages then populate them to /tmp/updateslist
zenity --question --title="Linux Lite Updates" --window-icon="/usr/share/icons/zenity-llcc.png" --text="We will now fetch the Updates list.\n\nClick Yes to continue or No to abort."
if [ "$?" -eq "0" ];then
x=$( stdbuf -oL /bin/bash \-c '(sudo apt-get update \-y )' 2>&1 |
stdbuf -oL sed -n -e '/\[*$/ s/^/# /p' -e '/\*$/ s/^/# /p'|
zenity --progress --title="Updating package information..." --pulsate \
--width=600 --auto-close )
# Creates a list in /tmp/updateslist
LISTNAMES=$(apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "Name: $1 INSTALLED: $2 AVAILABLE: $3\n"}' | awk '{print NR,":\t"$0}' | tee /tmp/updateslist)
# Check if any updates are available, if there are none, script pops up dialog box saying 'No Updates Available', removes /tmp/updateslist
if [ -z "$(cat /tmp/updateslist)" ]; then
zenity --info --window-icon="/usr/share/icons/zenity-llcc.png" --title="Linux Lite Updates" \
--text="No Updates Available"
rm /tmp/updateslist
exit 0
fi
# Insert text into /tmp/updateslist
sed -i -e '1 i\List of available Updates' -e '1 i\Click Update to continue or Cancel to stop the update process\n' /tmp/updateslist
# Erase existing available info
sudo dpkg --clear-avail
else
exit 0
fi
# Call the zenity dialog to show update list
zenity --text-info --ok-label="Update" --cancel-label="Cancel" --title="Linux Lite Updates" --width=780 --height=300 --filename="/tmp/updateslist"
if [ "$?" -eq "0" ];then
# Continue script if no halt
INSTALL_ICON="/usr/share/icons/zenity-llcc.png"
APPNAME="Linux Lite"
#remove tmp file
rm /tmp/updateslist
x=$( stdbuf -oL /bin/bash \-c '(sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade \-y )' 2>&1 | tee /var/log/llupdates.log |
stdbuf -oL sed -n -e '/\[*$/ s/^/# /p' -e '/\*$/ s/^/# /p'|
zenity --progress --title="Updating..." --pulsate \
--width=600 --auto-close )
if [ "${PIPESTATUS[0]}" -ne "0" ]; then
zenity --error \
--title="Error" --text="$APPNAME Updates have failed."
exit 0
fi
# Halt updates script if user selects Cancel
else
rm /tmp/updateslist
exit 0
fi
PROCEED=$(zenity --question --title="$APPNAME Updates" --window-icon=/usr/share/icons/zenity-llcc.png --text="Updates have finished installing.\n\nWould you like to view the $APPNAME Updates log?"; echo $?)
if [ ${PROCEED} -eq 1 ]; then
zenity --info --title="$APPNAME Updates" --window-icon="${INSTALL_ICON}" --text="$APPNAME Updates Complete."
exit;
else
zenity --text-info --ok-label="Quit" --cancel-label="Cancel" --title="Updates Log" --width=700 --height=300 --filename="/var/log/llupdates.log"
fi
exit 0
--- End code ---
anon222:
@Jerry:
If the next script handles *.conf files in a way it doesn't install the package maintainer's versions on a fresh install, the previous script will probably work in the same way.
--- Code: ---#!/bin/bash
# Authors: Misko2083, Jerry Bezencon
bold=`tput bold`
normal=`tput sgr0`
echo "${bold}**********************"
echo "Linux Lite 2.0 Updates"
echo "**********************${normal}"
echo ""
echo "Linux Lite will now search for updates for your computer."
echo "Once installed, your computer will be up to date."
echo "Simply follow the onscreen instructions."
echo ""
echo "Please enter your password to continue..."
if [ "$(pidof synaptic)" ]
then
sudo killall -9 synaptic
else
echo""
fi
if [ -z "$(pgrep gdebi-gtk)" ]
then
echo ""
else
killall -9 gdebi-gtk
fi
sudo apt-get update && sudo apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
echo ""
echo "Updates complete."
echo "This window will now close."
sleep 5
#exit
--- End code ---
anon222:
Update
Changes
¤ Display only the last 64 chars when the output is parsed to the progress dialogs (this way the progress bar width will not increase)
¤ Variables are now unset before exit
¤ Package list is now preset to a variable (safer)
¤ Ownership of the report now changes to the user
¤ added apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
--- Code: ---#!/bin/bash
#-----------------------------------------------------------------------------------------
# Name: Linux Lite Updates
# Description: A GUI tool to easily install Updates in Linux Lite.
# Authors: Misko_2083, Jerry Bezencon
# Date: 2015
# Website: https://www.linuxliteos.com
#-----------------------------------------------------------------------------------------
# Kill off any package managers that may be running
if [ "$(pidof synaptic)" ]
then
sudo killall -9 synaptic
else
echo""
fi
if [ -z "$(pgrep gdebi-gtk)" ]
then
echo ""
else
killall -9 gdebi-gtk
fi
UPDATES=$(mktemp /tmp/updateslist.XXXXXX)
# Linux Lite default dialog icon
ic="/usr/share/icons/zenity-llcc.png"
# Get list of available updated packages then populate them to /tmp/updateslist
zenity --question --title="Linux Lite Updates" --window-icon="/usr/share/icons/zenity-llcc.png" --text="We will now fetch the Updates list.\n\nClick Yes to continue or No to abort."
if [ "$?" -eq "0" ];then
APTUPDATE=$( stdbuf -oL /bin/bash \-c '(sudo apt-get update \-y )' 2>&1 |
stdbuf -oL sed -n -e 's/^.*\(.\{64\}\)$/\1/' -e '/\[*$/ s/^/# /p' -e '/\*$/ s/^/# /p' | #' s/^.*\(.\{64\}\)$/\1/' Display only the last 64 chars
zenity --progress --title="Updating package information..." --pulsate \
--width=600 --auto-close )
unset APTUPDATE
# Creates a list in /tmp/updateslist
LISTNAMES=$(apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "Name: $1 INSTALLED: $2 AVAILABLE: $3\n"}' | awk '{print NR,":\t"$0}' | tee $UPDATES)
# Check if any updates are available, if there are none, script pops up dialog box saying 'No Updates Available', removes /tmp/updateslist
if [ -z "$(cat /tmp/updateslist)" ]; then
zenity --info --window-icon="/usr/share/icons/zenity-llcc.png" --title="Linux Lite Updates" \
--text="No Updates Available"
rm $UPDATES
exit 0
fi
# Insert text into /tmp/updateslist
sed -i -e '1 i\List of available Updates' -e '1 i\Click Update to continue or Cancel to stop the update process\n' $UPDATES
# Erase existing available info
sudo dpkg --clear-avail
else
exit 0
fi
# Call the zenity dialog to show update list
zenity --text-info --ok-label="Update" --cancel-label="Cancel" --title="Linux Lite Updates" --width=780 --height=300 --filename="$UPDATES"
if [ "$?" -eq "0" ];then
# Continue script if no halt
INSTALL_ICON="/usr/share/icons/zenity-llcc.png"
APPNAME="Linux Lite Updates"
#remove tmp file
rm $UPDATES
RUNUPDATES=$( stdbuf -oL /bin/bash \-c '(sudo DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade \-y )' 2>&1 | tee /var/log/llupdates.log |
stdbuf -oL sed -n -e 's/^.*\(.\{64\}\)$/\1/' -e '/\[*$/ s/^/# /p' -e '/\*$/ s/^/# /p' | #' s/^.*\(.\{64\}\)$/\1/' Display only the last 64 chars
zenity --progress --title="Updating..." --pulsate \
--width=600 --auto-close )
if [ "${PIPESTATUS[0]}" -ne "0" ]; then
zenity --error \
--title="Error" --text="$APPNAME Updates have failed."
exit 0
fi
# Halt updates script if user selects Cancel
else
rm $UPDATES
unset UPDATES
unset RUNUPDATES
exit 0
fi
unset UPDATES
unset RUNUPDATES
PROCEED=$(zenity --question --title="$APPNAME Updates" --window-icon=/usr/share/icons/zenity-llcc.png --text="Updates have finished installing.\n\nWould you like to view the $APPNAME Updates log?"; echo $?)
if [ ${PROCEED} -eq 1 ]; then
zenity --info --title="$APPNAME Updates" --window-icon="${INSTALL_ICON}" --text="$APPNAME Updates Complete."
exit;
else
zenity --text-info --ok-label="Save Updates Log" --cancel-label="Close" --title="Updates Log" --width=700 --height=300 --filename="/var/log/llupdates.log"
if [ $? -ne 0 ]; then
exit;
else
#Generate the save list and on the first occurance of "FALSE" change it to "TRUE"
LL_LIST_D=(`awk -F':' '$3>=1000 && $3<=60000 {print "FALSE","/home/"$1}' /etc/passwd |sed '0,/FALSE/s/FALSE/TRUE/'`)
#Add optional save location
LL_LIST_H=(`awk -F':' '$3>=1000 && $3<=60000 {print "FALSE","/home/"$1"/Desktop"}' /etc/passwd`)
save_location=$(zenity --title="System Report Save Location" --list --radiolist --text="Select save location:" --column="Select" --column="Save file location:" --width=325 --height=300 "${LL_LIST_D[@]}" "${LL_LIST_H[@]}")
if [ $? -ne 0 ]; then
unset LL_LIST_D
unset LL_LIST_H
unset save_location
exit 0
else
#Extract username
LL_USER=$(echo "$save_location" | cut -d'/' -f3)
# Add filename to the save path
SAVE_PATH=$(echo $save_location| sed 's,.*,&\/var/log/llupdates.log,g')
#Checks if the file exists. If it does asks for confirmation.
if [ ! -z "$(echo $SAVE_PATH)" ]; then
if zenity --question --title="$APPNAME Updates" --window-icon=/usr/share/icons/zenity-llcc.png --text="file ${SAVE_PATH} allready exists.\nWould you like to overwite the file?"; then
cp /var/log/llupdates.log $save_location
chown $LL_USER $SAVE_PATH # Change the ownership to LL_USER
else
unset save_location
unset LL_LIST_D
unset LL_LIST_H
unset SAVE_PATH
unset LL_USER
exit 1
fi
else
cp /var/log/llupdates.log $save_location
chown $LL_USER $SAVE_PATH # Change the ownership to LL_USER
fi
fi
fi
fi
unset LL_LIST_D
unset LL_LIST_H
unset SAVE_PATH
unset LL_USER
unset save_location
exit 0
--- End code ---
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version