From 91665b4f0d266b63baf561cd7f903c348890d905 Mon Sep 17 00:00:00 2001 From: Jack-Benny Persson Date: Sat, 11 Jan 2014 12:32:32 +0100 Subject: [PATCH] Almost done --- dpkg-frontend.sh | 159 +++++++++++++++++++++++++++++++---------------- 1 file changed, 107 insertions(+), 52 deletions(-) diff --git a/dpkg-frontend.sh b/dpkg-frontend.sh index 6007336..973e8bc 100755 --- a/dpkg-frontend.sh +++ b/dpkg-frontend.sh @@ -26,6 +26,7 @@ Author="Jack-Benny Persson (jack-benny@cyberinfo.se)" # Binaries Which="/usr/bin/which" +Aptget="/usr/bin/apt-get" # Binaries entered in the list will be avalible to the script as variables with # the first letter uppercase Binaries=(dpkg sed awk egrep printf cat grep mktemp rm tail zenity) @@ -47,66 +48,104 @@ print_help() print_version $Printf "$Author\n" $Printf "dpkg-frontend\n" - /bin/cat <<-EOT +/bin/cat <<-EOT - Options: - -h - Print detailed help screen - -V - Print version information - -v - Verbose output - EOT +Options: +-h +Print detailed help screen +-V +Print version information +-v +Verbose output +EOT } # Dialog for package searching search_pkg() { - Search=`$Zenity --title "dpkg-frontend" --entry \ - --text="Search for package"` - if [ $? -eq 1 ]; then - return 1 - fi - $Dpkg --list | $Awk '{ print $2 }' | $Egrep -x $Search &> /dev/null - if [ $? -eq 0 ]; then - return 0 - else - return 5 - fi +Search=`$Zenity --title "dpkg-frontend" --entry \ +--text="Search for package"` +if [ $? -eq 1 ]; then +return 1 +fi +$Dpkg --list | $Awk '{ print $2 }' | $Egrep -x $Search &> /dev/null +if [ $? -eq 0 ]; then +return 0 +else +return 5 +fi } uninstall_pkg() { - $Zenity --title "dpkg-frontend" \ - --question \ - --text="Package $Search is installed.\nUninstall ${Search}?" - if [ $? -eq 0 ]; then # CHANGE NEXT LINE - sleep 3 | $Zenity --title "dpkg-frontend" \ - --progress --pulsate --text "Uninstalling ${Search}..." - fi +$Zenity --title "dpkg-frontend" \ +--question \ +--text="Package $Search is installed.\nUninstall ${Search}?" +if [ $? -eq 0 ]; then # CHANGE NEXT LINE +$Dpkg -r $Search | $Zenity --title "dpkg-frontend" \ +--progress --pulsate --text "Uninstalling ${Search}..." +fi } install_pkg() { - echo "Install pkg?" +$Aptget install $Search -y | \ +$Zenity --title "dpkg-fronend" --progress --pulsate \ +--text "Installing package $Search" +if [ $? -eq 0 ]; then + $Zenity --title "dpkg-frontend" --info \ + --text="Succesfully installed $Search" + exit 0 +else + $Zenity --title "dpkg-frontend" --error \ + --text="Something went wrong with the installation of $Search" + exit 1 +fi } show_selections() { - Selections=`dpkg --get-selections $Search | awk '{ print $2 }'` - $Zenity --title "dpkg-frontend" \ - --info --text "Selections for $Search is: ${Selections}" +Selections=`dpkg --get-selections $Search | awk '{ print $2 }'` +$Zenity --title "dpkg-frontend" \ +--info --text "Selections for $Search is: ${Selections}" +} + +set_selections() +{ +SetSelections=`$Zenity --title "dpkg-frontend" --entry \ +--text="Type selections for package $Search"` +echo "$Search $SetSelections" | $Dpkg --set-selections +if [ $? -eq 0 ]; then +$Zentiy --title "dpkg-frontend" --info \ +--text "${SetSelections} is set for ${Search}" +else +$Zenity --title "dpkg-frontend" --error \ +--text "Couldn't set selections for $Search" +fi +} + +show_info() +{ +Info=`$Dpkg --status $Search` +$Zenity --no-markup --title "dpkg-frontend" --info \ +--text "$Info" } choice_dialog() { - Choice=`$Zenity --list --column=Action --column=Description \ - --radiolist uninstall "Uninstall" show "Show selections"` - if [ "$Choice" == "Uninstall" ]; then - return 11 - elif [ "$Choice" == "Show selections" ]; then - return 12 - fi +Choice=`$Zenity --list --column=Action --column=Description \ +--radiolist uninstall "Uninstall" set "Set selections" \ +show "Show selections" \ +info "Show information"` +if [ "$Choice" == "Uninstall" ]; then +return 11 +elif [ "$Choice" == "Show selections" ]; then +return 12 +elif [ "$Choice" == "Show information" ]; then +return 13 +elif [ "$Choice" == "Set selections" ]; then +return 14 +fi } # Create variables with absolute path to binaries and check @@ -114,7 +153,7 @@ choice_dialog() # variables with first character uppercase, such as Grep) Count=0 for i in ${Binaries[@]}; do - $Which $i &> /dev/null +$Which $i &> /dev/null if [ $? -eq 0 ]; then declare $(echo ${Binaries[$Count]^}=`${Which} $i`) ((Count++)) @@ -124,6 +163,13 @@ for i in ${Binaries[@]}; do fi done +# Check if we are root +if [ $EUID -ne 0 ]; then + $Zenity --title "dpkg-frontend" --error \ + --text "You need to run dpkg-frontend as root" + exit 1 +fi + # Parse command line options and arguments while getopts Vvho: Opt; do case "$Opt" in @@ -142,22 +188,31 @@ while getopts Vvho: Opt; do esac done - ### Main ### search_pkg -if [ $? -eq 1 ]; then - exit 0 -elif [ $? -eq 5 ]; then - $Zenity --title "dpkg-frontend" --info \ - --text="Package $Search is not installed" - exit 1 -fi +case $? in + 1) exit 0 + ;; + 5) $Zenity --title "dpkg-frontend" --question \ + --text="Package $Search is not installed. Install it?" + if [ $? -eq 0 ]; then + install_pkg + else + exit 1 + fi + ;; +esac choice_dialog -if [ $? -eq 11 ]; then - uninstall_pkg -elif [ $? -eq 12 ]; then - show_selections -fi +case $? in + 11) uninstall_pkg + ;; + 12) show_selections + ;; + 13) show_info + ;; + 14) set_selections + ;; +esac exit 0